<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>sxr1023's Blog</title>
    <link>https://sxr.wsq127.top/</link>
    <description>一路寒风身如絮，命海沉浮客独行</description>
    <language>zh-CN</language>
    <copyright>All rights reserved 2026, sxr1023</copyright>
    <lastBuildDate>Wed, 05 Aug 2026 01:07:58 GMT</lastBuildDate>
    <generator>Hexo</generator>
    <atom:link href="https://sxr.wsq127.top/rss2.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>如何给博客快速添加封面</title>
      <link>https://sxr.wsq127.top/posts/32f89082/</link>
      <description>封面？找图 + 图床！</description>
      <author>sxr1023</author>
      <category domain="https://sxr.wsq127.top/categories/%E5%8D%9A%E5%AE%A2%E7%9B%B8%E5%85%B3/">博客相关</category>
      <category domain="https://sxr.wsq127.top/tags/Hexo/">Hexo</category>
      <category domain="https://sxr.wsq127.top/tags/%E5%B0%81%E9%9D%A2/">封面</category>
      <category domain="https://sxr.wsq127.top/tags/%E5%9B%BE%E5%BA%8A/">图床</category>
      <pubDate>Wed, 29 Jul 2026 09:48:14 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h2 id="开始之前"><a href="#开始之前" class="headerlink" title="开始之前"></a>开始之前</h2><p>博客封面，自古各大站长一大难题。</p><p>主要就两类——自己做，网上找。像洪佬他们就是自己做的，科技感满满，整齐划一，显得很正式。</p><p>具体可参考</p><a class="tag-Link" target="_blank" href="https://blog.zhheo.com/p/463d306b.html">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=blog.zhheo.com/p/463d306b.html);"></div>        <div class="tag-link-right">            <div class="tag-link-title">博客文章封面的变迁，我是如何制作博客封面的</div>            <div class="tag-link-sitename">张洪Heo</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>那像我们这种懒人，用这种方法肯定是太过于浪费时间的，于是，只能选择第二种方法——网上找。</p><h2 id="图片选择"><a href="#图片选择" class="headerlink" title="图片选择"></a>图片选择</h2><p>这里推荐极简壁纸，无广告，图像质量也不错，没有水印。</p><a class="tag-Link" target="_blank" href="https://bizhi1.com/">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=bizhi1.com/);"></div>        <div class="tag-link-right">            <div class="tag-link-title">极简壁纸 - 专注超高清壁纸无水印下载</div>            <div class="tag-link-sitename">极简壁纸</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>至于登录才能下载这个玩意，纯扯淡，直接 F12 找图片地址，然后下载就行。</p><p>这种办法不错，高效还能快速查找，但是总不能直接就用这个网址吧，还是说你打算用你电脑上的链接的？<del>真就是“长大了我要买一台能看到别人电脑上的图片的电脑”</del></p><p>所以，要用图床。</p><h2 id="为什么使用"><a href="#为什么使用" class="headerlink" title="为什么使用"></a>为什么使用</h2><p>网上说用 GitLab 的，我一注册账号发现好像是有免费时间限制的，吓我的放弃了。</p><p>如果你不在乎免费时间限制的话，GitLab 的确是比 Github更好的选择，尤其是在访问速度这一点。</p><p>但是，向我们这种小个体，大部分博客还是写给自己的，没必要。直接用 Github，改一下 CDN 就行了。</p><h2 id="使用教程"><a href="#使用教程" class="headerlink" title="使用教程"></a>使用教程</h2><p>太多了懒得搬教程了，我自己写也不会比这个更好，直接下面这个链接吧。</p><a class="tag-Link" target="_blank" href="https://zhuanlan.zhihu.com/p/489236769">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=zhuanlan.zhihu.com/p/489236769);"></div>        <div class="tag-link-right">            <div class="tag-link-title">使用Github+picGo搭建图床，保姆级教程来了</div>            <div class="tag-link-sitename">知乎</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a>]]>
      </content:encoded>
    </item>
    <item>
      <title>butterfly标签外挂美化</title>
      <link>https://sxr.wsq127.top/posts/c3ed160d/</link>
      <description>改造 Butterfly 各类外挂标签样式，修补分栏 bug，自制外链卡片与精致美化提示块</description>
      <author>sxr1023</author>
      <category domain="https://sxr.wsq127.top/categories/%E5%8D%9A%E5%AE%A2%E7%9B%B8%E5%85%B3/">博客相关</category>
      <category domain="https://sxr.wsq127.top/tags/Hexo/">Hexo</category>
      <category domain="https://sxr.wsq127.top/tags/Butterfly%E7%BE%8E%E5%8C%96/">Butterfly美化</category>
      <pubDate>Sun, 26 Jul 2026 20:21:58 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>美化的时候需要修改网站的源文件、添加样式、js之类的，需要一点基础，可以参考</p><a class="tag-Link" target="_blank" href="http://sxr.wsq127.top/posts/e550f258/">    <div class="tag-link-tips">🏠 站内链接，放心访问</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://cdn.jsdmirror.com/gh/sxr1023/BlogImage/img/avatar2.webp);"></div>        <div class="tag-link-right">            <div class="tag-link-title">Hexo博客美化前置教程</div>            <div class="tag-link-sitename">sxr1023’s Blog</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h2 id="常用标签外挂效果"><a href="#常用标签外挂效果" class="headerlink" title="常用标签外挂效果"></a>常用标签外挂效果</h2><div class="note note-info ">    <div class="note-header">      <i class="note-icon iconfont icon-info"></i>      <span class="note-title">提示</span>    </div>    <div class="note-content"><p>个人博客下面的效果使用频率较高，还有一个引用链接的标签外挂，放在分栏里面会有 bug，不能正常显示，可以直接看博客的实例效果。</p><p>对了，我说的常用标签外挂效果是包括这个分栏的，分栏的代码也在示例源码里面。</p></div>  </div><div class="tabs" id="tab1"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="tab1-1">样式预览</button><button type="button" class="tab " data-href="tab1-2">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content active" id="tab1-1"><details class="folding-tag" cyan><summary> 这是一个折叠框 </summary>              <div class='content'>              <p>这是一个默认关闭的折叠框。</p>              </div>            </details><div class="note note-default ">    <div class="note-header">      <i class="note-icon iconfont icon-right"></i>      <span class="note-title">default标签</span>    </div>    <div class="note-content"><p>default 提示块标签</p></div>  </div><div class="note note-primary ">    <div class="note-header">      <i class="note-icon iconfont icon-plus"></i>      <span class="note-title">primary标签</span>    </div>    <div class="note-content"><p>primary 提示块标签</p></div>  </div><div class="note note-success ">    <div class="note-header">      <i class="note-icon fa-regular fa-circle-check"></i>      <span class="note-title">success标签</span>    </div>    <div class="note-content"><p>success 提示块标签</p></div>  </div><div class="note note-info ">    <div class="note-header">      <i class="note-icon iconfont icon-info"></i>      <span class="note-title">info标签</span>    </div>    <div class="note-content"><p>info 提示块标签</p></div>  </div><div class="note note-warning ">    <div class="note-header">      <i class="note-icon fa-regular fa-circle-dot"></i>      <span class="note-title">warning标签</span>    </div>    <div class="note-content"><p>warning 提示块标签</p></div>  </div><div class="note note-danger ">    <div class="note-header">      <i class="note-icon fa-regular fa-circle-xmark"></i>      <span class="note-title">danger标签</span>    </div>    <div class="note-content"><p>danger 提示块标签</p></div>  </div></div><div class="tab-item-content" id="tab1-2"><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">&#123;% tabs tab1 %&#125;</span><br><span class="line">&lt;!-- tab 演示预览 --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% folding cyan, 这是一个折叠框 %&#125;</span><br><span class="line"></span><br><span class="line">这是一个默认关闭的折叠框。</span><br><span class="line"></span><br><span class="line">&#123;% endfolding %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% note default default标签 %&#125;default 提示块标签&#123;% endnote %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% note primary primary标签 %&#125;primary 提示块标签&#123;% endnote %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% note success success标签 %&#125;success 提示块标签&#123;% endnote %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% note info info标签 %&#125;info 提示块标签&#123;% endnote %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% note warning warning标签 %&#125;warning 提示块标签&#123;% endnote %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% note danger danger标签 %&#125;danger 提示块标签&#123;% endnote %&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab 示例源码 --&gt;</span><br><span class="line">......（这里就是复制源码的，再写就套娃了）</span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtabs %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><a class="tag-Link" target="_blank" href="https://akilar.top/posts/615e2dec/">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=akilar.top/posts/615e2dec/);"></div>        <div class="tag-link-right">            <div class="tag-link-title">Tag Plugins Plus</div>            <div class="tag-link-sitename">akilarの糖果屋</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><a class="tag-Link" target="_blank" href="https://blog.zhheo.com/p/ccaf9148.html">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=blog.zhheo.com/p/ccaf9148.html);"></div>        <div class="tag-link-right">            <div class="tag-link-title">Hexo的Butterfly魔改教程：网址卡片外置标签</div>            <div class="tag-link-sitename">张洪Heo</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><a class="tag-Link" target="_blank" href="https://blog.liushen.fun/posts/6010fc85/">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=blog.liushen.fun/posts/6010fc85/);"></div>        <div class="tag-link-right">            <div class="tag-link-title">魔改笔记八：外挂标签及侧边栏美化</div>            <div class="tag-link-sitename">LiuShen’s Blog</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h2 id="基础标签外挂"><a href="#基础标签外挂" class="headerlink" title="基础标签外挂"></a>基础标签外挂</h2><div class="tabs" id="tab2"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="tab2-1">安装</button><button type="button" class="tab " data-href="tab2-2">使用</button><button type="button" class="tab " data-href="tab2-3">美化</button></ul><div class="tab-contents"><div class="tab-item-content active" id="tab2-1"><p>在博客根目录 <code>[blogRoot]</code> 打开 git bash，运行以下指令<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-butterfly-tag-plugins-plus --save</span><br></pre></td></tr></table></figure><br>考虑到 hexo 自带的 markdown 渲染插件 <code>hexo-renderer-marked</code> 与标签外挂语法的兼容性较差，建议您将其替换成 <code>hexo-renderer-kramed</code><br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">npm uninstall hexo-renderer-marked --save</span><br><span class="line">npm install hexo-renderer-kramed --save</span><br></pre></td></tr></table></figure><br>添加配置信息，以下为写法示例<br>在站点配置文件 <code>_config.yml</code> 或者主题配置文件 <code>_config.butterfly.yml</code> 中添加<br><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># tag-plugins-plus</span></span><br><span class="line"><span class="comment"># see https://akilar.top/posts/615e2dec/</span></span><br><span class="line"><span class="attr">tag_plugins:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span> <span class="comment"># 开关</span></span><br><span class="line">  <span class="attr">priority:</span> <span class="number">5</span> <span class="comment">#过滤器优先权</span></span><br><span class="line">  <span class="attr">issues:</span> <span class="literal">false</span> <span class="comment">#issues标签依赖注入开关</span></span><br><span class="line">  <span class="attr">link:</span></span><br><span class="line">    <span class="attr">placeholder:</span> <span class="string">/img/link.png</span> <span class="comment">#link_card标签默认的图标图片</span></span><br><span class="line">  <span class="attr">CDN:</span></span><br><span class="line">    <span class="attr">anima:</span> <span class="string">https://npm.elemecdn.com/hexo-butterfly-tag-plugins-plus@latest/lib/assets/font-awesome-animation.min.css</span> <span class="comment">#动画标签anima的依赖</span></span><br><span class="line">    <span class="attr">jquery:</span> <span class="string">https://npm.elemecdn.com/jquery@latest/dist/jquery.min.js</span> <span class="comment">#issues标签依赖</span></span><br><span class="line">    <span class="attr">issues:</span> <span class="string">https://npm.elemecdn.com/hexo-butterfly-tag-plugins-plus@latest/lib/assets/issues.js</span> <span class="comment">#issues标签依赖</span></span><br><span class="line">    <span class="attr">iconfont:</span> <span class="string">//at.alicdn.com/t/font_2032782_8d5kxvn09md.js</span> <span class="comment">#参看https://akilar.top/posts/d2ebecef/</span></span><br><span class="line">    <span class="attr">carousel:</span> <span class="string">https://npm.elemecdn.com/hexo-butterfly-tag-plugins-plus@latest/lib/assets/carousel-touch.js</span></span><br><span class="line">    <span class="attr">tag_plugins_css:</span> <span class="string">https://npm.elemecdn.com/hexo-butterfly-tag-plugins-plus@latest/lib/tag_plugins.css</span></span><br></pre></td></tr></table></figure><br>具体参数意义可看参考链接的第一项里面的内容。</p></div><div class="tab-item-content" id="tab2-2"><p>直接在 markdown 文件里面使用即可，大部分会类似于 <code>{ % 函数名 参数A1 参数A2,参数B... % }</code> 的形式，再不然就是 <code>{ % 函数名 参数A1 参数A2,参数B... % }一堆文字{ % end+函数名 % }</code> 的形式（这里百分号和大括号之间空格，防止渲染问题，正常是不需要的）。 </p><p>具体使用方法详见参考链接的第一项。</p></div><div class="tab-item-content" id="tab2-3"><p>原样式，尤其是分栏框的样式着实惨不忍睹，于是要进行美化。</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/*折叠框美化*/</span></span><br><span class="line"><span class="selector-tag">details</span><span class="selector-attr">[open]</span> &gt; <span class="selector-tag">div</span><span class="selector-class">.content</span> &#123;</span><br><span class="line">    <span class="attribute">background</span>: <span class="built_in">var</span>(--theme-color-green) <span class="meta">!important</span>;</span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">10px</span>;</span><br><span class="line">    <span class="attribute">border-top-right-radius</span>: <span class="number">0px</span> <span class="meta">!important</span>;</span><br><span class="line">    <span class="attribute">border-top-left-radius</span>: <span class="number">0px</span> <span class="meta">!important</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-tag">details</span><span class="selector-class">.folding-tag</span> <span class="selector-tag">summary</span> &#123;</span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">10px</span> <span class="meta">!important</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-tag">details</span><span class="selector-class">.folding-tag</span> &#123;</span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">10px</span> <span class="meta">!important</span>;</span><br><span class="line">    <span class="attribute">border</span>: <span class="number">1px</span> solid <span class="built_in">rgba</span>(<span class="number">27</span>, <span class="number">205</span>, <span class="number">252</span>, <span class="number">0.3</span>) <span class="meta">!important</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-tag">details</span><span class="selector-class">.folding-tag</span><span class="selector-attr">[open]</span> <span class="selector-tag">summary</span> &#123;</span><br><span class="line">    <span class="attribute">border-bottom-right-radius</span>: <span class="number">0px</span> <span class="meta">!important</span>;</span><br><span class="line">    <span class="attribute">border-bottom-left-radius</span>: <span class="number">0px</span> <span class="meta">!important</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-tag">details</span><span class="selector-class">.folding-tag</span><span class="selector-attr">[cyan]</span> &gt; <span class="selector-tag">summary</span> &#123;</span><br><span class="line">    <span class="attribute">background</span>: <span class="built_in">var</span>(--button-dark-color) <span class="meta">!important</span>;</span><br><span class="line">    <span class="attribute">color</span>: <span class="built_in">var</span>(--text-color) <span class="meta">!important</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">/*因为cyan的配色与本站样式相符，因此着重美化了cyan的样式，其他的可以类似进行修改*/</span></span><br><span class="line"><span class="selector-attr">[data-theme=<span class="string">&quot;dark&quot;</span>]</span> <span class="selector-tag">details</span><span class="selector-class">.folding-tag</span><span class="selector-attr">[cyan]</span> &gt; <span class="selector-tag">summary</span><span class="selector-pseudo">::marker</span> &#123;</span><br><span class="line">    <span class="attribute">color</span>: <span class="number">#0F7D7F</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-attr">[data-theme=<span class="string">&quot;dark&quot;</span>]</span> <span class="selector-tag">details</span><span class="selector-class">.folding-tag</span><span class="selector-attr">[cyan]</span> &gt; <span class="selector-tag">summary</span><span class="selector-pseudo">:hover</span><span class="selector-pseudo">::marker</span>,</span><br><span class="line"><span class="selector-attr">[data-theme=<span class="string">&quot;dark&quot;</span>]</span> <span class="selector-tag">details</span><span class="selector-class">.folding-tag</span><span class="selector-attr">[open]</span><span class="selector-attr">[cyan]</span> &gt; <span class="selector-tag">summary</span><span class="selector-pseudo">::marker</span> &#123;</span><br><span class="line">    <span class="attribute">color</span>: <span class="number">#00C4B6</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-attr">[data-theme=<span class="string">&quot;light&quot;</span>]</span> <span class="selector-tag">details</span><span class="selector-class">.folding-tag</span><span class="selector-attr">[cyan]</span> &gt; <span class="selector-tag">summary</span><span class="selector-pseudo">::marker</span> &#123;</span><br><span class="line">    <span class="attribute">color</span>: <span class="number">#2E4964</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-attr">[data-theme=<span class="string">&quot;light&quot;</span>]</span> <span class="selector-tag">details</span><span class="selector-class">.folding-tag</span><span class="selector-attr">[cyan]</span> &gt; <span class="selector-tag">summary</span><span class="selector-pseudo">:hover</span><span class="selector-pseudo">::marker</span>,</span><br><span class="line"><span class="selector-attr">[data-theme=<span class="string">&quot;light&quot;</span>]</span> <span class="selector-tag">details</span><span class="selector-class">.folding-tag</span><span class="selector-attr">[open]</span><span class="selector-attr">[cyan]</span> &gt; <span class="selector-tag">summary</span><span class="selector-pseudo">::marker</span> &#123;</span><br><span class="line">    <span class="attribute">color</span>: <span class="number">#446484</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-tag">details</span><span class="selector-class">.folding-tag</span><span class="selector-attr">[cyan]</span> &gt; <span class="selector-tag">summary</span><span class="selector-pseudo">:hover</span> &#123;</span><br><span class="line">    <span class="attribute">background</span>: <span class="built_in">var</span>(--button-light-color) <span class="meta">!important</span>;</span><br><span class="line">    <span class="attribute">color</span>: <span class="built_in">var</span>(--text-color) <span class="meta">!important</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-tag">details</span><span class="selector-class">.folding-tag</span><span class="selector-attr">[open]</span><span class="selector-attr">[cyan]</span> &gt; <span class="selector-tag">summary</span> &#123;</span><br><span class="line">    <span class="attribute">background</span>: <span class="built_in">var</span>(--button-light-color) <span class="meta">!important</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-attr">[data-theme=<span class="string">&quot;dark&quot;</span>]</span> <span class="selector-tag">details</span><span class="selector-attr">[cyan]</span> &gt; <span class="selector-tag">summary</span> &#123;</span><br><span class="line">    <span class="attribute">filter</span>: <span class="built_in">brightness</span>(<span class="number">1</span>) <span class="meta">!important</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tabs</span> &#123;</span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">12px</span>;</span><br><span class="line">    <span class="attribute">overflow</span>: hidden;</span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">8px</span>;</span><br><span class="line">    <span class="attribute">background</span>: <span class="built_in">var</span>(--theme-color-green);</span><br><span class="line">    <span class="attribute">border</span>: <span class="number">2.5px</span> solid <span class="built_in">var</span>(--border-color) <span class="meta">!important</span>;</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">1rem</span> <span class="number">0px</span> <span class="meta">!important</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/*分栏美化*/</span></span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tabs</span> &gt; <span class="selector-class">.nav-tabs</span> &gt; <span class="selector-class">.tab</span><span class="selector-class">.active</span> &#123;</span><br><span class="line">    <span class="attribute">border-top</span>: transparent;</span><br><span class="line">    <span class="attribute">background</span>: <span class="built_in">var</span>(--button-light-color);</span><br><span class="line">    <span class="attribute">border</span>: transparent;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tabs</span> &gt; <span class="selector-class">.nav-tabs</span> &gt; <span class="selector-class">.tab</span><span class="selector-pseudo">:not</span>(<span class="selector-class">.active</span>) &#123;</span><br><span class="line">    <span class="attribute">background</span>: <span class="built_in">var</span>(--button-dark-color);</span><br><span class="line">    <span class="attribute">border</span>: transparent;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tabs</span> &gt; <span class="selector-class">.nav-tabs</span> &gt; <span class="selector-class">.tab</span><span class="selector-pseudo">:not</span>(<span class="selector-class">.active</span>)<span class="selector-pseudo">:hover</span> &#123;</span><br><span class="line">    <span class="attribute">background</span>: <span class="built_in">var</span>(--button-light-color);</span><br><span class="line">    <span class="attribute">border</span>: transparent;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tabs</span> &gt; <span class="selector-class">.nav-tabs</span> &#123;</span><br><span class="line">    <span class="attribute">display</span>: flex;</span><br><span class="line">    <span class="attribute">background</span>: <span class="built_in">var</span>(--theme-color-green);</span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">12px</span> <span class="number">16px</span>;</span><br><span class="line">    <span class="attribute">justify-content</span>: center;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tabs</span> &gt; <span class="selector-class">.nav-tabs</span> &gt; <span class="selector-class">.tab</span> &#123;</span><br><span class="line">    <span class="attribute">flex</span>: <span class="number">1</span>;</span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">8px</span> <span class="number">18px</span>;</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">8px</span>;</span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">8px</span>;</span><br><span class="line">    <span class="attribute">transition</span>:  all <span class="number">0.4s</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>这个玩意还有一堆奇奇怪怪的 bug，尤其是分栏。</p><ul><li>分栏不能用下文的引用外链的样式</li><li>分栏非默认的一栏不能正确处理代码块的折叠问题（超过限定行数不折叠）</li></ul><p>对于第一个问题暂时不知道怎么处理，有佬会的可以在评论区给出解决方案，欢迎讨论。</p><p>对于第二个问题，我的方案是加入如下的 js 代码（引入的时候需要加上 <code>data-pjax</code>）<br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/***切换分栏重新判断代码是否需要折叠 */</span></span><br><span class="line"><span class="variable language_">document</span>.<span class="title function_">addEventListener</span>(<span class="string">&#x27;pjax:complete&#x27;</span>, initTabCodeFold);</span><br><span class="line"><span class="variable language_">document</span>.<span class="title function_">addEventListener</span>(<span class="string">&#x27;DOMContentLoaded&#x27;</span>, initTabCodeFold);</span><br><span class="line"><span class="comment">// 监听Pjax完成跳转后重新初始化（关键修复点）</span></span><br><span class="line"><span class="variable language_">document</span>.<span class="title function_">addEventListener</span>(<span class="string">&#x27;pjax:complete&#x27;</span>, initTabCodeFold);</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">initTabCodeFold</span>(<span class="params"></span>) &#123;</span><br><span class="line">  <span class="comment">// 挂载重建方法</span></span><br><span class="line">  <span class="variable language_">window</span>.<span class="property">rebuildCodeHighlight</span> = <span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line">    <span class="keyword">if</span> (!<span class="variable language_">window</span>.<span class="property">refreshFn</span>) <span class="keyword">return</span>;</span><br><span class="line">    <span class="comment">// 全局清空旧按钮，防止堆叠边框</span></span><br><span class="line">    <span class="variable language_">document</span>.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;figure.highlight&#x27;</span>).<span class="title function_">forEach</span>(<span class="function"><span class="params">fig</span> =&gt;</span> &#123;</span><br><span class="line">      fig.<span class="title function_">querySelector</span>(<span class="string">&#x27;.highlight-tools&#x27;</span>)?.<span class="title function_">remove</span>()</span><br><span class="line">      fig.<span class="title function_">querySelector</span>(<span class="string">&#x27;.code-expand-btn&#x27;</span>)?.<span class="title function_">remove</span>()</span><br><span class="line">    &#125;)</span><br><span class="line">    <span class="variable language_">window</span>.<span class="title function_">refreshFn</span>()</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="variable language_">document</span>.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;.tab&#x27;</span>).<span class="title function_">forEach</span>(<span class="function"><span class="params">btn</span> =&gt;</span> &#123;</span><br><span class="line">    <span class="comment">// 先移除旧监听，防止多次绑定堆积</span></span><br><span class="line">    btn.<span class="title function_">removeEventListener</span>(<span class="string">&#x27;click&#x27;</span>, handleTabClick)</span><br><span class="line">    btn.<span class="title function_">addEventListener</span>(<span class="string">&#x27;click&#x27;</span>, handleTabClick)</span><br><span class="line">  &#125;)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 抽离点击处理函数，避免重复绑定</span></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">handleTabClick</span>(<span class="params"></span>) &#123;</span><br><span class="line">  <span class="built_in">setTimeout</span>(<span class="variable language_">window</span>.<span class="property">rebuildCodeHighlight</span>, <span class="number">220</span>)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h2 id="引用外链卡片"><a href="#引用外链卡片" class="headerlink" title="引用外链卡片"></a>引用外链卡片</h2><div class="note note-warning ">    <div class="note-header">      <i class="note-icon fa-regular fa-circle-dot"></i>      <span class="note-title">提示</span>    </div>    <div class="note-content"><p>引用外链卡片有一些 bug，在使用的时候最好上下空一行，然后如果需要引号最好用中文的引号，否则可能会出现渲染错误。</p></div>  </div><p>使用方法类似于</p><a class="tag-Link" target="_blank" href="https://www.baidu.com/">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.baidu.com/);"></div>        <div class="tag-link-right">            <div class="tag-link-title">百度一下，你就知道</div>            <div class="tag-link-sitename">百度</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><a class="tag-Link" target="_blank" href="http://sxr.wsq127.top/">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=sxr.wsq127.top/);"></div>        <div class="tag-link-right">            <div class="tag-link-title">sxr1023’s Blog</div>            <div class="tag-link-sitename">一路寒风身如絮，命海沉浮客独行</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;% link 百度一下，你就知道,百度,https://www.baidu.com/ %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% link sxr1023’s Blog,一路寒风身如絮，命海沉浮客独行,http://sxr.wsq127.top/ %&#125;</span><br></pre></td></tr></table></figure><p>新建文件 <code>[blogRoot]/themes/butterfly/scripts/tag/link.js</code></p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">link</span>(<span class="params">args</span>) &#123;</span><br><span class="line">    args = args.<span class="title function_">join</span>(<span class="string">&#x27; &#x27;</span>).<span class="title function_">split</span>(<span class="string">&#x27;,&#x27;</span>);</span><br><span class="line">    <span class="keyword">let</span> title = args[<span class="number">0</span>];</span><br><span class="line">    <span class="keyword">let</span> sitename = args[<span class="number">1</span>];</span><br><span class="line">    <span class="keyword">let</span> link = args[<span class="number">2</span>];</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 获取网页favicon</span></span><br><span class="line">    <span class="keyword">let</span> urlNoProtocol = link.<span class="title function_">replace</span>(<span class="regexp">/^https?\:\/\//i</span>, <span class="string">&quot;&quot;</span>);</span><br><span class="line">    <span class="keyword">let</span> imgUrl = <span class="string">&quot;https://icon.bqb.cool/?url=&quot;</span> + urlNoProtocol;</span><br><span class="line">    <span class="keyword">return</span> <span class="string">`&lt;a class=&quot;tag-Link&quot; target=&quot;_blank&quot; href=&quot;<span class="subst">$&#123;link&#125;</span>&quot;&gt;</span></span><br><span class="line"><span class="string">    &lt;div class=&quot;tag-link-tips&quot;&gt;🔗 引用站外地址，请注意甄别&lt;/div&gt;</span></span><br><span class="line"><span class="string">    &lt;div class=&quot;tag-link-bottom&quot;&gt;</span></span><br><span class="line"><span class="string">        &lt;div class=&quot;tag-link-left&quot; style=&quot;background-image: url(<span class="subst">$&#123;imgUrl&#125;</span>);&quot;&gt;&lt;/div&gt;</span></span><br><span class="line"><span class="string">        &lt;div class=&quot;tag-link-right&quot;&gt;</span></span><br><span class="line"><span class="string">            &lt;div class=&quot;tag-link-title&quot;&gt;<span class="subst">$&#123;title&#125;</span>&lt;/div&gt;</span></span><br><span class="line"><span class="string">            &lt;div class=&quot;tag-link-sitename&quot;&gt;<span class="subst">$&#123;sitename&#125;</span>&lt;/div&gt;</span></span><br><span class="line"><span class="string">        &lt;/div&gt;</span></span><br><span class="line"><span class="string">        &lt;i class=&quot;fa-solid fa-angle-right&quot;&gt;&lt;/i&gt;</span></span><br><span class="line"><span class="string">    &lt;/div&gt;</span></span><br><span class="line"><span class="string">    &lt;/a&gt;`</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">hexo.<span class="property">extend</span>.<span class="property">tag</span>.<span class="title function_">register</span>(<span class="string">&#x27;link&#x27;</span>,link, &#123; <span class="attr">ends</span>: <span class="literal">false</span> &#125;)</span><br><span class="line"></span><br><span class="line"><span class="comment">// 新增站内链接标签函数</span></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">innerlink</span>(<span class="params">args</span>) &#123;</span><br><span class="line">    args = args.<span class="title function_">join</span>(<span class="string">&#x27; &#x27;</span>).<span class="title function_">split</span>(<span class="string">&#x27;,&#x27;</span>);</span><br><span class="line">    <span class="keyword">let</span> title = args[<span class="number">0</span>];</span><br><span class="line">    <span class="keyword">let</span> sitename = args[<span class="number">1</span>];</span><br><span class="line">    <span class="keyword">let</span> link = args[<span class="number">2</span>];</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 获取网页favicon</span></span><br><span class="line">    <span class="keyword">let</span> urlNoProtocol = link.<span class="title function_">replace</span>(<span class="regexp">/^https?\:\/\//i</span>, <span class="string">&quot;&quot;</span>);</span><br><span class="line">    <span class="keyword">let</span> imgUrl = <span class="string">&quot;https://cdn.jsdmirror.com/gh/sxr1023/BlogImage/img/avatar2.webp&quot;</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="string">`&lt;a class=&quot;tag-Link&quot; target=&quot;_blank&quot; href=&quot;<span class="subst">$&#123;link&#125;</span>&quot;&gt;</span></span><br><span class="line"><span class="string">    &lt;div class=&quot;tag-link-tips&quot;&gt;🏠 站内链接，放心访问&lt;/div&gt;</span></span><br><span class="line"><span class="string">    &lt;div class=&quot;tag-link-bottom&quot;&gt;</span></span><br><span class="line"><span class="string">        &lt;div class=&quot;tag-link-left&quot; style=&quot;background-image: url(<span class="subst">$&#123;imgUrl&#125;</span>);&quot;&gt;&lt;/div&gt;</span></span><br><span class="line"><span class="string">        &lt;div class=&quot;tag-link-right&quot;&gt;</span></span><br><span class="line"><span class="string">            &lt;div class=&quot;tag-link-title&quot;&gt;<span class="subst">$&#123;title&#125;</span>&lt;/div&gt;</span></span><br><span class="line"><span class="string">            &lt;div class=&quot;tag-link-sitename&quot;&gt;<span class="subst">$&#123;sitename&#125;</span>&lt;/div&gt;</span></span><br><span class="line"><span class="string">        &lt;/div&gt;</span></span><br><span class="line"><span class="string">        &lt;i class=&quot;fa-solid fa-angle-right&quot;&gt;&lt;/i&gt;</span></span><br><span class="line"><span class="string">    &lt;/div&gt;</span></span><br><span class="line"><span class="string">    &lt;/a&gt;`</span></span><br><span class="line">&#125;</span><br><span class="line">hexo.<span class="property">extend</span>.<span class="property">tag</span>.<span class="title function_">register</span>(<span class="string">&#x27;innerlink&#x27;</span>, innerlink, &#123; <span class="attr">ends</span>: <span class="literal">false</span> &#125;)</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>新增 <code>tag-link.css</code><br><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">@charset</span>  <span class="string">&quot;UTF-8&quot;</span>;</span><br><span class="line"></span><br><span class="line"><span class="selector-pseudo">:root</span>&#123;</span><br><span class="line">  <span class="attr">--sxr-white</span>: <span class="number">#fff</span>;</span><br><span class="line">  <span class="attr">--sxr-gray</span>: <span class="number">#999999</span>;</span><br><span class="line">  <span class="attr">--sxr-main</span>: <span class="built_in">var</span>(--sxr-theme);</span><br><span class="line">  <span class="attr">--style-border</span>: <span class="number">1px</span> solid <span class="built_in">var</span>(--sxr-card-border);</span><br><span class="line">  <span class="attr">--style-border-hover</span>: <span class="number">1px</span> solid <span class="built_in">var</span>(--sxr-main);</span><br><span class="line"></span><br><span class="line">  <span class="attr">--sxr-theme</span>: <span class="number">#425AEF</span>;</span><br><span class="line">  <span class="attr">--sxr-card-border</span>: <span class="number">#e3e8f7</span>;</span><br><span class="line">  <span class="attr">--sxr-secondbg</span>: <span class="number">#f1f3f8</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-pseudo">::selection</span> &#123;</span><br><span class="line">  <span class="attribute">background</span>: <span class="built_in">var</span>(--sxr-fontcolor);</span><br><span class="line">  <span class="attribute">color</span>: <span class="built_in">var</span>(--sxr-background);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-attr">[data-theme=light]</span> &#123;</span><br><span class="line">  <span class="attr">--sxr-theme</span>: <span class="number">#425AEF</span>;</span><br><span class="line">  <span class="attr">--sxr-card-border</span>: <span class="number">#e3e8f7</span>;</span><br><span class="line">  <span class="attr">--sxr-secondbg</span>: <span class="number">#f1f3f8</span>;</span><br><span class="line">  <span class="attr">--sxr-fontcolor</span>: <span class="number">#363636</span>;</span><br><span class="line">  <span class="attr">--sxr-background</span>: <span class="number">#f7f9fe</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-attr">[data-theme=dark]</span> &#123;</span><br><span class="line">  <span class="attr">--sxr-theme</span>: <span class="number">#0084FF</span>;</span><br><span class="line">  <span class="attr">--sxr-card-border</span>: <span class="number">#336a71</span>;</span><br><span class="line">  <span class="attr">--sxr-secondbg</span>: <span class="number">#30343f</span>;</span><br><span class="line">  <span class="attr">--sxr-fontcolor</span>: <span class="number">#F7F7FA</span>;</span><br><span class="line">  <span class="attr">--sxr-background</span>: <span class="number">#18171d</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">@media</span> screen <span class="keyword">and</span> (<span class="attribute">max-width</span>: <span class="number">768px</span>)&#123;</span><br><span class="line">  <span class="selector-pseudo">:root</span>&#123;</span><br><span class="line">    <span class="attr">--style-border</span>: <span class="number">0px</span> solid <span class="built_in">var</span>(--sxr-card-border);</span><br><span class="line">    <span class="attr">--style-border-hover</span>: <span class="number">0px</span> solid <span class="built_in">var</span>(--sxr-main);</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tag-Link</span> &#123;</span><br><span class="line">  <span class="attribute">background</span>: <span class="built_in">var</span>(--sxr-secondbg);</span><br><span class="line">  <span class="attribute">border-radius</span>: <span class="number">8px</span><span class="meta">!important</span>;</span><br><span class="line">  <span class="attribute">display</span>: flex;</span><br><span class="line">  <span class="attribute">border</span>: <span class="built_in">var</span>(--style-border);</span><br><span class="line">  <span class="attribute">flex-direction</span>: column;</span><br><span class="line">  <span class="attribute">padding</span>: <span class="number">0.5rem</span> <span class="number">1rem</span>;</span><br><span class="line">  <span class="attribute">border-width</span>: <span class="number">1px</span><span class="meta">!important</span>;</span><br><span class="line">  <span class="attribute">margin-top</span>: <span class="number">1rem</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tag-Link</span><span class="selector-pseudo">:hover</span> &#123;</span><br><span class="line">  <span class="attribute">border</span>: <span class="built_in">var</span>(--style-border-hover);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tag-Link</span> <span class="selector-class">.tag-link-tips</span> &#123;</span><br><span class="line">  <span class="attribute">border-bottom</span>: <span class="built_in">var</span>(--style-border);</span><br><span class="line">  <span class="attribute">padding-bottom</span>: <span class="number">4px</span>;</span><br><span class="line">  <span class="attribute">font-size</span>: <span class="number">0.6rem</span>;</span><br><span class="line">  <span class="attribute">color</span>: <span class="built_in">var</span>(--sxr-gray);</span><br><span class="line">  <span class="attribute">font-weight</span>: normal;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tag-Link</span><span class="selector-pseudo">:hover</span> <span class="selector-class">.tag-link-tips</span> &#123;</span><br><span class="line">  <span class="attribute">color</span>: <span class="built_in">var</span>(--sxr-white);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tag-Link</span> <span class="selector-class">.tag-link-bottom</span> &#123;</span><br><span class="line">  <span class="attribute">display</span>: flex;</span><br><span class="line">  <span class="attribute">margin-top</span>: <span class="number">0.5rem</span>;</span><br><span class="line">  <span class="attribute">align-items</span>: center;</span><br><span class="line">  <span class="attribute">justify-content</span>: space-around;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tag-Link</span> <span class="selector-class">.tag-link-bottom</span> <span class="selector-class">.tag-link-left</span> &#123;</span><br><span class="line">  <span class="attribute">width</span>: <span class="number">60px</span>;</span><br><span class="line">  <span class="attribute">min-width</span>: <span class="number">60px</span>;</span><br><span class="line">  <span class="attribute">height</span>: <span class="number">60px</span>;</span><br><span class="line">  <span class="attribute">background-size</span>: cover;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tag-Link</span> <span class="selector-class">.tag-link-bottom</span> <span class="selector-class">.tag-link-right</span> &#123;</span><br><span class="line">  <span class="attribute">margin-left</span>: <span class="number">1rem</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tag-Link</span> <span class="selector-class">.tag-link-bottom</span> <span class="selector-class">.tag-link-right</span> <span class="selector-class">.tag-link-title</span> &#123;</span><br><span class="line">  <span class="attribute">font-size</span>: <span class="number">1rem</span>;</span><br><span class="line">  <span class="attribute">line-height</span>: <span class="number">1.2</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tag-Link</span> <span class="selector-class">.tag-link-bottom</span> <span class="selector-class">.tag-link-right</span> <span class="selector-class">.tag-link-sitename</span> &#123;</span><br><span class="line">  <span class="attribute">font-size</span>: <span class="number">0.7rem</span>;</span><br><span class="line">  <span class="attribute">color</span>: <span class="built_in">var</span>(--sxr-gray);</span><br><span class="line">  <span class="attribute">font-weight</span>: normal;</span><br><span class="line">  <span class="attribute">margin-top</span>: <span class="number">4px</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tag-Link</span><span class="selector-pseudo">:hover</span> <span class="selector-class">.tag-link-bottom</span> <span class="selector-class">.tag-link-right</span> <span class="selector-class">.tag-link-sitename</span> &#123;</span><br><span class="line">  <span class="attribute">color</span>: <span class="built_in">var</span>(--sxr-white);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#article-container</span> <span class="selector-class">.tag-Link</span> <span class="selector-class">.tag-link-bottom</span> <span class="selector-tag">i</span> &#123;</span><br><span class="line">  <span class="attribute">margin-left</span>: auto;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/*上面的洪佬的原生样式，下面的是我根据自诩需要进行额外添加的样式*/</span></span><br><span class="line"><span class="selector-class">.tag-Link</span> &#123;</span><br><span class="line">  <span class="attribute">background</span>: <span class="built_in">var</span>(--theme-color2) <span class="meta">!important</span>;</span><br><span class="line">  <span class="attribute">border</span>: <span class="number">2px</span> solid <span class="built_in">var</span>(--theme-color) <span class="meta">!important</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-attr">[data-theme=<span class="string">&quot;light&quot;</span>]</span> <span class="selector-class">.tag-Link</span><span class="selector-pseudo">:hover</span> &#123;</span><br><span class="line">  <span class="attribute">background</span>: <span class="built_in">oklch</span>(from <span class="built_in">var</span>(--theme-color2) <span class="built_in">calc</span>(l * <span class="number">0.9</span>) c h) <span class="meta">!important</span>;</span><br><span class="line">  <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">15px</span> <span class="built_in">var</span>(--theme-color);</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-attr">[data-theme=<span class="string">&quot;dark&quot;</span>]</span> <span class="selector-class">.tag-Link</span><span class="selector-pseudo">:hover</span> &#123;</span><br><span class="line">  <span class="attribute">background</span>: <span class="built_in">oklch</span>(from <span class="built_in">var</span>(--theme-color2) <span class="built_in">calc</span>(l * <span class="number">1.2</span>) c h) <span class="meta">!important</span>;</span><br><span class="line">  <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">15px</span> <span class="built_in">var</span>(--theme-color);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><h2 id="note效果美化"><a href="#note效果美化" class="headerlink" title="note效果美化"></a>note效果美化</h2><p>原生的效果我觉得不太符合预期，于是从网上找了找方案进行美化。</p><p>修改<code>[blogRoot]\themes\Butterfly\scripts\tag\note.js</code></p><p>记得需自行去阿里巴巴矢量图标库添加图标。</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&#x27;use strict&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">postNote</span>(<span class="params">args, content</span>) &#123;</span><br><span class="line">    <span class="keyword">const</span> typeIcons = &#123;</span><br><span class="line">        <span class="attr">info</span>: <span class="string">&#x27;iconfont icon-info&#x27;</span>,</span><br><span class="line">        <span class="attr">primary</span>: <span class="string">&#x27;iconfont icon-plus&#x27;</span>,</span><br><span class="line">        <span class="attr">default</span>: <span class="string">&#x27;iconfont icon-right&#x27;</span>,</span><br><span class="line">        <span class="attr">warning</span>: <span class="string">&#x27;fa-regular fa-circle-dot&#x27;</span>,</span><br><span class="line">        <span class="attr">danger</span>: <span class="string">&#x27;fa-regular fa-circle-xmark&#x27;</span>,</span><br><span class="line">        <span class="attr">success</span>: <span class="string">&#x27;fa-regular fa-circle-check&#x27;</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">const</span> noteType = args[<span class="number">0</span>] || <span class="string">&#x27;note&#x27;</span></span><br><span class="line">    <span class="keyword">const</span> remainingArgs = args.<span class="title function_">slice</span>(<span class="number">1</span>)</span><br><span class="line">    <span class="keyword">let</span> [title, ...styleArgs] = remainingArgs[<span class="number">0</span>]?.<span class="title function_">startsWith</span>(<span class="string">&#x27;fa-&#x27;</span>)</span><br><span class="line">        ? [<span class="string">&#x27;&#x27;</span>, ...remainingArgs]</span><br><span class="line">        : [remainingArgs[<span class="number">0</span>], ...remainingArgs.<span class="title function_">slice</span>(<span class="number">1</span>)]</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="string">`&lt;div class=&quot;note note-<span class="subst">$&#123;noteType&#125;</span> <span class="subst">$&#123;styleArgs.join(<span class="string">&#x27; &#x27;</span>)&#125;</span>&quot;&gt;</span></span><br><span class="line"><span class="string">    &lt;div class=&quot;note-header&quot;&gt;</span></span><br><span class="line"><span class="string">      &lt;i class=&quot;note-icon <span class="subst">$&#123;typeIcons[noteType]&#125;</span>&quot;&gt;&lt;/i&gt;</span></span><br><span class="line"><span class="string">      <span class="subst">$&#123;title ? <span class="string">`&lt;span class=&quot;note-title&quot;&gt;<span class="subst">$&#123;title&#125;</span>&lt;/span&gt;`</span> : <span class="string">&#x27;&#x27;</span>&#125;</span></span></span><br><span class="line"><span class="string">    &lt;/div&gt;</span></span><br><span class="line"><span class="string">    &lt;div class=&quot;note-content&quot;&gt;<span class="subst">$&#123;hexo.render.renderSync(&#123; text: content, engine: <span class="string">&#x27;markdown&#x27;</span> &#125;)&#125;</span>&lt;/div&gt;</span></span><br><span class="line"><span class="string">  &lt;/div&gt;`</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">hexo.<span class="property">extend</span>.<span class="property">tag</span>.<span class="title function_">register</span>(<span class="string">&#x27;note&#x27;</span>, postNote, &#123;<span class="attr">ends</span>: <span class="literal">true</span>&#125;)</span><br><span class="line">hexo.<span class="property">extend</span>.<span class="property">tag</span>.<span class="title function_">register</span>(<span class="string">&#x27;subnote&#x27;</span>, postNote, &#123;<span class="attr">ends</span>: <span class="literal">true</span>&#125;)</span><br></pre></td></tr></table></figure><p>新增 <code>note.css</code></p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/*这部分是在对图标进行操作*/</span></span><br><span class="line"><span class="selector-class">.iconfont</span> &#123;</span><br><span class="line"><span class="attribute">font-family</span>: <span class="string">&quot;iconfont&quot;</span> <span class="meta">!important</span>;</span><br><span class="line"><span class="attribute">font-size</span>: <span class="number">1em</span>;</span><br><span class="line"><span class="comment">/* 可以定义图标大小 */</span></span><br><span class="line"><span class="attribute">font-style</span>: normal;</span><br><span class="line">-webkit-<span class="attribute">font-smoothing</span>: antialiased;</span><br><span class="line">-moz-osx-<span class="attribute">font-smoothing</span>: grayscale;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.icon</span> &#123;</span><br><span class="line">   <span class="attribute">width</span>: <span class="number">1em</span>; <span class="attribute">height</span>: <span class="number">1em</span>;</span><br><span class="line">   <span class="attribute">vertical-align</span>: -<span class="number">0.15em</span>;</span><br><span class="line">   <span class="attribute">fill</span>: currentColor;</span><br><span class="line">   <span class="attribute">overflow</span>: hidden;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/* note标签外挂 */</span></span><br><span class="line"><span class="selector-class">.note</span> &#123;</span><br><span class="line">    <span class="attr">--note-color</span>: <span class="number">#5bc0de</span>; </span><br><span class="line">    <span class="attr">--gradient-position</span>: <span class="number">4em</span> -<span class="number">23em</span>;</span><br><span class="line">    <span class="attr">--gradient-size</span>: <span class="number">30em</span>;</span><br><span class="line"></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">12px</span>;</span><br><span class="line">    <span class="attribute">border</span>: <span class="number">1px</span> solid transparent;</span><br><span class="line">    <span class="attribute">position</span>: relative;</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">20px</span>;</span><br><span class="line">    <span class="attribute">padding-left</span>: <span class="number">15px</span> <span class="meta">!important</span>;</span><br><span class="line">    <span class="attribute">background-color</span>: <span class="built_in">var</span>(--june-card-bg);</span><br><span class="line">    <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">4px</span> <span class="number">6px</span> <span class="built_in">rgba</span>(<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0.05</span>);</span><br><span class="line">    <span class="attribute">transition</span>: all .<span class="number">3s</span> ease;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.note</span><span class="selector-attr">[class*=<span class="string">&quot;note-&quot;</span>]</span> &#123;</span><br><span class="line">    <span class="attribute">background-image</span>:</span><br><span class="line">            <span class="built_in">radial-gradient</span>(circle at <span class="built_in">var</span>(--gradient-position), <span class="built_in">var</span>(--note-color), transparent <span class="built_in">var</span>(--gradient-size)),</span><br><span class="line">            <span class="built_in">linear-gradient</span>(<span class="built_in">var</span>(--note-color) -<span class="number">1000%</span>, transparent);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.note</span><span class="selector-pseudo">:hover</span> &#123;</span><br><span class="line">    <span class="attribute">border-color</span>: <span class="built_in">var</span>(--note-color);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.note</span><span class="selector-class">.note-warning</span> &#123; <span class="attr">--note-color</span>: <span class="number">#f0ad4e</span>; &#125;</span><br><span class="line"><span class="selector-class">.note</span><span class="selector-class">.note-success</span> &#123; <span class="attr">--note-color</span>: <span class="number">#5cb85c</span>; &#125;</span><br><span class="line"><span class="selector-class">.note</span><span class="selector-class">.note-danger</span>  &#123; <span class="attr">--note-color</span>: <span class="number">#d9534f</span>; &#125;</span><br><span class="line"><span class="selector-class">.note</span><span class="selector-class">.note-info</span>    &#123; <span class="attr">--note-color</span>: <span class="number">#5bc0de</span>; &#125;</span><br><span class="line"><span class="selector-class">.note</span><span class="selector-class">.note-primary</span> &#123; <span class="attr">--note-color</span>: <span class="number">#6f42c1</span>; &#125;</span><br><span class="line"><span class="selector-class">.note</span><span class="selector-class">.note-default</span> &#123; <span class="attr">--note-color</span>: <span class="number">#777</span>; &#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.note</span> <span class="selector-class">.note-header</span> &#123;</span><br><span class="line">    <span class="attribute">display</span>: flex;</span><br><span class="line">    <span class="attribute">align-items</span>: center;</span><br><span class="line">    <span class="attribute">font-weight</span>: <span class="number">700</span>;</span><br><span class="line">    <span class="attribute">margin-bottom</span>: <span class="number">10px</span>;</span><br><span class="line">    <span class="attribute">font-size</span>: <span class="number">1em</span>;</span><br><span class="line">    <span class="attribute">color</span>: <span class="built_in">var</span>(--note-color);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.note</span> <span class="selector-class">.note-header</span> <span class="selector-tag">i</span><span class="selector-class">.note-icon</span> &#123;</span><br><span class="line">    <span class="attribute">margin-right</span>: <span class="number">10px</span>;</span><br><span class="line">    <span class="attribute">color</span>: inherit;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.note</span> <span class="selector-class">.note-content</span> <span class="selector-tag">p</span> &#123;</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="meta">!important</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]>
      </content:encoded>
    </item>
    <item>
      <title>Hexo博客美化前置教程</title>
      <link>https://sxr.wsq127.top/posts/e550f258/</link>
      <description>讲解 Butterfly 目录区分、DIFF 语法，教学 CSS/JS 引入写法，附带全局配色与美化实操经验</description>
      <author>sxr1023</author>
      <category domain="https://sxr.wsq127.top/categories/%E5%8D%9A%E5%AE%A2%E7%9B%B8%E5%85%B3/">博客相关</category>
      <category domain="https://sxr.wsq127.top/tags/Hexo/">Hexo</category>
      <category domain="https://sxr.wsq127.top/tags/Butterfly%E7%BE%8E%E5%8C%96/">Butterfly美化</category>
      <pubDate>Sun, 26 Jul 2026 19:06:34 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>本站采用 Butterfly 主题，也只支持 Butterfly 主题的美化教程，没看过官方文档的建议先阅读官方文档的内容。</p><a class="tag-Link" target="_blank" href="https://butterfly.js.org/">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=butterfly.js.org/);"></div>        <div class="tag-link-right">            <div class="tag-link-title">Butterfly 文档(一) 快速开始</div>            <div class="tag-link-sitename">Butterfly</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h2 id="高频目录"><a href="#高频目录" class="headerlink" title="高频目录"></a>高频目录</h2><p>本站有部分高频文件目录地址，注意进行区分。</p><p>高频目录包括：</p><ul><li>博客根目录 <code>[blogRoot]</code></li><li>主题文件夹 <code>[blogRoot]\themes\Butterfly</code></li><li>站点配置文件 <code>[blogRoot]\_config.yml</code> 或 <code>_config.yml</code></li><li>主题配置文件 <code>[blogRoot]\_config.butterfly.yml</code> 或 <code>_config.butterfly.yml</code></li></ul><h2 id="DIFF-语言"><a href="#DIFF-语言" class="headerlink" title="DIFF 语言"></a>DIFF 语言</h2><p>本站有时会用到 DIFF 语言，其中需要修改的部分只有前面有加号和减号的内容</p><figure class="highlight diff"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">...</span><br><span class="line">@import &#x27;_layout/*&#x27;</span><br><span class="line">@import &#x27;_tags/*&#x27;</span><br><span class="line">@import &#x27;_mode/*&#x27;</span><br><span class="line"><span class="addition">+@import &#x27;_custom/*.css&#x27;</span></span><br><span class="line">// search</span><br><span class="line"><span class="deletion">-@import &#x27;_search/index&#x27;</span></span><br><span class="line">...</span><br></pre></td></tr></table></figure><p>例如上述代码，前面带有加号的 <code>@import &#39;_custom/*.css&#39;</code> 是你需要添加的内容，前面带有减号的 <code>@import &#39;_search/index&#39;</code> 是你需要删除的内容。</p><p>本站中的 DIFF 代码中需要添加的内容直接删掉加号就是正确的缩进。</p><h2 id="引入自定义js和css文件"><a href="#引入自定义js和css文件" class="headerlink" title="引入自定义js和css文件"></a>引入自定义js和css文件</h2><div class="note note-warning ">    <div class="note-header">      <i class="note-icon fa-regular fa-circle-dot"></i>      <span class="note-title">提示</span>    </div>    <div class="note-content"><p>本站如出现 <code>新增xxx.css</code> 或者 <code>新增xxx.js</code> 如果没有特殊说明，就是让你放在你本地的引入 css 和 js 的文件夹里，并且在主题配置文件 <code>_config.butterfly.yml</code> 中进行的 <code>inject</code> 引入。</p></div>  </div><p>想要魔改和美化博客，添加自定义文件是不可避免的。下面来详细说一下 css 和 js 文件的创建和引入，其他文件同理。</p><p>在博客根目录下的 <code>source</code> 文件夹中创建文件夹，我个人的目录如下</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">source/</span><br><span class="line">├── static/</span><br><span class="line">│       ├── css/</span><br><span class="line">│       │      └── style.css</span><br><span class="line">│       ├── js/</span><br><span class="line">│       │      └── script.js</span><br><span class="line">│       └── img/</span><br><span class="line">│                └── background.png</span><br><span class="line">├── _posts/</span><br><span class="line">└── ...</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>之所以额外添加了 <code>static</code> 是为了方便管理，因为后续会添加很多的 page 页面，都在 <code>source</code> 目录下的话会显得很乱。</p><div class="tabs" id="test1"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="test1-1">常用引入方法</button><button type="button" class="tab " data-href="test1-2">特殊引用方法</button></ul><div class="tab-contents"><div class="tab-item-content active" id="test1-1"><p>一般地，在 主题配置文件 <code>_config.butterfly.yml</code> 中的 <code>inject</code> 引入自定义的 css 和 js 文件。</p><ul><li>css 文件一般在 head 引入</li><li>js 文件一般在 bottom 引入（特殊情况除外）</li></ul><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">inject:</span></span><br><span class="line">  <span class="attr">head:</span></span><br><span class="line">    <span class="comment"># 自定义css</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;link</span> <span class="string">rel=&quot;stylesheet&quot;</span> <span class="string">href=&quot;/static/css/style.css?1&quot;&gt;</span></span><br><span class="line">    <span class="comment"># 静态文件后面加个 ?任意内容 可以在每次更新之后让用户自动重新请求</span></span><br><span class="line">    <span class="comment"># 例如添加 ?1，在修改此文件后改成 ?2，用户访问时不会使用本地缓存，而是请求新的内容</span></span><br><span class="line">    <span class="comment"># 说人话就是有的时候要ctrl+F5才能正常显示内容，这么写不用刷新缓存也能正常显示</span></span><br><span class="line">  <span class="attr">bottom:</span></span><br><span class="line">    <span class="comment"># 自定义js</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/static/js/script.js?1&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="comment"># 引入多个文件就直接往下复制一行改一下文件名即可，如下：</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/static/js/script1.js?1&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">src=&quot;/static/js/script2.js?1&quot;&gt;&lt;/script&gt;</span></span><br><span class="line">    <span class="comment">#特殊的，可以加上类似于data-pjax的标签</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&lt;script</span> <span class="string">data-pjax</span> <span class="string">src=&quot;/static/js/script3.js?1&quot;&gt;&lt;/script&gt;</span></span><br></pre></td></tr></table></figure><div class="note note-warning ">    <div class="note-header">      <i class="note-icon fa-regular fa-circle-dot"></i>      <span class="note-title">注意</span>    </div>    <div class="note-content"><p>路径最前面是斜杠 <code>/xx/xxx.js</code>，而不是点斜杠 <code>./xx/xxx.js</code></p><p>路径要替换成结合实际情况进行替换，不要直接照抄</p></div>  </div></div><div class="tab-item-content" id="test1-2"><p>特殊的，可以在 <code>[blogRoot]\themes\Butterfly\source\css</code> 中新建 <code>_custom</code> 文件夹，将 css代码直接放在 <code>_custom</code> 中，然后在 <code>[blogRoot]\themes\Butterfly\source\css</code> 中的 <code>index.styl</code> 写入如下代码。</p><figure class="highlight diff"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">if hexo-config(&#x27;css_prefix&#x27;)</span><br><span class="line">  @import &#x27;nib&#x27;</span><br><span class="line"></span><br><span class="line">@import &#x27;_third-party/normalize.min.css&#x27;</span><br><span class="line">// project</span><br><span class="line">@import &#x27;var&#x27;</span><br><span class="line">@import &#x27;_global/*&#x27;</span><br><span class="line">@import &#x27;_highlight/highlight&#x27;</span><br><span class="line">@import &#x27;_page/*&#x27;</span><br><span class="line">@import &#x27;_layout/*&#x27;</span><br><span class="line">@import &#x27;_tags/*&#x27;</span><br><span class="line">@import &#x27;_mode/*&#x27;</span><br><span class="line"><span class="addition">+@import &#x27;_custom/*&#x27;</span></span><br><span class="line"></span><br><span class="line">// search</span><br><span class="line">@import &#x27;_search/index&#x27;</span><br><span class="line"></span><br></pre></td></tr></table></figure><div class="note note-danger ">    <div class="note-header">      <i class="note-icon fa-regular fa-circle-xmark"></i>      <span class="note-title">注意</span>    </div>    <div class="note-content"><p>使用这种方法批量引入虽然便捷整齐，但并不方便管理，而且部分 css 代码不支持这么引入，只能采取普通的主题配置文件 inject 引入的方式，所以一般而言不推荐这种引入方式。本站中也不会采取这种方式进行引入。</p></div>  </div></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h2 id="全局变量参考"><a href="#全局变量参考" class="headerlink" title="全局变量参考"></a>全局变量参考</h2><p><code>color.css</code><br><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-pseudo">:root</span> &#123;</span><br><span class="line">  <span class="attr">--theme-color-blue</span>: <span class="built_in">rgb</span>(<span class="number">160</span>, <span class="number">205</span>, <span class="number">220</span>);</span><br><span class="line">  <span class="attr">--theme-color-green</span>: <span class="built_in">rgb</span>(<span class="number">155</span>, <span class="number">218</span>, <span class="number">205</span>);</span><br><span class="line">  <span class="attr">--theme-color</span>: <span class="built_in">var</span>(--theme-color-green);</span><br><span class="line">  <span class="attr">--theme-color2</span>: <span class="built_in">var</span>(--theme-color-blue);</span><br><span class="line">  <span class="attr">--scrollbar-background</span>: <span class="number">#e6f4f6</span>;</span><br><span class="line">  <span class="attr">--border-hover</span>:<span class="number">#409eff</span>;</span><br><span class="line">  <span class="attr">--border-color</span>: <span class="built_in">rgba</span>(<span class="number">0</span>, <span class="number">30</span>, <span class="number">50</span>, <span class="number">0.3</span>);</span><br><span class="line">  <span class="attr">--nav-color</span>: <span class="built_in">rgba</span>(<span class="number">160</span>, <span class="number">205</span>, <span class="number">220</span>, <span class="number">0.75</span>);</span><br><span class="line">  <span class="attr">--nav-color-shi</span>: <span class="built_in">rgb</span>(<span class="number">160</span>, <span class="number">205</span>, <span class="number">220</span>);</span><br><span class="line">  <span class="attr">--text-color</span>: <span class="number">#4c4948</span>;</span><br><span class="line">  <span class="attr">--button-color</span>: <span class="number">#00C4B6</span>;</span><br><span class="line">  <span class="attr">--button-hover-color</span>: <span class="number">#0F7D7F</span>;</span><br><span class="line">  <span class="attr">--button-light-color</span>: <span class="built_in">var</span>(--button-color);</span><br><span class="line">  <span class="attr">--button-dark-color</span>: <span class="built_in">var</span>(--button-hover-color);</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-pseudo">:root</span><span class="selector-attr">[data-theme=<span class="string">&quot;dark&quot;</span>]</span> &#123;</span><br><span class="line">  <span class="attr">--theme-color-blue</span>: <span class="built_in">rgb</span>(<span class="number">50</span>, <span class="number">80</span>, <span class="number">110</span>);</span><br><span class="line">  <span class="attr">--theme-color-green</span>: <span class="built_in">rgb</span>(<span class="number">40</span>, <span class="number">70</span>, <span class="number">80</span>);</span><br><span class="line">  <span class="attr">--theme-color</span>: <span class="built_in">var</span>(--theme-color-blue);</span><br><span class="line">  <span class="attr">--theme-color2</span>: <span class="built_in">var</span>(--theme-color-green);</span><br><span class="line">  <span class="attr">--scrollbar-background</span>: <span class="number">#1c2833</span>;</span><br><span class="line">  <span class="attr">--border-hover</span>:<span class="number">#6699cb</span>;</span><br><span class="line">  <span class="attr">--border-color</span>: <span class="built_in">rgb</span>(<span class="number">255</span>, <span class="number">255</span>, <span class="number">255</span>, <span class="number">0.2</span>);</span><br><span class="line">  <span class="attr">--nav-color</span>: <span class="built_in">rgba</span>(<span class="number">50</span>, <span class="number">80</span>, <span class="number">110</span>, <span class="number">0.75</span>);</span><br><span class="line">  <span class="attr">--nav-color-shi</span>: <span class="built_in">rgb</span>(<span class="number">50</span>, <span class="number">80</span>, <span class="number">110</span>);</span><br><span class="line">  <span class="attr">--text-color</span>: <span class="number">#FFFFFFB3</span>;</span><br><span class="line">  <span class="attr">--button-color</span>: <span class="number">#2E4964</span>;</span><br><span class="line">  <span class="attr">--button-hover-color</span>: <span class="number">#446484</span>;</span><br><span class="line">  <span class="attr">--button-light-color</span>: <span class="built_in">var</span>(--button-hover-color);</span><br><span class="line">  <span class="attr">--button-dark-color</span>: <span class="built_in">var</span>(--button-color);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><h2 id="个人经验杂谈"><a href="#个人经验杂谈" class="headerlink" title="个人经验杂谈"></a>个人经验杂谈</h2><ul><li>善用豆包以及类似的软件，可以直接当成一个搜索引擎用</li><li>最好还是学习一下 css，当然如果你不想学的话美化着美化着也就会了</li><li>遇见 bug 可以二分，我的意思是说二分引入的 css 和 js 文件，快速定位需要修改的文件的文职</li><li>可以塞给豆包一堆 html 代码然后让他去写 css 代码，这样效率比直接让他写 css 代码高得多</li><li>豆包如果没有 “搜索XXX个关键词，参考XXX篇资料”的资料，内容有高概率是自己杜撰的，注意自己辨析</li><li>美化的时候如果插件出问题可以优先看相关的 github 的 issue，说不定有意外的收获</li><li>…</li></ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>【提高组】第六课：状态压缩DP/子集枚举 学习笔记</title>
      <link>https://sxr.wsq127.top/posts/61e012bf/</link>
      <description>吃透位运算基础写法，状压 DP 解决环游路径与数字排布，搭配 BFS 闯关拿钥匙，子集枚举求取回文最少删除次数</description>
      <author>sxr1023</author>
      <category domain="https://sxr.wsq127.top/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">学习笔记</category>
      <category domain="https://sxr.wsq127.top/tags/%E6%8F%90%E9%AB%98%E7%BB%84/">提高组</category>
      <category domain="https://sxr.wsq127.top/tags/%E7%AE%97%E6%B3%95/">算法</category>
      <category domain="https://sxr.wsq127.top/tags/%E7%8A%B6%E5%8E%8BDP/">状压DP</category>
      <category domain="https://sxr.wsq127.top/tags/%E5%AD%90%E9%9B%86%E6%9E%9A%E4%B8%BE/">子集枚举</category>
      <pubDate>Wed, 07 Feb 2024 08:17:46 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="第六课：状态压缩DP-子集枚举"><a href="#第六课：状态压缩DP-子集枚举" class="headerlink" title="第六课：状态压缩DP/子集枚举"></a>第六课：状态压缩DP/子集枚举</h1><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1145">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1145);"></div>        <div class="tag-link-right">            <div class="tag-link-title">第六课：状态压缩DP/子集枚举</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><ul><li><p>与：同为 1 ，则为 1，否则为0。即只要有一位是 0，结果就是0</p></li><li><p>或：同为 0 ，则为 0，否则为1。即只要有一位是 1，结果就是1</p></li><li><p>异或：不同则为 1，相同则为 0</p></li></ul><hr><p>已知一个状态压缩的数 $i$，有如下操作：</p><ol><li><p>求 $i$ 的第 $j$ 位是否为 $1$ ：<code>i&amp;(1&lt;&lt;j)!=0</code> （<strong>注意：是 !=0，而不是==1</strong>）</p></li><li><p>把 $i$ 的第 $j$ 位修改为 $1$：<code>i|=1&lt;&lt;j</code></p></li></ol><h2 id="A：环游世界"><a href="#A：环游世界" class="headerlink" title="A：环游世界"></a>A：环游世界</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1145/problem/A">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1145/problem/A);"></div>        <div class="tag-link-right">            <div class="tag-link-title">环游世界</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>首先，这很明显是一个无向图</p><p>这样，我们需要的信息就是：</p><ol><li>已走过的点集</li><li>当前停留在哪里</li><li>当前的最小花费</li></ol><p>知道了这三个信息之后，<strong>转移时只要枚举一个未走过的点，从当前的位置转移过去，再把花费加上即可</strong></p><p>在做最短路是通常不会主动去构造一个环，而本题要求从起点出发，再回到起点</p><p>我们可以先找到一个点 $T$ ，求出起点到 $T$ 的最短路，最后再单独加上 $T$到起点的距离</p><p>表示已走过的集合就可以用状态压缩</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> min(a, b) (a&lt;b?a:b)</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//mp[i][j]表示i到j的距离</span></span><br><span class="line"><span class="type">int</span> mp[<span class="number">12</span>][<span class="number">12</span>];</span><br><span class="line"></span><br><span class="line"><span class="comment">//dp[i][j]表示经过了i状态的点集，当前停留在j的最小代价</span></span><br><span class="line"><span class="type">int</span> dp[<span class="number">1</span> &lt;&lt; <span class="number">12</span>][<span class="number">12</span>];</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">checkmin</span><span class="params">(<span class="type">int</span> &amp;x, <span class="type">int</span> y)</span> </span>&#123;x == <span class="number">-1</span> || y &lt; x ? x = y: x = x;&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">input</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;n);</span><br><span class="line">  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">    <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="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;mp[i][j]);</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">floyd</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> k = <span class="number">0</span>; k &lt; n; k++)</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">      <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">        mp[i][j] = <span class="built_in">min</span>(mp[i][j], mp[i][k] + mp[k][j]);</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">change</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="built_in">memset</span>(dp, <span class="number">0x3f</span>, <span class="built_in">sizeof</span>(dp));</span><br><span class="line">  dp[<span class="number">1</span>][<span class="number">0</span>] = <span class="number">0</span>;</span><br><span class="line">  <span class="comment">//枚举已有的状态去转移给未知的状态</span></span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> mask = <span class="number">1</span>; mask &lt; (<span class="number">1</span> &lt;&lt; n); mask++) &#123;</span><br><span class="line">    <span class="comment">//枚举了一个已经求好的状态dp[mask][end]</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> end = <span class="number">0</span>; end &lt; n; end++) <span class="keyword">if</span> (dp[mask][end] != <span class="number">0x3f3f3f3f</span>) &#123;</span><br><span class="line">      <span class="comment">//枚举一个未走过的点</span></span><br><span class="line">      <span class="keyword">for</span> (<span class="type">int</span> nxt = <span class="number">0</span>; nxt &lt; n; nxt++) <span class="keyword">if</span> (!(mask &amp; (<span class="number">1</span> &lt;&lt; nxt))) &#123;</span><br><span class="line">        <span class="built_in">checkmin</span>(dp[mask | (<span class="number">1</span> &lt;&lt; nxt)][nxt], dp[mask][end] + mp[end][nxt]);</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">print</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="type">int</span> ans = <span class="number">0x3f3f3f3f</span>;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> end = <span class="number">0</span>; end &lt; n; end++) &#123;</span><br><span class="line">    <span class="built_in">checkmin</span>(ans, dp[(<span class="number">1</span> &lt;&lt; n) - <span class="number">1</span>][end] + mp[end][<span class="number">0</span>]);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</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">  <span class="built_in">input</span>();<span class="comment">//输入</span></span><br><span class="line">  <span class="built_in">floyd</span>();<span class="comment">//floyd求最短路</span></span><br><span class="line">  <span class="built_in">change</span>();<span class="comment">//状态转移</span></span><br><span class="line">  <span class="built_in">print</span>();<span class="comment">//计算答案</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><h2 id="B：数字重排"><a href="#B：数字重排" class="headerlink" title="B：数字重排"></a>B：数字重排</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1145/problem/B">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1145/problem/B);"></div>        <div class="tag-link-right">            <div class="tag-link-title">数字重拍</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>观察到 $n$ 最大只有 $16$</p><p>那么就可以使用状态压缩</p><p>共有两个信息：数字、位置</p><h3 id="暴力"><a href="#暴力" class="headerlink" title="暴力"></a>暴力</h3><p>$dp_{i_j}$ 中 $i$ 表示放了那哪些位置，$j$ 表示放了哪些数字</p><p>接着枚举一个空的位置，进行转移</p><p>但是这样的话就要开大小为 $2^{16}\times2^{16}$ 个数组，也就是 $2^{32}$ 个</p><h3 id="状态压缩"><a href="#状态压缩" class="headerlink" title="状态压缩"></a>状态压缩</h3><p>$dp_{ij}$ 中 $i$ 表示放了数字的集合，$j$ 表示以谁结尾</p><p>这时候位置就不重要了，因为当我们可以直接从左往右依次放进去，只需要考虑结尾即可，不用管位置</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstring&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">18</span>;</span><br><span class="line"><span class="type">const</span> <span class="type">int</span> INF = (<span class="type">int</span>) <span class="number">1e9</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> a[N], p[N], b[N];</span><br><span class="line"><span class="type">int</span> dp[<span class="number">1</span> &lt;&lt; N][N];</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">checkmax</span><span class="params">(<span class="type">int</span> &amp;x, <span class="type">int</span> y)</span> </span>&#123;<span class="keyword">if</span> (y &gt; x) x = y;&#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 class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;n);</span><br><span class="line">  <span class="built_in">memset</span>(b, <span class="number">-1</span>, <span class="built_in">sizeof</span>(b));</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 class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;a[i], &amp;p[i]); <span class="keyword">if</span> (p[i] != <span class="number">-1</span>) b[p[i]] = <span class="number">1</span>;&#125;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; (<span class="number">1</span> &lt;&lt; n); i++) <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; n; j++) dp[i][j] = -INF;</span><br><span class="line">  <span class="comment">//设置初始状态，放第一个数</span></span><br><span class="line">  <span class="keyword">if</span> (b[<span class="number">0</span>]) <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; i++) <span class="keyword">if</span> (p[i] == <span class="number">0</span>) dp[<span class="number">1</span> &lt;&lt; i][i] = <span class="number">0</span>;</span><br><span class="line">  <span class="keyword">else</span> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; i++) <span class="keyword">if</span> (p[i] == <span class="number">-1</span>) dp[<span class="number">1</span> &lt;&lt; i][i] = <span class="number">0</span>;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> mask = <span class="number">0</span>; mask &lt; (<span class="number">1</span> &lt;&lt; n); mask++) &#123;</span><br><span class="line">    <span class="type">int</span> pos = <span class="number">0</span>;<span class="comment">//记录mask状态有几个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++) <span class="keyword">if</span> (mask &amp; (<span class="number">1</span> &lt;&lt; i)) pos++;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> end = <span class="number">0</span>; end &lt; n; end++) <span class="keyword">if</span> (dp[mask][end] != -INF)</span><br><span class="line">      <span class="comment">//下一个数放a[nxt]</span></span><br><span class="line">      <span class="keyword">for</span> (<span class="type">int</span> nxt = <span class="number">0</span>; nxt &lt; n; nxt++) <span class="keyword">if</span> (!(mask &amp; (<span class="number">1</span> &lt;&lt; nxt)))</span><br><span class="line">        <span class="comment">//下面的逻辑：如果a[nxt]还没有放过，而且它可以放在pos位置</span></span><br><span class="line">        <span class="comment">//是否可以放在pos位置</span></span><br><span class="line">        <span class="comment">//1. a[nxt]呗钦点在pos位置</span></span><br><span class="line">        <span class="comment">//2. a[nxt]可以随便放</span></span><br><span class="line">        <span class="keyword">if</span> (p[nxt] == <span class="number">-1</span> || p[nxt] == pos) <span class="built_in">checkmax</span>(dp[mask | (<span class="number">1</span> &lt;&lt; nxt)][nxt], dp[mask][end] + a[end] * a[nxt]);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="type">int</span> ans = -INF;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> end = <span class="number">0</span>; end &lt; n; end++) <span class="built_in">checkmax</span>(ans, dp[(<span class="number">1</span> &lt;&lt; n) - <span class="number">1</span>][end]);</span><br><span class="line">  <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, ans);</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><h2 id="C：开门迷宫"><a href="#C：开门迷宫" class="headerlink" title="C：开门迷宫"></a>C：开门迷宫</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1145/problem/C">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1145/problem/C);"></div>        <div class="tag-link-right">            <div class="tag-link-title">开门迷宫</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>广搜 + 状压DP即可</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;queue&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstring&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><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">60</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n,m,p,k,s;</span><br><span class="line"><span class="type">int</span> x1,y1,x2,y2,x;</span><br><span class="line"><span class="type">int</span> mp1[N][N][N][N], mp2[N][N],vis[N][N][<span class="number">1</span>&lt;&lt;<span class="number">11</span>];</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> dx[]= &#123;<span class="number">0</span>,<span class="number">0</span>,<span class="number">1</span>,<span class="number">-1</span>&#125;;</span><br><span class="line"><span class="type">int</span> dy[]= &#123;<span class="number">1</span>,<span class="number">-1</span>,<span class="number">0</span>,<span class="number">0</span>&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">node</span> &#123;</span><br><span class="line">  <span class="type">int</span> x,y,key,step;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">queue&lt;node&gt;q;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">bfs</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  q.<span class="built_in">push</span>(&#123;<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>&#125;);</span><br><span class="line">  vis[<span class="number">0</span>][<span class="number">0</span>][<span class="number">0</span>] = <span class="number">1</span>;</span><br><span class="line">  <span class="keyword">while</span>(!q.<span class="built_in">empty</span>()) &#123;</span><br><span class="line">    node f = q.<span class="built_in">front</span>(); q.<span class="built_in">pop</span>();</span><br><span class="line">    <span class="keyword">if</span>(f.x == n - <span class="number">1</span> &amp;&amp; f.y == m - <span class="number">1</span>) <span class="keyword">return</span> f.step;</span><br><span class="line">    <span class="keyword">if</span>(mp2[f.x][f.y] &gt;= <span class="number">1</span>) f.key += mp2[f.x][f.y] - (mp2[f.x][f.y] &amp; f.key);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; <span class="number">4</span>; i++) &#123;</span><br><span class="line">      <span class="type">int</span> ax = f.x + dx[i];</span><br><span class="line">      <span class="type">int</span> ay = f.y + dy[i];</span><br><span class="line">      <span class="keyword">if</span>(ax &gt;= <span class="number">0</span> &amp;&amp; ax &lt; n &amp;&amp; ay &gt;= <span class="number">0</span> &amp;&amp; ay &lt; m) &#123;</span><br><span class="line">        <span class="type">int</span> tmp = mp1[f.x][f.y][ax][ay];</span><br><span class="line">        <span class="keyword">if</span>(tmp == <span class="number">-1</span> || (tmp&gt;= <span class="number">1</span> &amp;&amp; (f.key &amp; (<span class="number">1</span> &lt;&lt; tmp)))) &#123;</span><br><span class="line">          <span class="keyword">if</span>(!vis[ax][ay][f.key]) &#123;</span><br><span class="line">            q.<span class="built_in">push</span>(&#123;ax,ay,f.key,f.step<span class="number">+1</span>&#125;);</span><br><span class="line">            vis[ax][ay][f.key]=<span class="number">1</span>;</span><br><span class="line">          &#125;</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</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="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="built_in">scanf</span>(<span class="string">&quot;%d%d%d%d&quot;</span>, &amp;n, &amp;m, &amp;p, &amp;k);</span><br><span class="line">  <span class="built_in">memset</span>(mp1, <span class="number">-1</span>, <span class="built_in">sizeof</span>(mp1));</span><br><span class="line">  <span class="built_in">memset</span>(mp2, <span class="number">0</span>, <span class="built_in">sizeof</span>(mp2));</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= k; i++)&#123;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d%d%d%d%d&quot;</span>, &amp;x1, &amp;y1, &amp;x2, &amp;y2, &amp;x);</span><br><span class="line">    mp1[x1 - <span class="number">1</span>][y1 - <span class="number">1</span>][x2 - <span class="number">1</span>][y2 - <span class="number">1</span>] = mp1[x2 - <span class="number">1</span>][y2 - <span class="number">1</span>][x1 - <span class="number">1</span>][y1 - <span class="number">1</span>]=x;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;s);</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= s; i++) &#123;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d%d%d&quot;</span>, &amp;x1, &amp;y1, &amp;x);</span><br><span class="line">    <span class="keyword">if</span>(x != <span class="number">0</span>) mp2[x1 - <span class="number">1</span>][y1  - <span class="number">1</span>] += <span class="number">1</span> &lt;&lt; x;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="type">int</span> ans = <span class="built_in">bfs</span>();</span><br><span class="line">  <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, ans);</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><h2 id="E：回文子序列删除"><a href="#E：回文子序列删除" class="headerlink" title="E：回文子序列删除"></a>E：回文子序列删除</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1145/problem/E">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1145/problem/E);"></div>        <div class="tag-link-right">            <div class="tag-link-title">回文子序列删除</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>$1$ 个状态可以由多个状态转移过来，那么可以可以转移过来的状态构成了一个子集</p><p>$dp_i$ 表示 $i$ 状态的字符集合最少需要删几次</p><p>枚举这个状态的回文子集，然后扔掉</p><p>假设枚举的回文子集为 $s$ ，那么 $dp<em>i$ 就可以由 $dp</em>{i-s}+1$ 在转移过来</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;vector&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstring&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">18</span>;</span><br><span class="line"><span class="type">const</span> <span class="type">int</span> INF = (<span class="type">int</span>) <span class="number">1e9</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">char</span> s[N];</span><br><span class="line"><span class="type">int</span> dp[<span class="number">1</span> &lt;&lt; N], flag[<span class="number">1</span> &lt;&lt; N], n;</span><br><span class="line"></span><br><span class="line">std::vector&lt;<span class="type">int</span>&gt; v;</span><br><span class="line"><span class="comment">//判断mask状态的字符是否是回文的</span></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">judge</span><span class="params">(<span class="type">int</span> mask)</span> </span>&#123;</span><br><span class="line">  v.<span class="built_in">clear</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 class="keyword">if</span> (mask &amp; (<span class="number">1</span> &lt;&lt; i)) v.<span class="built_in">push_back</span>(i);</span><br><span class="line"><span class="type">int</span> l = <span class="number">0</span>, r = (<span class="type">int</span>) v.<span class="built_in">size</span>() - <span class="number">1</span>;</span><br><span class="line"><span class="keyword">while</span> (l &lt;= r) &#123;</span><br><span class="line"><span class="keyword">if</span> (s[v[l]] != s[v[r]]) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">l++, r--;</span><br><span class="line">&#125;</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="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>, s);</span><br><span class="line">n = <span class="built_in">strlen</span>(s);</span><br><span class="line"><span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt; (<span class="number">1</span> &lt;&lt; n); i++) &#123;</span><br><span class="line"><span class="keyword">if</span>(<span class="built_in">judge</span>(i)) dp[i] = <span class="number">1</span>, flag[i] = <span class="number">1</span>;</span><br><span class="line"><span class="keyword">else</span> dp[i] = INF;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span> (<span class="type">int</span> mask = <span class="number">0</span>; mask &lt; (<span class="number">1</span> &lt;&lt; n); mask++)</span><br><span class="line">    <span class="comment">//枚举子集</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> sub = mask; sub &gt; <span class="number">0</span>; sub = mask &amp; (sub - <span class="number">1</span>)) <span class="keyword">if</span> (flag[sub]) dp[mask] = std::<span class="built_in">min</span>(dp[mask], dp[mask - sub] + <span class="number">1</span>);</span><br><span class="line">  <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, dp[(<span class="number">1</span> &lt;&lt; n) - <span class="number">1</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>]]>
      </content:encoded>
    </item>
    <item>
      <title>P10112 [GESP202312 八级] 奖品分配 题解</title>
      <link>https://sxr.wsq127.top/posts/6fe15873/</link>
      <description>洛谷 P10112 の题解</description>
      <author>sxr1023</author>
      <category domain="https://sxr.wsq127.top/categories/%E9%A2%98%E8%A7%A3/">题解</category>
      <category domain="https://sxr.wsq127.top/tags/%E7%BB%84%E5%90%88%E6%95%B0/">组合数</category>
      <category domain="https://sxr.wsq127.top/tags/%E5%88%86%E7%B1%BB%E8%AE%A8%E8%AE%BA/">分类讨论</category>
      <pubDate>Mon, 05 Feb 2024 11:10:28 GMT</pubDate>
      <content:encoded>
        <![CDATA[<a class="tag-Link" target="_blank" href="https://www.luogu.com.cn/problem/P10112">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.luogu.com.cn/problem/P10112);"></div>        <div class="tag-link-right">            <div class="tag-link-title">P10112 [GESP202312 八级] 奖品分配</div>            <div class="tag-link-sitename">洛谷</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>这道题目总的来说代码量不多，但是思维很麻烦。</p><p>题目说，所有的奖品加起来正好等于 $n$ 或等于 $n+1$。</p><p>那么，就可以进行分类讨论。</p><p><strong>第一种情况：奖品数正好等于 $n$。</strong></p><p>这种情况下就是说每个同学正好只拿一个奖品。</p><p>假设有 $10$ 名同学，奖品有 $3$ 种，每种奖品的个数分别为 $3,2,5$。</p><p>首先，我们要从 $10$ 个人中选择 $5$ 个人拿第三种奖品，那么组合情况数 $C_{10}^{5}$。</p><p>接下来，从剩下的 $5$ 个人中选择 $2$ 个人拿第二种奖品，那么组合情况数为 $C_{5}^{2}$。</p><p>那么最后只剩下 $3$ 个人，只能拿第一种奖品，即组合情况数位 $C_{3}^{3}$。</p><p>这样的选取方法结果就是 $C<em>{10}^{5}\times C</em>{5}^{2}\times C_{3}^{3}=2520$。</p><p>如果换一种顺序取选取奖品，假如说从前往后取，先取第一种奖品，再取第二种奖品，最后取第三种奖品，结果就是 $C<em>{10}^{3}\times C</em>{7}^{2}\times C_{5}^{5}=2520$。</p><p>两个式子的结果相等的，这就证明了这种计算方法的正确性。</p><p>这种情况下的公式为 $C<em>{n}^{a_1}\times C</em>{n-a<em>1}^{a_2}\times C</em>{n-a<em>1-a_2}^{a_3}\times…\times C</em>{n-a<em>1-a_2-…-a</em>{n-1}}^{a_n}$ 。</p><p><strong>第二种情况：奖品数等于 $n+1$。</strong></p><p>如果奖品数等于 $n+1$ 的话，最终就会多出来一个奖品。</p><p>仍然举一个例子：有 $10$ 名同学，$3$ 种奖品，每种奖品的数量分别是 $4,5,2$。</p><p>第一种思路：我们可以<strong>假设多出的奖品分别是第几种奖品。</strong></p><p>假设多出的是第一种奖品，那就减掉好了，奖品数就变成了 $3,5,2$。</p><p>假设多出的是第二种奖品，奖品数就变成了 $4,4,2$。</p><p>假设多出的是第三种奖品，奖品数就变成了 $4,5,1$。</p><p>一共就得到了三种情况，分别按照第一种情况算即可。</p><p>分别相加，得到结果为 $C<em>{10}^{3}\times C</em>{7}^{5}\times C<em>{2}^{2}+C</em>{10}^{4}\times C<em>{6}^{4}\times C</em>{2}^{2}+C<em>{10}^{4}\times C</em>{6}^{5}\times C_{1}^{1}=6930$。</p><p>但是这样做的复杂度是多少呢？毫无疑问，是 $O(MT)$，很明显会超时。</p><p>第二种思路：<strong>不是去掉物品，而是多加一个人</strong>。因为多出的奖品即使不给人也要放在那里，因此可以假设多出来一个人，多出的一个奖品正好给多出的一个人。这样就转换成了第一种情况。</p><p>最终结果为 $C<em>{11}^{4}\times C</em>{7}^{5}\times C_{2}^{2}=6930$。</p><p>第一种思路的结果和第二种思路的结果正好相等，说明了第二种思路的正确性。</p><p>因为只是让同学数加一，所以复杂度和第一种情况相等，完全可以通过。</p><p>这种情况下的公式为 $C<em>{n+1}^{a_1}\times C</em>{(n+1)-a<em>1}^{a_2}\times C</em>{(n+1)-a<em>1-a_2}^{a_3}\times…\times C</em>{(n+1)-a<em>1-a_2-…-a</em>{n-1}}^{a_n}$ 。</p><p>题目中说，所有奖品的数量不是等于 $n$ 就是等于 $n+1$，简单整理以下，设 $sum$ 为所有奖品的总数量，最终的答案就是  $C<em>{sum}^{a_1}\times C</em>{sum-a<em>1}^{a_2}\times C</em>{sum-a<em>1-a_2}^{a_3}\times…\times C</em>{sum-a<em>1-a_2-…-a</em>{n-1}}^{a_n}$ 。</p><p>至于组合数可以使用杨辉三角预处理。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1010</span>;</span><br><span class="line"><span class="type">const</span> <span class="type">int</span> mod = <span class="number">1e9</span> + <span class="number">7</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> a[N], C[N][N];</span><br><span class="line"></span><br><span class="line"><span class="comment">//利用杨辉三角预处理组合数</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">init</span><span class="params">()</span> </span>&#123;</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">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt;= i; j++) &#123;</span><br><span class="line">            <span class="keyword">if</span> (j == <span class="number">0</span> || j == i) C[i][j] = <span class="number">1</span>;</span><br><span class="line">            <span class="comment">//边加边取模</span></span><br><span class="line">            <span class="keyword">else</span> C[i][j] = (C[i - <span class="number">1</span>][j] + C[i - <span class="number">1</span>][j - <span class="number">1</span>]) % mod;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</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="built_in">init</span>();</span><br><span class="line">    <span class="type">int</span> T;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;T);</span><br><span class="line">    <span class="keyword">while</span>(T--) &#123;</span><br><span class="line">        <span class="type">int</span> n, m;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;n, &amp;m);</span><br><span class="line">        <span class="type">int</span> sum = <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;= m; i++) &#123;</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;a[i]);</span><br><span class="line">            sum += a[i];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">long</span> <span class="type">long</span> ans = <span class="number">1</span>;<span class="comment">//注意开long long</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="comment">//这里的结果计算方法参考上面的讲解</span></span><br><span class="line">            <span class="comment">//直接用sum来计算答案省的考虑两种情况</span></span><br><span class="line">            ans = (ans * C[sum][a[i]]) % mod;</span><br><span class="line">            sum -= a[i];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%lld\n&quot;</span>, ans);</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>]]>
      </content:encoded>
    </item>
    <item>
      <title>P10109 [GESP202312 六级] 工作沟通 题解</title>
      <link>https://sxr.wsq127.top/posts/9a3d92d8/</link>
      <description>洛谷 P10109 の题解</description>
      <author>sxr1023</author>
      <category domain="https://sxr.wsq127.top/categories/%E9%A2%98%E8%A7%A3/">题解</category>
      <category domain="https://sxr.wsq127.top/tags/LCA/">LCA</category>
      <category domain="https://sxr.wsq127.top/tags/%E5%8F%A6%E7%B1%BB%E8%A7%A3%E6%B3%95/">另类解法</category>
      <pubDate>Mon, 05 Feb 2024 11:10:18 GMT</pubDate>
      <content:encoded>
        <![CDATA[<a class="tag-Link" target="_blank" href="https://www.luogu.com.cn/problem/P10109">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.luogu.com.cn/problem/P10109);"></div>        <div class="tag-link-right">            <div class="tag-link-title">P10109 [GESP202312 六级] 工作沟通</div>            <div class="tag-link-sitename">洛谷</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>每次询问输出多个点的编号最大的公共祖先，本质上就是 LCA 问题。  </p><p>这里提供一种思路：把每个点的祖先全部求出来，然后用数组标记，如果这个点被标记了 $m$ 次，那就说明这个点是所有员工的公共祖先。  </p><p>最后输出最大值即可。  </p><p>因为这道题的数据比较小，所以这样做的时间复杂度是完全可行的。  </p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">100010</span>;</span><br><span class="line"><span class="type">int</span> fa[N], vis[N];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">change</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line">    vis[x]++;<span class="comment">//自己能管理自己，即自己是自己的祖先</span></span><br><span class="line">    <span class="keyword">while</span>(x != <span class="number">0</span>) &#123;</span><br><span class="line">        x = fa[x];<span class="comment">//一直向上找祖先</span></span><br><span class="line">        vis[x]++;<span class="comment">//记录这个点作为祖先的个数</span></span><br><span class="line">    &#125;</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">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;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="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;fa[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> q;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;q);</span><br><span class="line">    <span class="keyword">while</span>(q--) &#123;</span><br><span class="line">        <span class="type">int</span> m;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;m);</span><br><span class="line">        <span class="comment">//注意vis数组要清空</span></span><br><span class="line">        <span class="built_in">memset</span>(vis, <span class="number">0</span>, <span class="built_in">sizeof</span>(vis));</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> x;</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;x);</span><br><span class="line">            <span class="built_in">change</span>(x);<span class="comment">//每输入一个数，进行标记</span></span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line">        <span class="comment">//因为是从小到大枚举的，所以不用取max</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> (vis[i] == m) ans = i;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, ans);</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>]]>
      </content:encoded>
    </item>
    <item>
      <title>【提高组】第五课：动规 学习笔记</title>
      <link>https://sxr.wsq127.top/posts/e8d76788/</link>
      <description>DP 闯关算出网格最优路线，拿下最少尾数零还能原路折返；二进制精简硬币背包运算，清点所有凑得出来的金额</description>
      <author>sxr1023</author>
      <category domain="https://sxr.wsq127.top/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">学习笔记</category>
      <category domain="https://sxr.wsq127.top/tags/%E6%8F%90%E9%AB%98%E7%BB%84/">提高组</category>
      <category domain="https://sxr.wsq127.top/tags/%E7%AE%97%E6%B3%95/">算法</category>
      <category domain="https://sxr.wsq127.top/tags/%E6%9E%9A%E4%B8%BE/">枚举</category>
      <pubDate>Sun, 04 Feb 2024 18:46:34 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="第五课：动规"><a href="#第五课：动规" class="headerlink" title="第五课：动规"></a>第五课：动规</h1><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1144">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1144);"></div>        <div class="tag-link-right">            <div class="tag-link-title">第五课：动规</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h2 id="A：最少末尾零"><a href="#A：最少末尾零" class="headerlink" title="A：最少末尾零"></a>A：最少末尾零</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1144/A">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1144/A);"></div>        <div class="tag-link-right">            <div class="tag-link-title">最少末尾零</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>记录 $2$ 最少的路径的 $2$ 的个数和 $5$ 最少的路径的 $5$ 的个数，最后取较小值即可</p><p>注意特判数组中有 $0$ 的情况</p><p>$dp_{ij0}$ 表示走到 $i$ 行 $j$ 列 $2$ 的最少个数</p><p>$dp_{ij1}$ 表示走到 $i$ 行 $j$ 列 $5$ 的最少个数</p><p>状态转的时候可以先转移第一行和第一列，这样减少思考</p><p>然后其余的状态由上面和左面转移即可</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1010</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> dp[N][N][<span class="number">2</span>];</span><br><span class="line"><span class="type">int</span> lst[N][N][<span class="number">2</span>];</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> flag = <span class="number">-1</span>,n,x;</span><br><span class="line"><span class="type">int</span> mp[N][N][<span class="number">2</span>];</span><br><span class="line"></span><br><span class="line"><span class="type">char</span> s[N*<span class="number">5</span>];</span><br><span class="line"><span class="type">int</span> tot;</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="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;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="keyword">for</span>(<span class="type">int</span> j = <span class="number">1</span>; j &lt;= n; j++) &#123;</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;x);</span><br><span class="line">            <span class="keyword">if</span>(x != <span class="number">0</span>) &#123;</span><br><span class="line">                <span class="keyword">while</span>(x % <span class="number">2</span> == <span class="number">0</span>) x /= <span class="number">2</span>,mp[i][j][<span class="number">0</span>]++;</span><br><span class="line">                <span class="keyword">while</span>(x % <span class="number">5</span> == <span class="number">0</span>) x /= <span class="number">5</span>,mp[i][j][<span class="number">1</span>]++;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> flag = i,mp[i][j][<span class="number">0</span>] = mp[i][j][<span class="number">1</span>] = <span class="number">1000</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> op = <span class="number">0</span>; op &lt; <span class="number">2</span>; op++) &#123;</span><br><span class="line">        dp[<span class="number">1</span>][<span class="number">1</span>][op] = mp[<span class="number">1</span>][<span class="number">1</span>][op];</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">2</span>; i &lt;= n; i++) &#123;</span><br><span class="line">            lst[<span class="number">1</span>][i][op] = <span class="number">1</span>;lst[i][<span class="number">1</span>][op] = <span class="number">-1</span>;</span><br><span class="line">            dp[<span class="number">1</span>][i][op] = dp[<span class="number">1</span>][i<span class="number">-1</span>][op] + mp[<span class="number">1</span>][i][op];</span><br><span class="line">            dp[i][<span class="number">1</span>][op] = dp[i<span class="number">-1</span>][<span class="number">1</span>][op] + mp[i][<span class="number">1</span>][op];</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">2</span>; i &lt;= n; i++) &#123;</span><br><span class="line">            <span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">2</span>; j &lt;= n; j++) &#123;</span><br><span class="line">                <span class="keyword">if</span>(dp[i][j<span class="number">-1</span>][op] &lt; dp[i<span class="number">-1</span>][j][op]) lst[i][j][op] = <span class="number">1</span>, dp[i][j][op] = dp[i][j - <span class="number">1</span>][op] + mp[i][j][op];</span><br><span class="line">                <span class="keyword">else</span> lst[i][j][op] = <span class="number">-1</span>, dp[i][j][op] = dp[i - <span class="number">1</span>][j][op] + mp[i][j][op];</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(flag != <span class="number">-1</span> &amp;&amp; <span class="built_in">min</span>(dp[n][n][<span class="number">0</span>],dp[n][n][<span class="number">1</span>])) &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;1\n&quot;</span>);</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">2</span>; i &lt;= flag; i++) <span class="built_in">printf</span>(<span class="string">&quot;D&quot;</span>);</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">2</span>; j &lt;= n; j++) <span class="built_in">printf</span>(<span class="string">&quot;R&quot;</span>);</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i = flag + <span class="number">1</span>; i &lt;= n; i++) <span class="built_in">printf</span>(<span class="string">&quot;D&quot;</span>);</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> ans;</span><br><span class="line">    <span class="keyword">if</span>(dp[n][n][<span class="number">0</span>] &lt; dp[n][n][<span class="number">1</span>]) ans = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">else</span> ans = <span class="number">1</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,<span class="built_in">min</span>(dp[n][n][<span class="number">0</span>],dp[n][n][<span class="number">1</span>]));</span><br><span class="line">    <span class="type">int</span> nowx = n, nowy = n;</span><br><span class="line">    <span class="keyword">while</span>(<span class="literal">true</span>) &#123;</span><br><span class="line">        <span class="keyword">if</span>(lst[nowx][nowy][ans] == <span class="number">1</span>) nowy--, s[++tot] = <span class="string">&#x27;R&#x27;</span>;</span><br><span class="line">        <span class="keyword">else</span> nowx--, s[++tot] = <span class="string">&#x27;D&#x27;</span>;</span><br><span class="line">        <span class="keyword">if</span>(nowx == <span class="number">1</span> &amp;&amp; nowy == <span class="number">1</span>) <span class="keyword">break</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = tot;i &gt;= <span class="number">1</span>;i--) <span class="built_in">putchar</span>(s[i]);</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><h2 id="B：凑硬币"><a href="#B：凑硬币" class="headerlink" title="B：凑硬币"></a>B：凑硬币</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1144/B">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1144/B);"></div>        <div class="tag-link-right">            <div class="tag-link-title">凑硬币</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>中级班原题，多重背包问题</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">100010</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> f[N], v[N];</span><br><span class="line"><span class="type">int</span> a[N], s[N];</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"><span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;n, &amp;m);</span><br><span class="line"><span class="type">int</span> sum = <span class="number">0</span>, tot = <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="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;a[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">1</span>; i &lt;= n; i++) &#123;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;s[i]);</span><br><span class="line"><span class="type">int</span> t = <span class="number">1</span>;</span><br><span class="line"><span class="keyword">while</span>(s[i] &gt;= t) &#123;</span><br><span class="line">v[++tot] = a[i] * t;</span><br><span class="line">s[i] -= t;</span><br><span class="line">t *= <span class="number">2</span>;</span><br><span class="line">&#125;</span><br><span class="line">v[++tot] = a[i] * s[i];</span><br><span class="line">&#125;</span><br><span class="line">f[<span class="number">0</span>] = <span class="number">1</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= tot; i++) &#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="type">int</span> j = m; j &gt;= <span class="number">1</span>; j--) &#123;</span><br><span class="line"><span class="keyword">if</span> (f[j - v[i]] == <span class="number">1</span>) f[j] = <span class="number">1</span>;</span><br><span class="line">&#125;</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">1</span>; i &lt;= m; i++) &#123;</span><br><span class="line"><span class="keyword">if</span> (f[i] == <span class="number">1</span>) sum++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, sum);</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>]]>
      </content:encoded>
    </item>
    <item>
      <title>【提高组】第四课：三分/01分数规划 学习笔记</title>
      <link>https://sxr.wsq127.top/posts/e10f7fa7/</link>
      <description>三分找点算最短距离，浮点二分求解面积比值，二分搞定 01 分数规划，整数二分速解阶乘零、间距极值与矩阵第 K 小</description>
      <author>sxr1023</author>
      <category domain="https://sxr.wsq127.top/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">学习笔记</category>
      <category domain="https://sxr.wsq127.top/tags/%E6%8F%90%E9%AB%98%E7%BB%84/">提高组</category>
      <category domain="https://sxr.wsq127.top/tags/%E7%AE%97%E6%B3%95/">算法</category>
      <category domain="https://sxr.wsq127.top/tags/%E8%B4%AA%E5%BF%83/">贪心</category>
      <pubDate>Sun, 28 Jan 2024 14:18:45 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="三分-01分数规划"><a href="#三分-01分数规划" class="headerlink" title="三分/01分数规划"></a>三分/01分数规划</h1><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1143">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1143);"></div>        <div class="tag-link-right">            <div class="tag-link-title">第四课：三分/01分数规划</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h2 id="A：点到线段的距离"><a href="#A：点到线段的距离" class="headerlink" title="A：点到线段的距离"></a>A：点到线段的距离</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1143/A">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1143/A);"></div>        <div class="tag-link-right">            <div class="tag-link-title">点到线段的距离</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h3 id="三分"><a href="#三分" class="headerlink" title="三分"></a>三分</h3><p>通过观察可以发现，点 $P$ 到线段 $AB$ 的距离呈 “U” 字形</p><p>接下来只用再这个 “U” 字形种寻找最小的点即可</p><p>首先设最左边的端点为 $l$ ，最右边的端点为 $r$ </p><p>第一次滑动到三分之一和三分之二位置，设三分之一位置为 $mid1$ ，三分之二位置为 $mid2$  </p><p>假如 $mid1&lt;mid2$ ，就说明 $mid2$ 到 $r$ 不会存在最小值，这样每次就会变少三分之一</p><p>相反，如果 $mid2&lt;mid2$，就说明 $l$ 到 $mid1$ 不会存在最小值</p><p>要使得答案始终都在 $mid1$ 和 $mid2$ 之间，这样等到它们足够接近时，就可以找到答案</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">double</span> eps = <span class="number">1e-8</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">point</span> &#123;</span><br><span class="line">    <span class="type">double</span> x, y, z;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">point A, B, P;</span><br><span class="line"></span><br><span class="line"><span class="comment">//计算三维坐标中两点的距离</span></span><br><span class="line"><span class="function"><span class="type">double</span> <span class="title">dis</span><span class="params">(point a, point b)</span> </span>&#123;</span><br><span class="line">    <span class="type">double</span> tmp1 = b.x - a.x;</span><br><span class="line">    <span class="type">double</span> tmp2 = b.y - a.y;</span><br><span class="line">    <span class="type">double</span> tmp3 = b.z - a.z;</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">sqrt</span>(tmp1 * tmp1 + tmp2 * tmp2 + tmp3 * tmp3);</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//根据比例算出P点到s点的距离</span></span><br><span class="line"><span class="function"><span class="type">double</span> <span class="title">get</span><span class="params">(<span class="type">double</span> mid)</span> </span>&#123;</span><br><span class="line">    point s;</span><br><span class="line">    s.x = A.x + (B.x - A.x) * mid;</span><br><span class="line">    s.y = A.y + (B.y - A.y) * mid;</span><br><span class="line">    s.z = A.z + (B.z - A.z) * mid;</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">dis</span>(s, P);</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> T;</span><br><span class="line">    cin &gt;&gt; T;</span><br><span class="line">    <span class="keyword">while</span>(T--) &#123;</span><br><span class="line">        cin &gt;&gt; A.x &gt;&gt; A.y &gt;&gt; A.z;</span><br><span class="line">        cin &gt;&gt; B.x &gt;&gt; B.y &gt;&gt; B.z;</span><br><span class="line">        cin &gt;&gt; P.x &gt;&gt; P.y &gt;&gt; P.z;</span><br><span class="line">        <span class="comment">//三分AS：SB的比值</span></span><br><span class="line">        <span class="type">double</span> l = <span class="number">0</span>, r = <span class="number">1</span>, best = <span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">while</span>(<span class="built_in">fabs</span>(r - l) &gt; eps) &#123;</span><br><span class="line">            <span class="type">double</span> mid1 = l + (r - l) / <span class="number">3</span>;</span><br><span class="line">            <span class="type">double</span> mid2 = r - (r - l) / <span class="number">3</span>;</span><br><span class="line">            best = <span class="built_in">get</span>(mid1);<span class="comment">//记录答案</span></span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">get</span>(mid1) - <span class="built_in">get</span>(mid2) &lt; -eps) r = mid2;</span><br><span class="line">            <span class="keyword">else</span> l = mid1;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%.2f\n&quot;</span>, best);</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><h2 id="B：三角形与四边形"><a href="#B：三角形与四边形" class="headerlink" title="B：三角形与四边形"></a>B：三角形与四边形</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1143/B">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1143/B);"></div>        <div class="tag-link-right">            <div class="tag-link-title">三角形与四边形</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p><strong>算法：浮点二分</strong></p><p>假设 AD 的长度为 $x$ ，那么 $DB$ 的长度为 $AB-x$，那么就可以得到三角形和四边形的面积比</p><p>紧接着，我们发现 $x$ 越大，三角形和四边形的比值也会越大，这样就发现这道题题目具备单调性，可以二分</p><p>因为比值涉及浮点数，所以要用<strong>浮点二分</strong></p><p>值得注意的是二分的上界，经过计算， $x$ 最终的结果不会超过 $AB$ （因为 $x$ 是从 $AB$ 上截取的线段）</p><p>关于三角形已知三条边求面积</p><p>可以直接用公式</p><p>先算出周长的一半 $p = (a+b+c)/2$，其中 $a,b,c$ 分别为三角形的三条边</p><p>然后面积 $S = \sqrt{p(p-a)(p-b)(p-c)}$</p><p><del>也可以直接输出AB/sqrt((k+1)/k)</del></p><p><strong>注意 eps 的精度！</strong></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">double</span> eps = <span class="number">1e-10</span>;</span><br><span class="line"><span class="type">double</span> ab, ac, bc, k;</span><br><span class="line"></span><br><span class="line"><span class="comment">//已知三角形三条边求面积</span></span><br><span class="line"><span class="function"><span class="type">double</span> <span class="title">calc</span><span class="params">(<span class="type">double</span> a, <span class="type">double</span> b, <span class="type">double</span> c)</span> </span>&#123;</span><br><span class="line">    <span class="type">double</span> p = (a + b + c) / <span class="number">2</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">sqrt</span>(p * (p - a) * (p - b) * (p - c));</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">check</span><span class="params">(<span class="type">double</span> x)</span> </span>&#123;</span><br><span class="line">    <span class="type">double</span> ad = x;</span><br><span class="line">    <span class="type">double</span> ae = ac * ad / ab;</span><br><span class="line">    <span class="type">double</span> de = ad * bc / ab;</span><br><span class="line">    <span class="type">double</span> ans = <span class="built_in">calc</span>(ad, ae, de) / (<span class="built_in">calc</span>(ab, ac, bc) - <span class="built_in">calc</span>(ad, ae, de));</span><br><span class="line">    <span class="keyword">return</span> ans - k &gt; -eps;</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> T, ca = <span class="number">1</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;T);</span><br><span class="line">    <span class="keyword">while</span>(T--) &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%lf%lf%lf%lf&quot;</span>, &amp;ab, &amp;ac, &amp;bc, &amp;k);</span><br><span class="line">        <span class="type">double</span> l = <span class="number">0</span>, r = ab, best = <span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">while</span>(<span class="built_in">fabs</span>(r - l) &gt; eps) &#123;</span><br><span class="line">            <span class="type">double</span> mid = (l + r) / <span class="number">2</span>;</span><br><span class="line">            <span class="comment">//check(mid)如果返回true表示AD=mid的时候面积比&gt;=k</span></span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">check</span>(mid)) best = mid, r = mid;<span class="comment">//注意这里l,r不用+1或-1</span></span><br><span class="line">            <span class="keyword">else</span> l = mid;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Case %d: %.2f\n&quot;</span>, ca++, best);</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><h2 id="C：最大比例"><a href="#C：最大比例" class="headerlink" title="C：最大比例"></a>C：最大比例</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1143/C">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1143/C);"></div>        <div class="tag-link-right">            <div class="tag-link-title">最大比例</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h3 id="转化"><a href="#转化" class="headerlink" title="转化"></a>转化</h3><p>注意：以下的 $v_1,v_2,v_3…v_k$ 和 $w_1,w_2,w_3+…w_k$ 都代表的是从原数组中任意的 $k$ 个数</p><p>解： $\frac{v_1+v_2+v_3+…+v_k}{w_1+w_2+w_3+…+w_k}=ans$</p><p>两边同时乘上 $w_i+w_2+w_3+…w_k$ ，得</p><p>$v_1+v_2+v_3+…+v_k=ans(w_1+w_2+w_3+…w_k)$</p><p>把 $ans$ 乘进 $(w_1+w_2+w_3+…w_l)$，得</p><p>$v_1+v_2+v_3+…v_k=ans·w_1+ans·w_2+ans·w_3+…+ans·w_k$</p><p>移项，得</p><p>$(v1-ans·w_1)+(v_2-ans·w_2)+(v_3-ans·w_3)+…+(v_k-ans·w_k)=0$</p><p>其中 $ans$ 相当于选出 $k$ 个数的比例</p><p>设 $a_i=v_i-ans·w_i$ </p><p>就可以设出一个平直角坐标系的纵坐标（ $y$ 轴）为最大的 $k$ 个 $a_i$ 的和（即前 $k$ 大的 $a_i$ 的和）</p><h3 id="单调性"><a href="#单调性" class="headerlink" title="单调性"></a>单调性</h3><p>当 $ans$ （比例）越大的时候，前 $k$ 大的数会越小</p><p>需要求的就是 $ans$ 尽量的大，但同时使得 $a_1+a_2+a_3+…+a_k$ 大于等于 $0$ </p><p>知道了单调性以后，二分比值即可，然后去找 $a_i$ 中较大的 $k$ 个 $0$ 进行 check</p><p>当 $ans$ 最大的时候，$a_1+a_2+a_3+…+a_k=0$，这就是最终的答案</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">100010</span>;</span><br><span class="line"><span class="type">const</span> <span class="type">double</span> INF = <span class="number">1000010</span>;</span><br><span class="line"><span class="type">const</span> <span class="type">double</span> eps = <span class="number">1e-8</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n, k;</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">node</span> &#123;</span><br><span class="line">    <span class="type">int</span> id;</span><br><span class="line">    <span class="type">int</span> v, w;</span><br><span class="line">    <span class="type">double</span> x;</span><br><span class="line">    <span class="comment">//计算式子中的每一个“a[i]”</span></span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">calc</span><span class="params">(<span class="type">double</span> tmp)</span> </span>&#123;</span><br><span class="line">        x = v - tmp * w;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">//重载运算符</span></span><br><span class="line">    <span class="type">bool</span> <span class="keyword">operator</span> &lt; (<span class="type">const</span> node&amp; cmp) <span class="type">const</span> &#123;</span><br><span class="line">        <span class="keyword">return</span> x &gt; cmp.x;</span><br><span class="line">    &#125;</span><br><span class="line">&#125; a[N];</span><br><span class="line"> </span><br><span class="line"><span class="comment">//判断式子是否大于等于0</span></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">check</span><span class="params">(<span class="type">double</span> x)</span> </span>&#123;</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++) a[i].<span class="built_in">calc</span>(x);</span><br><span class="line">    <span class="built_in">sort</span>(a + <span class="number">1</span>, a + n + <span class="number">1</span>);</span><br><span class="line">    <span class="type">double</span> tmp = <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;= k; i++) tmp += a[i].x;</span><br><span class="line">    <span class="keyword">return</span> tmp &gt;= <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"> </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="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;n, &amp;k);</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="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;a[i].v, &amp;a[i].w);</span><br><span class="line">        a[i].id = i;<span class="comment">//记录编号，防止排序影响结果</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">//二分比值</span></span><br><span class="line">    <span class="type">double</span> l = <span class="number">0</span>, r = INF;</span><br><span class="line">    <span class="keyword">while</span>(<span class="built_in">fabs</span>(r - l) &gt; eps) &#123;</span><br><span class="line">        <span class="type">double</span> mid = (l + r) / <span class="number">2</span>;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">check</span>(mid)) l = mid;</span><br><span class="line">        <span class="keyword">else</span> r = mid;</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">1</span>; i &lt;= k; i++) &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>, a[i].id);</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><h2 id="D：后缀零"><a href="#D：后缀零" class="headerlink" title="D：后缀零"></a>D：后缀零</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1143/D">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1143/D);"></div>        <div class="tag-link-right">            <div class="tag-link-title">后缀零</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p><strong>算法：整数二分</strong></p><p>题意：找到一个最小的 $n$ ，使得 $n!$ 末尾一共有 $Q$ 个 $0$ （$Q \le 10^8$）</p><h3 id="怎样求-n-末尾有多少个0"><a href="#怎样求-n-末尾有多少个0" class="headerlink" title="怎样求 $n!$ 末尾有多少个0"></a>怎样求 $n!$ 末尾有多少个0</h3><p>$n!$ 末尾有几个 $0$ ，要怎么算呢？</p><p><del>举个栗子，</del>比如说 $25!$</p><p>$25!=1\times2\times3\times4\times5\times……\times23\times24\times25$</p><p>末尾的 $0$ 是怎么得到的呢？</p><p>是 $5$ 的个数，因为 $2\times5=10$ ，能够产生一个 $0$，其他的所有的末尾的 $0$ 都是这么得来的</p><p>一个数的阶乘末尾的 $0$ 怎么得来的呢？</p><p>其实就是阶乘中相乘的数包含的 $5$ 的个数</p><p>$25!$ 中包含 $5$ 的数有 $5,10,15,20,25$ </p><p>其中包含一个 $5$ 的数有 $5,10,15,20$</p><p>包含两个 $5$ 的数有 $25$</p><p>总结以下这道题目的方法：求 $n!$ 末尾有几个 $0$ 本质上就是求 $\frac{n}{5}+\frac{n}{5^2}+……\frac{n}{5^k}$ ，一直到加的数小于 $1$ 为止</p><h3 id="单调性-1"><a href="#单调性-1" class="headerlink" title="单调性"></a>单调性</h3><p>一个数的阶乘末尾的 $0$ 的个数是具备单调性的，这个数越大，末尾的 $0$ 越多，所以可以二分</p><h3 id="二分的上界"><a href="#二分的上界" class="headerlink" title="二分的上界"></a>二分的上界</h3><p>二分很重要的依据就是二分的上界，那么这道题目二分的上界应该是多少呢？</p><p>$Q$ 大概有 $10^8$，所以我们需要知道多少的阶乘末尾有 $10^8$ 个 $0$ </p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">int</span> <span class="title">get</span><span class="params">(<span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">    <span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span>(n &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        ans += n / <span class="number">5</span>;</span><br><span class="line">        n /= <span class="number">5</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>get 函数用来获取一个数的阶乘末尾 $0$ 的个数，如果输出 <code>get (1e9)</code>，输出的结果很明显大于 $10^8$，所以可以得到二分的上界应当为 $10^9$  </p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">int</span> INF = (<span class="type">int</span>) <span class="number">1e9</span>;<span class="comment">//二分上界</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//求n！末尾有几个0，效率为O(logn)</span></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">get</span><span class="params">(<span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">    <span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span>(n &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        ans += n / <span class="number">5</span>;</span><br><span class="line">        n /= <span class="number">5</span>;</span><br><span class="line">    &#125;</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">    <span class="type">int</span> T, ca = <span class="number">1</span>;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;T);</span><br><span class="line">    <span class="keyword">while</span>(T--) &#123;</span><br><span class="line">        <span class="type">int</span> Q;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;Q);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;Case %d: &quot;</span>, ca++);</span><br><span class="line">        <span class="type">int</span> l = <span class="number">1</span>, r = INF, best = <span class="number">-1</span>;</span><br><span class="line">        <span class="comment">//找到阶乘结尾大于等于Q个0的最小的数</span></span><br><span class="line">        <span class="keyword">while</span>(l &lt;= r) &#123;</span><br><span class="line">            <span class="type">int</span> mid = (l + r) / <span class="number">2</span>;</span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">get</span>(mid) &gt;= Q) best = mid, r = mid  - <span class="number">1</span>;</span><br><span class="line">            <span class="keyword">else</span> l = mid + <span class="number">1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">//需要验证是不是刚好Q个0</span></span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">get</span>(best) == Q) <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, best);</span><br><span class="line">        <span class="keyword">else</span> <span class="built_in">printf</span>(<span class="string">&quot;impossible\n&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><p><del>（srds，这道题初级班也出现过</del></p><h2 id="E-：最小距离最大化"><a href="#E-：最小距离最大化" class="headerlink" title="E ：最小距离最大化"></a>E ：最小距离最大化</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1143/E">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1143/E);"></div>        <div class="tag-link-right">            <div class="tag-link-title">最小距离最大化</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>题意：在坐标轴上有 n 个点，从中选取 m 个点，使得这m个点两两之间的最小距离最大。</p><p><del>一眼二分</del></p><p>二分，然后 check 一下即可</p><p>值得注意的是，记得给原数组排序</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">100010</span>;</span><br><span class="line"><span class="type">const</span> <span class="type">int</span> INF = (<span class="type">int</span>) <span class="number">1e9</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> a[N];</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n, m;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">check</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line">    <span class="type">int</span> cnt = <span class="number">1</span>;</span><br><span class="line">    <span class="type">int</span> lst = <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">2</span>; i &lt;= n; i++) &#123;</span><br><span class="line">        <span class="keyword">if</span> (a[i] - a[lst] &gt;= x) &#123;</span><br><span class="line">            cnt++;</span><br><span class="line">            lst = i;</span><br><span class="line">            <span class="keyword">if</span> (cnt == m) <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> cnt &gt;= m;</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="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;n, &amp;m);</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="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;a[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(a + <span class="number">1</span>, a + n + <span class="number">1</span>);</span><br><span class="line">    <span class="type">int</span> l = <span class="number">0</span>, r = INF, best = <span class="number">-1</span>;</span><br><span class="line">    <span class="keyword">while</span>(l &lt;= r) &#123;</span><br><span class="line">        <span class="type">int</span> mid = (l + r) / <span class="number">2</span>;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">check</span>(mid)) l = mid + <span class="number">1</span>, best = mid;</span><br><span class="line">        <span class="keyword">else</span> r = mid - <span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, best);</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><h2 id="F：矩阵"><a href="#F：矩阵" class="headerlink" title="F：矩阵"></a>F：矩阵</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1143/F">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1143/F);"></div>        <div class="tag-link-right">            <div class="tag-link-title">矩阵</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>题意：</p><p>有一个 $N\times N$ 的矩阵。</p><p>第 $i$ 行第 $j$ 列的值为 $i^2+100000\times i+j^2-100000\times j+i\times j$</p><p>求矩阵中第 $M$ 小的数。</p><h3 id="解法"><a href="#解法" class="headerlink" title="解法"></a>解法</h3><p>写个函数方便测试：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">f</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> y)</span></span>&#123;</span><br><span class="line"><span class="keyword">return</span> <span class="number">1ll</span> * x * x + <span class="number">100000ll</span> * x + <span class="number">1ll</span> * y * y - <span class="number">100000ll</span> * y + <span class="number">1ll</span> * x * y;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>从 $f(1,1)$ 已知输出到 $f(5,5)$ ，结果如下：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">3 -99993 -199987 -299979 -399969</span><br><span class="line">100007 12 -99981 -199972 -299961</span><br><span class="line">200013 100019 27 -99963 -199951</span><br><span class="line">300021 200028 100037 48 -99939</span><br><span class="line">400031 300039 200049 100061 75</span><br></pre></td></tr></table></figure><p>观察到在列数不变的情况下，每一行的大小是递增的</p><p>这样我们就可以先二分答案，再枚举每一行，最后二分答案</p><p>（简单来说就是一个二分套二分</p><p><del>不开long long见祖宗</del></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><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><br><span class="line"><span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">f</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> y)</span></span>&#123;</span><br><span class="line"><span class="keyword">return</span> <span class="number">1ll</span> * x * x + <span class="number">100000ll</span> * x + <span class="number">1ll</span> * y * y - <span class="number">100000ll</span> * y + <span class="number">1ll</span> * x * y;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> T, N;</span><br><span class="line"><span class="type">long</span> <span class="type">long</span> M;</span><br><span class="line"><span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">check</span><span class="params">(<span class="type">long</span> <span class="type">long</span> x)</span> </span>&#123;</span><br><span class="line"><span class="type">long</span> <span class="type">long</span> ret = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">1</span>; j &lt;= N; j++)&#123;</span><br><span class="line"><span class="type">int</span> l = <span class="number">1</span>,r = N,  ans = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(l &lt;= r) &#123;</span><br><span class="line"><span class="type">long</span> <span class="type">long</span> mid = (l + r) / <span class="number">2</span>;</span><br><span class="line"><span class="keyword">if</span>(<span class="built_in">f</span>(mid,j) &lt;= x) &#123;</span><br><span class="line">ans = mid;</span><br><span class="line">l = mid + <span class="number">1</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> r = mid - <span class="number">1</span>;</span><br><span class="line">&#125;</span><br><span class="line">ret += ans;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> ret;</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="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;T);</span><br><span class="line"><span class="keyword">while</span>(T--)&#123;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d%lld&quot;</span>, &amp;N, &amp;M);</span><br><span class="line"><span class="type">long</span> <span class="type">long</span> l = <span class="number">-1e12</span>;</span><br><span class="line"><span class="type">long</span> <span class="type">long</span> r = <span class="number">1e12</span>;</span><br><span class="line"><span class="type">long</span> <span class="type">long</span> ans;</span><br><span class="line"><span class="keyword">while</span>(l &lt;= r)&#123;</span><br><span class="line"><span class="type">long</span> <span class="type">long</span> mid = (l + r) / <span class="number">2</span>;</span><br><span class="line"><span class="type">long</span> <span class="type">long</span> tmp = <span class="built_in">check</span>(mid);</span><br><span class="line"><span class="keyword">if</span>(tmp &gt;= M) &#123;</span><br><span class="line">ans = mid;</span><br><span class="line">r = mid - <span class="number">1</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> l = mid + <span class="number">1</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%lld\n&quot;</span>,ans);</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>]]>
      </content:encoded>
    </item>
    <item>
      <title>【提高组】第三课：STL 学习笔记</title>
      <link>https://sxr.wsq127.top/posts/f579912f/</link>
      <description>map 打理数据统计，set 负责去重查找，bitset 偷懒压位，双集合轻松拿捏矩阵切割计算</description>
      <author>sxr1023</author>
      <category domain="https://sxr.wsq127.top/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">学习笔记</category>
      <category domain="https://sxr.wsq127.top/tags/%E6%8F%90%E9%AB%98%E7%BB%84/">提高组</category>
      <category domain="https://sxr.wsq127.top/tags/%E7%AE%97%E6%B3%95/">算法</category>
      <category domain="https://sxr.wsq127.top/tags/STL/">STL</category>
      <pubDate>Fri, 26 Jan 2024 16:38:13 GMT</pubDate>
      <content:encoded>
        <![CDATA[<hr><p>不用自定义hr的内容和.custom_hr的内容，只要将hr的内容等同于.custom_hr的内容即可（后者替换前者也行）</p><h1 id="STL"><a href="#STL" class="headerlink" title="STL"></a>STL</h1><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1142">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1142);"></div>        <div class="tag-link-right">            <div class="tag-link-title">第三课：STL</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h2 id="A：水果店"><a href="#A：水果店" class="headerlink" title="A：水果店"></a>A：水果店</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1142/A">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1142/A);"></div>        <div class="tag-link-right">            <div class="tag-link-title">水果店</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>考察 map 的使用</p><p>map 可以将一个数据类型映射到另一个数据类型</p><h3 id="map-的定义"><a href="#map-的定义" class="headerlink" title="map 的定义"></a>map 的定义</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><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><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">    map&lt;<span class="type">int</span>, <span class="type">int</span>&gt; mp;</span><br><span class="line">    mp[<span class="number">10</span>] = <span class="number">5</span>;</span><br><span class="line">    mp[<span class="number">20</span>] = <span class="number">1</span>;</span><br><span class="line">    mp[<span class="number">15</span>] = <span class="number">2</span>;</span><br><span class="line">    mp[<span class="number">1000000000</span>] = <span class="number">4</span>;</span><br><span class="line">    cout &lt;&lt; mp.<span class="built_in">size</span>() &lt;&lt; endl;</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><p>以上代码会输出 $3$</p><h3 id="map-的遍历"><a href="#map-的遍历" class="headerlink" title="map 的遍历"></a>map 的遍历</h3><h4 id="迭代器"><a href="#迭代器" class="headerlink" title="迭代器"></a>迭代器</h4><p>因为 map 是一种容器，所以只能用迭代器进行访问</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> (map&lt;<span class="type">int</span>, <span class="type">int</span>&gt;::iterator it = mp.<span class="built_in">begin</span>(); it != mp.<span class="built_in">end</span>(); it++) &#123;</span><br><span class="line">    cout &lt;&lt; it-&gt;first &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; it-&gt;second &lt;&lt; endl;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这样可以对 map 进行排序</p><p>如果你利用这份代码进行输出的话，你会发现：输出的结果会自动排序，先按第一维关键字（<code>it-&gt;first</code>）进行从小到大，再按第二维关键字（<code>it-&gt;second</code>）从小到大进行排序</p><h4 id="auto-进行遍历"><a href="#auto-进行遍历" class="headerlink" title="auto 进行遍历"></a>auto 进行遍历</h4><p>我们发现刚刚的代码太长了，有没有什么办法可以让代码变短一点呢？</p><p>答案是有的（建议充分理解上面的方法后再使用以下方法）</p><p>使用 C++11 的 auto</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> (<span class="keyword">auto</span> it : mp) &#123;</span><br><span class="line">    cout &lt;&lt; it.first &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; it.second;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>值得注意的是，如果使用迭代器，输出就是 <code>it-&gt;first</code> 和 <code>it-&gt;second</code></p><p>如果使用 auto，输出就是 <code>it.first</code> 和 <code>it.second</code></p><h3 id="map-的用法"><a href="#map-的用法" class="headerlink" title="map 的用法"></a>map 的用法</h3><p><code>map&lt;int,int&gt; mp</code> 定义</p><p><code>mp[10]=100</code> 映射</p><p><code>mp.find(10)</code> 查找（第一关键字） ,找到返回得迭代器，找不到返回 <code>mp.end</code></p><p>map 可以很方便的进行计数，统计，因为它是一个容器，第一关键字和第二关键字是不需要管大小的</p><p>但是它的效率不是 $O(1)$ 的，而是 $O(logn)$ </p><p>本题的朴素版写法（迭代器）</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><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><br><span class="line"><span class="comment">//map 是可以叠加定义的，但是要注意中间的空格，低版本的编译器可能会报错</span></span><br><span class="line">map&lt;string,map&lt;string,<span class="type">int</span>&gt; &gt;mp;</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">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;n);</span><br><span class="line">    string shuiguo, city;</span><br><span class="line">    <span class="type">int</span> xiaoliang;</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">        cin &gt;&gt; shuiguo &gt;&gt; city &gt;&gt; xiaoliang;</span><br><span class="line">        mp[city][shuiguo] += xiaoliang;</span><br><span class="line">    &#125;</span><br><span class="line">    map&lt;string,map&lt;string,<span class="type">int</span>&gt; &gt;::iterator it1;</span><br><span class="line">    map&lt;string,<span class="type">int</span>&gt;::iterator it2;</span><br><span class="line">    <span class="comment">//遍历整个容器</span></span><br><span class="line">    <span class="comment">//先遍历外面map&lt;string, map&lt;string, int&gt; &gt;</span></span><br><span class="line">    <span class="keyword">for</span>(it1 = mp.<span class="built_in">begin</span>(); it1 != mp.<span class="built_in">end</span>(); it1++) &#123;</span><br><span class="line">        cout &lt;&lt; it1-&gt;first &lt;&lt; endl;</span><br><span class="line">        <span class="comment">//再遍历里面的map&lt;string, int&gt;</span></span><br><span class="line">        <span class="keyword">for</span>(it2 = it1-&gt;second.<span class="built_in">begin</span>(); it2 != it1-&gt;second.<span class="built_in">end</span>(); it2++)</span><br><span class="line">        &#123;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;   |----&quot;</span> &lt;&lt; it2-&gt;first &lt;&lt; <span class="string">&quot;(&quot;</span> &lt;&lt; it2-&gt;second &lt;&lt; <span class="string">&quot;)&quot;</span> &lt;&lt; endl;</span><br><span class="line">        &#125;</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><p>因为这样写代码量太多了，所以就有了更简短的方法</p><p>本题的高端写法（auto）</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><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><br><span class="line">map&lt;string, map&lt;string, <span class="type">int</span>&gt; &gt; mp;</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">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;n);</span><br><span class="line">    string shuiguo, city;</span><br><span class="line">    <span class="type">int</span> xiaoliang;</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">        cin &gt;&gt; shuiguo &gt;&gt; city &gt;&gt; xiaoliang;</span><br><span class="line">        mp[city][shuiguo] += xiaoliang;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">//auto直接在for循环里面用 &quot;:&quot; 遍历</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it1 : mp) &#123;</span><br><span class="line">        cout &lt;&lt; it<span class="number">1.f</span>irst &lt;&lt; endl;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> it2 : it<span class="number">1.</span>second) &#123;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;   |----&quot;</span> &lt;&lt; it<span class="number">2.f</span>irst &lt;&lt; <span class="string">&quot;(&quot;</span> &lt;&lt; it<span class="number">2.</span>second &lt;&lt; <span class="string">&quot;)&quot;</span> &lt;&lt; endl;</span><br><span class="line">        &#125;</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><h2 id="Set"><a href="#Set" class="headerlink" title="Set"></a>Set</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1142/B">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1142/B);"></div>        <div class="tag-link-right">            <div class="tag-link-title">Set</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h3 id="set-的用法"><a href="#set-的用法" class="headerlink" title="set 的用法"></a>set 的用法</h3><p><strong>注意：set是集合，自动去重</strong></p><h4 id="基本用法"><a href="#基本用法" class="headerlink" title="基本用法"></a>基本用法</h4><p><code>set&lt;int&gt; st</code> 定义</p><p><code>st.insert(x)</code> 插入 $x$ （默认从小到大排序）</p><p>遍历：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> (set&lt;<span class="type">int</span>&gt;::iterator it = st.<span class="built_in">begin</span>(); it != st.<span class="built_in">end</span>(); it++) &#123;</span><br><span class="line">    cout &lt;&lt; *it &lt;&lt; endl;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>或者</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> (<span class="keyword">auto</span> it : st) &#123;</span><br><span class="line">    cout &lt;&lt; it &lt;&lt; endl;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>最值、删除和查找</strong></p><p>最小值为 <code>*st.begin()</code> </p><p>最大值为 <code>*(--st.end())</code> 或 <code>*(st.rbegin())</code> </p><p>要注意的是：迭代器只能 ++ 或 - - ，如果换成 +1 或 -1 就会报错</p><p>删除有两种方式</p><ol><li><code>st.erase(10)</code></li><li><code>st.erase(it)</code></li></ol><p>也就是说 <code>st.erase()</code> 函数的参数既可以是一个数值，也可以是一个迭代器</p><p>但是如果删除一个并不存在的数值或者迭代器，就会出现一些奇奇怪怪的 bug，因此，在执行删除操作之前，一般要查找这个元素是否存在</p><p><code>st.find(10)</code> 查找，找到返回迭代器，否则返回 <code>st.end()</code></p><h4 id="lower-bound-和-upper-bound"><a href="#lower-bound-和-upper-bound" class="headerlink" title="lower_bound 和 upper_bound"></a>lower_bound 和 upper_bound</h4><ol><li><code>st.lower_bound(10)</code> 返回大于等于 $10$ 的第一个迭代器位置，如果没有返回 <code>st.end()</code></li><li><code>st.upper_bound(10)</code> 返回第一个严格大于 $10$ 的迭代器位置，如果没有分会 <code>st.end()</code></li></ol><p>利用这两个函数，可以衍生出其他的技巧</p><ol><li>最后一个小于：找出第一个大于等于，再往前跳一个</li></ol><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">auto</span> it = st.<span class="built_in">lower_bound</span>(<span class="number">20</span>);</span><br><span class="line"><span class="keyword">if</span> (it != st.<span class="built_in">begin</span>()) &#123;</span><br><span class="line">    it--;</span><br><span class="line">    cout &lt;&lt; *it &lt;&lt; endl;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol><li>求最后一个不大于（超过）：求出第一个严格大于，再往前跳一个</li></ol><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">auto</span> it = st.<span class="built_in">upper_bound</span>(<span class="number">20</span>);</span><br><span class="line"><span class="keyword">if</span> (it != st.<span class="built_in">begin</span>()) &#123;</span><br><span class="line">    it--;</span><br><span class="line">    cout &lt;&lt; *it &lt;&lt; endl;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>注意：凡是涉及到向前跳一个的，都要判断等不等于 begin</strong></p><h3 id="multiset-和-set-的区别"><a href="#multiset-和-set-的区别" class="headerlink" title="multiset 和 set 的区别"></a>multiset 和 set 的区别</h3><p>首先 multiset 是可重复集合，而 set 是不可重复集合</p><p>其次，multiset 如果是删除一个数值，那么会把所有等于这个数的全部删除，如果删除的是一个迭代器，那么只会删除这个位置</p><hr><p><em>巧记 begin 和 end</em></p><p><strong>计算机左闭上右开，所以 <code>--end()</code> 才有数值</strong></p><p><strong>所有操作不成立全部返回 end ，唯独向前跳一个是例外</strong></p><p><strong>特殊记忆小于某个数的最大的和不大于（超过）某个数最大的</strong></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><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><br><span class="line">multiset&lt;<span class="type">int</span>&gt; st;</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">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;n);</span><br><span class="line">    <span class="keyword">while</span>(n--) &#123;</span><br><span class="line">        string op;</span><br><span class="line">        <span class="type">int</span> x;</span><br><span class="line">        cin &gt;&gt; op;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;x);</span><br><span class="line">        <span class="keyword">if</span> (op == <span class="string">&quot;Push&quot;</span>) st.<span class="built_in">insert</span>(x);</span><br><span class="line">        <span class="keyword">else</span> &#123;</span><br><span class="line">            <span class="comment">//这里也可以写成multiset&lt;int&gt;::iterator it = st.upper_bound(x);</span></span><br><span class="line">            <span class="keyword">auto</span> it = st.<span class="built_in">upper_bound</span>(x);</span><br><span class="line">            <span class="comment">//注意这里是判断等不等于st.begin()</span></span><br><span class="line">            <span class="keyword">if</span> (it == st.<span class="built_in">begin</span>()) <span class="built_in">printf</span>(<span class="string">&quot;No Element!\n&quot;</span>);</span><br><span class="line">            <span class="keyword">else</span> &#123;</span><br><span class="line">                <span class="comment">//it在这里再--，在上面的话可能会出错</span></span><br><span class="line">                it--;</span><br><span class="line">                <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, *it);</span><br><span class="line">                st.<span class="built_in">erase</span>(it);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</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><h2 id="biset"><a href="#biset" class="headerlink" title="biset"></a>biset</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1142/C">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1142/C);"></div>        <div class="tag-link-right">            <div class="tag-link-title">bitset</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h3 id="暴力"><a href="#暴力" class="headerlink" title="暴力"></a>暴力</h3><blockquote><p>所有题目都要首先要写出暴力，然后再去思考优化。</p></blockquote><p>管他能不能过，我们可以先把暴力当作找思路</p><p>观察到 $C \le 10000， N \le 1000$ （分别小于等于 $1$ 万和 $1$ 千）</p><p>直接开一个数组 $a[10010][1010]$ </p><p>$a_{ij}$ 表示 $i$  是否属于 $j$ 集合</p><p>$a_{ij}=1$ 表示 $i$ 属于 $j$ 集合</p><p>$a_{ij}=0$ 表示 $i$ 不属于 $j$ 集合</p><p>这样的话就要每次 $O(N)$ 查询</p><p>但是询问有 $200000$ 个，整体的复杂度为 $O(NQ)$</p><p><del>直接下播</del></p><h3 id="压位"><a href="#压位" class="headerlink" title="压位"></a>压位</h3><p>$a$ 数组很明显有很多的浪费，因为它只是用来表示 $0$ 或 $1$ 的</p><p>然而一个 int 本身就有 $32$ 个 $0$ 或 $1$</p><p>所以可以对 $a$ 数组进行一些改编</p><p>开一个数组 $a[10010][40]$</p><p>相当于把 $1$ 千压成了 $40$</p><p>一个 int 是 $32$ 个位，$40$ 个 int 就可以表示 $1$ 千多个集合了</p><h3 id="bitset-的使用方法"><a href="#bitset-的使用方法" class="headerlink" title="bitset 的使用方法"></a>bitset 的使用方法</h3><p>手写压位太麻烦了，各种位运算痛不欲生，有没有更简单的方法呢？</p><p>别忘了 STL 就是为了让代码量变少而生的</p><p>我们可以使用 STL 中的 bitset</p><ol><li><p>定义： <code>bitset&lt;1010&gt; b[10010]</code>（<strong>注意：&lt;&gt; 里面必须是常数</strong>），可以理解为长度位 $1010$ 的二进制字符串</p></li><li><p><code>b[x].set(y)</code> 把 $x$ 的第 $y$  设为 $1$</p></li><li><code>(b[x] &amp; b[y])</code> 返回两个 bitset 与之后的新的 bitset</li><li><code>b[x].count()</code> 返回 $b[x]$ 中 $1$ 的数量</li><li><code>b[x].flip(pos)</code> 把 $b[x]$ 中的第 $pos$ 位 $0$ 变 $1$，$1$ 变 $0$ </li><li><code>b[x].reset()</code> 清空（把所有位设为 $0$ ）</li><li><code>b[x].any()</code> 如果 $b[x]$ 至少有一位为 $1$，返回 true，否则返回 false</li></ol><p>更多内容详见以下链接 </p><a class="tag-Link" target="_blank" href="https://cplusplus.com">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=cplusplus.com);"></div>        <div class="tag-link-right">            <div class="tag-link-title">C++ Forum</div>            <div class="tag-link-sitename">cplusplus</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><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><br><span class="line"></span><br><span class="line">bitset&lt;1010&gt; a[<span class="number">10010</span>];<span class="comment">//用值当做下标</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;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;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> k, x;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;k);</span><br><span class="line">        <span class="keyword">while</span>(k--) &#123;</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;x);</span><br><span class="line">            a[x].<span class="built_in">set</span>(i);<span class="comment">//x和i在同一集合</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> Q;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;Q);</span><br><span class="line">    <span class="keyword">while</span>(Q--) &#123;</span><br><span class="line">        <span class="type">int</span> x, y;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;x, &amp;y);</span><br><span class="line">        <span class="comment">//如果两个与了之后不为0，就说明这两个有相同的1，即在同一集合</span></span><br><span class="line">        <span class="keyword">if</span>((a[x] &amp; a[y]).<span class="built_in">any</span>()) <span class="built_in">printf</span>(<span class="string">&quot;Yes\n&quot;</span>);</span><br><span class="line">        <span class="keyword">else</span> <span class="built_in">printf</span>(<span class="string">&quot;No\n&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><h2 id="矩阵切割"><a href="#矩阵切割" class="headerlink" title="矩阵切割"></a>矩阵切割</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1142/D">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1142/D);"></div>        <div class="tag-link-right">            <div class="tag-link-title">矩阵切割</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>首先，我们发现，切痕可以用 set 维护</p><p>然后，我们发现，每切一刀，只改变这一维中某一块的大小，其他的都不变</p><p>而最大面积本质上讲就是横向的最大间距乘纵向的最大间距</p><p>当切一刀的时候其实只会改变一个间距，其他的间距都不会变，那么就可以把这个间距找出来，删掉，再插入两个新的间距</p><p>又因为间距会重复，所以需要两个 multiset 来维护间距 </p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><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><br><span class="line">set&lt;<span class="type">long</span> <span class="type">long</span>&gt; s1,s2;</span><br><span class="line">multiset&lt;<span class="type">long</span> <span class="type">long</span>&gt; ss1,ss2;</span><br><span class="line"></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">long</span> <span class="type">long</span> w, h, n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lld%lld%lld&quot;</span>, &amp;w, &amp;h, &amp;n);</span><br><span class="line">    <span class="comment">//插入边界</span></span><br><span class="line">    s<span class="number">1.</span><span class="built_in">insert</span>(w), s<span class="number">2.</span><span class="built_in">insert</span>(h);</span><br><span class="line">    s<span class="number">1.</span><span class="built_in">insert</span>(<span class="number">0</span>), s<span class="number">2.</span><span class="built_in">insert</span>(<span class="number">0</span>);</span><br><span class="line">    ss<span class="number">1.</span><span class="built_in">insert</span>(w), ss<span class="number">2.</span><span class="built_in">insert</span>(h);</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">char</span> c;</span><br><span class="line">        <span class="type">int</span> x;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot; %c %d&quot;</span>, &amp;c, &amp;x);</span><br><span class="line">        <span class="keyword">if</span>(c == <span class="string">&#x27;H&#x27;</span>) &#123;</span><br><span class="line">            <span class="comment">//找到这个切痕的切面一个切痕和后面一个切痕</span></span><br><span class="line">            <span class="keyword">auto</span> it=s<span class="number">2.</span><span class="built_in">upper_bound</span>(x),it2=s<span class="number">2.</span><span class="built_in">upper_bound</span>(x);</span><br><span class="line">            it2--;<span class="comment">//注意这里要--</span></span><br><span class="line">            <span class="type">long</span> <span class="type">long</span> k = (*it) - (*it2);</span><br><span class="line">            ss<span class="number">2.</span><span class="built_in">erase</span>(ss<span class="number">2.f</span>ind(k));</span><br><span class="line">            ss<span class="number">2.</span><span class="built_in">insert</span>(x - (*it2)), ss<span class="number">2.</span><span class="built_in">insert</span>((*it)-x);</span><br><span class="line">            s<span class="number">2.</span><span class="built_in">insert</span>(x);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> &#123;</span><br><span class="line">            <span class="keyword">auto</span> it=s<span class="number">1.</span><span class="built_in">upper_bound</span>(x),it2=s<span class="number">1.</span><span class="built_in">upper_bound</span>(x);</span><br><span class="line">            it2--;</span><br><span class="line">            <span class="type">long</span> <span class="type">long</span> k=(*it)-(*it2);</span><br><span class="line">            ss<span class="number">1.</span><span class="built_in">erase</span>(ss<span class="number">1.f</span>ind(k));</span><br><span class="line">            ss<span class="number">1.</span><span class="built_in">insert</span>(x - (*it2)), ss<span class="number">1.</span><span class="built_in">insert</span>((*it)-x);</span><br><span class="line">            s<span class="number">1.</span><span class="built_in">insert</span>(x);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">//最值相乘</span></span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%lld\n&quot;</span>, *(--ss<span class="number">1.</span><span class="built_in">end</span>()) * *(--ss<span class="number">2.</span><span class="built_in">end</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>]]>
      </content:encoded>
    </item>
    <item>
      <title>【提高组】第二课：贪心 学习笔记</title>
      <link>https://sxr.wsq127.top/posts/791f5c44/</link>
      <description>两头来回比对凑最小字典序，坐标转区间摆最少雷达，排序配小木桶薅最合适的干活机器</description>
      <author>sxr1023</author>
      <category domain="https://sxr.wsq127.top/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">学习笔记</category>
      <category domain="https://sxr.wsq127.top/tags/%E6%8F%90%E9%AB%98%E7%BB%84/">提高组</category>
      <category domain="https://sxr.wsq127.top/tags/%E7%AE%97%E6%B3%95/">算法</category>
      <pubDate>Wed, 24 Jan 2024 19:13:26 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="贪心"><a href="#贪心" class="headerlink" title="贪心"></a>贪心</h1><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1141">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1141);"></div>        <div class="tag-link-right">            <div class="tag-link-title">第二课：贪心</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h2 id="A：最小字典序"><a href="#A：最小字典序" class="headerlink" title="A：最小字典序"></a>A：最小字典序</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1141/problem/A">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1141/problem/A);"></div>        <div class="tag-link-right">            <div class="tag-link-title">最小字典序</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>贪心的去选取</p><p>例如样例 <code>ACDBCB</code></p><p>开头和结尾相比，A 小，B 大，选择 A，此时 $t$ 为 <code>A</code></p><p>字符串变成 <code>CDBCB</code>，B 小，C大，选 B，此时 $t$ 为 <code>AB</code></p><p>看似只要开头和结尾不同就只要选择小的哪个就 OK 了，但是如果开头和结尾相同呢？</p><p>此时字符串为 <code>CDBC</code>，选择左边的 C 还是右边的 C 就值得思考了。</p><p>如果选择左边，接下来 $t$ 最终会变成 <code>ABCCBD</code> ，显然不是最优的，那么就应该先选择右边的 C，最终得到的才是正确的答案</p><h3 id="正解"><a href="#正解" class="headerlink" title="正解"></a>正解</h3><p>如果开头和结尾不同，那么就取较小的字符</p><p>当一个字符串的开头和结尾相同时，就要两边同时往里面看，一直看到两边不同为止。</p><p>假设向里面看到的两个不同的位置的字符从左到右分别是 $A$ 和 $B$ ，那么如果 $A$ 小于 $B$，就先取左边的开头，如果 $B$ 小于 $A$ ，那么就取右边的结尾</p><p>这样做的复杂度为 $O(n^2)$，而 $n$ 最大只有 $2000$，完全可以接受</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><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><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">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;n);</span><br><span class="line">    string s;</span><br><span class="line">    cin &gt;&gt; s;</span><br><span class="line">    string t = <span class="string">&quot;&quot;</span>;</span><br><span class="line">    <span class="type">int</span> l = <span class="number">0</span>, r = n - <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">while</span>(l &lt;= r) &#123;<span class="comment">//两个变量维护开头和结尾</span></span><br><span class="line">        <span class="comment">//如果开头和结尾不同，就取较小的一个</span></span><br><span class="line">        <span class="keyword">if</span> (s[l] &lt; s[r]) t += s[l], l++;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span> (s[r] &lt; s[l]) t += s[r], r--;</span><br><span class="line">        <span class="keyword">else</span> &#123;</span><br><span class="line">            <span class="comment">//两个变量同时往里面缩</span></span><br><span class="line">            <span class="type">int</span> idx1 = l, idx2 = r;</span><br><span class="line">            <span class="keyword">while</span>(idx1 &lt;= idx2 &amp;&amp; s[idx1] == s[idx2]) idx1++, idx2--;</span><br><span class="line">            <span class="keyword">if</span> (s[idx1] &lt; s[idx2]) t += s[l], l++;</span><br><span class="line">            <span class="keyword">else</span> t += s[r], r--;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">//别忘了每80个字符换行一次</span></span><br><span class="line">    <span class="type">int</span> len = t.<span class="built_in">size</span>();</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; len; i++) &#123;</span><br><span class="line">        cout &lt;&lt; t[i];</span><br><span class="line">        <span class="keyword">if</span> ((i + <span class="number">1</span>) % <span class="number">80</span> == <span class="number">0</span>) <span class="built_in">printf</span>(<span class="string">&quot;\n&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><h2 id="B：雷达"><a href="#B：雷达" class="headerlink" title="B：雷达"></a>B：雷达</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1141/problem/B">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1141/problem/B);"></div>        <div class="tag-link-right">            <div class="tag-link-title">雷达</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h3 id="直接按-x-排序"><a href="#直接按-x-排序" class="headerlink" title="直接按 $x$ 排序"></a>直接按 $x$ 排序</h3><p>直觉告诉我们，可以按照点的 $x$ 排序，这样的话这个雷达不仅可以把这个点覆盖，还有更多的机会取覆盖更右边的点</p><p>但是会有一个问题</p><p>假设有连个点，分别为 $C_1,C_2$，能够覆盖他们的雷达的最远位置分别是 $A_1,A_2$  ，它们格子距离雷达的长度分别是 $l_1,l_2$ </p><p>那么如果选择了 $A_1$ ，就会错过 $C_2$ ，原因是因为，$C_2$ 距离 $x$ 轴是包含了高度的，这样计算的话，如果 $l_1$ 就等于 $d$ ，也就是雷达的最大半径，$A_1$ 就无法覆盖。原来的贪心策略出现了问题</p><h3 id="正解-1"><a href="#正解-1" class="headerlink" title="正解"></a>正解</h3><p>可以换一个角度思考这个问题</p><p>对于每一个点，设能够覆盖到它的最远的雷达分别为 $B_1,B_2 $</p><p>那么这两个点就构成了一个区间</p><p>如图，红色的点的位置为 $(x,y)$，设点 $P$ 的左边为 $(x,y)$ ，那么 $B_1,B2$ 的 $y$ 坐标肯定都是 $0$ ，$x$ 坐标分别为 $x-\sqrt{d^2-y^2}$ 和 $x+\sqrt{d^2-y^2}$（关于原理论证，详见下）</p><p>也就是说，在 区间$[x-\sqrt{d^2-y^2}，x+\sqrt{d^2-y^2}]$ 内任意选一个雷达，都可以覆盖掉这个点</p><p>那么就可以得出这么一个结论，所有的点都可以转化成若干段区间。</p><p>原问题就被转换成了一个新的问题，即给你若干个区间，选择最少的点，使得每个区间内都有点</p><p>新问题中的“点”其实就是雷达，根据模型转换的思想，就不需要管原问题了</p><h3 id="论证"><a href="#论证" class="headerlink" title="论证"></a>论证</h3><p>还是上面这个图</p><p>设左边黄色的线上的点是 $B_1$ ，右边黄色的线上的点是 $B_2$ ，红色的点为 $P$ </p><p>我们观察到到三角形 $PB_1B_2$ 中的一条紫色的先把这个三角形分成两半，而且是两个直角三角形</p><p>直角三角有一个至关重要的结论——勾股定理，也就是 $a^2+b^2=c^2$ </p><p>那么，现在我们把这个公式倒过来用</p><hr><p>设点 $P$ 的坐标为 $(x,y)$ </p><p>已知紫色的线于 $x$ 轴垂直，设垂足为 $Q$</p><p>已知三角形 $PB_1Q$ 的斜边长度为 $d$ ，高的长度为 $y$ ，在勾股定理中分别代表 $a$ 和 $c$ </p><p>那么就可以得到 $d^2$ 和 $y^2$ ，即勾股定理中的 $a^2$ 和 $c^2$ </p><p>那么就已知 $a^2$ 和 $c^2$ </p><p>$\because a^2+b^2=c^2$</p><p>$\therefore b^2=c^2-a^2$</p><p>$\therefore b=\sqrt{c^2-a^2}$</p><p><del>数学语言不太标准，勿喷</del></p><h3 id="区间覆盖问题"><a href="#区间覆盖问题" class="headerlink" title="区间覆盖问题"></a>区间覆盖问题</h3><p>通过模型转化，得到以下新问题</p><p>给你若干个区间，求至少多少个点，可以覆盖所有区间</p><p>因为选择右端点可以尽可能多的覆盖区间，所以贪心的策略就是只选右端点</p><p>一定存在这样一种答案，所有选择的点都是右端点</p><p>按照右端点排序</p><p>用变量 $R$ 维护当前选区的右端点</p><p>如果下一个区间的左端点小于 $R$ ，那么就不用管这个区间了，这个区间会直接被覆盖</p><h3 id="无解的情况"><a href="#无解的情况" class="headerlink" title="无解的情况"></a>无解的情况</h3><p>当我们发现输入的点的 $y$ 坐标大于 $d$ 时，就是误解</p><p><strong>不推荐在输入时 break ，尤其是多组数据，会出问题</strong></p><p>注意：这道题目有负数，但只要特判无解的时候加上 fabs 或者 abs 就行了</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1010</span>;</span><br><span class="line"><span class="type">double</span> x[N], y[N];</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n, r;</span><br><span class="line"><span class="comment">//转换后的区间</span></span><br><span class="line">pair&lt;<span class="type">double</span>, <span class="type">double</span>&gt; a[N];</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">init</span><span class="params">()</span> </span>&#123;</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">double</span> tmp = <span class="built_in">sqrt</span>(r * r - y[i] * y[i]);</span><br><span class="line">        a[i].first= x[i] - tmp;</span><br><span class="line">        a[i].second = x[i] + tmp;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(pair&lt;<span class="type">double</span>, <span class="type">double</span>&gt; _x, pair&lt;<span class="type">double</span>, <span class="type">double</span>&gt; _y)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">return</span> _x.second &lt; _y.second;</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="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;n, &amp;r);</span><br><span class="line">    <span class="type">int</span> flag = <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="built_in">scanf</span>(<span class="string">&quot;%lf%lf&quot;</span>, &amp;x[i], &amp;y[i]);</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">fabs</span>(y[i]) &gt; r) flag = <span class="number">1</span>;<span class="comment">//注意y[i]可能是负数</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">//特判无解</span></span><br><span class="line">    <span class="keyword">if</span> (flag == <span class="number">1</span>) &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<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><br><span class="line">    <span class="built_in">init</span>();</span><br><span class="line">    <span class="built_in">sort</span>(a + <span class="number">1</span>, a + n + <span class="number">1</span>, cmp);<span class="comment">//排序，右端点越大越靠前</span></span><br><span class="line">    <span class="type">double</span> R = a[<span class="number">1</span>].second;</span><br><span class="line">    <span class="type">int</span> ans = <span class="number">1</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">        <span class="keyword">if</span>(a[i].first &gt; R) R = a[i].second, ans++;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, ans);</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><h2 id="C：机器分配"><a href="#C：机器分配" class="headerlink" title="C：机器分配"></a>C：机器分配</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1141/problem/C">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1141/problem/C);"></div>        <div class="tag-link-right">            <div class="tag-link-title">机器分配</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h3 id="把机器和任务转化成点"><a href="#把机器和任务转化成点" class="headerlink" title="把机器和任务转化成点"></a>把机器和任务转化成点</h3><p>我们可以把机器和任务都转化成平面直角坐标系上的点</p><p>一个机器要想完成一个任务，那么代表这个机器的点必须在代表任务的点的上方或右方或右上方</p><h3 id="从分数入手"><a href="#从分数入手" class="headerlink" title="从分数入手"></a>从分数入手</h3><p>题目中说完成一个任务的分数为 $500x+2y$ </p><p>显然，$x$ 增加 $1$ ，分数就会增加 $500$ ，$y$ 增加 $1$ ，分数就会增加 $2$ ，而 $y$ 最大只有 $100$ </p><p>这样就可以得出一个结论：优先去做 $x$ 较大的任务</p><p>但是题目的第一需求时完成任务的数量较多，第二需求是分数较多</p><p>优先完成 $x$ 较大的任务会不会导致完成的任务的数量变少呢？</p><p>肯定是会影响答案的</p><p>那么在任务选择机器的时候，就应该选择最合适的机器，性价比最高的机器</p><p>就是说只要这个机器能完成当前的任务就先顶了，没必要让机器大出任务很多</p><h3 id="正解-2"><a href="#正解-2" class="headerlink" title="正解"></a>正解</h3><p>把机器和任务分别都按照 $x$ 从大到小排序</p><p>在任务数组里面设置一个 $i$ 指针，在机器数组里面设置一个 $j$ 指针，因为数组已经按照 $x$ 排序，所以可以让 $j$ 不断滑动，滑动到刚好 $j$ 位置的 $x$ 大于等于当前任务的 $x$ 并且 $j$ 位置的 $x$ 小于当前任务的 $x$ </p><p>得到这样的一个 $j$ 后，只需要在 [$1,j$] 区间中找一个最合适的机器即可（假设下标从 $1$ 开始）</p><p>此时，机器的 $x$ 已经没有用了，因为我已经知道 [$1,j$] 区间中所有的机器的 $x$ 都大于当前的任务的 $x$ ，所有不用再考虑 $x$ 了。为了性价比最高，应当选择 [$1,j$] 区间中 $y$ 最小的机器，并且这个机器的 $y$ 大于任务的 $y$ </p><p><strong>注意开 long long</strong></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">100010</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> cnt[<span class="number">110</span>];</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">node</span> &#123;</span><br><span class="line">    <span class="type">int</span> x, y;</span><br><span class="line">    <span class="comment">//重载小于号运算符</span></span><br><span class="line">    <span class="type">bool</span> <span class="keyword">operator</span> &lt; (<span class="type">const</span> node &amp;cmp) <span class="type">const</span> &#123;</span><br><span class="line">        <span class="keyword">if</span> (x != cmp.x) <span class="keyword">return</span> x &gt; cmp.x;</span><br><span class="line">        <span class="keyword">return</span> y &gt; cmp.y;</span><br><span class="line">    &#125;</span><br><span class="line">&#125; a[N], b[N];</span><br><span class="line"></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">    <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;n, &amp;m);</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="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;a[i].x, &amp;a[i].y);</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">1</span>; i &lt;= m; i++) &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;b[i].x, &amp;b[i].y);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(a + <span class="number">1</span>, a + n + <span class="number">1</span>);</span><br><span class="line">    <span class="built_in">sort</span>(b + <span class="number">1</span>, b + m + <span class="number">1</span>);</span><br><span class="line">    <span class="comment">//注意开long long</span></span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> ans1 = <span class="number">0</span>, ans2 = <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>, j = <span class="number">1</span>; i &lt;= m; i++) &#123;</span><br><span class="line">        <span class="keyword">while</span>(j &lt;= n &amp;&amp; a[j].x &gt;= b[i].x) &#123;</span><br><span class="line">            cnt[a[j].y]++;<span class="comment">//桶</span></span><br><span class="line">            j++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">//利用桶排序的效率更高</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> k = b[i].y; k &lt;= <span class="number">100</span>; k++) &#123;</span><br><span class="line">            <span class="keyword">if</span> (cnt[k]) &#123;</span><br><span class="line">                ans1++;</span><br><span class="line">                ans2 += <span class="number">500LL</span> * b[i].x + <span class="number">2LL</span> * b[i].y;</span><br><span class="line">                cnt[k]--;</span><br><span class="line">                <span class="keyword">break</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%lld %lld\n&quot;</span>, ans1, ans2);</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>]]>
      </content:encoded>
    </item>
    <item>
      <title>【提高组】第一课：枚举 学习笔记</title>
      <link>https://sxr.wsq127.top/posts/10b3bb6e/</link>
      <description>DFS 暴力搞定方格翻转，尺取薅取合法区间，双指针拿捏异或，折半枚举拯救 2 的 35 次方</description>
      <author>sxr1023</author>
      <category domain="https://sxr.wsq127.top/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">学习笔记</category>
      <category domain="https://sxr.wsq127.top/tags/%E6%8F%90%E9%AB%98%E7%BB%84/">提高组</category>
      <category domain="https://sxr.wsq127.top/tags/%E7%AE%97%E6%B3%95/">算法</category>
      <category domain="https://sxr.wsq127.top/tags/%E6%9E%9A%E4%B8%BE/">枚举</category>
      <pubDate>Tue, 23 Jan 2024 19:07:11 GMT</pubDate>
      <content:encoded>
        <![CDATA[<h1 id="枚举"><a href="#枚举" class="headerlink" title="枚举"></a>枚举</h1><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1140">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1140);"></div>        <div class="tag-link-right">            <div class="tag-link-title">第一课：枚举</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h2 id="A：dfs暴力枚举，二进制枚举"><a href="#A：dfs暴力枚举，二进制枚举" class="headerlink" title="A：dfs暴力枚举，二进制枚举"></a>A：dfs暴力枚举，二进制枚举</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1140/A">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1140/A);"></div>        <div class="tag-link-right">            <div class="tag-link-title">按钮变色</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>题意：最少操作几次是的所有格子变成同色</p><p>以某个格子为中心的翻转最多只会有一次</p><p>同样的一个格子不会作为中心被翻转两次</p><h3 id="解法"><a href="#解法" class="headerlink" title="解法"></a>解法</h3><p>暴力枚举每个格子翻或者不翻，最后检测是否全部同色，如果全部同色，看一下操作几次，更新答案</p><p>change 函数改变 $x,y$  及周边格子的颜色</p><p>check 函数判断格子颜色是否全部相同</p><p>dfs 函数暴力枚举。dep 参数是搜到了哪个位置（最大16），used 参数记录翻转的次数</p><p>不凡当前格子就去 dep + 1 位置，used 不变</p><p>翻转当前格子就去 dep + 1 位置，used + 1</p><p><strong>注意回溯！因为 used 作为参数，所以不用回溯，只要回溯 mp 数组即可</strong></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br></pre></td><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><br><span class="line"><span class="type">char</span> mp[<span class="number">10</span>][<span class="number">10</span>];</span><br><span class="line"></span><br><span class="line"><span class="comment">//5个方向</span></span><br><span class="line"><span class="type">int</span> dx[] = &#123;<span class="number">0</span>, <span class="number">0</span>, <span class="number">1</span>, <span class="number">0</span>, <span class="number">-1</span>&#125;;</span><br><span class="line"><span class="type">int</span> dy[] = &#123;<span class="number">0</span>, <span class="number">1</span>, <span class="number">0</span>, <span class="number">-1</span>, <span class="number">0</span>&#125;;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> ans = <span class="number">20</span>;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">change</span><span class="params">(<span class="type">int</span> x, <span class="type">int</span> y)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; <span class="number">5</span>; i++) &#123;</span><br><span class="line">        <span class="type">int</span> ax = x + dx[i];</span><br><span class="line">        <span class="type">int</span> ay = y + dy[i];</span><br><span class="line">        <span class="keyword">if</span> (ax &lt; <span class="number">0</span> || ax &gt; <span class="number">4</span> || ay &lt; <span class="number">0</span> || ay &gt; <span class="number">4</span>)</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        <span class="keyword">if</span> (mp[ax][ay] == <span class="string">&#x27;w&#x27;</span>) mp[ax][ay] = <span class="string">&#x27;b&#x27;</span>;</span><br><span class="line">        <span class="keyword">else</span> mp[ax][ay] = <span class="string">&#x27;w&#x27;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">check</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="type">char</span> x = mp[<span class="number">0</span>][<span class="number">0</span>];</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; <span class="number">4</span>; i++) &#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; <span class="number">4</span>; j++) &#123;</span><br><span class="line">            <span class="keyword">if</span> (mp[i][j] != x) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</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">void</span> <span class="title">dfs</span><span class="params">(<span class="type">int</span> dep, <span class="type">int</span> used)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (dep == <span class="number">16</span>) &#123;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">check</span>()) ans = <span class="built_in">min</span>(ans, used);</span><br><span class="line">        <span class="keyword">return</span> ;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">dfs</span>(dep + <span class="number">1</span>, used);</span><br><span class="line">    <span class="type">int</span> x = dep / <span class="number">4</span>, y = dep % <span class="number">4</span>;</span><br><span class="line">    <span class="built_in">change</span>(x, y);</span><br><span class="line">    <span class="built_in">dfs</span>(dep + <span class="number">1</span>, used + <span class="number">1</span>);</span><br><span class="line">    <span class="built_in">change</span>(x, y);<span class="comment">//回溯 </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="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; <span class="number">4</span>; i++) &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>, mp[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">dfs</span>(<span class="number">0</span>, <span class="number">0</span>);<span class="comment">//最开始在第0层 </span></span><br><span class="line">    <span class="keyword">if</span> (ans == <span class="number">20</span>) <span class="built_in">printf</span>(<span class="string">&quot;Impossible\n&quot;</span>);<span class="comment">//注意判断无解</span></span><br><span class="line">    <span class="keyword">else</span> <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, ans);</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><h3 id="状态压缩"><a href="#状态压缩" class="headerlink" title="状态压缩"></a>状态压缩</h3><p>用一个整数的二进制来表示某个元素选或不选</p><h2 id="B：双指针（尺取法）"><a href="#B：双指针（尺取法）" class="headerlink" title="B：双指针（尺取法）"></a>B：双指针（尺取法）</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1140/B">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1140/B);"></div>        <div class="tag-link-right">            <div class="tag-link-title">最短连续子序列</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><p>题意：给你 $n,S$ 以及 $n$ 个数，求最短的连续子序列的长度似的这个连续子序列的和大于等于 $S$ （$n \le 10^5$）</p><h3 id="暴力"><a href="#暴力" class="headerlink" title="暴力"></a>暴力</h3><p>暴力枚举所有的区间，求和，判断</p><p>如果不用前缀和优化，复杂度为 $O(n^3)$ </p><p>使用前缀和优化，复杂度为 $O(n^2)$ </p><h3 id="二分"><a href="#二分" class="headerlink" title="二分"></a>二分</h3><p>预处理前缀和 $sum_i$ 表示前 $i$ 个数的和</p><p>枚举区间的左端点，此时发现越往右和越大，所以满足单调性，可以二分找到满足条件的最小的右端点，更新答案 </p><p>复杂度为 $O(nlogn)$ </p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">100010</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> a[N], sum[N];</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, s;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;n, &amp;s);</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="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;a[i]);</span><br><span class="line">        sum[i] = sum[i - <span class="number">1</span>] + a[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> ans = n + <span class="number">1</span>;</span><br><span class="line">    <span class="comment">//枚举左端点</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="comment">//在 [i,n] 区间内去找一个满足条件的最小的右端点</span></span><br><span class="line">        <span class="type">int</span> l = i, r = n, best = <span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">while</span>(l &lt;= r) &#123;</span><br><span class="line">            <span class="type">int</span> mid = (l + r) / <span class="number">2</span>;</span><br><span class="line">            <span class="keyword">if</span> (sum[mid] - sum[i - <span class="number">1</span>] &gt;= s) &#123;</span><br><span class="line">                best = mid;</span><br><span class="line">                r = mid - <span class="number">1</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> l = mid + <span class="number">1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (best != <span class="number">-1</span>) ans = <span class="built_in">min</span>(ans, best - i + <span class="number">1</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (ans == n + <span class="number">1</span>) <span class="built_in">printf</span>(<span class="string">&quot;0\n&quot;</span>);<span class="comment">//判断无解</span></span><br><span class="line">    <span class="keyword">else</span> <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, ans);</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><h3 id="双指针"><a href="#双指针" class="headerlink" title="双指针"></a>双指针</h3><p>枚举其中一个端点，另一个端点在滑动</p><p>值得的注意的是，右端点 $j$ 在滑动的时候不应当判断 $j$ 是否合法，而应当判断 $j+1$  位置是否合法，因为只有这样，才能尽可能的找打最靠右的右端点</p><p>$j$ 初始值为 $0$ 是因为滑动以下就到了 $1$ ，不然的话会忽略第一个位置</p><p>$tmp$ 维护区间和</p><p>复杂度为 $O(n)$ </p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">100010</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> a[N];</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, s;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;n, &amp;s);</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="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;a[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> j = <span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> tmp = <span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> ans = n + <span class="number">1</span>;</span><br><span class="line">    <span class="comment">//确定左端点</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="comment">//右端点进行滑动</span></span><br><span class="line">        <span class="comment">//尽可能地向右找</span></span><br><span class="line">        <span class="keyword">while</span>(j + <span class="number">1</span> &lt;= n &amp;&amp; tmp &lt; s) tmp += a[j + <span class="number">1</span>], j++;</span><br><span class="line">        <span class="keyword">if</span> (tmp &gt;= s) ans = <span class="built_in">min</span>(ans, j - i + <span class="number">1</span>);</span><br><span class="line">        tmp -= a[i];<span class="comment">//左端向右滑动，因此总和要减掉这个数</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (ans == n + <span class="number">1</span>) <span class="built_in">printf</span>(<span class="string">&quot;0\n&quot;</span>);</span><br><span class="line">    <span class="keyword">else</span> <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, ans);</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><h2 id="C：异或"><a href="#C：异或" class="headerlink" title="C：异或"></a>C：异或</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1140/C">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1140/C);"></div>        <div class="tag-link-right">            <div class="tag-link-title">异或和</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h3 id="异或的性质"><a href="#异或的性质" class="headerlink" title="异或的性质"></a>异或的性质</h3><p>两个位不同才为 $1$</p><p>$101$ 异或 $010 = 111$</p><p>假如 $a$ ^ $b &lt; a + b$ （此处 <code>^</code> 为异或符号）</p><p>说明什么？说明 $a$ ^ $b$  ^ $c$ 一定也小于 $a + b + c$ </p><p>那么以后所有的数相异或都不会相等了</p><h3 id="解法-1"><a href="#解法-1" class="headerlink" title="解法"></a>解法</h3><p>利用这个特质，可以得出解法：</p><p>枚举一个左端点，然后利用双指针（two-pointers）技巧去滑动右端点，找到最大的满足条件的右端点</p><hr><p><strong>右端点滑动</strong>：假设我们枚举到一个左端点 $i$ ，接下来我们要用一个 $j$ 代表右端点，不断进行滑动</p><p>设 $SA$ 为当前 $[i,j - 1]$ 区间的元素异或和，$x$ 等于 $a_j$ ，$sum$ 为 [$i,j - 1$] 区间和</p><p> 如果 $SA$ ^ $x$ 等于 $sum + x$，那么 $j$ 就可以一直向右滑动</p><p>一直滑倒一个最极限的位置为止</p><p>所以 $[i,i],[i,i+1],[i,i+2]…[i,j]$ 都是满足条件的</p><p>答案就可以就可以加上 $j-i+1$ </p><hr><p><strong>左端点移动：</strong>当我们扔掉 $i$ 位置的数时，这段区间其实是更加满足条件的，这是因为如果 $a$ ^ $b$ ^ $c=a+b+c$，那么如果把 $c$ 让掉，$a$ ^ $b$ 也一定是等于 $a+b$ 的</p><p>所以 $j$ 就没有必要从头开始，可以继续向右滑动，重复上面的操作，计算答案，复杂度就变成了 $O(n)$ </p><p>和上一题不同的时，这题需要维护两个和，分别是异或和和区间和</p><p><del>不开 long long 见祖宗</del></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">200010</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> a[N];</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">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;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="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;a[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> j = <span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> suma = <span class="number">0</span>, sumb = <span class="number">0</span>;<span class="comment">//suma维护异或和，sumb维护区间和</span></span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> ans = <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="comment">//注意异或的优先级比较低，要加括号</span></span><br><span class="line">        <span class="keyword">while</span>(j + <span class="number">1</span> &lt;= n &amp;&amp; (suma ^ a[j + <span class="number">1</span>]) == (sumb + a[j + <span class="number">1</span>]))</span><br><span class="line">            suma ^= a[j + <span class="number">1</span>], sumb += a[j + <span class="number">1</span>], j++;</span><br><span class="line">        <span class="comment">//这里不需要判断j的越界情况，j因为上面的while循环最大会停留在n</span></span><br><span class="line">        ans += j - i + <span class="number">1</span>;</span><br><span class="line">        suma ^= a[i];<span class="comment">//同一个数异或两次相当于没有异或</span></span><br><span class="line">        sumb -= a[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%lld\n&quot;</span>, ans);</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><h2 id="D：折半枚举"><a href="#D：折半枚举" class="headerlink" title="D：折半枚举"></a>D：折半枚举</h2><a class="tag-Link" target="_blank" href="https://www.517coding.com/contests/1140/D">    <div class="tag-link-tips">🔗 引用站外地址，请注意甄别</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="background-image: url(https://icon.bqb.cool/?url=www.517coding.com/contests/1140/D);"></div>        <div class="tag-link-right">            <div class="tag-link-title">最大余数</div>            <div class="tag-link-sitename">517coding</div>        </div>        <i class="fa-solid fa-angle-right"></i>    </div>    </a><h3 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h3><p>给你最多 $35$ 个整数，选出一个子集使得这个子集的和区域 $m$ 最大，求最大余数</p><p>子集就是某一个组合</p><p>暴力枚举所有组合复杂度 $2^{35}$ </p><h3 id="解法-2"><a href="#解法-2" class="headerlink" title="解法"></a>解法</h3><p>分成两半之后，暴力枚举前一半数的所有组合，保存到 $b$ 数组并进行排序，复杂度最多为 $2^{18}$ </p><p>暴力枚举另一半的所有组合，去 $b$ 数组里面寻找一个数，使得这个数跟 $x$ 加起来模 $m$ 最大</p><p>去 $b$ 数组里面查找小于等于 $m - 1 - x$ 的最大的一个数，如果不存在就直接取 $b$ 数组里面最大的数</p><hr><p>所以问题就变成了在一个有序数组中查找某一个数，用二分解决</p><p>可以利用二进制枚举，注意：二进制枚举时下标一般从 $0$ 开始</p><p><strong>注意：$b$ 数组要开的很大，否则会 RE 或 WA</strong></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br></pre></td><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><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">300010</span>;<span class="comment">//数组至少要这么大</span></span><br><span class="line"><span class="type">int</span> a[N], b[N];</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n, mod, tot;</span><br><span class="line"><span class="comment">//在b数组里二分，找到小于等于x的最大的数，找不到则返回b数组中最大的数</span></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">find</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (b[<span class="number">0</span>] &gt; x) <span class="keyword">return</span> b[tot - <span class="number">1</span>];</span><br><span class="line">    <span class="type">int</span> l = <span class="number">0</span>, r = tot - <span class="number">1</span>, best = <span class="number">-1</span>;</span><br><span class="line">    <span class="keyword">while</span>(l &lt;= r) &#123;</span><br><span class="line">        <span class="type">int</span> mid = (l + r) / <span class="number">2</span>;</span><br><span class="line">        <span class="keyword">if</span> (b[mid] &lt;= x) &#123;</span><br><span class="line">            best = mid;</span><br><span class="line">            l = mid + <span class="number">1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> r = mid - <span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> b[best];</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="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;n, &amp;mod);</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="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;a[i]);</span><br><span class="line">        a[i] %= mod;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> m = n / <span class="number">2</span>;</span><br><span class="line">    <span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line">    <span class="comment">//第一半的组合，保存在b数组</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; (<span class="number">1</span> &lt;&lt; m); i++) &#123;</span><br><span class="line">        <span class="type">int</span> tmp = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; m; j++) &#123;</span><br><span class="line">            <span class="keyword">if</span> (i &amp; (<span class="number">1</span> &lt;&lt; j)) tmp = (<span class="number">1LL</span> * tmp + a[j]) % mod;<span class="comment">//注意1LL，小心溢出</span></span><br><span class="line">        &#125;</span><br><span class="line">        b[tot++] = tmp;</span><br><span class="line">        ans = <span class="built_in">max</span>(ans, tmp);<span class="comment">//特殊处理再某一半的最大组合</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(b, b + tot);</span><br><span class="line">    m = n - (n / <span class="number">2</span>);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; (<span class="number">1</span> &lt;&lt; m); i++) &#123;</span><br><span class="line">        <span class="type">int</span> tmp = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; m; j++) &#123;</span><br><span class="line">            <span class="comment">//因为开始点是从n/2开始的，所以要加上这些偏移量</span></span><br><span class="line">            <span class="type">int</span> jj = j + n / <span class="number">2</span>;</span><br><span class="line">            <span class="comment">//cout &lt;&lt; i &lt;&lt; &quot; &quot; &lt;&lt; jj &lt;&lt; &quot; &quot; &lt;&lt; (1 &lt;&lt; jj) &lt;&lt; endl;</span></span><br><span class="line">            <span class="keyword">if</span> (i &amp; (<span class="number">1</span> &lt;&lt; j)) tmp = (<span class="number">1LL</span> * tmp + a[jj]) % mod;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">//特殊处理再某一半的最大组合</span></span><br><span class="line">        ans = <span class="built_in">max</span>(ans, tmp);</span><br><span class="line">        <span class="type">int</span> x = <span class="built_in">find</span>(mod - tmp - <span class="number">1</span>);<span class="comment">//尽量找最接近mod - 1的数</span></span><br><span class="line">        ans = <span class="built_in">max</span>(ans, (x + tmp) % mod);<span class="comment">//这里注意取模</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, ans);</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>]]>
      </content:encoded>
    </item>
  </channel>
</rss>
