<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>SYH&#39;s Note</title>
  
  <subtitle>爱玩游戏的重度拖延症患者</subtitle>
  <link href="https://blog.syh521.cn/atom.xml" rel="self"/>
  
  <link href="https://blog.syh521.cn/"/>
  <updated>2026-04-27T12:54:17.931Z</updated>
  <id>https://blog.syh521.cn/</id>
  
  <author>
    <name>SYH</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>从零开始的Haskell学习笔记 - 1</title>
    <link href="https://blog.syh521.cn/2025/10/03/note-haskell-1/"/>
    <id>https://blog.syh521.cn/2025/10/03/note-haskell-1/</id>
    <published>2025-10-03T20:55:39.000Z</published>
    <updated>2026-04-27T12:54:17.931Z</updated>
    
    <content type="html"><![CDATA[<p>重新审视了一下对Haskell的态度，感觉想要认证的学Haskell而不是用一个符号来标榜自己对函数式有理解，还是要踏实点为好。实际上趣学指南</p><p>按照知乎的教程，从SICP开始打基础。</p><p>SICP的部分本来写了一些，后来觉得不如在白纸上写写画画，因为也是看的b站视频课，所以如果有什么独到的理解，到时候再补充进来就好了，大部分还是无发布意义的复读。</p><p>趣学指南也许过于基础，讲的太trivial，知乎上的意见是这样。就像最开始写代码的时候，我对python的那本黄黄的书有特殊的滤镜一样，实际上并不需要那么虔诚，我还是有点基础的。</p><p>另外可能会用到的资料</p><ul><li><a href="https://www.codewars.com/">Codewars</a></li><li><a href="https://learnyouahaskell.mno2.org/zh-cn/ch02/ready-go">Haskell趣学指南</a></li></ul><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;重新审视了一下对Haskell的态度，感觉想要认证的学Haskell而不是用一个符号来标榜自己对函数式有理解，还是要踏实点为好。实际上趣学指南&lt;/p&gt;
&lt;p&gt;按照知乎的教程，从SICP开始打基础。&lt;/p&gt;
&lt;p&gt;SICP的部分本来写了一些，后来觉得不如在白纸上写写画画，因为</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>JAVA 泛型</title>
    <link href="https://blog.syh521.cn/2025/09/19/java-generics/"/>
    <id>https://blog.syh521.cn/2025/09/19/java-generics/</id>
    <published>2025-09-19T19:27:18.000Z</published>
    <updated>2026-04-27T12:54:17.930Z</updated>
    
    <content type="html"><![CDATA[<p>首先是一个知乎问题：<br><a href="https://www.zhihu.com/question/13077935547/answer/109566040562">最近看到有人说，List<Integer> 是卡车装钉子，编程界之耻，如何理解？</a></p><p>之后在工作上也遇到了 <code>Map&lt;Stirng, Object&gt;</code> 这种写法。</p><span id="more"></span><h2 id="什么是泛型"><a href="#什么是泛型" class="headerlink" title="什么是泛型"></a>什么是泛型</h2><p>编译期的类型检查机制。不允许再写出这种代码：</p><figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="type">List</span> <span class="variable">list</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">ArrayList</span>();</span><br><span class="line">list.add(<span class="string">&quot;hello&quot;</span>);</span><br><span class="line"><span class="type">Integer</span> <span class="variable">i</span> <span class="operator">=</span> (Integer) list.get(<span class="number">0</span>); <span class="comment">// 运行时异常</span></span><br></pre></td></tr></table></figure><p>但由于类型擦除，运行时并没有类型检查，所以 <code>List&lt;Integer&gt;</code> 和 <code>List&lt;String&gt;</code> 在运行时是一样的。</p><p>并不是引入泛型就能避免所有的类型转换异常。理解这一点就理解了工程中需要注意点所在。</p><figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="comment">// 用原始类型数组（合法，但会有 unchecked 警告）</span></span><br><span class="line">List&lt;String&gt;[] array = (List&lt;String&gt;[]) <span class="keyword">new</span> <span class="title class_">List</span>[<span class="number">10</span>];</span><br><span class="line"></span><br><span class="line">List&lt;Integer&gt; intList = List.of(<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>);</span><br><span class="line"></span><br><span class="line">Object[] objArray = array;   <span class="comment">// 数组是协变的，可以赋值给 Object[]</span></span><br><span class="line">objArray[<span class="number">0</span>] = intList;       <span class="comment">// 往里面放 List&lt;Integer&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 取的时候编译器以为里面是 List&lt;String&gt;</span></span><br><span class="line"><span class="type">String</span> <span class="variable">s</span> <span class="operator">=</span> array[<span class="number">0</span>].get(<span class="number">0</span>);  <span class="comment">// 运行时 ClassCastException</span></span><br></pre></td></tr></table></figure><p>有些说法表示类型擦除和值类别的缺失是缺陷也是区别于cpp的特点。那我问你（</p><p>实际工作缺失不乏能跑就别动的场景。突然想到自己值类别那篇blog即没讲清楚又啰嗦还没讲完，有空重写吧。</p><p>这玩意儿也挺有意思的，需求赶得着急&#x2F;代码要求不能太膨胀用用是很方便，但是瞎鸡儿一通写上环境又动不动oom，罪魁祸首肯定不是它，但它培养了写代码的人对性能不敏感的氛围。</p><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;首先是一个知乎问题：&lt;br&gt;&lt;a href=&quot;https://www.zhihu.com/question/13077935547/answer/109566040562&quot;&gt;最近看到有人说，List&lt;Integer&gt; 是卡车装钉子，编程界之耻，如何理解？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;之后在工作上也遇到了 &lt;code&gt;Map&amp;lt;Stirng, Object&amp;gt;&lt;/code&gt; 这种写法。&lt;/p&gt;</summary>
    
    
    
    <category term="Java" scheme="https://blog.syh521.cn/categories/Java/"/>
    
    
    <category term="Java" scheme="https://blog.syh521.cn/tags/Java/"/>
    
    <category term="泛型" scheme="https://blog.syh521.cn/tags/%E6%B3%9B%E5%9E%8B/"/>
    
  </entry>
  
  <entry>
    <title>AtCoder-ABC421</title>
    <link href="https://blog.syh521.cn/2025/09/04/Atcoder-ABC421/"/>
    <id>https://blog.syh521.cn/2025/09/04/Atcoder-ABC421/</id>
    <published>2025-09-04T15:42:53.000Z</published>
    <updated>2026-04-27T12:54:17.922Z</updated>
    
    <content type="html"><![CDATA[<p><a href="https://atcoder.jp/contests/abc421">links</a></p><span id="more"></span><h2 id="A-Misdelivery"><a href="#A-Misdelivery" class="headerlink" title="A. Misdelivery"></a>A. Misdelivery</h2><p>给定n个字符串，以及int k, string t;</p><p>判断第k个字符串是否等于t</p><h2 id="B-Fibonacci-Reversed"><a href="#B-Fibonacci-Reversed" class="headerlink" title="B. Fibonacci Reversed"></a>B. Fibonacci Reversed</h2><p>f(x) &#x3D; 倒转x的十进制表示后得到的数</p><p>给定$a_{1}, a_{2}$, $a_{i} &#x3D; f(a_{i-2} + f(a_{i-1}))$ (i&gt;&#x3D;3)</p><p>输出$a_{10}$</p><p>手写reverse的时候没改成long long卡了好久</p><h2 id="C-Alternated"><a href="#C-Alternated" class="headerlink" title="C. Alternated"></a>C. Alternated</h2><p>给定长为 $2N$ 的字符串S, 由N个’A’和N个’B’组成</p><p>一次操作交换S中相邻的两个字符，使得S中’A’和’B’交替出现的最小操作数</p><p>记录所有’A’的位置，计算换成”ABABAB…”和”BABABA…”的操作数，取最小值</p><div class='fold collapsed'>    <div class='fold-title'>        code    </div>    <div class='fold-content'>        <figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="type">int</span> n;</span><br><span class="line">  std::cin &gt;&gt; n;</span><br><span class="line">  <span class="type">long</span> <span class="type">long</span> ab = <span class="number">0</span>, ba = <span class="number">0</span>;</span><br><span class="line">  <span class="function">std::vector&lt;<span class="type">int</span>&gt; <span class="title">pos</span><span class="params">(n)</span></span>;</span><br><span class="line">  std::string s; <span class="type">int</span> t = <span class="number">0</span>;</span><br><span class="line">  std::cin &gt;&gt; s;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; s.<span class="built_in">size</span>(); ++i) &#123;</span><br><span class="line">    <span class="keyword">if</span> (s[i] == <span class="string">&#x27;A&#x27;</span>)</span><br><span class="line">      pos[t++] = i;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; ++i) &#123;</span><br><span class="line">    ab += <span class="built_in">abs</span>(pos[i] - (<span class="number">2</span> * i));</span><br><span class="line">    ba += <span class="built_in">abs</span>(pos[i] - (<span class="number">2</span> * i + <span class="number">1</span>));</span><br><span class="line">  &#125;</span><br><span class="line">  std::cout &lt;&lt; std::<span class="built_in">min</span>(ab, ba) &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>    </div></div><h2 id="D-RLE-Moving"><a href="#D-RLE-Moving" class="headerlink" title="D. RLE Moving"></a>D. RLE Moving</h2><p>无线大的二维平面，(R, C)表示相对于(0, 0)的R行C列</p><p>给定两个初始位置$(r_1, c_1), (r_2, c_2)$</p><p>以及两个字符串S, T, 分别表示从初始位置出发的移动序列</p><p>S T怎么来的没看懂。</p><p>先睡觉了明天继续。</p><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;&lt;a href=&quot;https://atcoder.jp/contests/abc421&quot;&gt;links&lt;/a&gt;&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>TVM新人入坑-跑通demo</title>
    <link href="https://blog.syh521.cn/2025/06/06/tvm-start-1/"/>
    <id>https://blog.syh521.cn/2025/06/06/tvm-start-1/</id>
    <published>2025-06-06T11:11:17.000Z</published>
    <updated>2026-04-27T12:54:17.932Z</updated>
    
    <content type="html"><![CDATA[<p>本来要在npu上玩的，结果zh的机器tm的不知为什么卡又掉了，必须得系统关机之后物理重启电源。等修完估计答辩也没一两天了，windows上弄个能跑的demo先。</p><p>本文内容时效性截至2025.6.7</p><p>tvm version 0.21.dev0</p><span id="more"></span><p><a href="https://tvm.apache.org/docs/">TVM官方文档</a></p><h1 id="从源码安装"><a href="#从源码安装" class="headerlink" title="从源码安装"></a>从源码安装</h1><p>WSL Ubuntu 24.04</p><h2 id="dependencies"><a href="#dependencies" class="headerlink" title="dependencies"></a>dependencies</h2><ul><li><p>CMake (&gt;&#x3D; 3.24.0)</p></li><li><p>LLVM (recommended &gt;&#x3D; 15)</p></li><li><p>Git</p></li><li><p>A recent C++ compiler supporting C++ 17, at the minimum</p></li><li><p>Python (&gt;&#x3D; 3.8)</p></li><li><p>(Optional) Conda (Strongly Recommended)</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">conda create -n tvm-build-venv -c conda-forge `</span><br><span class="line">llvmdev&gt;=15 `</span><br><span class="line">git `</span><br><span class="line">python=3.11</span><br><span class="line"></span><br><span class="line">conda activate tvm-build-venv</span><br></pre></td></tr></table></figure><p>全部依赖用conda管理，剩下clang cmake直接 <code>apt install clang cmake libzstd-dev</code></p><p>最新的conda直接下载cmake会用4.0的测试版，导致configuration出错。</p><p>没有llvm也能编译，但这样没有cpu支持。</p></li></ul><h2 id="下载tvm源码"><a href="#下载tvm源码" class="headerlink" title="下载tvm源码"></a>下载tvm源码</h2><p>v0.21.dev0和v0.20.0都是没有tvm.relay的，很抽象，文档和代码都是一坨。</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">git <span class="built_in">clone</span> --recursive https://github.com/apache/tvm tvm</span><br><span class="line">git checkout v0.19.0</span><br><span class="line">git submodule update --init --recursive</span><br></pre></td></tr></table></figure><h2 id="编译安装"><a href="#编译安装" class="headerlink" title="编译安装"></a>编译安装</h2><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="built_in">cd</span> tvm</span><br><span class="line"><span class="built_in">rm</span> -rf build &amp;&amp; <span class="built_in">mkdir</span> build &amp;&amp; <span class="built_in">cd</span> build</span><br><span class="line"><span class="comment"># Specify the build configuration via CMake options</span></span><br><span class="line"><span class="built_in">cp</span> ../cmake/config.cmake .</span><br></pre></td></tr></table></figure><p>打开自己需要的开关</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment"># controls default compilation flags (Candidates: Release, Debug, RelWithDebInfo)</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;set(CMAKE_BUILD_TYPE RelWithDebInfo)&quot;</span> &gt;&gt; config.cmake</span><br><span class="line"></span><br><span class="line"><span class="comment"># LLVM is a must dependency for compiler end</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;set(USE_LLVM \&quot;llvm-config --ignore-libllvm --link-static\&quot;)&quot;</span> &gt;&gt; config.cmake</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;set(HIDE_PRIVATE_SYMBOLS ON)&quot;</span> &gt;&gt; config.cmake</span><br><span class="line"></span><br><span class="line"><span class="comment"># GPU SDKs, turn on if needed</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;set(USE_CUDA   ON)&quot;</span> &gt;&gt; config.cmake</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;set(USE_METAL  OFF)&quot;</span> &gt;&gt; config.cmake</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;set(USE_VULKAN OFF)&quot;</span> &gt;&gt; config.cmake</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;set(USE_OPENCL OFF)&quot;</span> &gt;&gt; config.cmake</span><br><span class="line"></span><br><span class="line"><span class="comment"># cuBLAS, cuDNN, cutlass support, turn on if needed</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;set(USE_CUBLAS ON)&quot;</span> &gt;&gt; config.cmake</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;set(USE_CUDNN  OFF)&quot;</span> &gt;&gt; config.cmake</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;set(USE_CUTLASS OFF)&quot;</span> &gt;&gt; config.cmake</span><br></pre></td></tr></table></figure><p>cmake还需要设置architecture 我的RTX 1650对应是86</p><figure class="highlight cmake"><table><tr><td class="code"><pre><span class="line"><span class="keyword">set</span>(CMAKE_CUDA_ARCHITECTURES <span class="number">86</span>)</span><br></pre></td></tr></table></figure><p>python集成需要Cython包</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">pip install Cython</span><br></pre></td></tr></table></figure><p>编译</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">cmake .. -DCMAKE_C_COMPILER=xx -DCMAKE_CXX_COMPILER=xx &amp;&amp; cmake --build . --parallel $(<span class="built_in">nproc</span>)</span><br></pre></td></tr></table></figure><p>最后会有 <code>libtvm.so</code> 和 <code>libtvm_runtime.so</code> 这两动态库。</p><p>配置pythonpath来使用，这种情况符合tvm的开发者，频繁修改源码并编译应用的情况。</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="built_in">export</span> TVM_HOME=/path-to-tvm</span><br><span class="line"><span class="built_in">export</span> PYTHONPATH=<span class="variable">$TVM_HOME</span>/python:<span class="variable">$PYTHONPATH</span></span><br></pre></td></tr></table></figure><p>如果只是使用tvm，也可以pip安装</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="built_in">export</span> TVM_LIBRARY_PATH=/path-to-tvm/build</span><br><span class="line">pip install -e /path-to-tvm/python</span><br></pre></td></tr></table></figure><p>使用conda则需全程注意自己所处的环境。</p><h2 id="检查安装"><a href="#检查安装" class="headerlink" title="检查安装"></a>检查安装</h2><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">python -c <span class="string">&quot;import tvm; print(tvm.__file__)&quot;</span></span><br></pre></td></tr></table></figure><p>一般需要根据error装几个包才通。</p><p>然后检查TVM Library能否正常使用，文档似乎没有跟进最新的结构，要查看的 <code>tvm._ffi</code> 实际上并不存在</p><p>不过文档在刷知乎的时候就看到被喷写的和屎一样，有心理预期。&#96; </p><figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> tvm</span><br><span class="line"><span class="built_in">print</span>(tvm.base._LIB)</span><br></pre></td></tr></table></figure><p><code>base</code> 直接移动到了外面和 <code>ffi</code> 并列</p><p>查看构建选项的实际支持</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">python -c <span class="string">&quot;import tvm; print(&#x27;\n&#x27;.join(f&#x27;&#123;k&#125;: &#123;v&#125;&#x27; for k, v in tvm.support.libinfo().items()))&quot;</span></span><br></pre></td></tr></table></figure><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;本来要在npu上玩的，结果zh的机器tm的不知为什么卡又掉了，必须得系统关机之后物理重启电源。等修完估计答辩也没一两天了，windows上弄个能跑的demo先。&lt;/p&gt;
&lt;p&gt;本文内容时效性截至2025.6.7&lt;/p&gt;
&lt;p&gt;tvm version 0.21.dev0&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>CSAPP 第三章学习笔记</title>
    <link href="https://blog.syh521.cn/2025/03/17/csapp-3/"/>
    <id>https://blog.syh521.cn/2025/03/17/csapp-3/</id>
    <published>2025-03-17T07:21:25.000Z</published>
    <updated>2026-04-27T12:54:17.930Z</updated>
    
    <content type="html"><![CDATA[<p>第二章跳过了，对着一堆学过的概念重新补充数学定义,2的次幂倒腾来去没啥意思</p><p>IEEE浮点数相关的，要用了再补吧。</p><p>挂一个ouuan的<a href="https://ouuan.moe/post/2022/09/csapp-2">笔记</a></p><p>第三章主要补汇编知识，，多花点时间在上面。</p><span id="more"></span><h3 id="处理器状态"><a href="#处理器状态" class="headerlink" title="处理器状态"></a>处理器状态</h3><ul><li>程序计数器 PC,program counter 用<code>%rip</code>表示，待执行的下一条指令的地址。</li><li>整数寄存器文件,register file,16个存储整型的寄存器</li><li>条件码寄存器，status flag，存储算术、逻辑运算的状态</li><li>vector registers，一组向量寄存器，存放多个整型或者浮点数</li></ul><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;第二章跳过了，对着一堆学过的概念重新补充数学定义,2的次幂倒腾来去没啥意思&lt;/p&gt;
&lt;p&gt;IEEE浮点数相关的，要用了再补吧。&lt;/p&gt;
&lt;p&gt;挂一个ouuan的&lt;a href=&quot;https://ouuan.moe/post/2022/09/csapp-2&quot;&gt;笔记&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;第三章主要补汇编知识，，多花点时间在上面。&lt;/p&gt;</summary>
    
    
    
    
    <category term="csapp" scheme="https://blog.syh521.cn/tags/csapp/"/>
    
  </entry>
  
  <entry>
    <title>Getting Started with the LLVM System</title>
    <link href="https://blog.syh521.cn/2024/10/28/Getting-Started-with-the-LLVM-System/"/>
    <id>https://blog.syh521.cn/2024/10/28/Getting-Started-with-the-LLVM-System/</id>
    <published>2024-10-28T08:47:52.000Z</published>
    <updated>2026-04-27T12:54:17.928Z</updated>
    
    <content type="html"><![CDATA[<p>对 <a href="https://llvm.org/docs/GettingStarted.html">Getting Started with the LLVM System</a> 的部分翻译 &amp; 学习笔记</p><span id="more"></span><h2 id="总览"><a href="#总览" class="headerlink" title="总览"></a>总览</h2><p>LLVM项目包含工具、运行库、（需要被处理为中间表示并转换为目标平台文件的）头文件、libc++（STL的一个实现）、lld（链接器）在内的诸多元素，工具包括汇编器、反汇编器、bitcode分析器&#x2F;优化器，以及基本的回归测试等。</p><p>bitcode是llvm ir的一种二进制编码格式</p><p>可以看到对于LLVM-Core而言只包含了中间表示和后端生成部分，与C&#x2F;C++对应的前端Clang独立</p><h2 id="获取源码-构建LLVM"><a href="#获取源码-构建LLVM" class="headerlink" title="获取源码 &amp; 构建LLVM"></a>获取源码 &amp; 构建LLVM</h2><p>拉取最新的仓库</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">git <span class="built_in">clone</span> --depth 1 https://github.com/llvm/llvm-project.git</span><br></pre></td></tr></table></figure><p>构建一个带调试信息的llvm，编译并运行LLVM tests</p><p>因为在arm上，不需要别的build</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">cmake -S llvm -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DLLVM_TARGETS_TO_BUILD=<span class="string">&quot;ARM&quot;</span> -DLLVM_USE_LINKER=lld</span><br><span class="line">ninja -C build check-llvm</span><br></pre></td></tr></table></figure><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;对 &lt;a href=&quot;https://llvm.org/docs/GettingStarted.html&quot;&gt;Getting Started with the LLVM System&lt;/a&gt; 的部分翻译 &amp;amp; 学习笔记&lt;/p&gt;</summary>
    
    
    
    
    <category term="LLVM" scheme="https://blog.syh521.cn/tags/LLVM/"/>
    
    <category term="编译原理" scheme="https://blog.syh521.cn/tags/%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86/"/>
    
  </entry>
  
  <entry>
    <title>CSAPP 第二章学习笔记</title>
    <link href="https://blog.syh521.cn/2024/10/15/csapp-2/"/>
    <id>https://blog.syh521.cn/2024/10/15/csapp-2/</id>
    <published>2024-10-15T10:42:53.000Z</published>
    <updated>2026-04-27T12:54:17.930Z</updated>
    
    <content type="html"><![CDATA[<p>这章关于浮点数、精度、存储</p><span id="more"></span><h2 id="抛砖引玉"><a href="#抛砖引玉" class="headerlink" title="抛砖引玉"></a>抛砖引玉</h2><figure class="highlight c"><table><tr><td class="code"><pre><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%f\n&quot;</span>, (<span class="number">3.14</span> + <span class="number">1e20</span>) - <span class="number">1e20</span>);</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%f&quot;</span>, <span class="number">3.14</span> + (<span class="number">1e20</span> - <span class="number">1e20</span>));</span><br></pre></td></tr></table></figure><p>ans</p><figure class="highlight text"><table><tr><td class="code"><pre><span class="line">0.000000</span><br><span class="line">3.140000</span><br></pre></td></tr></table></figure><h2 id="信息存储"><a href="#信息存储" class="headerlink" title="信息存储"></a>信息存储</h2><p>byte，一个8位，作为最小的可寻址单位，而非bit。内存(memory)被视为array of byte，机器级程序视其为virtual memory</p><p>每个byte有唯一的数字标识，即内存地址(address)，集合为虚拟地址空间(virtual memory address)</p><p>然而实现可能是由 动态随机访问存储器(DRAM)、闪存、磁盘存储器、特殊硬件和操作系统软件结合起来，为程序提供的统一、连续的array of byte.</p><p>至此C中指针的概念也很好理解了。指针包含两部分，值与类型，值表示address上的byte内容，这个内容为另一个address,而类型决定了如何处理&amp;表示另一address上的byte值。</p><p>byte 8位</p><p>$00000000_2$~$11111111_2$ &#x3D; $0_{10}$ $\to$ $255_{10}$ &#x3D; $00_{16}$ $\to$ $FF_{16}$</p><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;这章关于浮点数、精度、存储&lt;/p&gt;</summary>
    
    
    
    
    <category term="csapp" scheme="https://blog.syh521.cn/tags/csapp/"/>
    
  </entry>
  
  <entry>
    <title>CSAPP 第一章学习笔记</title>
    <link href="https://blog.syh521.cn/2024/10/14/csapp-1/"/>
    <id>https://blog.syh521.cn/2024/10/14/csapp-1/</id>
    <published>2024-10-14T07:16:57.000Z</published>
    <updated>2026-04-27T12:54:17.930Z</updated>
    
    <content type="html"><![CDATA[<p>计组、操作系统、编译原理在奕行智能二面的时候被问烂了，几乎是完全答不上来</p><p>计划是看CSAPP,短期内临时补充薄弱的体系结构基础知识，避免再次被问烂掉，长期上作为ics基础为学习os和编译原理，搓riscV cpu和编译器提供知识储备。</p><p>指令集的计划选riscV,毕竟趋势摆在这里。</p><p>至于编译方面，暂时还很难确定要做什么，还得再看看，等快速的补完基础再说。</p><p><strong>因为是个人笔记，仅给自己复习用，所以我只记比较生疏&#x2F;不常见的定义，熟悉的完全不会提及。</strong></p><span id="more"></span><ul><li><p>总线，字(word)。字节数(字长) 32&#x2F;64</p></li><li><p>I&#x2F;O设备 通过控制器&#x2F;适配器与IO总线相连。</p></li><li><p>主存 由一组动态随机存取存储器(DRAM)构成。</p></li><li><p>处理器</p><ul><li>大小为一个字(word)的寄存器，程序计数器pc,指向主存中的某条机器语言指令。</li><li>加载、存储、运算(ALU)、跳转</li><li>cache(&#x2F;kæʃ&#x2F;)，高速缓存，使用静态随机访问存储器(SRAM)</li></ul></li></ul><p>存储器层次结构：寄存器，L1高速缓存，L2，L3，主存，本地二级存储，</p><p>虚拟内存是对主存和磁盘I&#x2F;O设备（文件）的抽象表示，进程是对处理器+虚拟内存的抽象表示。(面试被问到，p都没学过的我还以为是相对于本地二级存储空间的虚拟内存，给面试官整无语了)</p><p>进程是操作系统对一个正在运行的程序的抽象。单CPU通过处理器在进程间切换保证多个进程同时执行：上下文切换。</p><p>保持跟踪进程状态的信息即上下文。包括PC、CPU寄存器、主存中的内容。</p><p>进程间的转换由内核控制。</p><p>一个进程由多个线程作为执行单元组成。每个线程运行在进程的上下文中，共享同样的代码和数据。线程比进程更容易共享数据。</p><p>虚拟内存使得每一个进程使用同样的内存，成为虚拟地址空间，地址从低到高分别为</p><ul><li>程序代码和数据<ul><li>只读</li><li>读写</li></ul></li><li>运行时堆（运行时由malloc创建）</li><li>共享库，例如C标准库，数学库</li><li>用户栈，编译器用它实现函数调用，调用函数时增长，返回时收缩。</li><li>内核虚拟内存，不允许应用程序操作，必须调用内核。</li></ul><p>文件就是字节序列，是对I&#x2F;O设备的抽象</p><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;计组、操作系统、编译原理在奕行智能二面的时候被问烂了，几乎是完全答不上来&lt;/p&gt;
&lt;p&gt;计划是看CSAPP,短期内临时补充薄弱的体系结构基础知识，避免再次被问烂掉，长期上作为ics基础为学习os和编译原理，搓riscV cpu和编译器提供知识储备。&lt;/p&gt;
&lt;p&gt;指令集的计划选riscV,毕竟趋势摆在这里。&lt;/p&gt;
&lt;p&gt;至于编译方面，暂时还很难确定要做什么，还得再看看，等快速的补完基础再说。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;因为是个人笔记，仅给自己复习用，所以我只记比较生疏&amp;#x2F;不常见的定义，熟悉的完全不会提及。&lt;/strong&gt;&lt;/p&gt;</summary>
    
    
    
    
    <category term="csapp" scheme="https://blog.syh521.cn/tags/csapp/"/>
    
  </entry>
  
  <entry>
    <title>NVIM_APPNAME</title>
    <link href="https://blog.syh521.cn/2024/09/20/nvim-appname/"/>
    <id>https://blog.syh521.cn/2024/09/20/nvim-appname/</id>
    <published>2024-09-20T21:03:18.000Z</published>
    <updated>2026-04-27T12:54:17.932Z</updated>
    
    <content type="html"><![CDATA[<p>nvim 多套配置快速切换</p><p>配置拉下来放在 <code>~/.config/</code> 和 nvim 文件夹同级</p><p>之后可以使用环境变量 NVIM_APPNAME 来选择，在shell config中设置别名，变量值即目录名称。</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="built_in">alias</span> avim=<span class="string">&#x27;NVIM_APPNAME=AstroNvim nvim&#x27;</span></span><br><span class="line"><span class="built_in">alias</span> lvim=<span class="string">&#x27;NVIM_APPNAME=lazyVim nvim&#x27;</span></span><br><span class="line"><span class="built_in">alias</span> kvim=<span class="string">&#x27;NVIM_APPNAME=kickstartNvim nvim&#x27;</span></span><br></pre></td></tr></table></figure><p>更多内容参考 <a href="https://www.zhihu.com/question/594333293/answer/2973900710">如何评价Neovim 0.9？ - kidneyball的回答 - 知乎</a></p><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;nvim 多套配置快速切换&lt;/p&gt;
&lt;p&gt;配置拉下来放在 &lt;code&gt;~/.config/&lt;/code&gt; 和 nvim 文件夹同级&lt;/p&gt;
&lt;p&gt;之后可以使用环境变量 NVIM_APPNAME 来选择，在shell config中设置别名，变量值即目录名称。&lt;/p&gt;
&lt;fi</summary>
      
    
    
    
    
    <category term="vim" scheme="https://blog.syh521.cn/tags/vim/"/>
    
    <category term="neovim" scheme="https://blog.syh521.cn/tags/neovim/"/>
    
  </entry>
  
  <entry>
    <title>知乎web体验优化</title>
    <link href="https://blog.syh521.cn/2024/09/05/zhihu-settings/"/>
    <id>https://blog.syh521.cn/2024/09/05/zhihu-settings/</id>
    <published>2024-09-05T03:53:40.000Z</published>
    <updated>2026-04-27T12:54:17.933Z</updated>
    
    <content type="html"><![CDATA[<h2 id="屏蔽无障碍服务"><a href="#屏蔽无障碍服务" class="headerlink" title="屏蔽无障碍服务"></a>屏蔽无障碍服务</h2><p>ALT+按键切换会弹出无障碍，很烦人，装 ublock origin 插件，在<strong>自定义静态规则</strong>中加入 <code>||zhihu.com/*aria.js</code> 即可。</p><p>删除跟踪链接</p><p><code>||zhihu.com^$removeparam=/utm_psn|spm/</code></p><h2 id="功能屏蔽"><a href="#功能屏蔽" class="headerlink" title="功能屏蔽"></a>功能屏蔽</h2><p>知乎的web UI 不仅没宽屏，边上还堆砌一些一辈子都不会点开的元素。</p><p>使用 <a href="https://greasyfork.org/zh-CN/scripts/423404">知乎修改器</a> 删掉不需要的元素。</p><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;屏蔽无障碍服务&quot;&gt;&lt;a href=&quot;#屏蔽无障碍服务&quot; class=&quot;headerlink&quot; title=&quot;屏蔽无障碍服务&quot;&gt;&lt;/a&gt;屏蔽无障碍服务&lt;/h2&gt;&lt;p&gt;ALT+按键切换会弹出无障碍，很烦人，装 ublock origin 插件，在&lt;strong&gt;自定义</summary>
      
    
    
    
    
    <category term="杂项" scheme="https://blog.syh521.cn/tags/%E6%9D%82%E9%A1%B9/"/>
    
  </entry>
  
  <entry>
    <title>nginx容器反代本地端口</title>
    <link href="https://blog.syh521.cn/2024/08/30/nginx-docker/"/>
    <id>https://blog.syh521.cn/2024/08/30/nginx-docker/</id>
    <published>2024-08-30T09:18:36.000Z</published>
    <updated>2026-04-27T12:54:17.931Z</updated>
    
    <content type="html"><![CDATA[<p>使用portainer管理docker以后，总是需要 localhost:9000 来跳转，感觉一不美观二不方便。</p><p>使用nginx容器反代，记录一下踩坑的点。</p><span id="more"></span><h2 id="Nginx反代和hosts解析实现本地端口的自定别名"><a href="#Nginx反代和hosts解析实现本地端口的自定别名" class="headerlink" title="Nginx反代和hosts解析实现本地端口的自定别名"></a>Nginx反代和hosts解析实现本地端口的自定别名</h2><p>docker起一个nginx,写好配置文件。</p><div class='fold collapsed'>    <div class='fold-title'>        nginx配置    </div>    <div class='fold-content'>        <figure class="highlight nginx"><table><tr><td class="code"><pre><span class="line"><span class="section">server</span> &#123;</span><br><span class="line">  <span class="attribute">listen</span> <span class="number">80</span>;</span><br><span class="line">  <span class="attribute">server_name</span> portainer;</span><br><span class="line"></span><br><span class="line">  <span class="section">location</span> / &#123;</span><br><span class="line">    <span class="attribute">proxy_pass</span> http://172.17.0.1:9000;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>    </div></div><p>这里的 <code>172.17.0.1</code> 是 <code>ifconfig docker0</code> 得到的宿主机ip,仅限linux有用，windows和mac可以使用<code>host.docker.internal</code>，但是我没有使用过，有问题请google</p><p>或者将需要互访的容器加入同一<strong>自定</strong>网络，通过容器别名访问也可以。</p><p>修改宿主机 <code>/etc/hosts</code>，加入</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">127.0.0.1 portainer</span><br></pre></td></tr></table></figure><p>按理说到这一步就好了，但是我被卡了半天找不到问题，firefox打开f12,看到一个远端ip<code>127.0.0.1:7897</code>，关掉clash的系统代理果然就没问题，在clash设置里面绕过portainer就好了。</p><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;使用portainer管理docker以后，总是需要 localhost:9000 来跳转，感觉一不美观二不方便。&lt;/p&gt;
&lt;p&gt;使用nginx容器反代，记录一下踩坑的点。&lt;/p&gt;</summary>
    
    
    
    
    <category term="nginx" scheme="https://blog.syh521.cn/tags/nginx/"/>
    
    <category term="docker" scheme="https://blog.syh521.cn/tags/docker/"/>
    
  </entry>
  
  <entry>
    <title>asahi-ubuntu 24.04 设置</title>
    <link href="https://blog.syh521.cn/2024/08/27/asahi-ubuntu/"/>
    <id>https://blog.syh521.cn/2024/08/27/asahi-ubuntu/</id>
    <published>2024-08-27T09:29:20.000Z</published>
    <updated>2026-04-27T12:54:17.930Z</updated>
    
    <content type="html"><![CDATA[<p>自用，记录。</p><span id="more"></span><ul><li>国内必备的网络设置</li><li>删ibus，装fcitx5，<a href="https://aur.archlinux.org/packages/fcitx5-sogou">装搜狗输入法</a>，将七个deb包中的amd换成arm即可，感谢炳儿提供的资源。</li><li><a href="https://www.zhihu.com/question/661866889/answer/3565354620">删snap，另装firefox</a></li><li><code>sudo apt install ffmpeg</code>，解决firefox不支持html5播放器</li><li><code>sudo apt install gnome-tweaks  gnome-browser-connector</code></li><li>改键位<ul><li>gnome扩展里的设置无法满足我的要求</li><li>先后使用了更改<code>/usr/share/X11/xkb/symbols/pc</code>，使用xdotool &amp; xbindkeys，autokey，xmodmap等方式，与X11有关的均有各种各样的问题，基本都是设置无法生效或者不能设置。改xkb会在vscode中同时生效一份未修改的映射。</li><li>最后选择了keyd，支持wayland,并且似乎不是在窗口系统层面修改，不会产生x11和wayland同时更改的冲突。</li><li>有问题使用 <code>sudo systemctl status keyd</code> 查看，使用 <code>keyd list-keys</code> 查看自己要修改的键的 valid 的值。</li></ul></li></ul><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">git clone https://github.com/rvaiya/keyd.git</span><br><span class="line">cd keyd</span><br><span class="line">make</span><br><span class="line">sudo make install</span><br><span class="line"></span><br><span class="line">sudo vim /etc/keyd/default.conf</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">[ids]</span><br><span class="line">*</span><br><span class="line"></span><br><span class="line">[main]</span><br><span class="line">leftcontrol = esc</span><br><span class="line">capslock = leftcontrol</span><br><span class="line">esc = capslock</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">sudo systemctl enable keyd</span><br><span class="line">sudo systemctl start keyd</span><br></pre></td></tr></table></figure><ul><li>字体用 <a href="https://github.com/thep0y/monaco-nerd-font">Monaco Nerd Font</a> 和 <a href="https://github.com/lxgw/LxgwWenKai">霞鹜文楷</a></li><li><a href="https://zhuanlan.zhihu.com/p/629180982">c炳：Linux上自用主题及扩展、插件备份</a> 桌面主题、功能设置，女大学生自用99新</li><li>装rust环境，<a href="https://github.com/GregTheMadMonk/alacritty-smooth-cursor/blob/smooth-cursor/INSTALL.md">编译安装alacritty</a>，注意如果用我此处提供的alacritty-smooth-cursor，则需要在编译的时候选择仅支持x11，wayland下存在刷新bug</li><li><a href="https://www.haskell.org/ghcup/#">ghcup</a> Haskell环境</li></ul><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">set -gx PATH $PATH $HOME/.ghcup/bin</span><br></pre></td></tr></table></figure><ul><li>装xclip,wl-clipboard</li><li>仓库里的vim不知道为什么不支持wayland系统剪贴板，还需要装vim-gtk3，然后”+y就可以正常用了，虽然平时也不咋用。</li><li>nvm(官网安装脚本)，fish装fisher,fisher装nvm插件(如下)</li></ul><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">fisher install FabioAntunes/fish-nvm edc/bass</span><br></pre></td></tr></table></figure><ul><li><code>npm install -g @delance/runtime</code> 装群友逆向的pylance给neovim当lsp</li><li>装<a href="https://docs.anaconda.com/miniconda/">miniconda</a>, base装pynvim包给neovim用。</li><li><a href="https://github.com/llvm/llvm-project/releases">LLVM&#x2F;Clang</a></li><li>拉配置alacritty、nvim、fish配置文件</li><li><a href="https://www.gnome-look.org/p/1403328">WhiteSur Gtk Theme，gnome macos风格主题</a></li><li>使用fn+f而非直接f区实现功能键(修改fnmode)</li></ul><p>不知道为什么设备键盘生效了一次以后，用apple内置键盘还要重新设置一次。</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">sudo su -c &quot;echo -n 0x02 &gt; /sys/module/hid_apple/parameters/fnmode&quot;</span><br></pre></td></tr></table></figure><ul><li>firefox默认双击tab无法关闭标签页，打开about:config，找到browser.tabs.closeTabByDblclick设置为True</li><li><a href="https://wcbing.top/linux/containers/install/">装docker</a>, <a href="https://github.com/docker/compose/releases">docker-compose</a></li></ul><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">curl -fsSL https://get.docker.com/ | sudo -E sh</span><br><span class="line">sudo curl -L &quot;docker-compose...&quot; -o /usr/local/bin/docker-compose</span><br><span class="line">sudo chmod +x /usr/local/bin/docker-compose</span><br></pre></td></tr></table></figure><ul><li>portainer管理docker，mysql用docker跑，web管理面板用的<a href="https://hub.docker.com/r/webhippie/mywebsql">mywebsql</a>了，数据库需要在env参数指定 <code>MYWEBSQL_AUTH_SERVER</code> 和 <code>MYWEBSQL_SERVER_LIST</code>，凑合用。</li><li>装OBS，直接装依赖，加官方的PPA即可，还是比较方便的，无需编译安装</li></ul><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">sudo apt update</span><br><span class="line">sudo apt upgrade</span><br><span class="line">sudo apt install ffmpeg libv4l-dev qtbase5-dev</span><br><span class="line">sudo add-apt-repository ppa:obsproject/obs-studio</span><br><span class="line">sudo apt update</span><br><span class="line">sudo apt install obs-studio</span><br></pre></td></tr></table></figure><p>还有些零碎的小工具没装上，随用随装吧。<br>用了一段时间，重新切回mac的第一个感觉就是，慢。第二个感觉就是macos的傲慢，很多东西都不让改，强迫用户去接受。<br>习惯了指纹验证，突然没有不太舒服，但是apple不开放安全芯片的权限，也没有办法。</p><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;自用，记录。&lt;/p&gt;</summary>
    
    
    
    
    <category term="linux" scheme="https://blog.syh521.cn/tags/linux/"/>
    
    <category term="ubuntu" scheme="https://blog.syh521.cn/tags/ubuntu/"/>
    
  </entry>
  
  <entry>
    <title>Codeforces Round 932 (Div. 2)</title>
    <link href="https://blog.syh521.cn/2024/03/11/CodeforcesRound932/"/>
    <id>https://blog.syh521.cn/2024/03/11/CodeforcesRound932/</id>
    <published>2024-03-11T16:53:14.000Z</published>
    <updated>2026-04-27T12:54:17.923Z</updated>
    
    <content type="html"><![CDATA[<p>开始复健，C题有点小难。但也没到D的难度，不知道是不是太久没打的缘故。</p><span id="more"></span><p><a href="https://codeforces.com/contest/1935/problems">题面</a></p><h1 id="A-Entertainment-in-MAC"><a href="#A-Entertainment-in-MAC" class="headerlink" title="A. Entertainment in MAC"></a>A. Entertainment in MAC</h1><p>给定一个字符串s，做n次操作，2选1：反转字符串，s&#x3D;reverse(s)；加上一个反转的字符串，s&#x3D;s+reverse(s)</p><p>n是偶数</p><p>求字典序最小的结果。</p><div class='fold collapsed'>    <div class='fold-title'>        code    </div>    <div class='fold-content'>        <figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="type">int</span> n;</span><br><span class="line">  cin &gt;&gt; n;</span><br><span class="line">  string s;</span><br><span class="line">  cin &gt;&gt; s;</span><br><span class="line">  string rs = s;</span><br><span class="line">  <span class="built_in">reverse</span>(rs.<span class="built_in">begin</span>(), rs.<span class="built_in">end</span>());</span><br><span class="line">  cout &lt;&lt; <span class="built_in">min</span>(&#123;rs + s, s + rs , s&#125;) &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="type">int</span> tt;</span><br><span class="line">  cin &gt;&gt; tt;</span><br><span class="line">  <span class="keyword">while</span> (tt--) &#123;</span><br><span class="line">    <span class="built_in">solve</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>    </div></div><h1 id="B-Informatics-in-MAC"><a href="#B-Informatics-in-MAC" class="headerlink" title="B. Informatics in MAC"></a>B. Informatics in MAC</h1><p>给定一个长为n的数组a($0\leq a_i \leq n$)，问能否分割成2个以上的subsegment，每个subsegment的MEX相等。</p><div class='fold collapsed'>    <div class='fold-title'>        solution    </div>    <div class='fold-content'>        <p>只考虑分成两段，找每个值的左右端点，如果MEX之前的值都能分到不同的段就OK，否则不行</p>    </div></div><div class='fold collapsed'>    <div class='fold-title'>        code    </div>    <div class='fold-content'>        <figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">()</span></span>&#123;</span><br><span class="line">  <span class="type">int</span> n;</span><br><span class="line">  std::cin &gt;&gt; n;</span><br><span class="line">  <span class="function">std::vector&lt;<span class="type">int</span>&gt; <span class="title">l</span><span class="params">(n + <span class="number">1</span>, INT_MAX)</span>, <span class="title">r</span><span class="params">(n + <span class="number">1</span>, <span class="number">-1</span>)</span></span>;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; ++i) &#123;</span><br><span class="line">    <span class="type">int</span> tem;</span><br><span class="line">    std::cin &gt;&gt; tem;</span><br><span class="line">    l[tem] = std::<span class="built_in">min</span>(l[tem], i), r[tem] = std::<span class="built_in">max</span>(r[tem], i);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="type">int</span> L = <span class="number">1</span>, R = n - <span class="number">1</span>;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt;= n; ++i) &#123;</span><br><span class="line">    <span class="keyword">if</span> (l[i] != INT_MAX) &#123;</span><br><span class="line">      L = std::<span class="built_in">max</span>(L, l[i]), R = std::<span class="built_in">min</span>(R, r[i] - <span class="number">1</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">break</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">if</span> (L &lt;= R) &#123;</span><br><span class="line">    std::cout &lt;&lt; <span class="number">2</span> &lt;&lt; <span class="string">&#x27;\n&#x27;</span> &lt;&lt; <span class="string">&#x27;1&#x27;</span> &lt;&lt; <span class="string">&#x27; &#x27;</span> &lt;&lt; L &lt;&lt; <span class="string">&#x27;\n&#x27;</span> &lt;&lt; L + <span class="number">1</span> &lt;&lt; <span class="string">&#x27; &#x27;</span> &lt;&lt; n &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">else</span></span><br><span class="line">    std::cout &lt;&lt; <span class="string">&quot;-1\n&quot;</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="type">int</span> tt;</span><br><span class="line">  std::cin&gt;&gt;tt;</span><br><span class="line">  <span class="keyword">while</span>(tt--)&#123;</span><br><span class="line">    <span class="built_in">solve</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>    </div></div><h1 id="C-Messenger-in-MAC"><a href="#C-Messenger-in-MAC" class="headerlink" title="C. Messenger in MAC"></a>C. Messenger in MAC</h1><p>给定 $N, L$ 以及长为 $N$ 的数组 {A}, {B}</p><p>考虑一个大小为 $k$的序列 $p$，要求 $1\leq p_i\leq n$，$ p_i$ 互不相等，要求<br>$$\sum\limits_{i&#x3D;1}^{k}a_{p_i}+\sum\limits_{i&#x3D;1}^{k-1}{|b_{p_i}-b_{p_{i+1}}|}\leq L$$</p><p>问最大的 $k$ 可以是多少</p><div class='fold collapsed'>    <div class='fold-title'>        solution 1    </div>    <div class='fold-content'>        <p>考虑按b的升序枚举，找a的个数，但是不太好维护a</p><p>是否可以考虑dp？</p>    </div></div><div class='fold collapsed'>    <div class='fold-title'>        solution 2    </div>    <div class='fold-content'>        <p>如果已经确定了b的上下界，给定固定的值 $\Delta l$ 和若干个 $a_i$，如何确定最多的个数？</p><p>$dp_i$ 表示拿 $i$ 个 $a_i$ 的最小总和，拿到一个 $a_i$ 显然可以更新一遍 $dp_i$:</p><p>$i &#x3D; n\to 1, dp_i&#x3D;min(dp_i, dp_{i-1}+a)$</p><p>回过来考虑 $b$ 的影响，和 $l$ 比较之后更新答案，同时特判只有1个的情况。</p>    </div></div><div class='fold collapsed'>    <div class='fold-title'>        code    </div>    <div class='fold-content'>        <figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">()</span></span>&#123;</span><br><span class="line">  <span class="type">int</span> n, l;</span><br><span class="line">  std::cin &gt;&gt; n &gt;&gt; l;</span><br><span class="line">  <span class="function">std::vector&lt;<span class="type">int</span>&gt; <span class="title">a</span><span class="params">(n)</span>, <span class="title">b</span><span class="params">(n)</span>, <span class="title">p</span><span class="params">(n)</span></span>;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; ++i)</span><br><span class="line">    std::cin &gt;&gt; a[i] &gt;&gt; b[i];</span><br><span class="line">  std::<span class="built_in">iota</span>(p.<span class="built_in">begin</span>(), p.<span class="built_in">end</span>(), <span class="number">0</span>);</span><br><span class="line">  std::<span class="built_in">sort</span>(p.<span class="built_in">begin</span>(), p.<span class="built_in">end</span>(), [&amp;](<span class="type">int</span> i, <span class="type">int</span> j) &#123; <span class="keyword">return</span> b[i] &lt; b[j]; &#125;);</span><br><span class="line">  <span class="function">std::vector&lt;<span class="type">long</span> <span class="type">long</span>&gt; <span class="title">dp</span><span class="params">(n + <span class="number">1</span>, <span class="number">1e18</span>)</span></span>;</span><br><span class="line">  <span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line">  <span class="keyword">for</span> (<span class="keyword">auto</span> i : p) &#123;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> j = n - <span class="number">1</span>; j &gt;= <span class="number">1</span>; --j) &#123;</span><br><span class="line">      dp[j + <span class="number">1</span>] = std::<span class="built_in">min</span>(dp[j + <span class="number">1</span>], dp[j] + a[i]);</span><br><span class="line">      <span class="keyword">if</span> (dp[j] + a[i] + b[i] &lt;= l)</span><br><span class="line">        ans = std::<span class="built_in">max</span>(ans, j + <span class="number">1</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    dp[<span class="number">1</span>] = std::<span class="built_in">min</span>(dp[<span class="number">1</span>], <span class="number">1ll</span> * a[i] - b[i]);</span><br><span class="line">    <span class="keyword">if</span> (a[i] &lt;= l)</span><br><span class="line">      ans = std::<span class="built_in">max</span>(ans, <span class="number">1</span>);</span><br><span class="line">  &#125;</span><br><span class="line">  std::cout &lt;&lt; ans &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="type">int</span> tt;</span><br><span class="line">  std::cin &gt;&gt; tt;</span><br><span class="line">  <span class="keyword">while</span> (tt--) &#123;</span><br><span class="line">    <span class="built_in">solve</span>();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>    </div></div><h1 id="D-Exam-in-MAC"><a href="#D-Exam-in-MAC" class="headerlink" title="D. Exam in MAC"></a>D. Exam in MAC</h1><p>给定一个 $N \leq 3\times 10^5$ 个元素的集合 $s$，和一个数字 $c \leq 10^9$，问能有多少对 $(x,y)$ 满足 $0\leq x\leq y\leq c$，并且 $x+y$ 和 $y-x$ 都不在集合 $s$ 中。</p><div class='fold collapsed'>    <div class='fold-title'>        solution    </div>    <div class='fold-content'>        <p>正难则反，考虑枚举不合法的方案数量，即 [$x+y$ 在集合中的数量 $t_1$] + [$y-x$ 在集合中的数量 $t_2$] - [两者都在集合中的数量 $t_3$]</p><p>前两者都十分好求，而对于 $t_3$，令 $x+y&#x3D;g, y-x&#x3D;h$，可以发现 $g\equiv h(\mod 2)，且h\leq y$</p>    </div></div><div class='fold collapsed'>    <div class='fold-title'>        code    </div>    <div class='fold-content'>        <figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="keyword">using</span> i64 = <span class="type">long</span> <span class="type">long</span>;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="type">int</span> n, c;</span><br><span class="line">  cin &gt;&gt; n &gt;&gt; c;</span><br><span class="line">  i64 total = <span class="number">1ll</span> * (c + <span class="number">1</span>) * (c + <span class="number">2</span>) / <span class="number">2</span>;</span><br><span class="line">  <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">a</span><span class="params">(n)</span></span>;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; ++i) cin &gt;&gt; a[i];</span><br><span class="line">  <span class="keyword">for</span> (<span class="keyword">auto</span> ai : a) total -= <span class="number">1ll</span> * ai / <span class="number">2</span> + <span class="number">1</span>, total -= c - ai + <span class="number">1</span>;</span><br><span class="line">  <span class="type">int</span> cnt[<span class="number">2</span>] = &#123;<span class="number">0</span>, <span class="number">0</span>&#125;;</span><br><span class="line">  <span class="keyword">for</span> (<span class="keyword">auto</span> ai : a) &#123;</span><br><span class="line">    cnt[ai % <span class="number">2</span>]++;</span><br><span class="line">    total += cnt[ai % <span class="number">2</span>];</span><br><span class="line">  &#125;</span><br><span class="line">  cout &lt;&lt; total &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="type">int</span> tt;</span><br><span class="line">  cin &gt;&gt; tt;</span><br><span class="line">  <span class="keyword">while</span> (tt--)</span><br><span class="line">    <span class="built_in">solve</span>();</span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>    </div></div><h1 id="E-Distance-Learning-Courses-in-MAC"><a href="#E-Distance-Learning-Courses-in-MAC" class="headerlink" title="E. Distance Learning Courses in MAC"></a>E. Distance Learning Courses in MAC</h1><p>给定 $n$ 和 $n$ 个区间 $[x, y]$，$n$ 个数范围限定在对应区间中。</p><p>$q$ 次询问，$[l, r]$ 表示第 $l$ 个数一直到第 $r$ 按位或，求最大值。</p><p>$n,q\leq 2\times 10^5, 0\leq x_i, y_i\leq 2^{30}, 1\leq l_i\leq r_i\leq n$</p><div class='fold collapsed'>    <div class='fold-title'>        solution    </div>    <div class='fold-content'>        No content to show    </div></div><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;开始复健，C题有点小难。但也没到D的难度，不知道是不是太久没打的缘故。&lt;/p&gt;</summary>
    
    
    
    
    <category term="Codeforces" scheme="https://blog.syh521.cn/tags/Codeforces/"/>
    
    <category term="搞笑" scheme="https://blog.syh521.cn/tags/%E6%90%9E%E7%AC%91/"/>
    
  </entry>
  
  <entry>
    <title>小刻也能看懂的「neovim配置」「未完成」</title>
    <link href="https://blog.syh521.cn/2024/02/08/Note-neovim/"/>
    <id>https://blog.syh521.cn/2024/02/08/Note-neovim/</id>
    <published>2024-02-08T15:26:52.000Z</published>
    <updated>2026-04-27T12:54:17.930Z</updated>
    
    <content type="html"><![CDATA[<p>上次折腾neovim快是一年前了(2023.3)，趁过年没什么要紧事干再折腾一下。</p><span id="more"></span><h1 id="前置知识"><a href="#前置知识" class="headerlink" title="前置知识"></a>前置知识</h1><p>默认用户有一定的lua基础和vim使用基础</p><ul><li>neovim内输入:Tutor&lt;CR&gt;(&lt;CR&gt;代表enter键，下同)获取基础的vim教程，只需20分钟左右即可学会vim基础操作</li><li>lua基础教程移步<a href="https://www.runoob.com/lua">菜鸟教程</a></li></ul><div class='fold collapsed'>    <div class='fold-title'>        lua的两个速成点    </div>    <div class='fold-content'>        <p>懒得叠甲，如果有语法警察欢迎在评论区纠正</p><ul><li><p>如何理解require?<br>  类似include，加载一个模块</p></li><li><p>lua中的变量<br>  默认全局变量，局部变量&#x2F;函数需要local修饰</p></li></ul>    </div></div><h1 id="lua配置"><a href="#lua配置" class="headerlink" title="lua配置"></a>lua配置</h1><p>neovim支持lua配置文件 <code>init.lua</code></p><p>mac&#x2F;linux文件位置: <code>~/.config/nvim/init.lua</code></p><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;上次折腾neovim快是一年前了(2023.3)，趁过年没什么要紧事干再折腾一下。&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Windows Clash TUN和自带热点冲突 &amp; 开了WSL/WSA之后网络变慢</title>
    <link href="https://blog.syh521.cn/2024/01/06/note-WindowsNetwork/"/>
    <id>https://blog.syh521.cn/2024/01/06/note-WindowsNetwork/</id>
    <published>2024-01-06T22:05:07.000Z</published>
    <updated>2026-04-27T12:54:17.931Z</updated>
    
    <content type="html"><![CDATA[<p>最近用windows碰到了两个问题，一个问题很早就有，windows clash-verge开tun mode之后再开热点，热点是不生效的。查了一下说是什么网络环路导致的，并不是很懂，但只需要在网卡设置里共享给热点的网卡即可。通过开关tun&#x2F;热点确认具体的两个网卡。</p><p>控制面板打开网络适配器，clash网卡属性$\to$共享，勾选<code>允许其他网络用户通过此计算机的Internet连接来连接</code>，同时选择热点所对应的网卡。这样再开热点就有效果了，也就真正把经过tun的网络分享了出去。</p><hr><p>另一个问题是前几天为了又用Hyper-V又在电脑上玩明日方舟装了WSA，结果后面几天连校园网都特别慢，一开始还以为是网络问题，但后来感觉不对劲，一看wifi居然连在了Hyper-V的虚拟网卡上，即vEthernet(xxx)，查了一下说因为实际的物理网卡不支持xx功能所以会慢，关掉就好，但是我关了也没用2333…</p><p>查了一下发现是Hyper-V自动会接过去，还他奶奶的把物理网卡的ipv4什么全关了，属性里只开了一个”Hyper-V可扩展的虚拟交换机”选项，在别人电脑上也试了一下，似乎打开这个选项就会关闭正常的ipv4协议，有的还打不开，不知道为什么，大概是WSA的锅，我的评价是好似。</p><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;最近用windows碰到了两个问题，一个问题很早就有，windows clash-verge开tun mode之后再开热点，热点是不生效的。查了一下说是什么网络环路导致的，并不是很懂，但只需要在网卡设置里共享给热点的网卡即可。通过开关tun&amp;#x2F;热点确认具体的两个网卡</summary>
      
    
    
    
    
    <category term="杂项" scheme="https://blog.syh521.cn/tags/%E6%9D%82%E9%A1%B9/"/>
    
  </entry>
  
  <entry>
    <title>简易gdb &amp; IDA操作</title>
    <link href="https://blog.syh521.cn/2023/12/01/Note-gdb_ida/"/>
    <id>https://blog.syh521.cn/2023/12/01/Note-gdb_ida/</id>
    <published>2023-12-01T08:54:26.000Z</published>
    <updated>2026-04-27T12:54:17.930Z</updated>
    
    <content type="html"><![CDATA[<p>干libm反汇编的时候用的挺多的，也就那几个操作，总结一下</p><span id="more"></span><h1 id="GDB"><a href="#GDB" class="headerlink" title="GDB"></a>GDB</h1><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">layout asm (分屏 展开汇编)</span><br><span class="line">layout src (分屏 展开源码)</span><br><span class="line">tui reg float (分屏 展开浮点型寄存器 别的同理 tab看一下选项就知道了)</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">b function (根据函数名打断点 无论在汇编或源码调试中都可用)</span><br><span class="line">b line (行号打断点)</span><br><span class="line">rb function (递归函数名断点)</span><br><span class="line">rb .*function.* (根据函数名关键字匹配，递归打断点)</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">i r reg (查看寄存器的值)</span><br><span class="line">watch variable (查看变量，当变量值发生变化时输出，需要程序运行起来，否则没有上下文信息)</span><br><span class="line">p variable/expression (打印变量\表达式的值，表达式可以调用已有的函数、变量，也支持寄存器的计算)</span><br></pre></td></tr></table></figure><ul><li>p&#x2F;x variable&#x2F;expression 16进制</li><li>p&#x2F;d … 10进制</li><li>p&#x2F;u … 16进制无符号整型</li><li>p&#x2F;o … 8进制</li><li>p&#x2F;t … 2进制</li><li>p&#x2F;c … 字符格式</li><li>p&#x2F;f … 浮点型</li></ul><h2 id="查看内存地址"><a href="#查看内存地址" class="headerlink" title="查看内存地址"></a>查看内存地址</h2><p>examine（简写x）</p><blockquote><p>x&#x2F;[n][f][u] addr</p></blockquote><ul><li>n - 内存单元数</li><li>f - 要打印的格式，控制字符同上print</li><li>u - 要打印的单元长度</li><li>addr - 内存地址，可以直接算直接地址，寄存器运算，或者取变量地址</li></ul><p>单元长度</p><ul><li>b 字节</li><li>h 双字节</li><li>w 四字节</li><li>g 八字节</li></ul><p>例如 x&#x2F;2gx 就显示的是两个8字节16进制的值。即连续的128位，像x86上的long double只用80位，那么看的就是低地址的第四位和高地址的全16位（小端模式）</p><hr><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">r (argument) 运行（带参数）</span><br><span class="line">c 运行到下一个断点</span><br><span class="line">n 单步执行</span><br><span class="line">s 单步进入，若有函数则进入该函数</span><br><span class="line">finish 执行完当前函数</span><br><span class="line">si 汇编单步进入</span><br></pre></td></tr></table></figure><h1 id="IDA-Pro"><a href="#IDA-Pro" class="headerlink" title="IDA Pro"></a>IDA Pro</h1><h2 id="Hex-rays"><a href="#Hex-rays" class="headerlink" title="Hex-rays"></a>Hex-rays</h2><p>F5翻译出一份简化反汇编的伪C代码，也有可能失败。</p><p>tab在反编译和反汇编之间切换</p><h2 id="远程调试"><a href="#远程调试" class="headerlink" title="远程调试"></a>远程调试</h2><p>dbgsrv文件夹里丢一个linux_server64到服务器上去，选remote linux debugger，填一下服务器上的路径和程序、命令行参数，直接跑就完事了，有输入就往.&#x2F;linux_server进程里丢。</p><h2 id="数据格式"><a href="#数据格式" class="headerlink" title="数据格式"></a>数据格式</h2><p>双击常量变量&#x2F;数组跳转到对应的rodata部分，按d转换数据格式，在 Options$\to$Setup data types中选择要转换的数据类型。</p><p>单个数据转换完之后右键Array可以手动转换一定长度的数组，IDA会根据分析（它往往切分好了数组）给你预设一个值，当然也不一定对，例如实际上在别的地方可能会跨数组，即在多个地方用了同一数组的不同部分，IDA便认为这些是不相干的数组，但是最后在某个地方发现跨数组，然后发现是同一个，这需要自己判断。</p><p>转换时注意Option中的signed element选项不要勾选。如果发现16进制带负号要注意这并不是真实的16进制值。</p><h2 id="常用宏"><a href="#常用宏" class="headerlink" title="常用宏"></a>常用宏</h2><p>tbyte - 80位 long double<br>qword - 64位<br>dword - 32位</p><p>还有些取位数的带参数宏，不一一列举，网上一搜就能找到</p><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;干libm反汇编的时候用的挺多的，也就那几个操作，总结一下&lt;/p&gt;</summary>
    
    
    
    
    <category term="汇编" scheme="https://blog.syh521.cn/tags/%E6%B1%87%E7%BC%96/"/>
    
  </entry>
  
  <entry>
    <title>MacOS优化使用体验</title>
    <link href="https://blog.syh521.cn/2023/10/15/note-mac/"/>
    <id>https://blog.syh521.cn/2023/10/15/note-mac/</id>
    <published>2023-10-15T07:29:19.000Z</published>
    <updated>2026-04-27T12:54:17.931Z</updated>
    
    <content type="html"><![CDATA[<p>都是比较主观的设置</p><span id="more"></span><h1 id="Bash默认加载文件设置-取消zsh提示"><a href="#Bash默认加载文件设置-取消zsh提示" class="headerlink" title="Bash默认加载文件设置 &amp; 取消zsh提示"></a>Bash默认加载文件设置 &amp; 取消zsh提示</h1><p>m1 mac带的系统默认zsh，如果日常用bash的话每次打开都会有提示，在.bash_profile中设置即可<br>默认加载的是.bash_profile，所以加一行.bashrc</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="built_in">export</span> BASH_SILENCE_DEPRECATION_WARNING=1</span><br><span class="line"><span class="built_in">source</span> .bashrc</span><br></pre></td></tr></table></figure><h1 id="bash无高亮"><a href="#bash无高亮" class="headerlink" title="bash无高亮"></a>bash无高亮</h1><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="built_in">export</span> CLICOLOR=1</span><br><span class="line"><span class="built_in">export</span> LSCOLORS=ExGxFxdaCxDaDahbadeche</span><br><span class="line"><span class="built_in">alias</span> grep=<span class="string">&#x27;grep --color&#x27;</span></span><br><span class="line"><span class="built_in">alias</span> egrep=<span class="string">&#x27;egrep --color&#x27;</span></span><br><span class="line"><span class="built_in">alias</span> fgrep=<span class="string">&#x27;fgrep --color&#x27;</span></span><br></pre></td></tr></table></figure><p>加入到.bashrc即可</p><h1 id="windows风格的-alt-tab"><a href="#windows风格的-alt-tab" class="headerlink" title="windows风格的 alt-tab"></a>windows风格的 alt-tab</h1><p>brew install –cask alt-tab</p><h2 id="代替command-tab"><a href="#代替command-tab" class="headerlink" title="代替command+tab"></a>代替command+tab</h2><img src="/2023/10/15/note-mac/1.png" class="p1"><h2 id="代替command"><a href="#代替command" class="headerlink" title="代替command+&#96;"></a>代替command+&#96;</h2><img src="/2023/10/15/note-mac/2.png" class="p2"><p>可以实现跨桌面应用内切换</p><h1 id="平铺式窗口管理-Aerospace"><a href="#平铺式窗口管理-Aerospace" class="headerlink" title="平铺式窗口管理 - Aerospace"></a>平铺式窗口管理 - Aerospace</h1><p>在MacOS较高的版本，关闭 SIP 去折腾 yabai 比较麻烦，而且关闭了 SIP 功能之后也会有很多功能不方便用，例如 Apple Pay，就无法在app store中装一些移动端软件。</p><p>aerospace不需要任何提权操作</p><p>一些宣传效果可以看少数派的文章 <a href="https://sspai.com/post/84935">App+1 | AeroSpace：消除窗口重叠，世界属于平铺</a></p><p>这里列一下我的配置文件</p><div class='fold collapsed'>    <div class='fold-title'>        .aerospace.toml    </div>    <div class='fold-content'>        <figure class="highlight toml"><table><tr><td class="code"><pre><span class="line"><span class="comment"># See: https://nikitabobko.github.io/AeroSpace/commands.html#focus</span></span><br><span class="line"><span class="comment"># alt-h = &#x27;focus left&#x27;</span></span><br><span class="line"><span class="comment"># alt-j = &#x27;focus down&#x27;</span></span><br><span class="line"><span class="comment"># alt-k = &#x27;focus up&#x27;</span></span><br><span class="line"><span class="comment"># alt-l = &#x27;focus right&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># See: https://nikitabobko.github.io/AeroSpace/commands.html#workspace</span></span><br><span class="line"><span class="attr">alt-0</span> = <span class="string">&#x27;workspace 0&#x27;</span></span><br><span class="line"><span class="attr">alt-1</span> = <span class="string">&#x27;workspace 1&#x27;</span></span><br><span class="line"><span class="attr">alt-2</span> = <span class="string">&#x27;workspace 2&#x27;</span></span><br><span class="line"><span class="attr">alt-3</span> = <span class="string">&#x27;workspace 3&#x27;</span></span><br><span class="line"><span class="attr">alt-4</span> = <span class="string">&#x27;workspace 4&#x27;</span></span><br><span class="line"><span class="attr">alt-5</span> = <span class="string">&#x27;workspace 5&#x27;</span></span><br><span class="line"><span class="attr">alt-6</span> = <span class="string">&#x27;workspace 6&#x27;</span></span><br><span class="line"><span class="attr">alt-7</span> = <span class="string">&#x27;workspace 7&#x27;</span></span><br><span class="line"><span class="attr">alt-8</span> = <span class="string">&#x27;workspace 8&#x27;</span></span><br><span class="line"><span class="attr">alt-9</span> = <span class="string">&#x27;workspace 9&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># See: https://nikitabobko.github.io/AeroSpace/commands.html#move-node-to-workspace</span></span><br><span class="line"><span class="attr">alt-shift-0</span> = <span class="string">&#x27;move-node-to-workspace 0&#x27;</span></span><br><span class="line"><span class="attr">alt-shift-1</span> = <span class="string">&#x27;move-node-to-workspace 1&#x27;</span></span><br><span class="line"><span class="attr">alt-shift-2</span> = <span class="string">&#x27;move-node-to-workspace 2&#x27;</span></span><br><span class="line"><span class="attr">alt-shift-3</span> = <span class="string">&#x27;move-node-to-workspace 3&#x27;</span></span><br><span class="line"><span class="attr">alt-shift-4</span> = <span class="string">&#x27;move-node-to-workspace 4&#x27;</span></span><br><span class="line"><span class="attr">alt-shift-5</span> = <span class="string">&#x27;move-node-to-workspace 5&#x27;</span></span><br><span class="line"><span class="attr">alt-shift-6</span> = <span class="string">&#x27;move-node-to-workspace 6&#x27;</span></span><br><span class="line"><span class="attr">alt-shift-7</span> = <span class="string">&#x27;move-node-to-workspace 7&#x27;</span></span><br><span class="line"><span class="attr">alt-shift-8</span> = <span class="string">&#x27;move-node-to-workspace 8&#x27;</span></span><br><span class="line"><span class="attr">alt-shift-9</span> = <span class="string">&#x27;move-node-to-workspace 9&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="section">[[on-window-detected]]</span></span><br><span class="line"><span class="attr">if.window-title-regex-substring</span> = <span class="string">&#x27;(setting|设置)&#x27;</span></span><br><span class="line"><span class="attr">run</span> = <span class="string">&#x27;layout floating&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="section">[[on-window-detected]]</span></span><br><span class="line"><span class="attr">if.window-title-regex-substring</span> = <span class="string">&#x27;(Picture-in-Picture|画中画)&#x27;</span></span><br><span class="line"><span class="attr">run</span> = <span class="string">&#x27;layout floating&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># QQ</span></span><br><span class="line"><span class="section">[[on-window-detected]]</span></span><br><span class="line"><span class="attr">if.app-id</span> = <span class="string">&#x27;com.tencent.qq&#x27;</span></span><br><span class="line"><span class="comment"># if.window-title-regex-substring = &#x27;^(?!QQ).*$&#x27;</span></span><br><span class="line"><span class="attr">run</span> = <span class="string">&#x27;layout floating&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 微信</span></span><br><span class="line"><span class="section">[[on-window-detected]]</span></span><br><span class="line"><span class="attr">if.app-id</span> = <span class="string">&#x27;com.tencent.xinWeChat&#x27;</span></span><br><span class="line"><span class="comment"># if.window-title-regex-substring = &#x27;^(?!WeChat \(Chats\)|微信 \(聊天\)).*$&#x27;</span></span><br><span class="line"><span class="comment"># if.window-title-regex-substring = &#x27;(WeChat|微信)&#x27;</span></span><br><span class="line"><span class="attr">run</span> = <span class="string">&#x27;layout floating&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="section">[[on-window-detected]]</span></span><br><span class="line"><span class="attr">if.app-id</span> = <span class="string">&#x27;com.google.Chrome.app.ibblmnobmgdmpoeblocemifbpglakpoi&#x27;</span></span><br><span class="line"><span class="attr">run</span> = <span class="string">&#x27;layout floating&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="section">[[on-window-detected]]</span></span><br><span class="line"><span class="attr">if.app-id</span> = <span class="string">&#x27;com.apple.ActivityMonitor&#x27;</span></span><br><span class="line"><span class="attr">run</span> = <span class="string">&#x27;layout floating&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="section">[[on-window-detected]]</span></span><br><span class="line"><span class="attr">if.app-id</span> = <span class="string">&#x27;maccatalyst.com.atebits.Tweetie2&#x27;</span></span><br><span class="line"><span class="attr">run</span> = <span class="string">&#x27;layout floating&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># QQ音乐</span></span><br><span class="line"><span class="section">[[on-window-detected]]</span></span><br><span class="line"><span class="attr">if.app-id</span> = <span class="string">&#x27;com.tencent.QQMusicMac&#x27;</span></span><br><span class="line"><span class="attr">run</span> = <span class="string">&#x27;layout floating&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 钉钉</span></span><br><span class="line"><span class="section">[[on-window-detected]]</span></span><br><span class="line"><span class="attr">if.app-id</span> = <span class="string">&#x27;com.alibaba.DingTalkMac&#x27;</span></span><br><span class="line"><span class="attr">run</span> = <span class="string">&#x27;layout floating&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 网易云</span></span><br><span class="line"><span class="section">[[on-window-detected]]</span></span><br><span class="line"><span class="attr">if.app-id</span> = <span class="string">&#x27;com.netease.163music&#x27;</span></span><br><span class="line"><span class="attr">run</span> = <span class="string">&#x27;layout floating&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Alacritty</span></span><br><span class="line"><span class="comment"># [[on-window-detected]]</span></span><br><span class="line"><span class="comment"># if.app-id = &#x27;org.alacritty&#x27;</span></span><br><span class="line"><span class="comment"># run = &#x27;layout floating&#x27;</span></span><br></pre></td></tr></table></figure>    </div></div><h1 id="Thor"><a href="#Thor" class="headerlink" title="Thor"></a>Thor</h1><p>一款组合件触发应用的软件，我一般用来打开Alacritty</p><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">brew install --cask thor</span><br></pre></td></tr></table></figure><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;都是比较主观的设置&lt;/p&gt;</summary>
    
    
    
    
    <category term="杂项" scheme="https://blog.syh521.cn/tags/%E6%9D%82%E9%A1%B9/"/>
    
  </entry>
  
  <entry>
    <title>2023牛客多校第一场</title>
    <link href="https://blog.syh521.cn/2023/08/12/Contest-nowcoder2023-01/"/>
    <id>https://blog.syh521.cn/2023/08/12/Contest-nowcoder2023-01/</id>
    <published>2023-08-12T01:27:33.000Z</published>
    <updated>2026-04-27T12:54:17.923Z</updated>
    
    <content type="html"><![CDATA[<p>项目和啥软比赛都要dll了。</p><span id="more"></span><h1 id="D-Chocolate"><a href="#D-Chocolate" class="headerlink" title="D. Chocolate"></a>D. Chocolate</h1><p>分类讨论一下，发现只有1*1的时候先手会输</p><h1 id="J-Roulette"><a href="#J-Roulette" class="headerlink" title="J. Roulette"></a>J. Roulette</h1><p>一开始读错题了，后来发现 <code>输...输赢</code> 为一轮总是赢1块。</p><p>由 $2^r-1\geq n$ 可知当前有 $n$ 元最多输 $\log_2{n+1}$ 次，所以要连着赢 $m$ 轮，概率为</p><p>$$\prod_{x&#x3D;n}^{x&#x3D;n+m}(1-\frac{1}{2^{\log_2{x+1}}})$$</p><p>统一考虑所有 $\log_2{x+1}$ 相同的 $x$，复杂度就从 $O(N)$ 降到了 $O(logN)$</p><p>令概率为 $\frac{d}{dx}$，则最终求的 $a\times dx\equiv d(mod\ 998244353)$，<br>只要在每次更新 $d$ 的时候乘到 $a$ 上，更新 $dx$ 的时候乘对应的逆元到 $a$ 上即可。</p><p>逆元用费马小定理求一下即可。</p><div class='fold collapsed'>    <div class='fold-title'>        code    </div>    <div class='fold-content'>        <figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="keyword">using</span> ll=<span class="type">long</span> <span class="type">long</span>;</span><br><span class="line"><span class="type">const</span> ll mod=<span class="number">998244353</span>;</span><br><span class="line"><span class="function">ll <span class="title">pow</span><span class="params">(ll a,ll b)</span></span>&#123;</span><br><span class="line">  ll ans=<span class="number">1</span>;</span><br><span class="line">  <span class="keyword">for</span>(;b;b&gt;&gt;=<span class="number">1</span>,a=a*a%mod)<span class="keyword">if</span>(b&amp;<span class="number">1</span>)ans=ans*a%mod;</span><br><span class="line">  <span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">  ll n,m;</span><br><span class="line">  cin&gt;&gt;n&gt;&gt;m,m+=n;</span><br><span class="line">  ll d=<span class="number">1</span>,dx=<span class="number">1</span>,ans=<span class="number">1</span>;</span><br><span class="line">  <span class="keyword">while</span>(n&lt;m)&#123;</span><br><span class="line">    ll r=<span class="built_in">log2</span>(n<span class="number">+1</span>);</span><br><span class="line">    ll lim=<span class="built_in">min</span>(m,(<span class="number">1ll</span>&lt;&lt;(r<span class="number">+1</span>))<span class="number">-1</span>);</span><br><span class="line">    ll _dx=<span class="number">1</span>&lt;&lt;r,_d=_dx<span class="number">-1</span>;</span><br><span class="line">    dx=dx*<span class="built_in">pow</span>(_dx,lim-n)%mod;</span><br><span class="line">    ans=(ans*<span class="built_in">pow</span>(_d,lim-n)%mod)*<span class="built_in">pow</span>(<span class="built_in">pow</span>(_dx,lim-n),mod<span class="number">-2</span>)%mod;</span><br><span class="line">    n=lim;</span><br><span class="line">  &#125;</span><br><span class="line">  cout &lt;&lt; ans &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">  <span class="comment">// cout&lt;&lt;d&lt;&lt;&#x27; &#x27;&lt;&lt;dx&lt;&lt;&#x27;\n&#x27;;</span></span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>    </div></div><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;项目和啥软比赛都要dll了。&lt;/p&gt;</summary>
    
    
    
    
    <category term="牛客多校" scheme="https://blog.syh521.cn/tags/%E7%89%9B%E5%AE%A2%E5%A4%9A%E6%A0%A1/"/>
    
  </entry>
  
  <entry>
    <title>2023牛客多校第三场</title>
    <link href="https://blog.syh521.cn/2023/07/26/Contest-nowcoder2023-03/"/>
    <id>https://blog.syh521.cn/2023/07/26/Contest-nowcoder2023-03/</id>
    <published>2023-07-26T02:04:14.000Z</published>
    <updated>2026-04-27T12:54:17.923Z</updated>
    
    <content type="html"><![CDATA[<p>又忙又菜..</p><span id="more"></span><h1 id="A-World-Fragments-I"><a href="#A-World-Fragments-I" class="headerlink" title="A. World Fragments I"></a>A. World Fragments I</h1><p>读两个二进制数，输出差的绝对值</p><h1 id="D-Ama-no-Jaku"><a href="#D-Ama-no-Jaku" class="headerlink" title="D. Ama no Jaku"></a>D. Ama no Jaku</h1><p>考虑第一列，如果有0有1，那么$\min(r_i)&lt;\max(c_i)$势必成立，就寄了，于是每一列要么全0要么全1</p><p>然后考虑每行的状态，不难发现每列要么全0或全1的情况下整个矩阵都得是0或1</p><p>于是行和列的状态都只能有两种：第一行（列）和它的反转状态，然后$n^2$枚举一下答案即可</p><div class='fold collapsed'>    <div class='fold-title'>        code    </div>    <div class='fold-content'>        <figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="meta">#<span class="keyword">ifdef</span> LOCAL</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;algo/debug.h&quot;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">else</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> debug(...) 114514</span></span><br><span class="line"><span class="meta">#<span class="keyword">endif</span></span></span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">solve</span><span class="params">(vector&lt;string&gt;&amp;v)</span></span>&#123;</span><br><span class="line">  <span class="type">int</span> t1=<span class="number">1</span>,t2=<span class="number">0</span>;</span><br><span class="line">  <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;n;++i)&#123;</span><br><span class="line">    <span class="keyword">if</span>(v[i]==v[<span class="number">0</span>])t1++;</span><br><span class="line">    <span class="keyword">else</span>&#123;</span><br><span class="line">      <span class="type">int</span> tag=<span class="number">1</span>;</span><br><span class="line">      <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j&lt;n;++j)</span><br><span class="line">        <span class="keyword">if</span>(v[i][j]==v[<span class="number">0</span>][j])</span><br><span class="line">          tag=<span class="number">0</span>;</span><br><span class="line">      <span class="keyword">if</span>(tag)</span><br><span class="line">        t2++;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">if</span>(t1+t2!=n)&#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="type">int</span> tot=<span class="number">0</span>;</span><br><span class="line">  <span class="keyword">for</span>(<span class="type">char</span> c:v[<span class="number">0</span>])<span class="keyword">if</span>(c==<span class="string">&#x27;1&#x27;</span>)tot++;</span><br><span class="line">  <span class="type">int</span> ans = <span class="built_in">min</span>(t1, t2) + <span class="built_in">min</span>(n - tot, tot);</span><br><span class="line">  <span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">  cin&gt;&gt;n;</span><br><span class="line">  vector&lt;string&gt;<span class="built_in">v</span>(n);</span><br><span class="line">  <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;++i)</span><br><span class="line">    cin&gt;&gt;v[i];</span><br><span class="line">  <span class="built_in">debug</span>(v);</span><br><span class="line">  vector&lt;string&gt;_v;</span><br><span class="line">  <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j&lt;n;++j)&#123;</span><br><span class="line">    string tem=<span class="string">&quot;&quot;</span>;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;++i)</span><br><span class="line">      tem+=v[i][j];</span><br><span class="line">    _v.<span class="built_in">push_back</span>(tem);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="built_in">debug</span>(_v);</span><br><span class="line">  <span class="type">int</span> ans=<span class="built_in">solve</span>(v);</span><br><span class="line">  <span class="keyword">if</span>(ans==<span class="number">-1</span>)&#123;</span><br><span class="line">    cout&lt;&lt;<span class="string">&quot;-1\n&quot;</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">  &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">    <span class="built_in">debug</span>(ans);</span><br><span class="line">    ans=<span class="built_in">min</span>(ans,<span class="built_in">solve</span>(_v));</span><br><span class="line">    cout&lt;&lt;ans&lt;&lt;<span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>    </div></div><h1 id="H-Until-the-Blue-Moon-Rises"><a href="#H-Until-the-Blue-Moon-Rises" class="headerlink" title="H. Until the Blue Moon Rises"></a>H. Until the Blue Moon Rises</h1><p>比赛的时候傻逼无比的拍了个递归上去，然后没发现，偏偏牛客把Tle也当Wa，贡献了n发罚时</p><p>用哥猜当结论分类讨论一下即可。</p><div class='fold collapsed'>    <div class='fold-title'>        code    </div>    <div class='fold-content'>        <figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="meta">#<span class="keyword">ifdef</span> LOCAL</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;algo/debug.h&quot;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">else</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> dbg(...) 42</span></span><br><span class="line"><span class="meta">#<span class="keyword">endif</span></span></span><br><span class="line"><span class="keyword">using</span> ll = <span class="type">long</span> <span class="type">long</span>;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">check</span><span class="params">(ll k)</span> </span>&#123;</span><br><span class="line">  <span class="keyword">if</span> (k == <span class="number">1</span>)</span><br><span class="line">    <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">2</span>; i * i &lt;= k; ++i)</span><br><span class="line">    <span class="keyword">if</span> (k % i == <span class="number">0</span>)</span><br><span class="line">      <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">  <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="type">int</span> n;</span><br><span class="line">  ll m = <span class="number">0</span>;</span><br><span class="line">  cin &gt;&gt; n;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; ++i) &#123;</span><br><span class="line">    <span class="type">int</span> tem;</span><br><span class="line">    cin &gt;&gt; tem;</span><br><span class="line">    m += tem;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">if</span> (n == <span class="number">1</span>) &#123;</span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">check</span>(m))</span><br><span class="line">      cout &lt;&lt; <span class="string">&quot;Yes&quot;</span>;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">      cout &lt;&lt; <span class="string">&quot;No&quot;</span>;</span><br><span class="line">  &#125; <span class="keyword">else</span> <span class="keyword">if</span> (n == <span class="number">2</span>) &#123;</span><br><span class="line">    <span class="keyword">if</span> (m &lt; n * <span class="number">2</span>)</span><br><span class="line">      cout &lt;&lt; <span class="string">&quot;No&quot;</span>;</span><br><span class="line">    <span class="keyword">else</span> &#123;</span><br><span class="line">      <span class="keyword">if</span> (m % <span class="number">2</span> == <span class="number">0</span> || <span class="built_in">check</span>(m - <span class="number">2</span>))</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Yes&quot;</span>;</span><br><span class="line">      <span class="keyword">else</span></span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;No&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">    <span class="keyword">if</span> (m &lt; n * <span class="number">2</span>)</span><br><span class="line">      cout &lt;&lt; <span class="string">&quot;No&quot;</span>;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">      cout &lt;&lt; <span class="string">&quot;Yes&quot;</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>    </div></div><h1 id="J-Fine-Logic"><a href="#J-Fine-Logic" class="headerlink" title="J. Fine Logic"></a>J. Fine Logic</h1><p>比赛的时候有个高手一直不明白什么是minimal number，我不说是谁</p><p>考虑拓扑，如果是 $DAG$ 就 $k&#x3D;1$ 然后输出，否则搞一个排序和反排序，保证所有的环都在其中</p><div class='fold collapsed'>    <div class='fold-title'>        code    </div>    <div class='fold-content'>        <figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="meta">#<span class="keyword">ifdef</span> LOCAL</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;algo/debug.h&quot;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">else</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> debug(...) 42</span></span><br><span class="line"><span class="meta">#<span class="keyword">endif</span></span></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="type">int</span> n, m;</span><br><span class="line">  cin &gt;&gt; n &gt;&gt; m;</span><br><span class="line">  vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">adj</span>(n + <span class="number">1</span>);</span><br><span class="line">  <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">in</span><span class="params">(n + <span class="number">1</span>, <span class="number">0</span>)</span></span>;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= m; ++i) &#123;</span><br><span class="line">    <span class="type">int</span> u, v;</span><br><span class="line">    cin &gt;&gt; u &gt;&gt; v;</span><br><span class="line">    in[v]++;</span><br><span class="line">    adj[u].<span class="built_in">push_back</span>(v);</span><br><span class="line">  &#125;</span><br><span class="line">  set&lt;<span class="type">int</span>&gt; q;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; ++i) &#123;</span><br><span class="line">    <span class="keyword">if</span> (in[i] == <span class="number">0</span>)</span><br><span class="line">      q.<span class="built_in">insert</span>(i);</span><br><span class="line">  &#125;</span><br><span class="line">  vector&lt;<span class="type">int</span>&gt; ans&#123;&#125;;</span><br><span class="line">  <span class="keyword">while</span> (!q.<span class="built_in">empty</span>()) &#123;</span><br><span class="line">    <span class="type">int</span> u = *q.<span class="built_in">begin</span>();</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> v : adj[u]) &#123;</span><br><span class="line">      <span class="keyword">if</span> (--in[v] == <span class="number">0</span>)</span><br><span class="line">        q.<span class="built_in">insert</span>(v);</span><br><span class="line">    &#125;</span><br><span class="line">    ans.<span class="built_in">push_back</span>(u);</span><br><span class="line">    q.<span class="built_in">erase</span>(u);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">if</span> (ans.<span class="built_in">size</span>() == n) &#123;</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;1\n&quot;</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i : ans)</span><br><span class="line">      cout &lt;&lt; i &lt;&lt; <span class="string">&#x27; &#x27;</span>;</span><br><span class="line">  &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;2\n&quot;</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; ++i)</span><br><span class="line">      cout &lt;&lt; i &lt;&lt; <span class="string">&quot; \n&quot;</span>[i == n];</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = n; i &gt;= <span class="number">1</span>; --i)</span><br><span class="line">      cout &lt;&lt; i &lt;&lt; <span class="string">&quot; \n&quot;</span>[i == <span class="number">1</span>];</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>    </div></div><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;又忙又菜..&lt;/p&gt;</summary>
    
    
    
    
    <category term="牛客多校" scheme="https://blog.syh521.cn/tags/%E7%89%9B%E5%AE%A2%E5%A4%9A%E6%A0%A1/"/>
    
  </entry>
  
  <entry>
    <title>关于ICPC、作弊现象、训练态度的一点思考</title>
    <link href="https://blog.syh521.cn/2023/06/08/Fix-SayItOrNot/"/>
    <id>https://blog.syh521.cn/2023/06/08/Fix-SayItOrNot/</id>
    <published>2023-06-08T18:36:21.000Z</published>
    <updated>2026-04-27T12:54:17.924Z</updated>
    
    <content type="html"><![CDATA[<p>随便写写，不要当真</p><span id="more"></span><h1 id="前情提要"><a href="#前情提要" class="headerlink" title="前情提要"></a>前情提要</h1><p>半夜刷知乎，本来是在看条宝点赞的瑟瑟内容，结果看到了没坤坤ylq点赞的信号。进他主页看了看，没想到他赞同了<a href="https://www.zhihu.com/question/592532565/answer/2961072418">这个回答</a>。</p><p>刷了一下其中的评论，看到有人提出了合乎常理但稚嫩的想法，忍了好几次，还是没忍住写点什么，因为感觉大部分人了解的都不够多，不喜欢看到他们被这么引导，起码得先知道一些真相再说。</p><h1 id="正文部分"><a href="#正文部分" class="headerlink" title="正文部分"></a>正文部分</h1><p>知乎看这个回答时给人的回复，留一个备份</p><img src="/2023/06/08/Fix-SayItOrNot/1.png" class="" title="[截图1]"><img src="/2023/06/08/Fix-SayItOrNot/2.png" class="" title="[截图2]"><p>这篇文章中充斥着很浓厚的辩论气息。在真实的内容中杂糅了很多心理描写、个人揣测、各种一句话的总结、格言什么的，这是我看的最不舒服的一点。</p><p>首先你得搞明白，你说的向icpc举报这件事，有没有人做过，又是什么样的结果。真要较真牵涉到很大量、还不一定留得下证据的历史。可以去查“ICPC银川赛站NXIST“的微博，看他冠冕堂皇发的”通知“，也可以去了解一下“icpc亚洲第一训练委员会“，”亚洲训练联盟“，这几个名词，以及几个人的名字，去搜一搜。我没有花很多时间在了解这些，但是网上搜很难了解到全貌（我没有搞明白怎么做到这一步的，只觉得混乱），只能从原来的经历者口中得知（还得是当时关注这些事的人）。</p><p>我觉得多知道一些真相是好的，个人角度来看抵制宁理赛事参赛选手是不成熟的做法，只有这种盲目相信“矫枉必须过正”的蠢人才会采取这种行动。这个事的根本原因不在于参赛的人，想要混奖的人就算没有这个比赛，能混的也多了去了。然而为什么宁理能够办起来，是在于找不到一个能够明确阻止他的“官方”。我没有找到，也不愿意花时间继续了解，因为了解了也改变不了什么。反正ICPC Aisa EC委员会是没有表过态进行抵制或者阻止，而宁理的文件中却说得到了授权。再考虑到其中的一些人，yjs都一再回避（譬如之前不知道在哪里看到过，最新的那个github证据放出来之后，yjs解散不知道什么群的截图）。当然，他们的表面功夫还是很熟练的，可以参考这个 如何评价2021年ICPC银川赛区RCD俞经善发布给EC竞赛委员会的道歉信内容？</p><p>在了解一些历史之后重新审视，我觉得处理事后的参赛学生实在不妥，不能说是避重就轻，甚至是在将宁理事件高举轻放，试图用处理选手来了结，处理的还是之后参赛的选手，明明本该是被团结的对象。取消奖项也好，抵制宁理也好，这都是合理且必要的做法。</p><p>唯独不给之后有参赛经历的学生工作面试机会，直接标记为一个“劣迹的人”，太荒唐了。。。。另一方面可以说是在扼杀西部地区学生参与竞赛的可能性（西部赛因为宁理也烂了，但他妈的总不能真打个蓝桥杯天梯赛就到头了吧）。荒唐到和文章之前的“理性思维”相矛盾，所以我甚至怀疑他是不是在抛出一个暴论来围魏救赵。</p><p>另外，还有一个好玩的事情，你可以查询一下本文作者，《西安工业大学 学生代表》的历史战绩。board.xcpcio.com&#x2F; 这里可以查。 当然，不要查太新的，看2022年的网络预选赛即可[爱]。然后建议再思考一下，如果是一个外行（或者精致的伪内行）说这些话，以及一个辛苦训练了几年的内行说这些话，会不会有什么感官上的不同，毕竟他也说了要结合大家的意志嘛。</p><p>每次看到这篇文章，或者身边的人赞同，都憋了回去，还是稍微认真整理了一下，发出这段话，被删的话也无所谓了，哥们自己只想好好训练，暑假好好打完多校，下半年打出成绩（来个铜牌靠前或者银吧），让自己开心，老师、父母觉得不错就可以了。</p><p>打icpc肯定会听说宁夏理工，但是牵涉的复杂的事、人有很多。我也只是网上搜了点东西，主要消息来自知乎上亲历者、委员会成员、各大比赛里比较有话语权的元老的回答，cjb，p大乌老师，开心小陀螺等大佬。。 然后网上搜了点尚且保存的消息作为佐证。</p><p>如果我这里的内容都看的一头雾水，感觉也没有必要深入了解进去。作为一个选手，我只希望这样的闹剧能少出现，大家都安安心心训练做题，打好相对高水平的算法竞赛。</p><p>如果你是萌新，只要记住一些普遍使用的原则，不要作弊，兼听则明，多见识高水平的选手、题目、代码、讲课，不被腌臢的形式、阴暗的内幕，糟糕的场次所影响心态，空耗时间，保持热爱。</p><h1 id="upd"><a href="#upd" class="headerlink" title="upd"></a>upd</h1><p>2023.10.14 网络赛已经结束很久了。第一场因为有人用翻译，整个学校取消成绩，第二场写了四题，最后一点时间冲第五题的时候傻逼志愿者跑来和我说有人用翻译（不知道他为什么要这么干），当时心态炸了没稳住，本来可能写五题还有点机会打到名额。不过只有一场也不太可能，按照那个排名规则，第一场没成绩，第二场起码打到校排75，就算5题罚时也太高了；</p><p>归根结底还是自己菜，训练浮夸，暑假干这个干那个，结果还是玩游戏，acm没打好项目也没做好，没什么好说的，走一步看一步吧。。</p><h1 id="upd-1"><a href="#upd-1" class="headerlink" title="upd"></a>upd</h1><p>2025.9.21</p><p>重新再看到还是很愤怒，尤其是他说处理涉事学生正是为了针对学校的时候，只有脱产的学生才有这么愚蠢的想法。</p><p>学生和学校究竟是有利益冲突还是沆瀣一气都分不清楚。为了维护环境不是给西部的学生提供一个更好的方案，而是直接把他们拒之门外。真是可笑。</p><p>对宁理喷的这么狠，词藻之华丽不知道的还以为在歌颂自己多么伟大的功绩，实际上宁理的最大的两个问题都闭口不谈：1. 为什么题目质量烂。2. 为什么这学校作弊没人管</p><p>一昧上升高度，最后得出一个干掉学生就是解决源头的结论。你怎么不说直接把人杀了出一个终产者资源利用率100%呢。</p><p>有这个抵制学生的劲头，给一个好的学校，例如兰大的校队和教练去众筹题目和经费，让良币能够被看见不可以吗。兰大这几年的金牌是看不见瞎了还是他也掌握了兰大的作弊把柄？</p><p>人家真想为环境做点事，办了CCPC省赛。赛场的人力物力，校队队长花心力出一套好题，再去教育厅争取证书。哪一件事是随随便便就做成了的？</p><p>水平废物还摆不清定位的人却在舆论的高地指指点点。</p><p>不团结可以团结的伙伴，挥刀向弱者。</p><p>到头来一句，反正没人管，你有本事你给方法，我就要这样。</p><p>这种愚昧的坚定和假把式的开放包容是真的让人怒火滔天，事实上和宁理那帮畜生没有区别，谁没有难处，宁理都能有难处，到头来居然是去解决西部的学生。</p><p>怎么着，苦苦学生骂名你来担？赵贞吉说这种b话因为他知道他的利益来自皇帝，就算嘴上冠冕堂皇，内在的利益逻辑是自洽的。</p><p>生动诠释了坏人的绞尽脑汁不如蠢人的灵机一动。</p><p>就和社保一样，把工资低了的踢了拉高基数，但是灵活就业的社保又要照样交，不觉得良心有愧就算了，还嫌供养者们素质低，应该滚蛋，到时候别来分钱。</p><p>所谓的破坏保研&#x2F;就业市场，不怨土壤不怨自己怨对手，懦弱到了极点。</p><p>自己享受着什么条件都不知道，身在西安的大学我说一句吃里扒外都不为过。网络赛打了个2题之后就没参与了。</p><p>菜成这样其实连参加邀请赛、区域赛都浪费名额。来操心什么icpc的未来，搞不搞笑。</p><p>用最恶意的角度揣摩：实上对打一场高质量的比赛根本就不上心，单纯只是对这种权威、“正义”的迷恋。</p><p>西部的学生承受着落后的条件，明明是命运安排的无奈选择，结果被这种人说成是“想混个奖”，那人家想向上有错吗，抛开转移支付不谈都没有资格来贬低，明明是人人平等的事情。</p><p>更别说西部还要被吸的这么狠。自己还在西安上大学也享受了这边的各种资源。</p><p>以前我身在山中看不清，现在我可以回答当初定的文件名，Fix-SayItOrNot.md</p><p>我要说出来，我要讲述事实，我要站在一个感受过东西部差异的人、一个在杭州高中参加过竞赛，在西部弱校本科曾经努力过，一个在网络赛最终表现出能打到名额的水平的人，讲述我所知道的事实。</p><link rel="stylesheet" href="/css/folder.css" type="text/css"><script src="/js/folder.js" type="text/javascript" async></script>]]></content>
    
    
    <summary type="html">&lt;p&gt;随便写写，不要当真&lt;/p&gt;</summary>
    
    
    
    <category term="杂谈" scheme="https://blog.syh521.cn/categories/%E6%9D%82%E8%B0%88/"/>
    
    
    <category term="想法" scheme="https://blog.syh521.cn/tags/%E6%83%B3%E6%B3%95/"/>
    
  </entry>
  
</feed>
