<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Schariac125妙妙屋</title>
  
  <subtitle>⭐</subtitle>
  <link href="http://example.com/atom.xml" rel="self"/>
  
  <link href="http://example.com/"/>
  <updated>2026-03-08T16:07:50.522Z</updated>
  <id>http://example.com/</id>
  
  <author>
    <name>Schariac125</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>糊代码糊到最后是输输输</title>
    <link href="http://example.com/2026/03/09/%E5%8F%AA%E6%9C%89%E8%80%81%E5%A4%A9%E7%88%B7%E7%9C%8B%E5%BE%97%E6%87%82%E4%BA%86%E2%80%94%E2%80%94%E5%9F%BA%E4%BA%8E%E8%87%AA%E5%B7%B1%E5%86%99%E7%9A%84%E7%BA%AF%E9%BB%91%E6%A1%86%E6%97%AE%E6%97%AF%E5%BC%95%E6%93%8E%E7%9A%84%E6%80%9D%E8%80%83/"/>
    <id>http://example.com/2026/03/09/%E5%8F%AA%E6%9C%89%E8%80%81%E5%A4%A9%E7%88%B7%E7%9C%8B%E5%BE%97%E6%87%82%E4%BA%86%E2%80%94%E2%80%94%E5%9F%BA%E4%BA%8E%E8%87%AA%E5%B7%B1%E5%86%99%E7%9A%84%E7%BA%AF%E9%BB%91%E6%A1%86%E6%97%AE%E6%97%AF%E5%BC%95%E6%93%8E%E7%9A%84%E6%80%9D%E8%80%83/</id>
    <published>2026-03-08T16:00:00.000Z</published>
    <updated>2026-03-08T16:07:50.522Z</updated>
    
    <content type="html"><![CDATA[<h1>只有老天爷看得懂了——基于自己写的纯黑框旮旯引擎的反思</h1><h2 id="零：前言">零：前言</h2><p>项目地址：<a href="https://github.com/Schariac125/Gal-Engine-Try">https://github.com/Schariac125/Gal-Engine-Try</a></p><p>我是第一次学Python，也是第一次学oop。你知道的，我以前只会那种面条式的C++代码和一些基础的不能再基础的算法了，上一次写项目还是写黑马的那个最基础的基于C语言的管理系统，只实现了增改查删，然后就啥都没了。</p><p>我花了两天时间写了西二AI第一轮的那俩task，就是那个奇怪的旮旯给木和宝可梦。然后的然后，我鬼点子生成了，变成了我噩梦的开端。</p><p>我当时觉得那个旮旯给木的框架耦合度也太高了，然后我就想着：</p><p>“诶！那我重新写一个旮旯给木的引擎不就好了，先在黑框里面跑起来，后面看看怎么实现可视化”</p><p>从这一刻起我的人生彻底被毁掉了（？）</p><h2 id="一：基本介绍">一：基本介绍</h2><p>最基本的介绍在项目地址的README文件里已经列的轻轻楚楚了，这里也不多说，就简单说说看这个东西到底是怎样的一大坨。</p><p>我第一天晚上写这个引擎基本上只实现了一个框架还有其他的几项功能：最基本的存档读档删档，角色基类初始化，游戏主菜单界面，游戏主体游玩界面，在共通线结尾检查好感度是否已经达到阈值可以进线等等等等。后来加上了查询历史进度，跳过剧情，跳转选项。原本是打算做可视化的，但现在看到这一大坨代码，我只想着全部推倒换一个架构然后重构。</p><h2 id="二：痛点在哪里">二：痛点在哪里</h2><p>说实在话，第一天晚上只写出来那个框架的时候我自我感觉其实还可以，也完全没有意识到我现在的这个架构有多么的逆天。我是什么时候发现的？我今天本来就打算加一个跳过剧情的功能，就像真的旮旯给木那样子。但实现这个东西需要我去编写三个子功能，就是查询并且记录全局历史进度，查询应该跳转的点，额外判断选项不可被跳过。</p><p>全局历史进度我想的非常简单，用json去记录呗，记录一下共通线的历史最长和每个角色单人线的历史最长，到最后不就和存档读档一个逻辑了？这么干我真觉得可行，但是后来我去真的开始做跳过功能的时候，才发现最逆天的根本不是这个。</p><figure class="highlight python"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 实现记录历史最远点功能，为后续跳过历史已读剧情基础</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">save_overall</span>(<span class="params">self</span>):</span><br><span class="line">    overall_filename = os.path.join(<span class="string">&quot;save&quot;</span>, <span class="string">&quot;save_overall.json&quot;</span>)</span><br><span class="line">    overall_data = <span class="variable language_">self</span>.load_overall_history()</span><br><span class="line">    <span class="keyword">if</span> <span class="keyword">not</span> <span class="variable language_">self</span>.begin_love:</span><br><span class="line">        history_common_idx = overall_data.get(<span class="string">&quot;common&quot;</span>, <span class="number">0</span>)</span><br><span class="line">        <span class="keyword">if</span> <span class="variable language_">self</span>.screen_idx_common &gt; history_common_idx:</span><br><span class="line">            overall_data[<span class="string">&quot;common&quot;</span>] = <span class="variable language_">self</span>.screen_idx_common</span><br><span class="line">            <span class="keyword">with</span> <span class="built_in">open</span>(overall_filename, <span class="string">&quot;w&quot;</span>, encoding=<span class="string">&quot;utf-8&quot;</span>) <span class="keyword">as</span> f:</span><br><span class="line">                json.dump(overall_data, f, ensure_ascii=<span class="literal">False</span>, indent=<span class="number">2</span>)</span><br><span class="line">                <span class="keyword">return</span></span><br><span class="line"></span><br><span class="line">            <span class="keyword">if</span> <span class="variable language_">self</span>.current_girl <span class="keyword">is</span> <span class="literal">None</span>:</span><br><span class="line">                <span class="keyword">return</span></span><br></pre></td></tr></table></figure><p>跳过功能其实也不难做，写一个接口，等着后面在共通线和个人线里面调用就可以了，那么具体怎么实现呢，因为我有一个全局记录处于哪一句话的变量（这个我感觉很抽象），如果要跳过就把json里面的数据去比对一下，修改为json里面的数据再交给控制剧情播放的函数就可以了。具体代码是这样子的</p><figure class="highlight python"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> <span class="title function_">skip</span>(<span class="params">self, steps, current_idx, history_limit, stop_at_choice=<span class="literal">False</span></span>):</span><br><span class="line">        next_idx = current_idx</span><br><span class="line">        <span class="keyword">while</span> next_idx &lt; <span class="built_in">len</span>(steps):</span><br><span class="line">            _, step_data = steps[next_idx]</span><br><span class="line">            <span class="keyword">if</span> stop_at_choice <span class="keyword">and</span> step_data.get(<span class="string">&quot;choice&quot;</span>) == <span class="string">&quot;True&quot;</span>:</span><br><span class="line">                <span class="keyword">return</span> next_idx</span><br><span class="line">            <span class="keyword">if</span> next_idx &gt;= history_limit:</span><br><span class="line">                <span class="keyword">return</span> next_idx</span><br><span class="line">            next_idx += <span class="number">1</span></span><br><span class="line">        <span class="keyword">return</span> next_idx</span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">execute_skip</span>(<span class="params">self, steps, current_idx, history_limit, stop_at_choice=<span class="literal">False</span></span>):</span><br><span class="line">        skip_target = <span class="variable language_">self</span>.skip(steps, current_idx, history_limit, stop_at_choice)</span><br><span class="line">        <span class="keyword">if</span> skip_target &gt; current_idx:</span><br><span class="line">            <span class="built_in">print</span>(<span class="string">f&quot;已跳过 <span class="subst">&#123;skip_target - current_idx&#125;</span> 条剧情。&quot;</span>)</span><br><span class="line">            <span class="keyword">return</span> skip_target</span><br><span class="line">        <span class="keyword">if</span> <span class="variable language_">self</span>.auto_skip_enabled:</span><br><span class="line">            <span class="variable language_">self</span>.auto_skip_enabled = <span class="literal">False</span></span><br><span class="line">            <span class="built_in">print</span>(<span class="string">&quot;自动连续跳过已停止，前方没有可跳过的已读剧情。&quot;</span>)</span><br><span class="line">        <span class="keyword">return</span> current_idx</span><br></pre></td></tr></table></figure><p>写完这个东西，我去改接口，后面才发现，最逆天的原来是在剧情播放的主流程里面去调用这个，因为我设计的json格式的原因，我还要做各种特判。在agent的帮助下我非常丑陋的写完了，但直接力竭了，我发现了我这个架构最逆天的地方，无论是用户交互还是和json文件交互还是更新游戏基本状态，我都放在了<code>game.py</code>这个文件里面去实现，导致这个文件后面的代码长度巨长，也巨难维护，你永远都不知道你加了这个新功能之后会有哪里出现一些意想不到的bug，然后调用一个函数的接口，去看一下具体怎么实现的，发现它里面在调用另一个函数的接口，然后再看再看，就直接嵌套了，这里调用来那里调用去，全部糊在一个文件里，我维护起来确实是要死了。</p><p>只能说，我没有软件工程思维和面向对象思维，而且这才哪到哪。</p><p>更逆天的是，我实现角色类的那个文件竟然把个人写写在了主角具体的子类里面，然后后知后觉发现不对，这个不应该是基类实现的吗，子类每个都去实现一遍这个，那代码又要变成一坨了，然后被我改成了这样</p><figure class="highlight python"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Character</span>:</span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self,name,role</span>):</span><br><span class="line">        <span class="variable language_">self</span>.name=name</span><br><span class="line">        <span class="variable language_">self</span>.role=role</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">MainCharacter</span>(<span class="title class_ inherited__">Character</span>):</span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self,name,role=<span class="string">&quot;MainGirl&quot;</span>,affinity=<span class="number">0</span></span>):</span><br><span class="line">        <span class="built_in">super</span>().__init__(name,role)</span><br><span class="line">        <span class="variable language_">self</span>.affinity=affinity</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">change_affinity</span>(<span class="params">self,change_amount</span>):</span><br><span class="line">        <span class="variable language_">self</span>.affinity+=change_amount</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">f&quot;<span class="subst">&#123;self.name&#125;</span>的好感度上升了<span class="subst">&#123;change_amount&#125;</span>点，目前好感度为<span class="subst">&#123;self.affinity&#125;</span>点。&quot;</span>)</span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">get_affinity</span>(<span class="params">self</span>):</span><br><span class="line">        <span class="keyword">return</span> <span class="variable language_">self</span>.affinity</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">is_love</span>(<span class="params">self</span>) -&gt; <span class="built_in">bool</span>:</span><br><span class="line">        <span class="keyword">if</span> <span class="variable language_">self</span>.affinity &gt;= <span class="number">100</span>:</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">get_story_filename</span>(<span class="params">self</span>):</span><br><span class="line">        <span class="keyword">return</span> os.path.join(<span class="string">&quot;story&quot;</span>, <span class="string">&quot;girls&quot;</span>, <span class="string">f&quot;<span class="subst">&#123;self.name&#125;</span>.json&quot;</span>)</span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">girl_story</span>(<span class="params">self,screen_idx,game=<span class="literal">None</span></span>):</span><br><span class="line">        idx=screen_idx</span><br><span class="line">        story_filename=<span class="variable language_">self</span>.get_story_filename()</span><br><span class="line">        <span class="keyword">try</span>:</span><br><span class="line">            <span class="keyword">with</span> <span class="built_in">open</span>(story_filename,<span class="string">&#x27;r&#x27;</span>,encoding=<span class="string">&quot;utf-8&quot;</span>) <span class="keyword">as</span> f:</span><br><span class="line">                story_data=json.load(f)</span><br><span class="line">                steps=<span class="built_in">sorted</span>(story_data.items(), key=<span class="keyword">lambda</span> kv:<span class="built_in">int</span>(kv[<span class="number">0</span>].replace(<span class="string">&quot;step&quot;</span>,<span class="string">&quot;&quot;</span>)))</span><br><span class="line">                history_limit = idx</span><br><span class="line">                <span class="keyword">if</span> game <span class="keyword">is</span> <span class="keyword">not</span> <span class="literal">None</span>:</span><br><span class="line">                    history_limit = game.get_history_limit()</span><br><span class="line">                <span class="keyword">if</span> idx&gt;=<span class="built_in">len</span>(steps):</span><br><span class="line">                    <span class="built_in">print</span>(<span class="string">&quot;剧情已经结束了&quot;</span>)</span><br><span class="line">                    <span class="keyword">return</span> screen_idx</span><br><span class="line">                <span class="keyword">else</span>:</span><br><span class="line">                    <span class="keyword">while</span> screen_idx &lt; <span class="built_in">len</span>(steps):</span><br><span class="line">                        _,story_text = steps[screen_idx]</span><br><span class="line">                        <span class="built_in">print</span>(<span class="string">f&quot;<span class="subst">&#123;story_text[<span class="string">&#x27;speaker&#x27;</span>]&#125;</span>:<span class="subst">&#123;story_text[<span class="string">&#x27;text&#x27;</span>]&#125;</span>&quot;</span>)</span><br><span class="line">                        screen_idx+=<span class="number">1</span></span><br><span class="line">                        <span class="keyword">if</span> game <span class="keyword">is</span> <span class="keyword">not</span> <span class="literal">None</span>:</span><br><span class="line">                            game.save_overall()</span><br><span class="line">                            history_limit = game.get_history_limit()</span><br><span class="line">                            <span class="keyword">if</span> game.auto_skip_enabled:</span><br><span class="line">                                screen_idx = game.execute_skip(steps, screen_idx, history_limit)</span><br><span class="line">                                <span class="keyword">continue</span></span><br><span class="line">                            command_result=game.prompt_story_command()</span><br><span class="line">                            <span class="keyword">if</span> command_result==<span class="string">&quot;menu&quot;</span>:</span><br><span class="line">                                game.open_story_menu()</span><br><span class="line">                                <span class="keyword">return</span> screen_idx</span><br><span class="line">                            <span class="keyword">if</span> command_result==<span class="string">&quot;skip&quot;</span>:</span><br><span class="line">                                screen_idx = game.execute_skip(steps, screen_idx, history_limit)</span><br><span class="line">                    <span class="keyword">return</span> screen_idx</span><br><span class="line">        <span class="keyword">except</span> FileNotFoundError:</span><br><span class="line">            <span class="built_in">print</span>(<span class="string">&quot;剧情文件不存在。&quot;</span>)</span><br><span class="line">            <span class="keyword">return</span> screen_idx</span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">girl_end</span>(<span class="params">self</span>):</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">f&quot;<span class="subst">&#123;self.name&#125;</span>的个人线已经结束了！&quot;</span>)</span><br></pre></td></tr></table></figure><p>从这个代码其实也能看出很多东西了，那就是剧情播放的那个逻辑真的是做的一坨，无穷无尽的if和else嵌套在一起，无穷无尽的各种奇怪调用，读起来难受的很。</p><p>也有可能是我变量名取得抽象吧，我有自知之明的。</p><h2 id="三：反思">三：反思</h2><p>我后来彻底放弃了用<code>pygame</code>做可视化的想法，因为比起可视化，我觉得重构是更重要的。</p><p>我和哈基米讨论了一圈，它告诉我我现在架构的问题就是<code>game.py</code>这个文件里塞的东西实在是太多了，它说这个叫做上帝类隐患，到后面会让我的主文件越来越臃肿难以维护，而且程序对于剧情的逻辑控制分布在非常多不同的角落。根本拆不开。</p><p>后来我问，更优秀的架构应该是什么样子的，它告诉我要强调演出和逻辑分离，引入剧情解释器，不要让角色和主程序本身去解析json文件，建立一个命令表等等等等。</p><p>简单来说就是，数据，逻辑，表现这三者必须分离开来，不然迟早会爆。我现在的项目就是把逻辑和表现塞在一起了。</p><p>我细想，有道理。反思了一下自己发现自己还是那种面条式编程的思维，好像自己在做oop，实际上也只不过是写了一大堆轮子然后各种缝合，最后继续面条式。</p><p>嵌了一大堆if和else就是最明显的体现了。</p><p>我说作业的那个架构耦合度太高，实际上我自己写的耦合度也是爆炸级的，大哥不说二哥了这下。其实应该做到一点就是</p><p>“不要让数据知道自己在被谁使用”</p><p>我总是过度关注现在数据到哪了，数据到底要怎样流动。这估计是我以前刷题思维的后遗症，因为刷题的时候我必须完全掌控数据的流动，数据必须要被知道它被谁调用了，感觉还是面条思维。</p><p>或许真的工程环境不需要非常关注？不过我也不知道就是了，但我现在就是这么觉得的。</p><h2 id="四：结语">四：结语</h2><p>干了一件蠢事也不能说完全没有收获，现在想想或许让我意识到这种架构有多逆天，好的架构有多重要也是有意义的。</p><p>然后确实印证了一件事，大多数时间不是花在写代码上，而是思考架构和设计上。</p><p>那个项目估计也不会再更新了， 因为过两天，那里的代码只剩下老天爷看得懂了。</p><p><strong>毕竟糊代码糊到最后就是输输输</strong></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1&gt;只有老天爷看得懂了——基于自己写的纯黑框旮旯引擎的反思&lt;/h1&gt;
&lt;h2 id=&quot;零：前言&quot;&gt;零：前言&lt;/h2&gt;
&lt;p&gt;项目地址：&lt;a href=&quot;https://github.com/Schariac125/Gal-Engine-Try&quot;&gt;https://github.</summary>
      
    
    
    
    <category term="程序设计" scheme="http://example.com/categories/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/"/>
    
    
    <category term="Python,OOP" scheme="http://example.com/tags/Python-OOP/"/>
    
  </entry>
  
  <entry>
    <title>经验贴</title>
    <link href="http://example.com/2025/12/08/%E7%BB%8F%E9%AA%8C%E8%B4%B4/"/>
    <id>http://example.com/2025/12/08/%E7%BB%8F%E9%AA%8C%E8%B4%B4/</id>
    <published>2025-12-08T08:25:00.000Z</published>
    <updated>2026-01-27T12:43:46.820Z</updated>
    
    <content type="html"><![CDATA[<h2 id="笔者信息">笔者信息</h2><p>2024级环境工程降转2025级计算机类</p><p>机考520分第一，面试32，综合排名第二。</p><p>EMAIL：schariac125@gmail.com</p><p><a href="https://github.com/Schariac125">GitHub链接</a></p><p><a href="https://schariac125.github.io/">个人博客链接</a></p><p>上面的GitHub链接有我自己学习过程中的笔记，预计在2026年初完全整理完毕，博客中有部分我撰写的文章（我可能有闲工夫会更新？），在分类栏中找到程序设计一类即可。如果有错，可以通过邮箱联系我。</p><h2 id="目录">目录</h2><ul><li>一 关于备考</li><li>二 关于机考与面试</li><li>三 关于我自己</li><li>四 To the Lost You</li><li>五 致谢</li><li>六 资源</li></ul><h2 id="关于备考">关于备考</h2><p>思来想去，还是先把干货部分放在前面吧，不浪费大家的时间了。</p><p>有关于转专业基本政策等的什么东西我不想在这里过多赘述，详细可以看交流群里的那一篇文档，里面写的清清楚楚（<a href="https://github.com/ShaddockNH3">uuz</a>的恩情还不尽\O/）。如果有文档里没有提及的部分可以在群里问喵（<s>学长学姐都很热情不会把你们吃掉的</s>）</p><p><strong>准备工作：</strong></p><ul><li>一个适合自己的IDE。</li><li>一个用于记笔记的markdown编辑器。</li><li>一个洛谷账号，一个力扣账号，一个PTA平台账号。</li><li>一个AI平台账号。</li><li>一颗能坚持下来的心</li></ul><p>关于IDE，如果是在PTA平台刷题，那么只建议直接在平台上写题而且字号调成最小的那个字号，为什么呢？因为2025年机考突然不知道<s>突发什么恶疾</s> 为什么突然变了，连Dev都不给用，只准在PTA平台上面直接作答，然后那个平台，字体相关的设置不能改！不能改！就导致一定要用那个看的眼睛都会疼的字体大小写题。以防考场上不适应，还是提前练好吧。</p><p>如果不是在PTA平台，那么可以选择的IDE就很多了。纯小白的话可以先使用那个紫色的Visual Studio，相关设置自己稍微调一下就好（当然如果连这都嫌弃麻烦，那说明你适合Dev-cpp）。如果想要更好的体验的话可以自己去配一个vsc的C++运行环境啊，也不是很难，网上教程一大把，跟着做总能会？再不会问AI去。至于其他的IDE我本人是没用过了（</p><p>然后讲讲markdown编辑器，为什么我推荐的是markdown呢？很简单，代码这种东西用Word记甚至手记自己想想是不是有点太变态了，我自己用过Word甚至手记，答案是效果全部不如markdown（<s>我就说markdown是对的吧</s>）</p><p>编辑器这一块推荐的是Typora，这个编辑器我觉得做的挺好的，不用去学markdown语法，点开即用，只需要掌握最基本的几个快捷键就能轻松上手，believe me，体验真的比其他的好很多很多。</p><p>然后是几个OJ平台，这个没什么好说的，到时候刷题的时候总会遇到的（<s>我其实很讨厌PTA，因为我觉得PTA的题质量很低，而且没有解题区，生态真的是数一数二的差，但奈何学校真的喜欢用</s>）</p><p>AI平台的话，推荐GPT，免费的GPT4已经够用了，次选DeepSeek老师。至于豆包？如果你真想学，别去问豆包代码问题，算法题依然是豆包最严厉的父亲之一。</p><p>其实这些准备工作做完后，应该就不至于还是电子文盲状态了，那么接下来就是备考的重头戏。</p><p><strong>你需要有的：</strong></p><ul><li>洛谷深入浅出基础篇与进阶篇（进阶篇大二可选）</li><li>代码随想录</li></ul><p>洛谷深入浅出，这一套书是我目前在市面上见过最适合0基础新手入门的教材，我本人就是啃这一套书入门的。本人实测，如果以每周作5休2，每天6小时的强度学习，大概花费1.5个月时间就可以把基础篇学完。学完的收获还是很多的喵，而且不会做的习题在洛谷的网站上面都是有大佬分享的题解的，阅读他们的代码也可以学到一些其他的东西（<s>虽然我觉得他们有些人的代码可读性真的很差</s>）</p><p>代码随想录是学长推荐给我的，定位其实是面向求职的程序员的，但是，作者把很多算法都讲的非常的清楚，我目前真的找不到讲的比他还好还容易理解的了。我当时个人的经历是，学完搜索之后其实毛都没懂，然后看了他的讲解之后，当时突然有一种开智了的感觉（）。或许有点夸张，但真的很不错喵！网址：<a href="https://www.programmercarl.com/">https://www.programmercarl.com/</a>    (依旧<a href="https://github.com/ShaddockNH3">uuz</a>的恩情还不尽)</p><p><strong>你需要学习并掌握的：</strong></p><ul><li>C++的基础语法</li><li>各种STL容器的用法，特点以及基本操作</li><li>简单的数据结构</li><li>各类基础算法，以洛谷基础篇和代码随想录为准</li><li><s>各种奇技淫巧</s></li></ul><p>基础语法我懒得多说，这是最基本的，网上的课程一大堆，这边的建议是看b站黑马程序员的视频。但是，面向对象的内容不用看，别浪费那个时间。看完一个基本语法之后，就去洛谷的入门题库里面找到对应的题写，不写题不就等于没学嘛喵，希望都能记住这个道理。</p><p>STL容器的话，这个确实很重要，但是我个人的看法和很多人都不一样，我没有去看黑马STL容器的部分，而是自己看一个很神秘的文档，在写题的时候一点点学的，反正就是，这个题要用到这个了，那我学一下怎么用吧，就这样一路缝缝补补下来的，我也不敢说我很会用就是了。</p><p>数据结构的话，太复杂的应该是不用学，重点要学习的数据结构就是链表，二叉树，图论。尤其是图论，这个又难又杂，而且年年都考，这块硬骨头我知道很难啃，但是必须要啃下来的，嗯！</p><p>基础算法，什么贪心啦，二分啦，双指针单调栈滑动窗口和搜索动态规划啦……总之都是要学，并且必须掌握的。这个的话，我前面说过了，先啃基础篇，再啃随想录，如果踏踏实实的啃完之后，那么你对这些基础算法应该是有一个基础的认知了，记得刷题保持手感，并且记得定时复盘（这就是我说的markdown编辑器的作用了，你也不想你的笔记第二天你自己都看不懂吧），还是那句老话，不用等于没学。但是也要记得，不要死背模板，一定要理解这个算法的背后实现，独立能搓出来。主播当时踩过这个坑喵，还好当时还有时间（</p><p>奇技淫巧，这个我不知道怎么说，就像PTA的链表题其实都是套皮的数组题，全排列有一个妙妙小函数可以直接秒杀了一样，都是写题的时候慢慢自己发现并且总结出来的。传承？说不上，这更像是自己的一点小体悟吧，如果真的能自己总结出来规律什么的，那就说明真的学到东西了喵。</p><p>补充一个东西，学有余力可以学习一下Python，在写一些模拟题的时候特别好使，以及对于正则表达式的支持是非常关键的，虽然C++也有，但是regex库的性能其实是有点神秘的。（为什么我会说这个，当时和俩学弟一起刷L1的时候，一道题被他们用正则秒了，而我手搓了半天……<s>虽然我当时一直嘴硬Python不过奇技淫巧，不如我C++手搓</s>）</p><p><strong>你需要刷完的题：</strong></p><ul><li>PTA乙级与PTA-L1,L2部分题</li><li>洛谷入门题</li></ul><p>PTA乙级其实是模拟大集训，有些题刷不下去也无所谓反正，毕竟有些题的存在就是意义不明的，那种百行超级大模拟可以稍微放一放，当然如果你对你自己代码的稳定性不自信的话，那这边建议还是全部刷完，如果对自己代码有一定自信的其实不用管，但是，至少得看一下思路。</p><p>L1的话，很多都是入门题，这一套挺不错的，但是，有些实在太若只的题目就跳了吧，那些20分题倒都挺不错的。至于L2，你可以不完全写，但是请务必掌握每一题的思路，这很重要。</p><p>洛谷入门，必须写完，而且是在语法学习阶段就必须写完！这是最基本的指标。</p><p>另外打一下广告，推荐题单可以看看这位整理的：<a href="https://blog.terraria.ink/blog/soft-enginering-exam/">https://blog.terraria.ink/blog/soft-enginering-exam/</a></p><h2 id="关于机考与面试">关于机考与面试</h2><p>谢邀，考试当天紧张死我了，突然告诉我不能带纸质资料进考场，还好我早有预料在考前花了一点时间把资料上一些重要的东西背了下来，这个真的是我这辈子做过最正确的决定。</p><p>考试的时候要自己启动电脑，然后好像听说有些机子要自己连校园网，我的是已经连好了。一切调试确认没问题了之后，就可以举手找老师帮忙扫码进入考试页面了。这个时候还不能作答，题目集还没开放，但也请不要在电脑上乱点，出事了你解释不清楚的。</p><p>另外，记得适应一下考场的键盘和鼠标，这一套键鼠是我用过最烂的了，键盘要按的很重才能按的下去，鼠标也没有鼠标垫，唉唉，敲代码速度自动下降了。所以平时就要练一练自己敲代码的速度，别因为敲不完代码而丢分。</p><p><s>顺带一提，如果你实在不会做了，可以尝试直接输出样例，能骗点分，真的。日后惹出事来别说是我教的就行了</s></p><p>做不出来别紧张（虽然我当时紧张到冷汗直流），有两种选择，一种是先跳过，另一种是接着debug一段时间看看。但其实不是很推荐第二种，除非你很清楚的知道是哪里错了。考场上的时间太过紧张，一分一秒都不能浪费。</p><p>我当时迷宫卡建图了，然后子序列和那个神秘压轴题不会写，考试结束拿了520，差点都准备回去复习流体力学和物理化学了，后来才知道，原来大家基本也都不会做，给我一菜鸡混到第一，那没事了。所以也不用把对手想的太厉害，大家都基本那个水平（<s>其实是今年没有A✌炸鱼</s>）</p><p>面试的话，我强调几个点：</p><ul><li>1 别吹牛逼，老师再怎么说也比你懂，吹牛逼被揭穿会扣非常非常多分数</li><li>2 别聊着聊着就聊嗨了，发狂了，忘我了。</li><li>3 有些老师会刻意刁难你，别怕，别紧张就行。</li><li>4 老师会围绕你的审批表和自我介绍进行”拷打“，所以，不会的东西别往上写/说，踏实稳妥一点。</li><li>5 如果你没有过开发经验/中学没拿过NOIP的奖项，那么就认为是0基础，学过语法不等于有基础。</li><li>6 大二的如果有挂科记录，记得想好解释的理由，这是绝对会被拷打的。</li></ul><p>当时我自我介绍完就被问了两个问题，一个是让我介绍两个算法，另外一个是拷打我的成绩单（把我晾在一边两分钟，几个老师自顾自的讨论起了我的学分怎么搞……）。</p><p>也不知道是因为什么，只问了这俩问题，反正我感觉应该是他们累了，想下班了。</p><h2 id="关于我自己">关于我自己</h2><p>干货到此结束，只是想来看干货的其实可以退出了，下面的内容是我自己的一些感想和碎碎念了。</p><blockquote><p><strong>时间轴</strong></p><ul><li>2024.7 填写志愿犯蠢了，当场坠机，加入转专业交流群开始备考</li><li>2024.8-11 疯狂备考转专业，但后面……</li><li>2024.12 笔试第25耻辱下播，面试吹牛逼直接完蛋</li><li>2025.1 疯狂速通专业课补天ing</li><li>2025.3 开始思考未来</li><li>2025.4 开始学习语法备考转专业</li><li>2025.7-8 用暑假两个月的时间啃完了洛谷基础篇</li><li>2025.9-10 开始写PTA乙级</li><li>2025.10-11 开始刷代码随想录。并成功搭建起个人博客。</li><li>2025.11 开始刷L1，以及整理板子和到处找题，以及全平台500题达成</li><li>2025.12.1 机考当天</li><li>2025.12.3 出面试名单</li><li>2025.12.4 面试</li><li>2025.12.6 正式出结果，win！</li></ul></blockquote><p>有些人可能认识我，因为我收到福大录取通知书的那一刻起就抱着转专业的想法而且水群水的可不少。我的高考志愿报考简直是没话讲，可以拉出来当反面教材典型的程度，导致一下子给我滑到环境来。</p><p>所以我在新大一的那个暑假就开始学高数，买了导论的书，基本把所有的专业课都翘了，去的课也是没听。然后战线拉的实在是太长了，我后期真的学不动了，天天窝在宿舍里打游戏，等到要笔试了才想起来。最后虽然进面了，但现在确乎是很想扇当时的自己一巴掌，面试和老师大吹牛逼特吹牛逼，甚至吹完还不自知，也是不出所料，寄了。</p><p>实实在在当时是颓废逃避了20多天，直到期末周真的来了才想起来读书。也是很幸运，我大一上学期没有挂科，但绩点是被弄得很难看了。后来寒假回家过了个年，大一下学期才开始想自己的出路。</p><p>我想过两条路，一条是接着备考计算机，一条是在环境接着读下去，甚至有一段时间，我的想法更多是在环境接着读下去。但后来，我发现我真的很不喜欢学化学，可偏偏专业课里面又有一堆化学。也差不多是这个时候，我的想法开始转变了，我开始一点点的利用晚上的时间从语法学起，因为白天要上课。</p><p>很感谢柚柚子学长，确实是在我最迷茫的时候给我点了一条路出来，后来我开始去一点点碎片化的了解计算机也是他的功劳，给我提了很多很宝贵的意见，总之一句话总结就是，<a href="https://github.com/ShaddockNH3">uuz</a>的恩情真的还不尽。</p><p>暑假的时候，我一天6h啃洛谷基础篇，然后坚持了一个半月（<s>为什么是一个半月，最后十几天我读不下去了给自己放了个假说是</s>），其实也是三打两晒，因为我很清楚我的抗压能力很差，也没把自己逼得太紧。这其实也是我选择降转的理由之一了。</p><p>大二上学期真就是每天base宿舍敲代码，有些课都懒得去了（因为这个我还被有些老师威胁平时分清0），当时赌注确实下的很大，如果没有转成，我大抵是要吃学业预警的（笑）。庆幸的也是转成了。</p><p>其实有人问难道不会坚持不下去吗，不会心态爆炸吗。我的答案是怎么可能不会，我也是人啊，我的抗压能力可能比一般人还差吧（？）。压力真的太大了就停下来吧</p><p>（我当时缓解压力的方法是自己调教了一个写文的AI，然后想看什么就把什么输入进去让它写，它什么都能写（笑），<s>所以有时候可能会看见我莫名奇妙对着手机傻笑</s>）</p><img src="https://s3.bmp.ovh/imgs/2025/12/08/003baa22458c25b8.jpg" style="zoom: 33%;"><p>机考前几天我每天过的提心吊胆，非常紧张，做过最坏的打算是今年不让带材料，最后也是真的应验了。考完之后感觉完蛋了，出院楼的时候腿都是软的，后来和几个朋友去了附近的一家糖水店小聚了一下，也就没那么紧张了。</p><p>最扯的是看到面试名单的那个下午，我真的以为我自己稳了，面试只要不打老师就能过，然后和舍友一起打了一下午游戏（好孩子不要学），后来被<a href="https://github.com/155TuT">155</a>叫出去模拟面试，<a href="https://github.com/ShaddockNH3">uuz</a>和<a href="https://github.com/155TuT">155</a>一提醒，我才发现，不好，我好像一不小心会被翻盘！为了我不在福大实现某种意义上的永生，当天晚上就构思了一大堆问题我该怎么回答。虽然面试官也只问了我俩问题（蓝发小女孩这扯不扯.jpg）</p><p><img src="https://s3.bmp.ovh/imgs/2025/12/08/da8cc8fb579b7e05.jpg" alt></p><h2 id="To-the-Lost-You">To the Lost You</h2><p>这一部分原本是没打算写的，后来在各种地方观察后才发现，原来那么多人和当时大一刚刚失败了的我一样迷茫找不到未来，感觉人生就此被蒙上了一层雾，如果你能够坚持看到这里，倒可以听听我的想法。</p><p>有些话或许在现在讲是很难被人听进去的，但我依然需要讲，生命不止于转专业，人生的容错高不高，其实全部都是取决于自己。</p><p>如果你感觉看不到未来了，那么就先看看脚下吧。如果你实在累了，在路边坐坐也未尝不可。</p><p>你可以和我一样，花费一整个学期的时间去探索，最后做出选择是要留在原专业，还是要坚定的第二次再战转专业。也可以选择和每年都有的少部分人一样，退学复读，争取冲一个更高层次的高校，这都可以。</p><p>但请记住，这一切都需要建立在最后回归到正常的生活之上。而且，有些时候，塞翁失马焉知非福。如果大一那一次没有失败，或许我现在也依然浮躁。</p><p>很多人顾虑降转需要多读一年，但换个角度思考，在一个你快读不下去的专业读四年，和花费半年时间去到一个自己喜欢的专业读五年，哪个最后的结局会更好，我想心里都是有答案的，多出来的那一年未必不是一种沉淀。</p><p>找找别人聊聊吧，也和自己聊聊。我实在很难说我是否已经和过去的自己和解了，但无论是否和解，生活还是要继续的。</p><p>我为何会写这么多，因为我曾经也经历过。大一下我经历了道心破碎环节，那时一直在想，我前20年到底是在活什么，怎么书没读好，什么技能也没学到？后来暑假我释怀了，可能是突然想开的吧，只要忙起来，慢慢的就不在意了，每个人都有自己的方向和道路不是吗？毕竟有些事情是不继续走下去就无法传达的啊（笑）</p><p>献给阅读到这里并且有着相同困境的人</p><blockquote><ul><li><p>下手なりに泳ごうか 願うだけじゃ</p><p>笨拙地奋力向前游吧 只是祈愿的话</p></li><li><p>海の月にはなれない</p><p>可成为不了海中之月呢</p></li><li><p>ただ 流れてゆく毎日に サヨナラをしよう</p><p>向这随波逐流的日常 来道别吧</p><p>……</p></li><li><p>そうだね 沈み続けるのは簡単だ</p></li></ul><p>​       是啊 这样消沉下去很简单</p><ul><li>抵抗してみようか 見苦しさも</li></ul><p>​       但试着反抗一下吧 就算是这幅丑态</p><ul><li>私らしさなのだから</li></ul><p>​       这就是我自己啊</p></blockquote><h2 id="致谢">致谢</h2><p>感谢帮我指明方向的<a href="https://github.com/ShaddockNH3">柚柚子</a>，虽然我没有写到10万字（<s>bushi</s>）</p><p>感谢帮助我查缺补漏和模拟面试的<a href="https://github.com/155TuT">155</a>，专家会诊真的很有用！</p><p>感谢一直陪伴我备考的各位朋友，并且赞美一下神丽（<s>大丽姐要求的</s>）！</p><p><s>感谢GPT老师，虽然我提蠢问题的时候你会骂我</s></p><p>还有我自己（）</p><p>——By Schariac125</p><p>写于福州大学旗山校区</p><h2 id="资源">资源</h2><p><a href="https://www.luogu.com.cn/">Luogu</a></p><p><a href="https://leetcode.cn/">力扣</a></p><p><a href="https://oi-wiki.org/">OI-WIKI</a></p><p><a href="https://pintia.cn/home">PTA</a></p><p><a href="https://www.programmercarl.com/">代码随想录</a></p><p><a href="https://shaddocknh3.github.io/">UUZ的博客</a></p><p><a href="https://155tut.github.io/">155的博客</a></p><p><a href="https://blog.terraria.ink">Cai的博客</a></p><p>由于某些原因，这里不给出GPT和Gemini的网址。</p><p><img src="https://s3.bmp.ovh/imgs/2025/12/08/a5a3cce0866f781c.jpg" alt></p><p><img src="https://s3.bmp.ovh/imgs/2025/12/08/422ae3d5f86f0598.png" alt></p><p>（<s>真的没有了</s>）</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;笔者信息&quot;&gt;笔者信息&lt;/h2&gt;
&lt;p&gt;2024级环境工程降转2025级计算机类&lt;/p&gt;
&lt;p&gt;机考520分第一，面试32，综合排名第二。&lt;/p&gt;
&lt;p&gt;EMAIL：schariac125@gmail.com&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://gith</summary>
      
    
    
    
    <category term="碎碎念" scheme="http://example.com/categories/%E7%A2%8E%E7%A2%8E%E5%BF%B5/"/>
    
    
    <category term="个人" scheme="http://example.com/tags/%E4%B8%AA%E4%BA%BA/"/>
    
  </entry>
  
  <entry>
    <title>PAT-B的再探再报</title>
    <link href="http://example.com/2025/11/02/PAT-B%E7%9A%84%E5%86%8D%E6%8E%A2%E5%86%8D%E6%8A%A5%E2%80%94%E2%80%94%E5%B8%B8%E8%A7%81%E7%9A%84%E4%B8%80%E4%BA%9B%E6%A8%A1%E6%8B%9F%E6%9D%BF%E5%AD%90/"/>
    <id>http://example.com/2025/11/02/PAT-B%E7%9A%84%E5%86%8D%E6%8E%A2%E5%86%8D%E6%8A%A5%E2%80%94%E2%80%94%E5%B8%B8%E8%A7%81%E7%9A%84%E4%B8%80%E4%BA%9B%E6%A8%A1%E6%8B%9F%E6%9D%BF%E5%AD%90/</id>
    <published>2025-11-01T16:20:00.000Z</published>
    <updated>2025-11-01T16:31:01.899Z</updated>
    
    <content type="html"><![CDATA[<h1>PAT-B的再探再报——常见的一些模拟板子</h1><h2 id="前言：">前言：</h2><p>在PAT-B的各题训练中我发现有一些“模板”是常常被使用的，写好这些模板是很重要的，可以减少我们犯错的次数以及加深理解，从而实现从“快”到“又快又稳”的突破。</p><p>我将会按照题号选出其中比较经典的一些板子供自己参考和使用，并且给出原理说明。</p><h2 id="代码规范">代码规范</h2><p>为追求编码速度和避免编译错误，本文所有代码示例均遵循以下通用规范：</p><ol><li>使用万能头文件 <code>#include &lt;bits/stdc++.h&gt;</code>包含所有标准库。</li><li>使用 <code>using namespace std;</code>省略标准库前缀。</li></ol><p>注意：千万不可以在工程里用万能头，千万不可以。万能头是出于应试的选择，目的在于不花太多时间纠结头文件。</p><h2 id="1002-写出这个数">1002 写出这个数</h2><p><strong>关键词：如何去建立不同数据类型之间的映射</strong></p><p>这一题的关键点在于如何去把数字和汉字对应上，就例如说，怎么把“0”对应输出成“ling”，“1”对应输出成“yi”。</p><p>这个其实很简单了，数字去对应字符串，只要去建立一个对应的“字典”，你用map还是用数组都无所谓，不过在这题对应的不多的情况下还是用静态数组吧。</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></pre></td><td class="code"><pre><span class="line">string b[<span class="number">15</span>] = &#123;<span class="string">&quot;ling&quot;</span>,<span class="string">&quot;yi&quot;</span>,<span class="string">&quot;er&quot;</span>,<span class="string">&quot;san&quot;</span>,<span class="string">&quot;si&quot;</span>,<span class="string">&quot;wu&quot;</span>,<span class="string">&quot;liu&quot;</span>,<span class="string">&quot;qi&quot;</span>,<span class="string">&quot;ba&quot;</span>,<span class="string">&quot;jiu&quot;</span>&#125;;</span><br><span class="line"><span class="comment">//数组记得稍微开大一点，不是坏事，养成这个习惯可以防RE，用得到的int型数据去当下标然后一一对应。</span></span><br></pre></td></tr></table></figure><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">unordered_map&lt;<span class="type">int</span>,string&gt; h;</span><br><span class="line">h.<span class="built_in">emplace</span>(<span class="number">1</span>,<span class="string">&quot;yi&quot;</span>);</span><br><span class="line">.......</span><br></pre></td></tr></table></figure><p>具体使用哪种数据结构看题目要求咯。</p><h2 id="1004-成绩排名">1004 成绩排名</h2><p><strong>关键词：如何让std::sort()实现自定义排序，建议和2024机考的绝对值排序一起看</strong></p><p>一般而言，使用<code>std::sort()</code>时想要进行自定义排序我们是这么做的</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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(t a,t b)</span></span>&#123;<span class="comment">//t在这里表示一种数据类型，无论是语言自带的还是自己设计的结构体，我懒得打模板那个单词</span></span><br><span class="line">   <span class="keyword">return</span> a&lt;b<span class="comment">//这个就表示从小到大排序</span></span><br><span class="line">   <span class="keyword">return</span> a&gt;b<span class="comment">//这个就表示从大到小排序</span></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="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(stu a,stu b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> a.gpa&gt;b.gpa;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>一般而言这个函数的返回类型需要是布尔类型，名字无所谓，但我喜欢定义成cmp</p><p>sort函数执行的时候，这个是默认a在前b在后面的，理解了这个就行了。</p><p>最终使用</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sort</span>(add.<span class="built_in">begin</span>(),add.<span class="built_in">end</span>(),cmp);<span class="comment">//注意这个begin和end的写法是vector才有的</span></span><br></pre></td></tr></table></figure><h2 id="1007-素数对猜想">1007 素数对猜想</h2><p><strong>关键词：如何判断一个数是不是素数</strong></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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isprime</span><span class="params">(<span class="type">int</span> a)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a&lt;=<span class="number">1</span>) <span class="keyword">return</span> <span class="literal">false</span>;<span class="comment">//这里用这样的写法是更加稳健的，谁都不知道题目会不会输入负数进来</span></span><br><span class="line">    <span class="keyword">if</span> (a==<span class="number">2</span>) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">2</span>;i*i&lt;a;i++)&#123;<span class="comment">//这里采用i*i的写法下面讲，这是一个利用数学性质降低时间复杂度。</span></span><br><span class="line">        <span class="keyword">if</span> (a%i==<span class="number">0</span>)&#123;</span><br><span class="line">            <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></pre></td></tr></table></figure><p>第四行为什么要写<code>i*i&lt;a</code>呢。我举个例子，如果你输入了一个数据，这个数据是27，那么27是不是可以被3整除，能被3整除说明，27/3=9，9也可以被3整除。这样子推下去其实我们只要枚举被根号27小的数据就行了。因为另一个因子都可以被前面的因子除出来。</p><p>这时候有人要问了：“主播主播，那万一在大于根号27的地方有一个数字能整除27怎么办，那不会漏答案吗？”这种情况是不可能的喵，那我问你啊，9是不是比根号27大，如果9能够整除27，那27/9的结果3是不是也整除27啊，这个因子是成对的啊，前面已经列举过了。</p><p>素数的模板是很重要的，其实还有一种素数筛的写法，不过那个对目前而言没啥意义。</p><h2 id="1009-说反话">1009 说反话</h2><p><strong>关键词：怎么以空格为分界点分割字符串</strong></p><p>这题是典型的初见杀题目，很多人在第一眼看到这个题目的反应绝对是：按空格分割？这怎么搞？</p><p>然后就有肯定有人去查了AI，然后AI就告诉他用<code>istringstream</code>，就像下面这样</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></pre></td><td class="code"><pre><span class="line">......</span><br><span class="line"><span class="function">istringstream <span class="title">iss</span><span class="params">(s)</span></span>;</span><br><span class="line">    string word;</span><br><span class="line">    vector&lt;string&gt; tokens;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">while</span> (iss &gt;&gt; word) &#123; <span class="comment">// 自动以空格、制表符分隔</span></span><br><span class="line">        tokens.<span class="built_in">push_back</span>(word);</span><br><span class="line">    &#125;</span><br><span class="line">......</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><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></pre></td><td class="code"><pre><span class="line"><span class="built_in">getline</span>(cin,a);<span class="comment">//不要cin，cin遇到空格会直接断掉</span></span><br><span class="line">    vector&lt;string&gt; ans;</span><br><span class="line">    string word;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c:a)&#123;</span><br><span class="line">        <span class="keyword">if</span> (c==<span class="string">&#x27; &#x27;</span>)&#123;</span><br><span class="line">            <span class="keyword">if</span> (!word.<span class="built_in">empty</span>())&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(word);</span><br><span class="line">                word.<span class="built_in">clear</span>();</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            word+=c;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (!word.<span class="built_in">empty</span>())&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(word);</span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><p>这样子的一串代码如果稍加包装就可以写成一个函数，甚至只需要修改一下第五行就可以实现不同字符作为分割的分界点，可以说很好用了，而且写起来也不麻烦。</p><p>注意14-16行，一定要记得把<code>word</code>中的残余部分倒出来到数组里面，不然会漏掉最后一个字符。</p><p>如果理解了下面那个稍微”复杂“的过程，那基本上这种题就难不倒了。</p><p>补充题目：敲笨钟。</p><h2 id="1017-A除以B">1017 A除以B</h2><p><strong>关键词：整数的高精度除法</strong></p><p>这一题是一个1k位的数字作为被除数，1k位就代表着传统的int类型相除会直接失效，这个时候就需要一些步骤来实现除法了。</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></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> r=<span class="number">0</span>,num=<span class="number">0</span>;</span><br><span class="line">    string s,ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c:a)&#123;</span><br><span class="line">        num=r*<span class="number">10</span>+(c-<span class="string">&#x27;0&#x27;</span>);</span><br><span class="line">        s+=(num/b)+<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        r=num%b;<span class="comment">//这个数字是上一轮得到的余数，应该定义在全局。</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> pos=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (pos&lt;s.<span class="built_in">size</span>()<span class="number">-1</span>&amp;&amp;s[pos]==<span class="string">&#x27;0&#x27;</span>)&#123;</span><br><span class="line">        pos++;</span><br><span class="line">    &#125;<span class="comment">//去除前导0</span></span><br><span class="line">    ans=s.<span class="built_in">substr</span>(pos);</span><br></pre></td></tr></table></figure><h2 id="1022-D进制的A-B">1022 D进制的A+B</h2><p><strong>关键词：进制转换</strong></p><p>进制转换在纸上怎么操作我不想多讲，因为这个不是这一点篇幅能讲完的。</p><p>代码上的进制转换实际上有两个很重要的点，一个是怎么获取结果，另外一个是怎么做对应（就例如转16进制）</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></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 class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> a,b,n,d;</span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;a&gt;&gt;b&gt;&gt;d;</span><br><span class="line">    n=a+b;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">    <span class="keyword">if</span> (n==<span class="number">0</span>)&#123;<span class="comment">//记得特判</span></span><br><span class="line">        cout&lt;&lt;<span class="number">0</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="keyword">while</span> (n&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(n%d);</span><br><span class="line">        n/=d;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=ans.<span class="built_in">size</span>()<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        cout&lt;&lt;ans[i];</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>我猜有人又要问了：”主播主播，如果D超过10怎么办？“D超过10你就去做一个映射啊，这还不简单？</p><h2 id="1025-翻转链表">1025 翻转链表</h2><p><strong>关键词：链表模板</strong></p><p>我要发表暴论了。</p><p>PAT上面所有的链表题都是披着链表皮的数组题，所以有些链表上的方法，例如哨兵节点就没什么太大用处了，这种题目全部有套路，我将会马上拆解</p><p>链表节点具有三个元素：1 链表节点地址 2 链表携带的数据 3 链表指向的下一个节点的地址</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> add,data,next;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>（<s>你问我为什么不用结构体，因为class这个单词好写啊还能因为什么</s>）</p><p>一般而言类PAT的输入格式是这样的</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></pre></td><td class="code"><pre><span class="line"><span class="number">00100</span> <span class="number">6</span> <span class="number">4</span><span class="comment">//第一个是初始节点地址，第二个是节点总个数</span></span><br><span class="line"><span class="number">00000</span> <span class="number">4</span> <span class="number">99999</span></span><br><span class="line"><span class="number">00100</span> <span class="number">1</span> <span class="number">12309</span></span><br><span class="line"><span class="number">68237</span> <span class="number">6</span> <span class="number">-1</span></span><br><span class="line"><span class="number">33218</span> <span class="number">3</span> <span class="number">00000</span></span><br><span class="line"><span class="number">99999</span> <span class="number">5</span> <span class="number">68237</span></span><br><span class="line"><span class="number">12309</span> <span class="number">2</span> <span class="number">33218</span></span><br></pre></td></tr></table></figure><p>那么问题出现了，我们该怎么通过这一串好像有点意义不明的数字来访问一个节点呢？</p><p>答案是用map，写法如下</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">unordered_map&lt;<span class="type">int</span>,node&gt; a;<span class="comment">//这个用于记录地址和节点之间的映射关系</span></span><br></pre></td></tr></table></figure><p>（<s>其实考虑到PAT的地址基本都是一个最多五位的数字，头铁的话也可以用数组</s>）</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">while</span>(beginn!=<span class="number">-1</span>)&#123;</span><br><span class="line">        d.<span class="built_in">push_back</span>(a[beginn]);</span><br><span class="line">        beginn=a[beginn].next;</span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><p>这样子就把链表转成连续内存的数组了，后面的操作会方便很多喵</p><p>中间的处理部分依照题目而定。</p><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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;(<span class="type">int</span>)ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i!=ans.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">            ans[i].next=ans[i<span class="number">+1</span>].add;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            ans[i].next=<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="keyword">auto</span> &amp;it:ans)&#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%05d %d &quot;</span>,it.add,it.data);</span><br><span class="line">        <span class="keyword">if</span> (it.next != <span class="number">-1</span>)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%05d\n&quot;</span>,it.next);</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;-1\n&quot;</span>);</span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><p>到这里就结束了，很简单很公式的喵。</p><h2 id="1038-统计同成绩学生">1038 统计同成绩学生</h2><p><strong>关键词：如何去选择一个合适的容器进行数量统计</strong></p><p>自问：知道几种计数的方法？</p><p>我现在给出几个计数法：</p><p>1 如果题目需要计数的是一个单一的指标，用一个单一的变量就可以，例如变量cnt。</p><p>2 如果题目对于查找的高效性比较放松，并且计数指标之间的关系比较简单，那么可以用静态数组。</p><p>3 如果题目对于查询的效率有较高要求，而且计数指标之间的关系复杂多样，考虑使用map。</p><p>这一题就是一个典型的<code>unordered_map</code>容器题目了，代码如下</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></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">int</span> n,score,k;</span><br><span class="line">unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; hash1;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">        cin&gt;&gt;score;</span><br><span class="line">        hash1[score]++;</span><br><span class="line">    &#125;</span><br><span class="line">    cin&gt;&gt;k;</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="type">int</span> finds;</span><br><span class="line">        cin&gt;&gt;finds;</span><br><span class="line">        <span class="keyword">if</span> (i==k)&#123;</span><br><span class="line">            cout&lt;&lt;hash1[finds];</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;hash1[finds]&lt;&lt;<span class="string">&quot; &quot;</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="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>unordered_map查询的速度是非常快的，O(1)的复杂度</p><p>如果还想练，那么下一题1039就是一个不错的选择。</p><h2 id="1043-输出PATest">1043 输出PATest</h2><p><strong>关键词：字符串如何重复输出</strong></p><p>其实我把这一题收录进来的时候我在想，到底要不要收录，后来想想还是收录吧，虽然不是那么常见</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">while</span> (sum&gt;<span class="number">0</span>)&#123;<span class="comment">//这里控制一整个循环的进行，sum代表所有符合条件的字符，一旦sum归零，那么循环就该结束</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">char</span> c:res)&#123;<span class="comment">//res就是目标字符串了</span></span><br><span class="line">            <span class="keyword">if</span> (count[c]!=<span class="number">0</span>)&#123;<span class="comment">//count是map容器，如果这个元素还有的用，那么就输出吧。</span></span><br><span class="line">                cout&lt;&lt;c;</span><br><span class="line">                count[c]--;</span><br><span class="line">                sum--;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;<span class="comment">//如果这个元素已经没得用了，那就直接跳过。</span></span><br><span class="line">                <span class="keyword">continue</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><h2 id="1048-数字加密">1048 数字加密</h2><p><strong>关键词：在处理类似字符串数字相加的问题时要如何高效的避免长度带来的问题</strong></p><p>这一题它需要字符串之间做好对应相加，然后再用映射关系修改字符串中的字符，那么这个时候问题就出现了：如果这两个字符串并不等长，那我们该如何处理溢出的那一部分？</p><p>答案是，不用处理，只要用几个不会影响最终答案的字符去补全相对较短的那一个字符串就可以了，这样子就可以省去很多处理的麻烦</p><p>例如这一题，我们在前面补0，那么就是没有影响的，代码如下</p><figure class="highlight cpp"><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"><span class="keyword">while</span> (a.<span class="built_in">size</span>() &lt; b.<span class="built_in">size</span>()) a = <span class="string">&quot;0&quot;</span> + a;</span><br><span class="line"><span class="keyword">while</span> (b.<span class="built_in">size</span>() &lt; a.<span class="built_in">size</span>()) b = <span class="string">&quot;0&quot;</span> + b;</span><br></pre></td></tr></table></figure><p>这个预处理方法在高精度减法也会用用处。</p><p>当然这么写的话其实不是很好，你大可以提前计算好要补的’0‘字符数量，然后牺牲一点点内存来换更快的处理。</p><h2 id="1062-最简分数">1062 最简分数</h2><p><strong>关键词：最大公约数求法GCD</strong></p><p>部分题目可能会涉及到最大公约数的计算，这个东西的计算是有数学上的固定算法的（我这里不去在数学角度上证明这个算法）（<s>你问我为什么不证，我不会证啊</s>）</p><p>GCD算法我记得是有两种写法的，一种是直接利用数字之间的交换，另外一种是利用递归。</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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">int</span> <span class="title">gcd</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (b==<span class="number">0</span>) <span class="keyword">return</span> a;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">return</span> <span class="built_in">gcd</span>(b,a%b);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这个算法大名叫做欧几里得算法，如果感兴趣的话可以去自行百度一下证明和原理。</p><h2 id="1065-单身狗">1065 单身狗</h2><p><strong>关键词：如何利用合适的STL容器来快速查找是否存在有一个元素</strong></p><p>关于如何去查找一个元素，大多数人应该都有自己的想法啊，例如说去做一个<code>vis</code>数组什么的去标记。不过我常常喜欢内置的<code>find()</code>函数。</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></pre></td><td class="code"><pre><span class="line">set&lt;string&gt; id;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        string s;</span><br><span class="line">        cin&gt;&gt;s;</span><br><span class="line">        id.<span class="built_in">insert</span>(s);</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;string&gt; ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:id)&#123;</span><br><span class="line">        <span class="keyword">if</span> (people.<span class="built_in">find</span>(it)==people.<span class="built_in">end</span>())&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(it);</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(people.<span class="built_in">find</span>(it)!=people.<span class="built_in">end</span>()&amp;&amp;id.<span class="built_in">find</span>(h1[it])==id.<span class="built_in">end</span>())&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(it);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><p>其中，内置的<code>find()</code>函数如果没有在这个集合里面查找到目标元素，那么它就会范围这个集合末尾的一个迭代器。就例如上一题里面的<code>people.end()</code>，如果查找到了就会返回那个位置的迭代器。</p><p>注意，如果你的目的只是单纯的查询，那么使用<code>set</code>就行，但如果你的目的不止于查询，还要找到这个元素的位置，那么<code>set</code>会自动排序的特点可能会对这个有所影响，请注意去选择其他的STL容器或者算法。</p><p>另外我要提一点啊，<code>string</code>也有内置的<code>find</code>函数，但是<code>string</code>用<code>find</code>函数没找到是这么写的，such as</p><figure class="highlight cpp"><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">string s;</span><br><span class="line">s.<span class="built_in">find</span>(<span class="string">&#x27;a&#x27;</span>)==string::npos;<span class="comment">//这个代表没有找到a这个元素</span></span><br></pre></td></tr></table></figure><h2 id="1078-字符串的压缩与解压缩">1078 字符串的压缩与解压缩</h2><p><strong>关键词：如何读取一个由连续重复字符读取的字符串以及如何给定一个数字和字符的组合去输出目标的连续重复字符串</strong></p><p>这一题一整题都在干这个事情。我现在揉碎了讲讲。</p><p>我们先讲第一点啊，如何读取一个由连续重复字符组成的字符串，并且输出以及压缩</p><p>我们可以很直观的想到一种方法，去遍历一整个字符串，然后定义两个指针<code>slow</code>与<code>fast</code>，其中<code>slow</code>控制遍历的初始位置，<code>fast</code>读取连续字符最后的位置，最后利用<code>substr()</code>函数来把这样子一个字符串拆出来。</p><p>就例如，我现在给你一个这样的字符串<code>aaaaabcbdddd</code>，如何去把里面由重复字符组成的子字符串分割出来，用我们上面的方法就行，代码如下。</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="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    string s=<span class="string">&quot;aaaaabcbdddd&quot;</span>;<span class="comment">//这个字符串只是举例</span></span><br><span class="line">    <span class="type">int</span> n=s.<span class="built_in">size</span>();</span><br><span class="line">    <span class="type">int</span> slow=<span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> fast=<span class="number">0</span>;</span><br><span class="line">    vector&lt;string&gt; res;</span><br><span class="line">    <span class="keyword">while</span> (slow&lt;n)&#123;</span><br><span class="line">        <span class="type">int</span> c=s[slow];<span class="comment">//读取slow指针指向的第一个字符</span></span><br><span class="line">        <span class="keyword">while</span> (fast&lt;n)&#123;<span class="comment">//随后fast指针开始移动，如果fast指针指向的字符和c相同，那就加1，不相同直接退出</span></span><br><span class="line">            <span class="keyword">if</span> (s[fast]!=c||fast==n<span class="number">-1</span>)&#123;<span class="comment">//这里要做一个防止越界的操作</span></span><br><span class="line">                <span class="keyword">break</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                fast++;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        string word=s.<span class="built_in">substr</span>(slow,fast-slow);<span class="comment">//这里需要解释一下第二个参数为什么不加1，因为fast指向的是第一个不同元素</span></span><br><span class="line">        res.<span class="built_in">push_back</span>(word);</span><br><span class="line">        slow=fast;<span class="comment">//将slow直接移动到fast的位置</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;res.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        cout&lt;&lt;res[i]&lt;&lt;<span class="string">&quot; &quot;</span>;<span class="comment">//这个地方我懒得改了，懂就行。</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>这串代码可以实现要求的功能，并且做一下封装就可以变成一个可复用的函数。</p><p>以及，这串代码的时间复杂度已经是最优，为O(n)，也就是至少需要遍历一次字符串，空间复杂度可以优化，但是意义不大。</p><p>我在这道题目里面用了队列的做法，有兴趣可以去尝试一下（<s>写起来其实挺便秘的</s>）</p><p>现在讲完了压缩，我们来讲一下解压。</p><p>解压事实上就是，给你一个字符串，里面有数字和字符组成，而数字就代表着它后面的那个字符重复了多少次。这个可能比压缩还简单点，因为我目测这个只需要一个指针就能解决问题。</p><p>我用字符串<code>5T2h4is i5s a3 te4st CA3a as10Z</code>举个例子，这里面的空格也算一个字符，代码如下。</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></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">    string s=<span class="string">&quot;5T2h4is i5s a3 te4st CA3a as10Z&quot;</span>;<span class="comment">//空格也算作一个字符</span></span><br><span class="line">    <span class="type">int</span> n=s.<span class="built_in">size</span>();</span><br><span class="line">    <span class="type">int</span> pos=<span class="number">0</span>;<span class="comment">//单指针</span></span><br><span class="line">    <span class="keyword">while</span> (pos&lt;n)&#123;</span><br><span class="line">        <span class="type">char</span> c=s[pos];</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">isdigit</span>(c))&#123;</span><br><span class="line">            string num;<span class="comment">//待读取的数字，这个数字可能是两位数</span></span><br><span class="line">            <span class="keyword">while</span> (pos&lt;n)&#123;</span><br><span class="line">                <span class="keyword">if</span> (!<span class="built_in">isdigit</span>(s[pos]))&#123;</span><br><span class="line">                    <span class="keyword">break</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    num+=s[pos];</span><br><span class="line">                    pos++;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="type">int</span> r=<span class="built_in">stoi</span>(num);<span class="comment">//stoi是一个把字符串数字转化为int的好函数。</span></span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;r;i++)&#123;</span><br><span class="line">                cout&lt;&lt;s[pos];</span><br><span class="line">            &#125;</span><br><span class="line">            pos++;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;s[pos];</span><br><span class="line">            pos++;</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>其实解压和压缩最核心的就是想到拿指针去指向每一个字符，然后注意一些坑点就行了。</p><p>其实你要说，用最笨的方法，两层循环找重复字符串也不是不行（<s>行在哪了我请问？</s>），但是这个时间复杂度很爆，我们尽量一次遍历就把这个问题解决掉。</p><p><s>有一个很变态的思路，就是用回溯去切割字符串，然后外部函数判断一下这个字符串是不是重复字符组成的。但是这个实现起来太小众且变态了，而且时间复杂度更爆了，头铁可以去写（我是不会去的），虽然半点实战价值都没有（）</s></p><h2 id="1079-延迟的回文数">1079 延迟的回文数</h2><p><strong>关键词：高精度加法与回文数的判断</strong></p><p>需要马上注意到这个</p><blockquote><p>输入在一行中给出一个不超过1000位的正整数。</p></blockquote><p>这个意味着什么，意味着就算是开long long都要爆喵，那这个时候我提出过了，用高精度加法。</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></pre></td><td class="code"><pre><span class="line"><span class="function">string <span class="title">addition</span><span class="params">(string a,string b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">while</span>(a.<span class="built_in">size</span>()&lt;b.<span class="built_in">size</span>())&#123;</span><br><span class="line">        a=<span class="string">&#x27;0&#x27;</span>+a;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span>(b.<span class="built_in">size</span>()&lt;a.<span class="built_in">size</span>())&#123;</span><br><span class="line">        b=<span class="string">&#x27;0&#x27;</span>+b;</span><br><span class="line">    &#125;<span class="comment">//这里我前面提到过了，是为了方便后面的主程序做的预处理。</span></span><br><span class="line">    <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">    string ans1,ans;<span class="comment">//ans1是初步结果，ans是返回结果，这个变量名起的有点变态。</span></span><br><span class="line">    <span class="type">int</span> t=<span class="number">0</span>;<span class="comment">//t是上一次剩下的溢出数</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;<span class="comment">//最后一位才是个位</span></span><br><span class="line">        <span class="type">int</span> x=a[i]-<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="type">int</span> y=b[i]-<span class="string">&#x27;0&#x27;</span>;<span class="comment">//转化为int类型，注意不能用stoi</span></span><br><span class="line">        <span class="type">char</span> c=(x+y+t)%<span class="number">10</span>+<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        t=(x+y+t)/<span class="number">10</span>;<span class="comment">//计算溢出的数字</span></span><br><span class="line">        ans1=c+ans1;<span class="comment">//加入答案</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (t!=<span class="number">0</span>)&#123;</span><br><span class="line">        ans1=<span class="built_in">char</span>(<span class="string">&#x27;0&#x27;</span>+t)+ans1;<span class="comment">//循环结束之后把溢出数加上去</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">bool</span> flag=<span class="number">0</span>;<span class="comment">//去前导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;ans<span class="number">1.</span><span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (flag)&#123;</span><br><span class="line">            ans+=ans1[i];</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(!flag&amp;&amp;ans1[i]!=<span class="string">&#x27;0&#x27;</span>)&#123;<span class="comment">//遇到第一个非0数字，立刻结束去0</span></span><br><span class="line">            ans+=ans1[i];</span><br><span class="line">            flag=<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">return</span> ans;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>高精度加法函数最后返回的应该是一个字符串类型。强烈建议这个自己动手写。</p><p>高精度加法有一个很好的点是，它只需要修改函数内部分参数，就可以实现不同进制之间的加法。</p><p>接下来讲一下回文的判断，这里我给两种方法，各有优劣，看爱用哪种</p><p>1.把字符直接翻转，然后判断和原字符是否相等。</p><p>2.利用双指针法逐字判断。</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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isback_num</span><span class="params">(string a)</span></span>&#123;</span><br><span class="line">    string b;</span><br><span class="line">    <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        b+=a[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (a==b)&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="1103-缘分数">1103 缘分数</h2><p><strong>关键词：如何判断一个数字是否是一个完全平方数。</strong></p><p>如果基础知识扎实的人，应该知道C++里面<code>float</code>转<code>int</code>是直接把小数部分扔掉而不是四舍五入（四舍五入可以用<code>std::round()</code>）</p><p>那么如果我们对一个数字使用<code>sqrt</code>函数呢，那么这个函数就会得到一个最接近于正确答案的整数，这个时候用这个整数去平方，如果等于待测数字，那么就可以返回<code>true</code>，不等于，直接返回<code>false</code>.</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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isquare</span><span class="params">(<span class="type">int</span> n)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (n&lt;<span class="number">0</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    <span class="type">int</span> r=<span class="built_in">sqrt</span>(n);</span><br><span class="line">    <span class="keyword">return</span> r*r==n;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="1116-多2了一点">1116 多2了一点</h2><p><strong>关键词：高精度减法。</strong></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></pre></td><td class="code"><pre><span class="line"><span class="function">string <span class="title">subtraction</span><span class="params">(string a,string b)</span></span>&#123;</span><br><span class="line">    string res,ans;</span><br><span class="line">    <span class="type">bool</span> flag=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">if</span> (!<span class="built_in">cmp</span>(a,b))&#123;</span><br><span class="line">        <span class="built_in">swap</span>(a,b);</span><br><span class="line">        flag=<span class="number">1</span>;<span class="comment">//控制正负</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (b.<span class="built_in">size</span>()&lt;a.<span class="built_in">size</span>())&#123;</span><br><span class="line">        b=<span class="string">&#x27;0&#x27;</span>+b;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">    <span class="type">int</span> p=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        <span class="type">int</span> x=(a[i]-<span class="string">&#x27;0&#x27;</span>)-p;</span><br><span class="line">        <span class="type">int</span> y=(b[i]-<span class="string">&#x27;0&#x27;</span>);</span><br><span class="line">        <span class="keyword">if</span> (x&gt;=y)&#123;</span><br><span class="line">            <span class="type">int</span> temp=(x-y);</span><br><span class="line">            res+=(<span class="type">char</span>)(<span class="string">&#x27;0&#x27;</span>+temp);</span><br><span class="line">            p=<span class="number">0</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="type">int</span> temp=(<span class="number">10</span>+x-y);</span><br><span class="line">            res+=(<span class="type">char</span>)(<span class="string">&#x27;0&#x27;</span>+temp);</span><br><span class="line">            p=<span class="number">1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">reverse</span>(res.<span class="built_in">begin</span>(),res.<span class="built_in">end</span>());</span><br><span class="line">    <span class="type">int</span> pos=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (pos&lt;res.<span class="built_in">size</span>()&amp;&amp;res[pos]==<span class="string">&#x27;0&#x27;</span>)&#123;</span><br><span class="line">        pos++;</span><br><span class="line">    &#125;<span class="comment">//新的去0逻辑。</span></span><br><span class="line">    <span class="keyword">if</span> (pos==res.<span class="built_in">size</span>()) <span class="keyword">return</span> <span class="string">&quot;0&quot;</span>;</span><br><span class="line">    <span class="keyword">else</span>&#123;</span><br><span class="line">        ans=res.<span class="built_in">substr</span>(pos);</span><br><span class="line">        <span class="keyword">if</span> (flag) ans=<span class="string">&#x27;-&#x27;</span>+ans;</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>现在我总结一下我们已经有的各种高精度</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></pre></td><td class="code"><pre><span class="line"><span class="function">string <span class="title">addition</span><span class="params">(string a,string b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">while</span>(a.<span class="built_in">size</span>()&lt;b.<span class="built_in">size</span>())&#123;</span><br><span class="line">        a=<span class="string">&#x27;0&#x27;</span>+a;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span>(b.<span class="built_in">size</span>()&lt;a.<span class="built_in">size</span>())&#123;</span><br><span class="line">        b=<span class="string">&#x27;0&#x27;</span>+b;</span><br><span class="line">    &#125;<span class="comment">//这里我前面提到过了，是为了方便后面的主程序做的预处理。</span></span><br><span class="line">    <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">    string ans1,ans;<span class="comment">//ans1是初步结果，ans是返回结果，这个变量名起的有点变态。</span></span><br><span class="line">    <span class="type">int</span> t=<span class="number">0</span>;<span class="comment">//t是上一次剩下的溢出数</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;<span class="comment">//最后一位才是个位</span></span><br><span class="line">        <span class="type">int</span> x=a[i]-<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="type">int</span> y=b[i]-<span class="string">&#x27;0&#x27;</span>;<span class="comment">//转化为int类型，注意不能用stoi</span></span><br><span class="line">        <span class="type">char</span> c=(x+y+t)%<span class="number">10</span>+<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        t=(x+y+t)/<span class="number">10</span>;<span class="comment">//计算溢出的数字</span></span><br><span class="line">        ans1=c+ans1;<span class="comment">//加入答案</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (t!=<span class="number">0</span>)&#123;</span><br><span class="line">        ans1=<span class="built_in">char</span>(<span class="string">&#x27;0&#x27;</span>+t)+ans1;<span class="comment">//循环结束之后把溢出数加上去</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">bool</span> flag=<span class="number">0</span>;<span class="comment">//去前导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;ans<span class="number">1.</span><span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (flag)&#123;</span><br><span class="line">            ans+=ans1[i];</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(!flag&amp;&amp;ans1[i]!=<span class="string">&#x27;0&#x27;</span>)&#123;<span class="comment">//遇到第一个非0数字，立刻结束去0</span></span><br><span class="line">            ans+=ans1[i];</span><br><span class="line">            flag=<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">return</span> ans;</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><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></pre></td><td class="code"><pre><span class="line"><span class="function">string <span class="title">subtraction</span><span class="params">(string a,string b)</span></span>&#123;</span><br><span class="line">    string res,ans;</span><br><span class="line">    <span class="type">bool</span> flag=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">if</span> (!<span class="built_in">cmp</span>(a,b))&#123;</span><br><span class="line">        <span class="built_in">swap</span>(a,b);</span><br><span class="line">        flag=<span class="number">1</span>;<span class="comment">//控制正负</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (b.<span class="built_in">size</span>()&lt;a.<span class="built_in">size</span>())&#123;</span><br><span class="line">        b=<span class="string">&#x27;0&#x27;</span>+b;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">    <span class="type">int</span> p=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        <span class="type">int</span> x=(a[i]-<span class="string">&#x27;0&#x27;</span>)-p;</span><br><span class="line">        <span class="type">int</span> y=(b[i]-<span class="string">&#x27;0&#x27;</span>);</span><br><span class="line">        <span class="keyword">if</span> (x&gt;=y)&#123;</span><br><span class="line">            <span class="type">int</span> temp=(x-y);</span><br><span class="line">            res+=(<span class="type">char</span>)(<span class="string">&#x27;0&#x27;</span>+temp);</span><br><span class="line">            p=<span class="number">0</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="type">int</span> temp=(<span class="number">10</span>+x-y);</span><br><span class="line">            res+=(<span class="type">char</span>)(<span class="string">&#x27;0&#x27;</span>+temp);</span><br><span class="line">            p=<span class="number">1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">reverse</span>(res.<span class="built_in">begin</span>(),res.<span class="built_in">end</span>());</span><br><span class="line">    <span class="type">int</span> pos=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (pos&lt;res.<span class="built_in">size</span>()&amp;&amp;res[pos]==<span class="string">&#x27;0&#x27;</span>)&#123;</span><br><span class="line">        pos++;</span><br><span class="line">    &#125;<span class="comment">//新的去0逻辑。</span></span><br><span class="line">    <span class="keyword">if</span> (pos==res.<span class="built_in">size</span>()) <span class="keyword">return</span> <span class="string">&quot;0&quot;</span>;</span><br><span class="line">    <span class="keyword">else</span>&#123;</span><br><span class="line">        ans=res.<span class="built_in">substr</span>(pos);</span><br><span class="line">        <span class="keyword">if</span> (flag) ans=<span class="string">&#x27;-&#x27;</span>+ans;</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>除法：</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></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> r=<span class="number">0</span>,num=<span class="number">0</span>;</span><br><span class="line">    string s,ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c:a)&#123;</span><br><span class="line">        num=r*<span class="number">10</span>+(c-<span class="string">&#x27;0&#x27;</span>);</span><br><span class="line">        s+=(num/b)+<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        r=num%b;<span class="comment">//这个数字是上一轮得到的余数，应该定义在全局。</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> pos=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (pos&lt;s.<span class="built_in">size</span>()<span class="number">-1</span>&amp;&amp;s[pos]==<span class="string">&#x27;0&#x27;</span>)&#123;</span><br><span class="line">        pos++;</span><br><span class="line">    &#125;<span class="comment">//去除前导0</span></span><br><span class="line">    ans=s.<span class="built_in">substr</span>(pos);</span><br></pre></td></tr></table></figure><p>乘法也是同理了。</p><h2 id="1118-如需挪车请致电">1118 如需挪车请致电</h2><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><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></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">string s;</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">    unordered_map&lt;string,<span class="type">int</span>&gt; n;</span><br><span class="line">    n.<span class="built_in">emplace</span>(<span class="string">&quot;yi&quot;</span>,<span class="number">1</span>),n.<span class="built_in">emplace</span>(<span class="string">&quot;er&quot;</span>,<span class="number">2</span>),n.<span class="built_in">emplace</span>(<span class="string">&quot;san&quot;</span>,<span class="number">3</span>),</span><br><span class="line">    n.<span class="built_in">emplace</span>(<span class="string">&quot;si&quot;</span>,<span class="number">4</span>),n.<span class="built_in">emplace</span>(<span class="string">&quot;wu&quot;</span>,<span class="number">5</span>),n.<span class="built_in">emplace</span>(<span class="string">&quot;liu&quot;</span>,<span class="number">6</span>),</span><br><span class="line">    n.<span class="built_in">emplace</span>(<span class="string">&quot;qi&quot;</span>,<span class="number">7</span>),n.<span class="built_in">emplace</span>(<span class="string">&quot;ba&quot;</span>,<span class="number">8</span>),n.<span class="built_in">emplace</span>(<span class="string">&quot;jiu&quot;</span>,<span class="number">9</span>),</span><br><span class="line">    n.<span class="built_in">emplace</span>(<span class="string">&quot;ling&quot;</span>,<span class="number">0</span>);</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</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">11</span>;i++)&#123;</span><br><span class="line">        <span class="built_in">getline</span>(cin,s);</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">size</span>()==<span class="number">1</span>&amp;&amp;<span class="built_in">isdigit</span>(s[<span class="number">0</span>]))&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(<span class="built_in">stoi</span>(s));</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span> (s.<span class="built_in">size</span>()&gt;=<span class="number">4</span>&amp;&amp;<span class="built_in">isalpha</span>(s[<span class="number">0</span>]))&#123;</span><br><span class="line">            string t=s.<span class="built_in">substr</span>(<span class="number">0</span>,<span class="number">4</span>);</span><br><span class="line">            <span class="keyword">if</span> (t==<span class="string">&quot;sqrt&quot;</span>)&#123;</span><br><span class="line">                <span class="type">int</span> x=<span class="built_in">sqrt</span>(<span class="built_in">stoi</span>(s.<span class="built_in">substr</span>(<span class="number">4</span>)));</span><br><span class="line">                ans.<span class="built_in">push_back</span>(x);</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(t==<span class="string">&quot;ling&quot;</span>)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(n[s]);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(s.<span class="built_in">size</span>()==<span class="number">2</span>&amp;&amp;<span class="built_in">isalpha</span>(s[<span class="number">0</span>]))&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(n[s]);</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(s.<span class="built_in">size</span>()==<span class="number">3</span>&amp;&amp;<span class="built_in">isalpha</span>(s[<span class="number">0</span>]))&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(n[s]);</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(<span class="built_in">isdigit</span>(s[<span class="number">0</span>]))&#123;</span><br><span class="line">            vector&lt;<span class="type">int</span>&gt; nums;</span><br><span class="line">            string m;</span><br><span class="line">            string f;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;s.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (s[i]==<span class="string">&#x27;+&#x27;</span>||s[i]==<span class="string">&#x27;-&#x27;</span>||s[i]==<span class="string">&#x27;*&#x27;</span>||s[i]==<span class="string">&#x27;/&#x27;</span>||s[i]==<span class="string">&#x27;%&#x27;</span>||s[i]==<span class="string">&#x27;^&#x27;</span>)&#123;</span><br><span class="line">                    f=s[i];</span><br><span class="line">                    <span class="type">int</span> y=<span class="built_in">stoi</span>(m);</span><br><span class="line">                    nums.<span class="built_in">push_back</span>(y);</span><br><span class="line">                    m.<span class="built_in">clear</span>();</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    m+=s[i];</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (!m.<span class="built_in">empty</span>())&#123;</span><br><span class="line">                <span class="type">int</span> t=<span class="built_in">stoi</span>(m);</span><br><span class="line">                nums.<span class="built_in">push_back</span>(t);</span><br><span class="line">                m.<span class="built_in">clear</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (f==<span class="string">&quot;+&quot;</span>)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(nums[<span class="number">0</span>]+nums[<span class="number">1</span>]);</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (f==<span class="string">&quot;-&quot;</span>)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(nums[<span class="number">0</span>]-nums[<span class="number">1</span>]);</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (f==<span class="string">&quot;*&quot;</span>)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(nums[<span class="number">0</span>]*nums[<span class="number">1</span>]);</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (f==<span class="string">&quot;/&quot;</span>)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(nums[<span class="number">0</span>]/nums[<span class="number">1</span>]);</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (f==<span class="string">&quot;%&quot;</span>)&#123;</span><br><span class="line">                <span class="keyword">if</span> (nums[<span class="number">1</span>]==<span class="number">0</span>) ans.<span class="built_in">push_back</span>(<span class="number">0</span>); </span><br><span class="line">                <span class="keyword">else</span> ans.<span class="built_in">push_back</span>(nums[<span class="number">0</span>] % nums[<span class="number">1</span>]);</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (f==<span class="string">&quot;^&quot;</span>)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(<span class="built_in">pow</span>(nums[<span class="number">0</span>],nums[<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">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        cout&lt;&lt;ans[i];</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="写在最后：">写在最后：</h2><p>这个我写了三天吧，感觉有点力竭了。</p><p>希望有用吧。毕竟PAT乙级大多数题目的基本模板都包括了。</p><p>​                                                                                                                                                                                                          ——Schariac125</p><p>​                                                                                                                                                                      2025.11.2于福州大学旗山校区</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1&gt;PAT-B的再探再报——常见的一些模拟板子&lt;/h1&gt;
&lt;h2 id=&quot;前言：&quot;&gt;前言：&lt;/h2&gt;
&lt;p&gt;在PAT-B的各题训练中我发现有一些“模板”是常常被使用的，写好这些模板是很重要的，可以减少我们犯错的次数以及加深理解，从而实现从“快”到“又快又稳”的突破。&lt;/p&gt;
</summary>
      
    
    
    
    <category term="程序设计" scheme="http://example.com/categories/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/"/>
    
    
    <category term="C++,算法" scheme="http://example.com/tags/C-%E7%AE%97%E6%B3%95/"/>
    
  </entry>
  
  <entry>
    <title>止痛无效</title>
    <link href="http://example.com/2025/10/26/%E6%AD%A2%E7%97%9B%E6%97%A0%E6%95%88/"/>
    <id>http://example.com/2025/10/26/%E6%AD%A2%E7%97%9B%E6%97%A0%E6%95%88/</id>
    <published>2025-10-25T16:30:00.000Z</published>
    <updated>2025-10-26T05:41:13.961Z</updated>
    
    <content type="html"><![CDATA[<h1><strong>止痛无效——伪治愈叙事如何制造情感耐受危机</strong></h1><h2 id="零：前排提醒">零：前排提醒</h2><p>本文内容为高度主观的论述，旨在剖析现象，言辞必然尖锐，无意寻求共识。若您期待温和的探讨，或对“伪治愈”题材抱有坚定好感，此刻关闭页面是明智的选择。继续阅读即代表您已了解并愿意面对随之可能引发的异议与不适。</p><h2 id="一：症状诊断：作为“情感止痛药”的伪治愈叙事">一：<strong>症状诊断：作为“情感止痛药”的伪治愈叙事</strong></h2><p>看一段自己的”黑历史“先。</p><blockquote><p>说实在话，当下纯爱类轻小说的人设往往就只有那么几种形式<br>要么便是才子佳人，要么便是美少女倒贴废柴，再逆天一点的就是那一类，我说的就是那个。<br>人设趋于一致，以至于从观感上看会发现很多角色本身其实并不存在什么特别的元素，更像是套模版套出来的，工业化生产出来的一样。这样诞生的角色虽然有很突出的角色性，毕竟沿着前人开发好的模子塑造总不会错。但问题也很明显，轻小说读者在阅读大量这类的作品之后会产生非常强烈的审美疲劳。<br>在人物独立化个性化塑造逐渐淡化的情况下，作家往往会去追求标新立异的剧情发展以谋得看点，可是问题马上又出现在这一点上，由于各种问题的影响，作家笔下标新立异的剧情往往在一定程度上脱离现实生活。由于日式轻小说本身对于中国读者就有一定的阅读门槛，因此很多时候读者其实并不会从其社会文化与社会生活方面去思考，而更多的情况下，是通过一种全人类共通的“语言”来实现理解与共鸣，也就是常说的情感。<br>我有一个近似于搞笑的说法叫做“评鉴情感论”<br>在任何文学作品中，人物情感的发生往往需要一个较为合理的契机，而这类契机往往体现在剧情之中，可如果剧情过于标新立异，一旦读者理解不了作者要表达的意图与情感，无法与角色共情，那么很抱歉，这对于我国读者而言是一段相对失败的剧情。<br>人设的工业化加上剧情的脱离实际，这往往构成不了一部多么优秀的作品，但是这类作品往往可以获得较多的阅读量，或许可以理解为作家的一种商业化防腰斩手段。<br>日式轻小说无论是从人设出发还是从剧情出发，都已经逐渐选择抛弃文学性，以换取商业化的利润。从商业出版的角度上看，这一类做法完全可以理解，因为这一类更符合流量时代审美单一化的趋势以及快餐类阅读的倾向。但倘若从文艺作品创作的角度上看，这其实是很不可取的。正如我开头所说，这一类在日式纯爱类轻小说中越发明显，其他类是否也这样，我不清楚。<br>讲到这里，其实要求本身就诞生于快餐时代的日式轻小说去努力践行一些文学上的理念是很莫名其妙的事情，其实大可以去读名著。不过以上的论述不全是从文学性上讨论，毕竟读者的审美疲劳总会对商业上造成影响。<br>到时候又该去哪里寻求新的模板和更标新立异的剧情呢？</p><p>发表于2023.11.04 QQ空间。</p></blockquote><p>两年之前我在社交网络上发表了这样子的感慨，后来尝试撰写文章谈论“工业化创作的时代是否仍然需要真情实感”，但很可惜，被我腰斩掉了，因为自己都写不下去了。</p><p>经过一年的思考，我再次尝试撰写，希望这次应该能够提出一个相对自洽的观点了。</p><p>属于是我蓄谋已久了。</p><p>我在标题已经提出了，这篇文章的主要目的是论轻小说“伪治愈”的流行，那么我觉得有必要去定义一下什么是“伪治愈”</p><p>“伪治愈”是指近些年以来轻小说业界如同雨后春笋一样冒出来的通过淡化矛盾，工业化叙事手段，以高强度，高甜度的感官刺激为主要卖点，尝试构建出一个高度提纯，去除“颗粒”的“无菌世界”以满足读者寻求慰藉的短期需求的一系列作品。</p><p>这么说可能有点泛泛而谈，举几个例子，有些这种作品中会出现一个主角，其无需经过一个漫长的过程，只需要接受外界一个“完美伴侣”的包容与爱或者某种“能力”的帮助去实现快速成长，大多数的困境也能够迎刃而解。而且故事的矛盾往往可能只是一个最浅层的甚至可以轻易去化解以至于可以说有点无趣的误会，或者是某种外界神秘力量的干涉等等。矛盾的解决也可能不依赖于角色的磨砺与成长，而是靠作者的某种“机械降神”强行去圆。</p><p>而且初读“伪治愈”的感受可能就像喝一罐冰可乐的第一口，随着气泡裹挟着糖分在口腔里的蔓延能够迅速感受到“爽”，但当越读越多，后面的感受就好像喝一瓶气泡快散尽，只剩下甜腻感的糖水，再也没有了第一口的爽感。最后就将你导向寻求更甜更刺激感受的循环。</p><p>经过上面的表达，应该对“伪治愈”有一个大概的认知了，甚至可能可以和自己以前看过的某些作品对上号。你不妨尝试在阅读完一本书冷静下来之后思考：如果抽掉这些甜蜜和刺激，那么这本书还剩下什么呢？而且我读完后除了爽之外还感受到了什么？</p><h2 id="二：-处方分析：流量、资本与创作焦虑合开的药方">二： <strong>处方分析：流量、资本与创作焦虑合开的药方</strong></h2><p>21世纪10年代必然是一个不平凡的年代。</p><p>信息技术在这个年代以一种前所未有的速度发展，社交媒体高速普及，信息流通的速度加快。但伴随着而来的，却是新的社会问题。</p><p>社会的高速发展使得个体普遍陷入内卷式竞争，未来的不确定性思考与信息过载中。来源于社会各方面的压力催生了一种”精神耗竭“的状态。在这种状态下，大脑会自然的寻求最低能耗的情感满足模式。“伪治愈”充分满足了大脑的需求，其提供的无需思考的直接兑现甜蜜与和解如同一副“包着糖衣的情感止痛药”快速满足了个体的情感需求，提供了可预测的安全感与即时的多巴胺奖励。是高效率的心理补偿，以及对现实压力的一种代偿性逃避，是理性经济人在文化消费中的现实选择。</p><p>当然，上述的社会问题绝不只是影响了普通读者，对于那些轻小说作者而言也是相当深刻的。“伪治愈”小说的创作门槛相对较低，而且模板化程度高，很多时候是有固定的人设（如“败犬系”“无口系”之类的角色标签）和固定的剧情使用的。并且经过一批敏锐捕捉到社会状况的作者的实践，描绘一个”摩擦被预先消除“和”矛盾被温柔化解“的”人际乌托邦“能够精准击中读者软肋，在”流量为王“的时代下更具商业价值。越来越多创作者在这种状况下，从原本选择用长时间去打磨一部优秀作品的策略转变为了选择用短时间去快速生产多个更有“流量”和受众的作品，而“伪治愈”正好就是理想的作品类型。这种策略上的转变的背后是小说家面临的现实压力，随着社会内卷的加剧，小说家们之间的竞争也愈发激烈。轻小说本身就是一个消费型的商品，谁的书能够卖的更好，谁就在业界有立足之地，相反，谁的书卖的不好，谁的书就容易被“腰斩”，导致小说家丢了饭碗，这不是他们愿意看到的。</p><p>这种意料之内的状况却将很多小说家推到了一个奇怪的方向上，对他们而言，套模板去快速创作一部有“流量”的“伪”作品远远比长时间打磨一部优秀作品简单，而且性价比还高得多。他们认识到，他们的读者似乎已经不喜欢传统的那一套叙事逻辑了，作品越浅显他们越喜欢，作品的直接感官刺激越强烈，他们越青睐。读者想要的不是需要精心品尝才能享受的“美酒”，而是一饮而下就可以立马享受快乐的“可乐”。因此，既然创作“伪治愈”的作品从各个方面来看都那么“爽”，做出这样的选择也是一种必然了，因为这是一种”安全“的自觉实践。</p><p>然而“伪治愈”的流行并不只是小说家与读者之间的默契，更像是“资本”“作家”“读者” 的“三方合谋”。我们都知道，资本是具有逐利性的，简单来说就是：什么赚钱，资本就喜欢谁。“伪治愈”的大卖让资本投下了视线，开始大量推荐这种作品以及培养会写这种作品的作家。资本将这些作品推向高位，让其获得更多的关注，加速了其流行。并且，这种模式具有高度的可复制性，低风险性，回报稳定，天生就是一种优秀的商业模式。于是，“伪治愈”从个别作品的特色，演变为一种高度工业化的类型生产。</p><p>如果说“伪治愈”是当代读者的“情感止痛药”，那么创作这类作品的小说家就是这些“情感止痛药”的生产工人，资本便是“药厂”。这种商业模式的形成并不突然，相反甚至可以说这是社会发展下的一种必然。这一套完整且高度自洽的商业模式迅速席卷了整个业界，逐渐成为了业界发展的主流。</p><h2 id="三：副作用报告：情感韧性退化与创作生态畸变">三：<strong>副作用报告：情感韧性退化与创作生态畸变</strong></h2><p>可是，我为什么把“伪治愈”作品比成“止痛药”，它们之间有什么相似的特性？</p><p>作为常见的药物，止痛药的作用就直接写在了它的名字里——止痛。现实生活中我们一般是身体不舒服感到严重疼痛的时候才会吃止痛药，吃有些止痛药之前，医生可能会叮嘱你：“这个药吃多了会成瘾，有依赖性，要小心服用”，所以我们都知道了，止痛药要少吃，真生病了还是要寻求治病药的帮助。</p><p>但在个体容易感到情感上的“不适”的现在，“伪治愈”就好像“情感止痛药”能够迅速且高效的缓解情绪上的“疼痛”。我并不否认这是一种有效的手段，只不过时常会思考，“情感止痛药”会不会和现实中的止痛药一样，是不是依旧“治标不治本”？</p><p>作为“情感止痛药”的“伪治愈”作品长期过度的满足了人们的情感需求，这必然会伴随着隐患的诞生。对于个体而言，长期沉溺于“伪治愈”塑造的“无菌环境”可能会导致其情感被满足的阈值升高，就像止痛药越吃越没药效一样，“情感止痛药”也会越用越没效果。当读者不再满足于普通“伪治愈”作品的人物设定和叙事套路时，他们会自然而然的感到厌倦。当大多数受众对固定套路都产生了厌倦。业界不得不继续尝试寻找新的模板和新的人设，资本也会开始推崇新的模板。长期往复，业界就陷入了一个循环依赖之中。</p><p>事实上，”情感止痛药“的副作用还远不止于此，更深远的影响在于过久的沉浸于”无害叙事“可能会导致情感韧性的退化。”伪治愈“作品为了达到其”治愈“的目的，往往选择”去冲突化“和”理想化“，这种刻意的淡化让作品读起来甜蜜且无害，读者如果长期沉浸于正面情感的反馈之中，一旦对于作品中”无条件的理解“和”完美的和解“的叙事感到习以为常甚至代入现实生活，当他们遇到”三次元“那个充斥着矛盾与误解的，需要笨拙的磨合和严肃的谈判的人际关系时，他们会更加无力和敏感，感到挫败和疏离，最后演变成逃避。这可能是很多资深读者对于现实生活的人际关系回避的重要因素，我们消费哪种故事，哪种故事就会在无形之中塑造我们所期待的关系模板。</p><p>从业界角度来看，作为”情感止痛药“的”伪治愈“作品长期占据了销量与人气的高地，前面已经提到过了，这种现象可能会导致越来越多的小说家出于各种原因选择迈上创作”伪治愈“的道路。长期以往这绝对会导致业内的畸形发展，当一个题材由一种形式的作品长期占据主导地位，那必然会导致对其他形式作品生存空间的压迫，甚至会导致”劣币驱逐良币“。当市场长期严重倾向这种”安全“的作品，那些试图讨论真实困境，展现人性复杂光谱的作品的生存空间将会逐渐缩小。长此以往，我们将会迎来一个看似”繁华似锦“，实则是抛去华丽的外壳，内部却高度同质化的业界，是一个精神日益干瘪的文化景观。</p><h2 id="四：替代疗法：真实的“手术刀”">四：替代疗法：真实的“手术刀”</h2><p>我虽然在前面貌似“大喷特喷”了“伪治愈”，可能读到这里有人就要问了：“主播主播，‘伪治愈’那么烂，副作用那么多，那就应该直接‘批倒’它啊！”</p><p><s>如果你也有这种想法并且觉得是对的，那这边建议是直接退出这篇文章，下面都可以不用看了。</s></p><p>我在小标题提到了“疗法”，那么是给谁的疗法？给“伪治愈”的吗？答案是：是，但也不是。</p><p>事实上，去打倒“伪治愈”是不合理的，也是不现实的。而且，我前面的很长一段论述其实都是在阐述一件事情，那就是“伪治愈”诞生与流行的原因。</p><p>副作用很多，并不能否认它是一味“药”的事实，尽管其作为“止痛药”只能缓解表面的疼痛，可是依赖于它的“病人”如果没有“止痛药”，又该如何去直面“手术刀”？如果因为“止痛药”的副作用众多就让“病人”直接把“止痛药”全部扔掉，然后在他们毫无防备时将他们推上手术台，告诉他们：“你有病，我现在要帮你切除病灶”。那我只能说，这个“医生”的水平是真的很差的……</p><p>尽管我在给文章所说的这类作品命名的时候带了一个“伪”字，但我依然保留了它核心的部分——“治愈”。“伪治愈”从客观上看，的确起到了“治愈”以及“安抚”的作用。而前面我批判的叙事逻辑是它的劣势，也是它的优势。我们不得不承认的是，对于一个并非资深文学爱好者而言的人，阅读一部传统意义上优秀的作品有时候是一件非常消耗精力的事情，而“伪治愈”的大多数读者正好就属于这种类型。他们自身拥有“三次元”的工作与生活，这些足够消耗完他们的精力，在这种状态下如果去剥夺掉他们所喜爱的作品形式是一种残忍，也是一种傲慢。这类作品的价值早已不能用单纯文学上的观点来看待，更多时候是它的受众所赋予的，而我前面的批判可能会让有些人产生一种错觉，就是这种作品真的“一文不值”，是祸害业界的蛀虫。但“伪治愈”的存在确确实实的构建了一个“不完美的避难所”，人们可以在这种作品中收获自己所需要的情感支撑和看到自己所希望的却不用支付任何代价，尽管这从长期看可能是有害的，但如果其真的能为它的读者补充到一些能量，提供一些慰藉，那么就绝不可说它是“一文不值”的。事物都具有两面性，在看到它的消极意义之后，我们也要看看它带来的积极意义，防止陷入到非黑即白的极端里。</p><p>我是在将批判的枪口指向自己吗？或许是吧，毕竟我这篇文章的批判主体就是商品属性大于其文化属性的轻小说，如果它们做好了商业上的职责，例如什么取得大卖就好了吧，那我说这么多，岂不是典型的“闹麻了”？但我想表达的并非如此，放在当下的社会语境下，“伪治愈”轻小说起到的作用是“止痛”可又仅仅只是“止痛”。我们必须清醒，“止痛药”不能代替“手术刀”。尽管轻小说的是一个高度商业化的载体，但其背后承载的价值观对于读者的影响依旧是潜移默化的，并不会因为其高度的商业化而让这种影响消失。“零价值观”的叙事从头到尾都是一个骗局，是根本不可能存在的。例如当一个故事选择用“无限包容的完美伴侣”来逃避孤独，潜移默化中传递可能的是 “个体无需成长，等待救赎即可” 的依赖心理；一个故事选择用“龙傲天式碾压”来逃避挫折，无形中灌输的可能是 “成功源于先天优势而非后天努力” 的僵化世界观。当创作者和批判者都因为其商业化的特性而放弃对思想价值的探讨，这就是在将价值观的塑造权力交给了未经反思的市场，是很浅薄的欲望逻辑。</p><p>我们必须区分两种‘治愈：一种是麻醉式治愈，也就是我说的“伪治愈”，通过提供虚幻的完美和解来遮蔽痛苦，其结果是‘耐受性’升高；另一种是生长式治愈，它不承诺消除痛苦，而是呈现创伤的真相与挣扎的历程，赋予个体理解并接纳痛苦的能力，从而获得在废墟上重建生活的韧性。后者就是我所说的的”手术刀“</p><p>呼吁“手术刀”的存在从来不是为了去打倒“止痛药”，肯定“止痛药”的价值也不是为了去抛弃“手术刀”。而是尝试去揭露多数“治愈”的背后的虚妄。但是，纯粹的“手术刀”往往容易陷入哲学式的“说教”，对于原先的读者或许是难以接受的。为了实现实操的目的，真正的“治愈”必须要保留轻小说商业化与娱乐化的外壳，但褪去外壳后，需要看到的是有别于表层的更加深刻的内核。一部优秀的“治愈系”杰作往往要能够巧妙的用娱乐包裹住深刻的思考，让读者在享受的同时，无意识完成一场精神的手术。它需要拥有“止痛药”甜蜜的外衣，但它却不是“止痛药”，是一把“糖衣手术刀”。</p><p>这其实也是去呼吁创作者们形成一种创作自觉，去主动思考在“伪治愈”的进一步该如何去实现“真治愈”，如何不止于实现“伪治愈”的“止痛”与“麻醉”，而是保留“伪治愈”甜蜜的外衣，用它去承载“真治愈”的“手术”与“力量”。这是敢于去承担社会责任的表现，是更高明以及生命周期更长的创作思考，是不堕落于“伪治愈”虚妄的清醒。</p><p>真正的“治愈”从不给读者一个简单的答案，而是通过真实的叙事，思想的深入，用心的创作去让读者获得一种新的视角，一种理解复杂的能力，一种更从容面对真实生活的勇气。</p><h2 id="五：术后康复：从“止痛”到“治愈”的漫长复健">五：术后康复：<strong>从“止痛”到“治愈”的漫长复健</strong></h2><p>我批判”伪治愈“，分析其成因，副作用，最后又承认其合理性从来都不是为了作为”法官“去宣判它的死刑。这篇文章的目的不是要在”商业“与”艺术“，”娱乐“与“思想”之间竖起一道墙，而是想要尝试拆除这道墙，这一道认为商业成功必然伴随着思想贫瘠的悲墙。</p><p>“伪治愈”的流行是一个时代现象，它反映了我们在这个高速发展的时代下共同的疲惫，对于慰藉的渴望，以及我们如今想要如何去抓住未来，抓住什么样的未来。这本身就是一种真实，读者清醒的思考和对“伪治愈”的反思，也是一把“手术刀”。</p><p>说到底，我自己也是一名喜欢读“伪治愈”的读者，也只是有感而发才写下这篇文章，必然漏洞百出。不必认同我的观点，因为这从不是我求肯定和认同才写下的东西。</p><blockquote><p>始于直面，终于共存</p></blockquote><blockquote><p>备注：不点名作品的原因是鼠鼠胆小，不是鼠鼠不想。</p></blockquote><p>​                                                                                                                                                2025.10.26 写于福州大学旗山校区 By Schariac125</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1&gt;&lt;strong&gt;止痛无效——伪治愈叙事如何制造情感耐受危机&lt;/strong&gt;&lt;/h1&gt;
&lt;h2 id=&quot;零：前排提醒&quot;&gt;零：前排提醒&lt;/h2&gt;
&lt;p&gt;本文内容为高度主观的论述，旨在剖析现象，言辞必然尖锐，无意寻求共识。若您期待温和的探讨，或对“伪治愈”题材抱有坚定好感，此</summary>
      
    
    
    
    <category term="碎碎念" scheme="http://example.com/categories/%E7%A2%8E%E7%A2%8E%E5%BF%B5/"/>
    
    
    <category term="杂谈" scheme="http://example.com/tags/%E6%9D%82%E8%B0%88/"/>
    
  </entry>
  
  <entry>
    <title>New Start——两个月速通代码随想录</title>
    <link href="http://example.com/2025/10/07/New%20Start%E2%80%94%E2%80%94%E4%B8%A4%E4%B8%AA%E6%9C%88%E9%80%9F%E9%80%9A%E4%BB%A3%E7%A0%81%E9%9A%8F%E6%83%B3%E5%BD%95/"/>
    <id>http://example.com/2025/10/07/New%20Start%E2%80%94%E2%80%94%E4%B8%A4%E4%B8%AA%E6%9C%88%E9%80%9F%E9%80%9A%E4%BB%A3%E7%A0%81%E9%9A%8F%E6%83%B3%E5%BD%95/</id>
    <published>2025-10-07T08:25:00.000Z</published>
    <updated>2025-11-21T13:03:57.558Z</updated>
    
    <content type="html"><![CDATA[<h1>New Start——两个月速通代码随想录</h1><h2 id="写在前面">写在前面</h2><p>代码随想录的训练应该紧接在PAT乙级之后，这一套题目可以很迅速的帮助复习以及查缺补漏一些算法，难度适中，题目选取是优秀，有代表性的，名副其实。</p><p>不过这个文档纯属是我个人笔记了，不看也无所谓，直接看原作者写的就好。</p><h2 id="数组：">数组：</h2><h3 id="二分查找">二分查找</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">search</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; a, <span class="type">int</span> t)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">        set&lt;<span class="type">int</span>&gt; s;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> it:a)&#123;</span><br><span class="line">            s.<span class="built_in">insert</span>(it);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">find</span>(t)==s.<span class="built_in">end</span>())&#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</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><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> (a[mid]==t)&#123;</span><br><span class="line">                    <span class="keyword">return</span> mid;</span><br><span class="line">                &#125;<span class="keyword">else</span> <span class="keyword">if</span>(a[mid]&gt;t)&#123;</span><br><span class="line">                    r=mid<span class="number">-1</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    l=mid<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">        <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="搜索插入位置">搜索插入位置</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">searchInsert</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; a, <span class="type">int</span> t)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">        set&lt;<span class="type">int</span>&gt; s;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> it:a)&#123;</span><br><span class="line">            s.<span class="built_in">insert</span>(it);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">find</span>(t)==s.<span class="built_in">end</span>())&#123;</span><br><span class="line">            <span class="keyword">if</span> (t&lt;a[<span class="number">0</span>])&#123;</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="keyword">if</span> (t&gt;a[n<span class="number">-1</span>])&#123;</span><br><span class="line">                <span class="keyword">return</span> n;</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<span class="number">-1</span>;i++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (a[i]&gt;t&amp;&amp;a[i<span class="number">-1</span>]&lt;t)&#123;</span><br><span class="line">                    <span class="keyword">return</span> i;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="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><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> (a[mid]==t)&#123;</span><br><span class="line">                    <span class="keyword">return</span> mid;</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">if</span> (a[mid]&gt;t)&#123;</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">if</span> (a[mid]&lt;t)&#123;</span><br><span class="line">                    l=mid<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">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>感觉有点像拿内存换时间的感觉？</p><h3 id="在排序数组中查找元素的第一个和最后一个位置">在排序数组中查找元素的第一个和最后一个位置</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">searchRange</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; a, <span class="type">int</span> t)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">        set&lt;<span class="type">int</span>&gt; s;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> it:a)&#123;</span><br><span class="line">            s.<span class="built_in">insert</span>(it);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">empty</span>()||s.<span class="built_in">find</span>(t)==s.<span class="built_in">end</span>())&#123;</span><br><span class="line">            <span class="keyword">return</span> &#123;<span class="number">-1</span>,<span class="number">-1</span>&#125;;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="type">int</span> ansl=<span class="number">0</span>,ansr=<span class="number">0</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><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> (a[mid]&gt;t)&#123;</span><br><span class="line">                    r=mid<span class="number">-1</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    l=mid<span class="number">+1</span>;</span><br><span class="line">                    ansr=l;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            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><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> (a[mid]&gt;=t)&#123;</span><br><span class="line">                    r=mid<span class="number">-1</span>;</span><br><span class="line">                    ansl=r;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    l=mid<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">return</span> &#123;ansl<span class="number">+1</span>,ansr<span class="number">-1</span>&#125;;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> &#123;<span class="number">-1</span>,<span class="number">-1</span>&#125;;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="不使用内置函数的算术平方根查找">不使用内置函数的算术平方根查找</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><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"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">mySqrt</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> l=<span class="number">1</span>,r=x;</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> (l&lt;=r)&#123;</span><br><span class="line">            <span class="type">int</span> mid=l+(r-l)/<span class="number">2</span>;</span><br><span class="line">            <span class="keyword">if</span> ((<span class="type">long</span> <span class="type">long</span>)mid*mid&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 class="keyword">else</span>&#123;</span><br><span class="line">                r=mid<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">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="不使用内置函数的完全平方数判断">不使用内置函数的完全平方数判断</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">isPerfectSquare</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> l=<span class="number">1</span>,r=x;</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> (l&lt;=r)&#123;</span><br><span class="line">            <span class="type">int</span> mid=l+(r-l)/<span class="number">2</span>;</span><br><span class="line">            <span class="keyword">if</span> ((<span class="type">long</span> <span class="type">long</span>)mid*mid&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 class="keyword">else</span>&#123;</span><br><span class="line">                r=mid<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">if</span> ((<span class="type">long</span> <span class="type">long</span>)ans*ans==x)&#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</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">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>其实这个我感觉比起上一题而言只是多了一个if和else的判断。</p><h3 id="不使用额外空间的移除数组元素法">不使用额外空间的移除数组元素法</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><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">removeElement</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; a, <span class="type">int</span> v)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> fastidx=<span class="number">0</span>,slowidx=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (fastidx&lt;n&amp;&amp;slowidx&lt;n)&#123;</span><br><span class="line">            <span class="keyword">if</span> (a[fastidx]!=v)&#123;</span><br><span class="line">                a[slowidx++]=a[fastidx];</span><br><span class="line">            &#125;</span><br><span class="line">            fastidx++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> slowidx;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>快慢指针法，当快指针遇到了要移除的元素直接跳过，不用移除的元素移到慢指针的下一位。</p><h3 id="不使用额外空间的移除数组重复元素法">不使用额外空间的移除数组重复元素法</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">removeDuplicates</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; a)</span> </span>&#123;</span><br><span class="line">        unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; m;</span><br><span class="line">        <span class="type">int</span> n=a.<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;n;i++)&#123;</span><br><span class="line">            m[a[i]]++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> slowidx=<span class="number">0</span>,fastidx=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (slowidx&lt;n&amp;&amp;fastidx&lt;n)&#123;</span><br><span class="line">            <span class="keyword">if</span> (m[a[fastidx]]==<span class="number">1</span>)&#123;</span><br><span class="line">                a[slowidx++]=a[fastidx];</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(m[a[fastidx]]&gt;<span class="number">1</span>)&#123;</span><br><span class="line">                m[a[fastidx]]--;</span><br><span class="line">            &#125;</span><br><span class="line">            fastidx++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> slowidx;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="不使用额外空间的移除0法">不使用额外空间的移除0法</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><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">moveZeroes</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; a)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> slowidx=<span class="number">0</span>,fastidx=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (slowidx&lt;n&amp;&amp;fastidx&lt;n)&#123;</span><br><span class="line">            <span class="keyword">if</span> (a[fastidx]!=<span class="number">0</span>)&#123;</span><br><span class="line">                a[slowidx++]=a[fastidx];</span><br><span class="line">            &#125;</span><br><span class="line">            fastidx++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">while</span> (slowidx&lt;n)&#123;</span><br><span class="line">            a[slowidx++]=<span class="number">0</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="字符串的比较方法（lk844）">字符串的比较方法（lk844）</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">backspaceCompare</span><span class="params">(string S, string T)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">build</span>(S) == <span class="built_in">build</span>(T);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function">string <span class="title">build</span><span class="params">(string str)</span> </span>&#123;</span><br><span class="line">        string ret;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">char</span> ch : str) &#123;</span><br><span class="line">            <span class="keyword">if</span> (ch != <span class="string">&#x27;#&#x27;</span>) &#123;</span><br><span class="line">                ret.<span class="built_in">push_back</span>(ch);</span><br><span class="line">            &#125; <span class="keyword">else</span> <span class="keyword">if</span> (!ret.<span class="built_in">empty</span>()) &#123;</span><br><span class="line">                ret.<span class="built_in">pop_back</span>();</span><br><span class="line">            &#125;</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">&#125;;</span><br></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><span class="line">var backspaceCompare = <span class="built_in">function</span>(S, T) &#123;</span><br><span class="line">    let i = S.length - <span class="number">1</span>,</span><br><span class="line">        j = T.length - <span class="number">1</span>,</span><br><span class="line">        skipS = <span class="number">0</span>,</span><br><span class="line">        skipT = <span class="number">0</span>;</span><br><span class="line">    <span class="comment">// 大循环</span></span><br><span class="line">    <span class="keyword">while</span>(i &gt;= <span class="number">0</span> || j &gt;= <span class="number">0</span>)&#123;</span><br><span class="line">        <span class="comment">// S 循环</span></span><br><span class="line">        <span class="keyword">while</span>(i &gt;= <span class="number">0</span>)&#123;</span><br><span class="line">            <span class="keyword">if</span>(S[i] === <span class="string">&#x27;#&#x27;</span>)&#123;</span><br><span class="line">                skipS++;</span><br><span class="line">                i--;</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(skipS &gt; <span class="number">0</span>)&#123;</span><br><span class="line">                skipS--;</span><br><span class="line">                i--;</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">// T 循环</span></span><br><span class="line">        <span class="keyword">while</span>(j &gt;= <span class="number">0</span>)&#123;</span><br><span class="line">            <span class="keyword">if</span>(T[j] === <span class="string">&#x27;#&#x27;</span>)&#123;</span><br><span class="line">                skipT++;</span><br><span class="line">                j--;</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(skipT &gt; <span class="number">0</span>)&#123;</span><br><span class="line">                skipT--;</span><br><span class="line">                j--;</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(S[i] !== T[j]) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">        i--;</span><br><span class="line">        j--;</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></pre></td></tr></table></figure><h3 id="数组的平方">数组的平方</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">sortedSquares</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; a)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=a.<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;n;i++)&#123;</span><br><span class="line">            a[i]=a[i]*a[i];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">sort</span>(a.<span class="built_in">begin</span>(),a.<span class="built_in">end</span>());</span><br><span class="line">        <span class="keyword">return</span> a;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="长度最小的子数组">长度最小的子数组</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">minSubArrayLen</span><span class="params">(<span class="type">int</span> t, vector&lt;<span class="type">int</span>&gt;&amp; a)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> i=<span class="number">0</span>,j=<span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> minn=n;</span><br><span class="line">        <span class="type">int</span> sum=a[i];</span><br><span class="line">        <span class="keyword">while</span> (i&lt;n&amp;&amp;j&lt;n)&#123;</span><br><span class="line">            <span class="keyword">if</span> (sum&lt;t)&#123;</span><br><span class="line">                j++;</span><br><span class="line">                <span class="keyword">if</span> (j&lt;n) sum+=a[j];</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                minn=<span class="built_in">min</span>(minn,j-i<span class="number">+1</span>);</span><br><span class="line">                sum-=a[i];</span><br><span class="line">                i++;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (sum&lt;t&amp;&amp;i==<span class="number">0</span>)&#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">return</span> minn;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="水果成篮（lk904）">水果成篮（lk904）</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">totalFruit</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; f)</span> </span>&#123;</span><br><span class="line">        unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; cnt;</span><br><span class="line">        <span class="type">int</span> n=f.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> ans=<span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> left=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> right=<span class="number">0</span>; right&lt;n; right++)&#123;</span><br><span class="line">            cnt[f[right]]++;</span><br><span class="line">            <span class="keyword">while</span> (cnt.<span class="built_in">size</span>()&gt;<span class="number">2</span>)&#123;</span><br><span class="line">                cnt[f[left]]--;</span><br><span class="line">                <span class="keyword">if</span> (cnt[f[left]]==<span class="number">0</span>) cnt.<span class="built_in">erase</span>(f[left]);</span><br><span class="line">                left++;</span><br><span class="line">            &#125;</span><br><span class="line">            ans=<span class="built_in">max</span>(ans, right-left<span class="number">+1</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">&#125;;</span><br></pre></td></tr></table></figure><h3 id="字串覆盖（lk76）">字串覆盖（lk76）</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><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">string <span class="title">minWindow</span><span class="params">(string s, string t)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n1 = s.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> n2 = t.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (n1 &lt; n2) <span class="keyword">return</span> <span class="string">&quot;&quot;</span>;</span><br><span class="line"></span><br><span class="line">        unordered_map&lt;<span class="type">char</span>,<span class="type">int</span>&gt; h1;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> c : t) h1[c]++;</span><br><span class="line"></span><br><span class="line">        unordered_map&lt;<span class="type">char</span>,<span class="type">int</span>&gt; h2;</span><br><span class="line">        <span class="type">int</span> left = <span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> match = <span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> minlen = INT_MAX;</span><br><span class="line">        <span class="type">int</span> start = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> right = <span class="number">0</span>; right &lt; n1; right++) &#123;</span><br><span class="line">            <span class="type">char</span> c = s[right];</span><br><span class="line">            <span class="keyword">if</span> (h<span class="number">1.</span><span class="built_in">count</span>(c)) &#123;</span><br><span class="line">                h2[c]++;</span><br><span class="line">                <span class="keyword">if</span> (h2[c] == h1[c]) match++;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            <span class="keyword">while</span> (match == (<span class="type">int</span>)h<span class="number">1.</span><span class="built_in">size</span>()) &#123;</span><br><span class="line">                <span class="keyword">if</span> (right - left + <span class="number">1</span> &lt; minlen) &#123;</span><br><span class="line">                    minlen = right - left + <span class="number">1</span>;</span><br><span class="line">                    start = left;</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="type">char</span> d = s[left];</span><br><span class="line">                <span class="keyword">if</span> (h<span class="number">1.</span><span class="built_in">count</span>(d)) &#123;</span><br><span class="line">                    h2[d]--;</span><br><span class="line">                    <span class="keyword">if</span> (h2[d] &lt; h1[d]) match--;</span><br><span class="line">                &#125;</span><br><span class="line">                left++;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> minlen == INT_MAX ? <span class="string">&quot;&quot;</span> : s.<span class="built_in">substr</span>(start, minlen);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="螺旋矩阵（lk59）">螺旋矩阵（lk59）</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">generateMatrix</span>(<span class="type">int</span> n) &#123;</span><br><span class="line">        <span class="type">int</span> top=<span class="number">0</span>,bottom=n<span class="number">-1</span>,left=<span class="number">0</span>,right=n<span class="number">-1</span>;</span><br><span class="line">        <span class="type">int</span> cur=<span class="number">1</span>;</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">m</span>(n,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(n));</span><br><span class="line">        <span class="keyword">while</span> (top&lt;=bottom&amp;&amp;left&lt;=right)&#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i=left;i&lt;=right;i++)&#123;</span><br><span class="line">                m[top][i]=cur;</span><br><span class="line">                cur++;</span><br><span class="line">            &#125;</span><br><span class="line">            top++;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i=top;i&lt;=bottom;i++)&#123;</span><br><span class="line">                m[i][right]=cur;</span><br><span class="line">                cur++;</span><br><span class="line">            &#125;</span><br><span class="line">            right--;</span><br><span class="line">            <span class="keyword">if</span> (top&lt;=bottom)&#123;</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">int</span> i=right;i&gt;=left;i--)&#123;</span><br><span class="line">                    m[bottom][i]=cur;</span><br><span class="line">                    cur++;</span><br><span class="line">                &#125;</span><br><span class="line">                bottom--;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (left&lt;=right)&#123;</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">int</span> i=bottom;i&gt;=top;i--)&#123;</span><br><span class="line">                    m[i][left]=cur;</span><br><span class="line">                    cur++;</span><br><span class="line">                &#125;</span><br><span class="line">                left++;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> m;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="链表理论">链表理论</h2><h3 id="删除链表中的元素">删除链表中的元素</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><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="comment">/**</span></span><br><span class="line"><span class="comment"> * Definition for singly-linked list.</span></span><br><span class="line"><span class="comment"> * struct ListNode &#123;</span></span><br><span class="line"><span class="comment"> *     int val;</span></span><br><span class="line"><span class="comment"> *     ListNode *next;</span></span><br><span class="line"><span class="comment"> *     ListNode() : val(0), next(nullptr) &#123;&#125;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x) : val(x), next(nullptr) &#123;&#125;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x, ListNode *next) : val(x), next(next) &#123;&#125;</span></span><br><span class="line"><span class="comment"> * &#125;;</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode* <span class="title">removeElements</span><span class="params">(ListNode* head, <span class="type">int</span> val)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">while</span> (head!=<span class="literal">NULL</span>&amp;&amp;head-&gt;val==val)&#123;</span><br><span class="line">            ListNode *temp=head;</span><br><span class="line">            head=head-&gt;next;</span><br><span class="line">            <span class="keyword">delete</span> temp;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        ListNode* cur=head;</span><br><span class="line">        <span class="keyword">while</span> (cur!=<span class="literal">NULL</span>&amp;&amp;cur-&gt;next!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            <span class="keyword">if</span> (cur-&gt;next-&gt;val==val)&#123;</span><br><span class="line">                ListNode *temp=cur-&gt;next;</span><br><span class="line">                cur-&gt;next=cur-&gt;next-&gt;next;</span><br><span class="line">                <span class="keyword">delete</span> temp;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                cur=cur-&gt;next;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> head;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="设计链表（lk707）">设计链表（lk707）</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">MyLinkedList</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="comment">// 定义链表节点结构体</span></span><br><span class="line">    <span class="keyword">struct</span> <span class="title class_">LinkedNode</span> &#123;</span><br><span class="line">        <span class="type">int</span> val;</span><br><span class="line">        LinkedNode* next;</span><br><span class="line">        <span class="built_in">LinkedNode</span>(<span class="type">int</span> val):<span class="built_in">val</span>(val), <span class="built_in">next</span>(<span class="literal">nullptr</span>)&#123;&#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="built_in">MyLinkedList</span>() &#123;</span><br><span class="line">        _dummyHead = <span class="keyword">new</span> <span class="built_in">LinkedNode</span>(<span class="number">0</span>); <span class="comment">// 这里定义的头结点 是一个虚拟头结点，而不是真正的链表头结点</span></span><br><span class="line">        _size = <span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 获取到第index个节点数值，如果index是非法数值直接返回-1， 注意index是从0开始的，第0个节点就是头结点</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> index)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (index &gt; (_size - <span class="number">1</span>) || index &lt; <span class="number">0</span>) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        LinkedNode* cur = _dummyHead-&gt;next;</span><br><span class="line">        <span class="keyword">while</span>(index--)&#123; <span class="comment">// 如果--index 就会陷入死循环</span></span><br><span class="line">            cur = cur-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> cur-&gt;val;</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="function"><span class="type">void</span> <span class="title">addAtHead</span><span class="params">(<span class="type">int</span> val)</span> </span>&#123;</span><br><span class="line">        LinkedNode* newNode = <span class="keyword">new</span> <span class="built_in">LinkedNode</span>(val);</span><br><span class="line">        newNode-&gt;next = _dummyHead-&gt;next;</span><br><span class="line">        _dummyHead-&gt;next = newNode;</span><br><span class="line">        _size++;</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="function"><span class="type">void</span> <span class="title">addAtTail</span><span class="params">(<span class="type">int</span> val)</span> </span>&#123;</span><br><span class="line">        LinkedNode* newNode = <span class="keyword">new</span> <span class="built_in">LinkedNode</span>(val);</span><br><span class="line">        LinkedNode* cur = _dummyHead;</span><br><span class="line">        <span class="keyword">while</span>(cur-&gt;next != <span class="literal">nullptr</span>)&#123;</span><br><span class="line">            cur = cur-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        cur-&gt;next = newNode;</span><br><span class="line">        _size++;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 在第index个节点之前插入一个新节点，例如index为0，那么新插入的节点为链表的新头节点。</span></span><br><span class="line">    <span class="comment">// 如果index 等于链表的长度，则说明是新插入的节点为链表的尾结点</span></span><br><span class="line">    <span class="comment">// 如果index大于链表的长度，则返回空</span></span><br><span class="line">    <span class="comment">// 如果index小于0，则在头部插入节点</span></span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">addAtIndex</span><span class="params">(<span class="type">int</span> index, <span class="type">int</span> val)</span> </span>&#123;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span>(index &gt; _size) <span class="keyword">return</span>;</span><br><span class="line">        <span class="keyword">if</span>(index &lt; <span class="number">0</span>) index = <span class="number">0</span>;        </span><br><span class="line">        LinkedNode* newNode = <span class="keyword">new</span> <span class="built_in">LinkedNode</span>(val);</span><br><span class="line">        LinkedNode* cur = _dummyHead;</span><br><span class="line">        <span class="keyword">while</span>(index--) &#123;</span><br><span class="line">            cur = cur-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        newNode-&gt;next = cur-&gt;next;</span><br><span class="line">        cur-&gt;next = newNode;</span><br><span class="line">        _size++;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 删除第index个节点，如果index 大于等于链表的长度，直接return，注意index是从0开始的</span></span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">deleteAtIndex</span><span class="params">(<span class="type">int</span> index)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (index &gt;= _size || index &lt; <span class="number">0</span>) &#123;</span><br><span class="line">            <span class="keyword">return</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        LinkedNode* cur = _dummyHead;</span><br><span class="line">        <span class="keyword">while</span>(index--) &#123;</span><br><span class="line">            cur = cur -&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        LinkedNode* tmp = cur-&gt;next;</span><br><span class="line">        cur-&gt;next = cur-&gt;next-&gt;next;</span><br><span class="line">        <span class="keyword">delete</span> tmp;</span><br><span class="line">        <span class="comment">//delete命令指示释放了tmp指针原本所指的那部分内存，</span></span><br><span class="line">        <span class="comment">//被delete后的指针tmp的值（地址）并非就是NULL，而是随机值。也就是被delete后，</span></span><br><span class="line">        <span class="comment">//如果不再加上一句tmp=nullptr,tmp会成为乱指的野指针</span></span><br><span class="line">        <span class="comment">//如果之后的程序不小心使用了tmp，会指向难以预想的内存空间</span></span><br><span class="line">        tmp=<span class="literal">nullptr</span>;</span><br><span class="line">        _size--;</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="function"><span class="type">void</span> <span class="title">printLinkedList</span><span class="params">()</span> </span>&#123;</span><br><span class="line">        LinkedNode* cur = _dummyHead;</span><br><span class="line">        <span class="keyword">while</span> (cur-&gt;next != <span class="literal">nullptr</span>) &#123;</span><br><span class="line">            cout &lt;&lt; cur-&gt;next-&gt;val &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">            cur = cur-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        cout &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line"><span class="keyword">private</span>:</span><br><span class="line">    <span class="type">int</span> _size;</span><br><span class="line">    LinkedNode* _dummyHead;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="翻转链表（lk206）">翻转链表（lk206）</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><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * Definition for singly-linked list.</span></span><br><span class="line"><span class="comment"> * struct ListNode &#123;</span></span><br><span class="line"><span class="comment"> *     int val;</span></span><br><span class="line"><span class="comment"> *     ListNode *next;</span></span><br><span class="line"><span class="comment"> *     ListNode() : val(0), next(nullptr) &#123;&#125;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x) : val(x), next(nullptr) &#123;&#125;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x, ListNode *next) : val(x), next(next) &#123;&#125;</span></span><br><span class="line"><span class="comment"> * &#125;;</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode* <span class="title">reverseList</span><span class="params">(ListNode* head)</span> </span>&#123;</span><br><span class="line">        ListNode *temp;</span><br><span class="line">        ListNode *cur=head;</span><br><span class="line">        ListNode *pre=<span class="literal">NULL</span>;</span><br><span class="line">        <span class="keyword">while</span> (cur!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            temp=cur-&gt;next;</span><br><span class="line">            cur-&gt;next=pre;</span><br><span class="line">            pre=cur;</span><br><span class="line">            cur=temp;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> pre;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>不得不说，这个确实是有小巧思在身上的。</p><h3 id="两两交换链表中的结点（lk24）">两两交换链表中的结点（lk24）</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><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="comment">/**</span></span><br><span class="line"><span class="comment"> * Definition for singly-linked list.</span></span><br><span class="line"><span class="comment"> * struct ListNode &#123;</span></span><br><span class="line"><span class="comment"> *     int val;</span></span><br><span class="line"><span class="comment"> *     ListNode *next;</span></span><br><span class="line"><span class="comment"> *     ListNode() : val(0), next(nullptr) &#123;&#125;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x) : val(x), next(nullptr) &#123;&#125;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x, ListNode *next) : val(x), next(next) &#123;&#125;</span></span><br><span class="line"><span class="comment"> * &#125;;</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode* <span class="title">swapPairs</span><span class="params">(ListNode* head)</span> </span>&#123;</span><br><span class="line">        ListNode *dummyhead=<span class="keyword">new</span> <span class="built_in">ListNode</span>(<span class="number">0</span>);</span><br><span class="line">        dummyhead-&gt;next=head;</span><br><span class="line">        ListNode *cur=dummyhead;</span><br><span class="line">        <span class="keyword">while</span> (cur-&gt;next!=<span class="literal">NULL</span>&amp;&amp;cur-&gt;next-&gt;next!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            ListNode *temp1=cur-&gt;next;</span><br><span class="line">            ListNode *temp2=cur-&gt;next-&gt;next-&gt;next;</span><br><span class="line">            cur-&gt;next=cur-&gt;next-&gt;next;</span><br><span class="line">            cur-&gt;next-&gt;next=temp1;</span><br><span class="line">            cur-&gt;next-&gt;next-&gt;next=temp2;</span><br><span class="line">            cur=cur-&gt;next-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dummyhead-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>这个虚拟头结点指针操作真是惊为天人了，要换做以前我只会map存结点然后交换值。</p><h3 id="删除链表的倒数第n个结点（lk19）">删除链表的倒数第n个结点（lk19）</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><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="comment"> * Definition for singly-linked list.</span></span><br><span class="line"><span class="comment"> * struct ListNode &#123;</span></span><br><span class="line"><span class="comment"> *     int val;</span></span><br><span class="line"><span class="comment"> *     ListNode *next;</span></span><br><span class="line"><span class="comment"> *     ListNode() : val(0), next(nullptr) &#123;&#125;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x) : val(x), next(nullptr) &#123;&#125;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x, ListNode *next) : val(x), next(next) &#123;&#125;</span></span><br><span class="line"><span class="comment"> * &#125;;</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode* <span class="title">removeNthFromEnd</span><span class="params">(ListNode* head, <span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">        ListNode *dummy=<span class="keyword">new</span> <span class="built_in">ListNode</span>(<span class="number">0</span>);</span><br><span class="line">        dummy-&gt;next=head;</span><br><span class="line">        ListNode *fast=dummy;</span><br><span class="line">        ListNode *slow=dummy;</span><br><span class="line">        <span class="keyword">while</span> (n--&amp;&amp;fast!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            fast=fast-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        fast=fast-&gt;next;</span><br><span class="line">        <span class="keyword">while</span> (fast!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            fast=fast-&gt;next;</span><br><span class="line">            slow=slow-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        slow-&gt;next=slow-&gt;next-&gt;next;</span><br><span class="line">        <span class="keyword">return</span> dummy-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>快慢指针，太经典了bro，这个思路惊为天人了。</p><h3 id="链表相交">链表相交</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><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * Definition for singly-linked list.</span></span><br><span class="line"><span class="comment"> * struct ListNode &#123;</span></span><br><span class="line"><span class="comment"> *     int val;</span></span><br><span class="line"><span class="comment"> *     ListNode *next;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x) : val(x), next(NULL) &#123;&#125;</span></span><br><span class="line"><span class="comment"> * &#125;;</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode *<span class="title">getIntersectionNode</span><span class="params">(ListNode *headA, ListNode *headB)</span> </span>&#123;</span><br><span class="line">        ListNode *cur1=headA;</span><br><span class="line">        ListNode *cur2=headB;</span><br><span class="line">        <span class="type">int</span> lenA=<span class="number">0</span>,lenB=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (cur1!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            lenA++;</span><br><span class="line">            cur1=cur1-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">while</span> (cur2!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            lenB++;</span><br><span class="line">            cur2=cur2-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        cur1=headA;</span><br><span class="line">        cur2=headB;</span><br><span class="line">        <span class="keyword">if</span> (lenB&gt;lenA)&#123;</span><br><span class="line">            <span class="built_in">swap</span>(lenA,lenB);</span><br><span class="line">            <span class="built_in">swap</span>(cur1,cur2);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> gap=lenA-lenB;</span><br><span class="line">        <span class="keyword">while</span> (gap--)&#123;</span><br><span class="line">            cur1=cur1-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">while</span> (cur1!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            <span class="keyword">if</span> (cur1==cur2)&#123;</span><br><span class="line">                <span class="keyword">return</span> cur1;</span><br><span class="line">            &#125;</span><br><span class="line">            cur1=cur1-&gt;next;</span><br><span class="line">            cur2=cur2-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">NULL</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="环状链表（lk142）">环状链表（lk142）</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><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="comment">/**</span></span><br><span class="line"><span class="comment"> * Definition for singly-linked list.</span></span><br><span class="line"><span class="comment"> * struct ListNode &#123;</span></span><br><span class="line"><span class="comment"> *     int val;</span></span><br><span class="line"><span class="comment"> *     ListNode *next;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x) : val(x), next(NULL) &#123;&#125;</span></span><br><span class="line"><span class="comment"> * &#125;;</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode *<span class="title">detectCycle</span><span class="params">(ListNode *head)</span> </span>&#123;</span><br><span class="line">        unordered_map&lt;ListNode*,<span class="type">int</span>&gt; v;</span><br><span class="line">        <span class="keyword">while</span> (head!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            <span class="keyword">if</span> (v.<span class="built_in">count</span>(head))&#123;</span><br><span class="line">                <span class="keyword">return</span> head;</span><br><span class="line">            &#125;</span><br><span class="line">            v[head]++;</span><br><span class="line">            head=head-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">NULL</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>这个方法真的很直观，图论里也会用到的。</p><h2 id="哈希表">哈希表</h2><h3 id="有效的字母异位词（lk242）">有效的字母异位词（lk242）</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">isAnagram</span><span class="params">(string s, string t)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">size</span>()!=t.<span class="built_in">size</span>())&#123;</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">        unordered_map&lt;<span class="type">char</span>,<span class="type">int</span>&gt; sh;</span><br><span class="line">        unordered_map&lt;<span class="type">char</span>,<span class="type">int</span>&gt; th;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> c:s)&#123;</span><br><span class="line">            sh[c]++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> c:t)&#123;</span><br><span class="line">            th[c]++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> c:s)&#123;</span><br><span class="line">            <span class="keyword">if</span> (t.<span class="built_in">find</span>(c)==string::npos)&#123;</span><br><span class="line">                <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                <span class="keyword">if</span> (th[c]!=sh[c])&#123;</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">            &#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">&#125;;</span><br></pre></td></tr></table></figure><h3 id="两个数组的交集（lk349）">两个数组的交集（lk349）</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">intersection</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums1, vector&lt;<span class="type">int</span>&gt;&amp; nums2)</span> </span>&#123;</span><br><span class="line">        unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; h;</span><br><span class="line">        set&lt;<span class="type">int</span>&gt; exist;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> it:nums1)&#123;</span><br><span class="line">            h[it]++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> it:nums2)&#123;</span><br><span class="line">            <span class="keyword">if</span> (h.<span class="built_in">count</span>(it)&amp;&amp;exist.<span class="built_in">find</span>(it)==exist.<span class="built_in">end</span>())&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(it);</span><br><span class="line">                exist.<span class="built_in">insert</span>(it);</span><br><span class="line">            &#125;</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">&#125;;</span><br></pre></td></tr></table></figure><h3 id="快乐数（lk202）">快乐数（lk202）</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><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="function"><span class="type">int</span> <span class="title">turnnum</span><span class="params">(<span class="type">int</span> n)</span></span>&#123;</span><br><span class="line">    <span class="type">int</span> res=<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">        <span class="type">int</span> t=n%<span class="number">10</span>;</span><br><span class="line">        res+=t*t;</span><br><span class="line">        n/=<span class="number">10</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">isHappy</span><span class="params">(<span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">        unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; h;</span><br><span class="line">        h.<span class="built_in">emplace</span>(n,<span class="number">1</span>);</span><br><span class="line">        <span class="keyword">while</span> (<span class="number">1</span>)&#123;</span><br><span class="line">            <span class="keyword">if</span> (n==<span class="number">1</span>)&#123;</span><br><span class="line">                <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            n=<span class="built_in">turnnum</span>(n);</span><br><span class="line">            <span class="keyword">if</span> (h.<span class="built_in">count</span>(n))&#123;</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">            h[n]++;</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><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>一个数字一旦出现第二次，就说明开始死循环了，可以直接返回0</p><h3 id="两数之和（lk1）">两数之和（lk1）</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><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">twoSum</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums, <span class="type">int</span> t)</span> </span>&#123;</span><br><span class="line">        unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; h;</span><br><span class="line">        <span class="type">int</span> n=nums.<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;n;i++)&#123;</span><br><span class="line">            <span class="keyword">auto</span> ans=h.<span class="built_in">find</span>(t-nums[i]);</span><br><span class="line">            <span class="keyword">if</span> (ans!=h.<span class="built_in">end</span>())&#123;</span><br><span class="line">                <span class="keyword">return</span> &#123;ans-&gt;second,i&#125;;</span><br><span class="line">            &#125;</span><br><span class="line">            h[nums[i]]=i;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> &#123;&#125;;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="四数相加（lk454）">四数相加（lk454）</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">fourSumCount</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums1, vector&lt;<span class="type">int</span>&gt;&amp; nums2, vector&lt;<span class="type">int</span>&gt;&amp; nums3, vector&lt;<span class="type">int</span>&gt;&amp; nums4)</span> </span>&#123;</span><br><span class="line">        unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; h;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> a:nums1)&#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">auto</span> b:nums2)&#123;</span><br><span class="line">                h[a+b]++;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</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="keyword">auto</span> c:nums3)&#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">auto</span> d:nums4)&#123;</span><br><span class="line">                <span class="keyword">auto</span> ans=h.<span class="built_in">find</span>(<span class="number">0</span>-(c+d));</span><br><span class="line">                <span class="keyword">if</span> (ans!=h.<span class="built_in">end</span>())&#123;</span><br><span class="line">                    sum+=h[<span class="number">0</span>-(c+d)];</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> sum;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>我在想，三重循环是不是也能过？</p><h3 id="三数相加（lk15）">三数相加（lk15）</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">threeSum</span>(vector&lt;<span class="type">int</span>&gt;&amp; nums) &#123;</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; ans;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="built_in">sort</span>(nums.<span class="built_in">begin</span>(),nums.<span class="built_in">end</span>());</span><br><span class="line">        <span class="type">int</span> l,r;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (nums[i]&gt;<span class="number">0</span>)&#123;</span><br><span class="line">                <span class="keyword">return</span> ans;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (i&gt;<span class="number">0</span>&amp;&amp;nums[i]==nums[i<span class="number">-1</span>])&#123;</span><br><span class="line">                <span class="keyword">continue</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            l=i<span class="number">+1</span>,r=n<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> (nums[i]+nums[l]+nums[r]&gt;<span class="number">0</span>)&#123;</span><br><span class="line">                    r--;</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">else</span> <span class="keyword">if</span>(nums[i]+nums[l]+nums[r]&lt;<span class="number">0</span>)&#123;</span><br><span class="line">                    l++;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    ans.<span class="built_in">push_back</span>(&#123;nums[i],nums[l],nums[r]&#125;);</span><br><span class="line">                    <span class="keyword">while</span> (l&lt;r&amp;&amp;nums[l]==nums[l<span class="number">+1</span>]) l++;</span><br><span class="line">                    <span class="keyword">while</span> (l&lt;r&amp;&amp;nums[r]==nums[r<span class="number">-1</span>]) r--;</span><br><span class="line">                    l++;</span><br><span class="line">                    r--;</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> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>太牛逼了双指针。</p><h3 id="四数之和（lk18）">四数之和（lk18）</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><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">fourSum</span>(vector&lt;<span class="type">int</span>&gt;&amp; nums, <span class="type">int</span> target) &#123;</span><br><span class="line">        <span class="type">int</span> n = nums.<span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; ans;</span><br><span class="line">        <span class="built_in">sort</span>(nums.<span class="built_in">begin</span>(), nums.<span class="built_in">end</span>());</span><br><span class="line"></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; i++) &#123;</span><br><span class="line">            <span class="keyword">if</span> (i &gt; <span class="number">0</span> &amp;&amp; nums[i] == nums[i - <span class="number">1</span>]) <span class="keyword">continue</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = i + <span class="number">1</span>; j &lt; n; j++) &#123;</span><br><span class="line">                <span class="keyword">if</span> (j &gt; i + <span class="number">1</span> &amp;&amp; nums[j] == nums[j - <span class="number">1</span>]) <span class="keyword">continue</span>;</span><br><span class="line"></span><br><span class="line">                <span class="type">int</span> l = j + <span class="number">1</span>, r = n - <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">long</span> <span class="type">long</span> sum = (<span class="type">long</span> <span class="type">long</span>)nums[i] + nums[j] + nums[l] + nums[r];</span><br><span class="line">                    <span class="keyword">if</span> (sum &gt; target) r--;</span><br><span class="line">                    <span class="keyword">else</span> <span class="keyword">if</span> (sum &lt; target) l++;</span><br><span class="line">                    <span class="keyword">else</span> &#123;</span><br><span class="line">                        ans.<span class="built_in">push_back</span>(&#123;nums[i], nums[j], nums[l], nums[r]&#125;);</span><br><span class="line">                        <span class="keyword">while</span> (l &lt; r &amp;&amp; nums[l] == nums[l + <span class="number">1</span>]) l++;</span><br><span class="line">                        <span class="keyword">while</span> (l &lt; r &amp;&amp; nums[r] == nums[r - <span class="number">1</span>]) r--;</span><br><span class="line">                        l++;</span><br><span class="line">                        r--;</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> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>和上一题双指针的思路一样，这个模板我感觉可以套到n数，只要不限制复杂度（</p><h2 id="字符串理论">字符串理论</h2><h3 id="不使用额外空间的字符串翻转">不使用额外空间的字符串翻转</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><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">reverseString</span><span class="params">(vector&lt;<span class="type">char</span>&gt;&amp; s)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=s.<span class="built_in">size</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><br><span class="line">            <span class="built_in">swap</span>(s[l],s[r]);</span><br><span class="line">            l++;</span><br><span class="line">            r--;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="特定条件要求下的字符串翻转">特定条件要求下的字符串翻转</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><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">string <span class="title">reverseStr</span><span class="params">(string s, <span class="type">int</span> k)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=s.<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;n;i=i<span class="number">+2</span>*k)&#123;</span><br><span class="line">            <span class="keyword">if</span> (i+k&lt;n)&#123;</span><br><span class="line">                <span class="built_in">reverse</span>(s.<span class="built_in">begin</span>()+i,s.<span class="built_in">begin</span>()+i+k);</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                <span class="built_in">reverse</span>(s.<span class="built_in">begin</span>()+i,s.<span class="built_in">end</span>());</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> s;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>快慢指针是错误的不可信的</p><h3 id="反转字符串中的单词（lk151）">反转字符串中的单词（lk151）</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><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">string <span class="title">reverseWords</span><span class="params">(string s)</span> </span>&#123;</span><br><span class="line">        string word;</span><br><span class="line">        vector&lt;string&gt; ans;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> c:s)&#123;</span><br><span class="line">            <span class="keyword">if</span> (c==<span class="string">&#x27; &#x27;</span>&amp;&amp;!word.<span class="built_in">empty</span>())&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(word);</span><br><span class="line">                word.<span class="built_in">clear</span>();</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(c!=<span class="string">&#x27; &#x27;</span>)&#123;</span><br><span class="line">                word+=c;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (!word.<span class="built_in">empty</span>())&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(word);</span><br><span class="line">            word.<span class="built_in">clear</span>();</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> n=ans.<span class="built_in">size</span>();</span><br><span class="line">        string res;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">            <span class="keyword">if</span> (i==<span class="number">0</span>)&#123;</span><br><span class="line">                res+=ans[i];</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                res+=ans[i];</span><br><span class="line">                res+=<span class="string">&#x27; &#x27;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> res;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>搓轮子，这有什么好说的</p><h3 id="重复字串（lk459）">重复字串（lk459）</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">repeatedSubstringPattern</span><span class="params">(string s)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">return</span> (s + s).<span class="built_in">find</span>(s, <span class="number">1</span>) != s.<span class="built_in">size</span>();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>What can I say?</p><h2 id="队列与栈理论">队列与栈理论</h2><h3 id="括号匹配">括号匹配</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><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">isValid</span><span class="params">(string s)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=s.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (n%<span class="number">2</span>==<span class="number">1</span>) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">        stack&lt;<span class="type">char</span>&gt; sk;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (s[i]==<span class="string">&#x27;(&#x27;</span>) sk.<span class="built_in">push</span>(<span class="string">&#x27;)&#x27;</span>);</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(s[i]==<span class="string">&#x27;&#123;&#x27;</span>) sk.<span class="built_in">push</span>(<span class="string">&#x27;&#125;&#x27;</span>);</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(s[i]==<span class="string">&#x27;[&#x27;</span>) sk.<span class="built_in">push</span>(<span class="string">&#x27;]&#x27;</span>);</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(sk.<span class="built_in">empty</span>()||sk.<span class="built_in">top</span>()!=s[i]) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">            <span class="keyword">else</span> sk.<span class="built_in">pop</span>();</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> sk.<span class="built_in">empty</span>();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>我的天哪代码随想录大人，曾经的顶级难题这下变成模板题了</p><h3 id="去除重复字符">去除重复字符</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">string <span class="title">removeDuplicates</span><span class="params">(string s)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=s.<span class="built_in">size</span>();</span><br><span class="line">        stack&lt;<span class="type">char</span>&gt; st;</span><br><span class="line">        string ans;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (st.<span class="built_in">empty</span>())&#123;</span><br><span class="line">                st.<span class="built_in">push</span>(s[i]);</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(st.<span class="built_in">top</span>()!=s[i])&#123;</span><br><span class="line">                st.<span class="built_in">push</span>(s[i]);</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(st.<span class="built_in">top</span>()==s[i])&#123;</span><br><span class="line">                st.<span class="built_in">pop</span>();</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">while</span> (!st.<span class="built_in">empty</span>())&#123;</span><br><span class="line">            ans+=st.<span class="built_in">top</span>();</span><br><span class="line">            st.<span class="built_in">pop</span>();</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">reverse</span>(ans.<span class="built_in">begin</span>(),ans.<span class="built_in">end</span>());</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="逆波兰表达式求值">逆波兰表达式求值</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><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">isNumber</span><span class="params">(<span class="type">const</span> string&amp; s)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">empty</span>()) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">        <span class="type">int</span> i = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (s[<span class="number">0</span>] == <span class="string">&#x27;-&#x27;</span> &amp;&amp; s.<span class="built_in">size</span>() &gt; <span class="number">1</span>) i = <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">for</span> (; i &lt; s.<span class="built_in">size</span>(); i++) &#123;</span><br><span class="line">            <span class="keyword">if</span> (!<span class="built_in">isdigit</span>(s[i])) <span class="keyword">return</span> <span class="literal">false</span>;</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><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">evalRPN</span><span class="params">(vector&lt;string&gt;&amp; t)</span> </span>&#123;</span><br><span class="line">        stack&lt;<span class="type">int</span>&gt; st;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> &amp;s : t) &#123;</span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">isNumber</span>(s)) &#123;</span><br><span class="line">                st.<span class="built_in">push</span>(<span class="built_in">stoi</span>(s));</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                <span class="type">int</span> x = st.<span class="built_in">top</span>(); st.<span class="built_in">pop</span>();</span><br><span class="line">                <span class="type">int</span> y = st.<span class="built_in">top</span>(); st.<span class="built_in">pop</span>();</span><br><span class="line">                <span class="keyword">if</span> (s == <span class="string">&quot;+&quot;</span>) st.<span class="built_in">push</span>(y + x);</span><br><span class="line">                <span class="keyword">else</span> <span class="keyword">if</span> (s == <span class="string">&quot;-&quot;</span>) st.<span class="built_in">push</span>(y - x);</span><br><span class="line">                <span class="keyword">else</span> <span class="keyword">if</span> (s == <span class="string">&quot;*&quot;</span>) st.<span class="built_in">push</span>(y * x);</span><br><span class="line">                <span class="keyword">else</span> <span class="keyword">if</span> (s == <span class="string">&quot;/&quot;</span>) st.<span class="built_in">push</span>(y / x);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> st.<span class="built_in">top</span>();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="滑动窗口最大值">滑动窗口最大值</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">maxSlidingWindow</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums, <span class="type">int</span> k)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">ans</span><span class="params">(n)</span></span>;</span><br><span class="line">        deque&lt;<span class="type">int</span>&gt; maxx;</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">while</span> (!maxx.<span class="built_in">empty</span>()&amp;&amp;nums[maxx.<span class="built_in">back</span>()]&lt;=nums[i])&#123;</span><br><span class="line">                maxx.<span class="built_in">pop_back</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">while</span> (!maxx.<span class="built_in">empty</span>()&amp;&amp;maxx.<span class="built_in">front</span>()&lt;=i-k)&#123;</span><br><span class="line">                maxx.<span class="built_in">pop_front</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            maxx.<span class="built_in">push_back</span>(i);</span><br><span class="line">            ans[i]=maxx.<span class="built_in">front</span>();</span><br><span class="line">        &#125;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; res;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=k<span class="number">-1</span>;i&lt;n;i++)&#123;</span><br><span class="line">            res.<span class="built_in">push_back</span>(nums[ans[i]]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> res;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>有什么话跟我的单调双端队列说去吧</p><h3 id="出现频率第K大的元素">出现频率第K大的元素</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="keyword">struct</span> <span class="title class_">cmp</span> &#123;</span><br><span class="line">        <span class="function"><span class="type">bool</span> <span class="title">operator</span><span class="params">()</span><span class="params">(pair&lt;<span class="type">int</span>,<span class="type">int</span>&gt;&amp; a, pair&lt;<span class="type">int</span>,<span class="type">int</span>&gt;&amp; b)</span> </span>&#123;</span><br><span class="line">            <span class="keyword">return</span> a.second &gt; b.second; <span class="comment">// 小根堆，频率小的优先</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;;</span><br><span class="line"><span class="comment">//注意这个地方的写法，小心炸缸</span></span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">topKFrequent</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums, <span class="type">int</span> k)</span> </span>&#123;</span><br><span class="line">        unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; h;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> x : nums) h[x]++;</span><br><span class="line"></span><br><span class="line">        priority_queue&lt;pair&lt;<span class="type">int</span>,<span class="type">int</span>&gt;, vector&lt;pair&lt;<span class="type">int</span>,<span class="type">int</span>&gt;&gt;, cmp&gt; q;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> &amp;p : h) &#123;</span><br><span class="line">            <span class="keyword">if</span> (q.<span class="built_in">size</span>() == k) &#123;</span><br><span class="line">                <span class="keyword">if</span> (q.<span class="built_in">top</span>().second &lt; p.second) &#123;</span><br><span class="line">                    q.<span class="built_in">pop</span>();</span><br><span class="line">                    q.<span class="built_in">emplace</span>(p.first, p.second);</span><br><span class="line">                &#125;</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                q.<span class="built_in">emplace</span>(p.first, p.second);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">        <span class="keyword">while</span> (!q.<span class="built_in">empty</span>()) &#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(q.<span class="built_in">top</span>().first);</span><br><span class="line">            q.<span class="built_in">pop</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">&#125;;</span><br></pre></td></tr></table></figure><p>我已经会写堆了（确信）</p><h2 id="回溯理论">回溯理论</h2><h3 id="模板框架">模板框架</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="function"><span class="type">void</span> <span class="title">backtracking</span><span class="params">(参数)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (终止条件) &#123;</span><br><span class="line">        存放结果;</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (选择：本层集合中元素（树中节点孩子的数量就是集合的大小）) &#123;</span><br><span class="line">        处理节点;</span><br><span class="line">        <span class="built_in">backtracking</span>(路径，选择列表); <span class="comment">// 递归</span></span><br><span class="line">        回溯，撤销处理结果</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="组合">组合</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><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></pre></td><td class="code"><pre><span class="line">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; res;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; path;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">backtract</span><span class="params">(<span class="type">int</span> start,<span class="type">int</span> n,<span class="type">int</span> k)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (path.<span class="built_in">size</span>()==k)&#123;</span><br><span class="line">        res.<span class="built_in">push_back</span>(path);</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=start;i&lt;=n;i++)&#123;</span><br><span class="line">        path.<span class="built_in">push_back</span>(i);</span><br><span class="line">        <span class="built_in">backtract</span>(i<span class="number">+1</span>,n,k);</span><br><span class="line">        path.<span class="built_in">pop_back</span>();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">combine</span>(<span class="type">int</span> n, <span class="type">int</span> k) &#123;</span><br><span class="line">        res.<span class="built_in">clear</span>();</span><br><span class="line">        path.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="built_in">backtract</span>(<span class="number">1</span>,n,k);</span><br><span class="line">        <span class="keyword">return</span> res;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>很典型的回溯算法应用</p><h3 id="组合变式">组合变式</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><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">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; ans;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; path;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">backtract</span><span class="params">(<span class="type">int</span> start,<span class="type">int</span> n,<span class="type">int</span> k)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (path.<span class="built_in">size</span>()==k)&#123;</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">0</span>;i&lt;k;i++)&#123;</span><br><span class="line">            sum+=path[i];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (sum==n)&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">            <span class="keyword">return</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=start;i&lt;=<span class="number">9</span>;i++)&#123;</span><br><span class="line">        path.<span class="built_in">push_back</span>(i);</span><br><span class="line">        <span class="built_in">backtract</span>(i<span class="number">+1</span>,n,k);</span><br><span class="line">        path.<span class="built_in">pop_back</span>();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">combinationSum3</span>(<span class="type">int</span> k, <span class="type">int</span> n) &#123;</span><br><span class="line">        ans.<span class="built_in">clear</span>();</span><br><span class="line">        path.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="built_in">backtract</span>(<span class="number">1</span>,n,k);</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="电话号码的字符组合：">电话号码的字符组合：</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><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">string a[<span class="number">10</span>]=&#123;<span class="string">&quot;&quot;</span>,<span class="string">&quot;&quot;</span>,<span class="string">&quot;abc&quot;</span>,<span class="string">&quot;def&quot;</span>,<span class="string">&quot;ghi&quot;</span>,<span class="string">&quot;jkl&quot;</span>,<span class="string">&quot;mno&quot;</span>,<span class="string">&quot;pqrs&quot;</span>,<span class="string">&quot;tuv&quot;</span>,<span class="string">&quot;wxyz&quot;</span>&#125;;</span><br><span class="line">vector&lt;string&gt; ans;</span><br><span class="line">string path;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">backtract</span><span class="params">(string s,<span class="type">int</span> start,<span class="type">int</span> k)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (path.<span class="built_in">size</span>()==k)&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> m=s[start]-<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">    string b=a[m];</span><br><span class="line">    <span class="type">int</span> n=b.<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;n;i++)&#123;</span><br><span class="line">        path+=b[i];</span><br><span class="line">        <span class="built_in">backtract</span>(s,start<span class="number">+1</span>,k);</span><br><span class="line">        path.<span class="built_in">pop_back</span>();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;string&gt; <span class="title">letterCombinations</span><span class="params">(string digits)</span> </span>&#123;</span><br><span class="line">        ans.<span class="built_in">clear</span>();</span><br><span class="line">        path.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="keyword">if</span> (digits.<span class="built_in">empty</span>()) <span class="keyword">return</span> &#123;&#125;;</span><br><span class="line">        <span class="built_in">backtract</span>(digits,<span class="number">0</span>,digits.<span class="built_in">size</span>());</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>练手题，我喜欢这个。</p><h3 id="组合总数">组合总数</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><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">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; ans;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; path;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">backtract</span><span class="params">(<span class="type">int</span> sum,<span class="type">int</span> t,<span class="type">int</span> start,vector&lt;<span class="type">int</span>&gt; &amp;a)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (sum&gt;t)&#123;</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (sum==t)&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=start;i&lt;a.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        sum+=a[i];</span><br><span class="line">        path.<span class="built_in">push_back</span>(a[i]);</span><br><span class="line">        <span class="built_in">backtract</span>(sum,t,i,a);</span><br><span class="line">        sum-=a[i];</span><br><span class="line">        path.<span class="built_in">pop_back</span>();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">combinationSum</span>(vector&lt;<span class="type">int</span>&gt;&amp; candidates, <span class="type">int</span> target) &#123;</span><br><span class="line">        ans.<span class="built_in">clear</span>();</span><br><span class="line">        path.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="built_in">backtract</span>(<span class="number">0</span>,target,<span class="number">0</span>,candidates);</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>可以选取重复数字直接把双指针法废掉了（那我只能回溯了。</p><h3 id="组合总数pro-max">组合总数pro max</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><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></pre></td><td class="code"><pre><span class="line">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; ans;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; path;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">backtract</span><span class="params">(<span class="type">int</span> sum,<span class="type">int</span> start,<span class="type">int</span> t,vector&lt;<span class="type">int</span>&gt; &amp;a,vector&lt;<span class="type">bool</span>&gt; &amp;b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (sum&gt;t)&#123;</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (sum==t)&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=start;i&lt;a.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i&gt;<span class="number">0</span>&amp;&amp;a[i]==a[i<span class="number">-1</span>]&amp;&amp;!b[i<span class="number">-1</span>])&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            sum+=a[i];</span><br><span class="line">            path.<span class="built_in">push_back</span>(a[i]);</span><br><span class="line">            b[i]=<span class="literal">true</span>;</span><br><span class="line">            <span class="built_in">backtract</span>(sum,i<span class="number">+1</span>,t,a,b);</span><br><span class="line">            sum-=a[i];</span><br><span class="line">            path.<span class="built_in">pop_back</span>();</span><br><span class="line">            b[i]=<span class="literal">false</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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">combinationSum2</span>(vector&lt;<span class="type">int</span>&gt;&amp; candidates, <span class="type">int</span> target) &#123;</span><br><span class="line">        ans.<span class="built_in">clear</span>();</span><br><span class="line">        path.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">used</span><span class="params">(candidates.size(),<span class="literal">false</span>)</span></span>;</span><br><span class="line">        <span class="built_in">sort</span>(candidates.<span class="built_in">begin</span>(),candidates.<span class="built_in">end</span>());</span><br><span class="line">        <span class="built_in">backtract</span>(<span class="number">0</span>,<span class="number">0</span>,target,candidates,used);</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>这个最难的地方在于如何把同层重复这个问题干掉</p><p>我们都知道，回溯算法本质上是在一棵树上跑，这个题由于要去除掉重复组合，就要在同一层干掉同层用过的数字。这个可能有点难理解，事实上就是一种去重。</p><p>当你回溯到一个根结点时，下面有两个子结点，如果这两个子结点相同，那么你只需要选取其中的一个就行了，另一个跳过。怎么判断一个数字是否该跳过，这个要在根结点阶段就进行，如果下面两个结点都是相同的，而且都没用过，那么就要跳过后面那个结点。</p><p>问题是，如果已经有一个用过了呢？那就不是同层重复了，那就是一个合理组合，要算答案的喵。</p><h3 id="回文串字符分割">回文串字符分割</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><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></pre></td><td class="code"><pre><span class="line">vector&lt;vector&lt;string&gt;&gt; ans;</span><br><span class="line">vector&lt;string&gt; path;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isback</span><span class="params">(string &amp;s,<span class="type">int</span> i,<span class="type">int</span> j)</span></span>&#123;</span><br><span class="line">    <span class="keyword">while</span> (i&lt;j)&#123;</span><br><span class="line">        <span class="keyword">if</span> (s[i]!=s[j])&#123;</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">        i++;</span><br><span class="line">        j--;</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">void</span> <span class="title">backtract</span><span class="params">(string &amp;s,<span class="type">int</span> start)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (start&gt;=s.<span class="built_in">size</span>())&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=start;i&lt;s.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">isback</span>(s,start,i))&#123;</span><br><span class="line">            string str=s.<span class="built_in">substr</span>(start,i-start<span class="number">+1</span>);</span><br><span class="line">            path.<span class="built_in">push_back</span>(str);</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">backtract</span>(s,i<span class="number">+1</span>);</span><br><span class="line">        path.<span class="built_in">pop_back</span>();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;string&gt;&gt; <span class="built_in">partition</span>(string s) &#123;</span><br><span class="line">        ans.<span class="built_in">clear</span>();</span><br><span class="line">        path.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="built_in">backtract</span>(s,<span class="number">0</span>);</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="IP地址复原">IP地址复原</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><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></pre></td><td class="code"><pre><span class="line">vector&lt;vector&lt;string&gt;&gt; ans;</span><br><span class="line">vector&lt;string&gt; path;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">backtract</span><span class="params">(<span class="type">int</span> start, <span class="type">int</span> cur, string &amp;s)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (cur == <span class="number">4</span>) &#123;</span><br><span class="line">        <span class="keyword">if</span> (start == s.<span class="built_in">size</span>()) ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = start; i &lt; s.<span class="built_in">size</span>(); i++) &#123;</span><br><span class="line">        string b = s.<span class="built_in">substr</span>(start, i - start + <span class="number">1</span>);</span><br><span class="line">        <span class="keyword">if</span> (b.<span class="built_in">size</span>() &gt; <span class="number">3</span>) <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">if</span> ((b.<span class="built_in">size</span>() == <span class="number">1</span> || b[<span class="number">0</span>] != <span class="string">&#x27;0&#x27;</span>) &amp;&amp; <span class="built_in">stoi</span>(b) &lt;= <span class="number">255</span>) &#123;</span><br><span class="line">            path.<span class="built_in">push_back</span>(b);</span><br><span class="line">            <span class="built_in">backtract</span>(i + <span class="number">1</span>, cur + <span class="number">1</span>, s);</span><br><span class="line">            path.<span class="built_in">pop_back</span>();</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">break</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;string&gt; <span class="title">restoreIpAddresses</span><span class="params">(string s)</span> </span>&#123;</span><br><span class="line">        ans.<span class="built_in">clear</span>();</span><br><span class="line">        path.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="built_in">backtract</span>(<span class="number">0</span>, <span class="number">0</span>, s);</span><br><span class="line">        vector&lt;string&gt; res;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> &amp;v : ans) &#123;</span><br><span class="line">            string a;</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">                a += v[j];</span><br><span class="line">                <span class="keyword">if</span> (j != <span class="number">3</span>) a += <span class="string">&#x27;.&#x27;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            res.<span class="built_in">push_back</span>(a);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> res;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>与上面那题回文串字符串分割如出一辙。</p><h3 id="子集">子集</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><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">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; ans;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; path;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">backtract</span><span class="params">(<span class="type">int</span> start,vector&lt;<span class="type">int</span>&gt; &amp;a)</span></span>&#123;</span><br><span class="line">    ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">    <span class="keyword">if</span> (start&gt;=a.<span class="built_in">size</span>())&#123;</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=start;i&lt;a.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        path.<span class="built_in">push_back</span>(a[i]);</span><br><span class="line">        <span class="built_in">backtract</span>(i<span class="number">+1</span>,a);</span><br><span class="line">        path.<span class="built_in">pop_back</span>();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">subsets</span>(vector&lt;<span class="type">int</span>&gt;&amp; nums) &#123;</span><br><span class="line">        ans.<span class="built_in">clear</span>();</span><br><span class="line">        path.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="built_in">backtract</span>(<span class="number">0</span>,nums);</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="子集变式">子集变式</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><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">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; ans;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; path;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">backtract</span><span class="params">(<span class="type">int</span> start,vector&lt;<span class="type">int</span>&gt; &amp;a,vector&lt;<span class="type">bool</span>&gt; &amp;used)</span></span>&#123;</span><br><span class="line">    ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">    <span class="keyword">if</span> (start&gt;=a.<span class="built_in">size</span>())&#123;</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=start;i&lt;a.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i&gt;<span class="number">0</span>&amp;&amp;a[i]==a[i<span class="number">-1</span>]&amp;&amp;!used[i<span class="number">-1</span>])&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        path.<span class="built_in">push_back</span>(a[i]);</span><br><span class="line">        used[i]=<span class="literal">true</span>;</span><br><span class="line">        <span class="built_in">backtract</span>(i<span class="number">+1</span>,a,used);</span><br><span class="line">        path.<span class="built_in">pop_back</span>();</span><br><span class="line">        used[i]=<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">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">subsetsWithDup</span>(vector&lt;<span class="type">int</span>&gt;&amp; nums) &#123;</span><br><span class="line">        ans.<span class="built_in">clear</span>();</span><br><span class="line">        path.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">used</span><span class="params">(nums.size(),<span class="literal">false</span>)</span></span>;</span><br><span class="line">        <span class="built_in">sort</span>(nums.<span class="built_in">begin</span>(),nums.<span class="built_in">end</span>());</span><br><span class="line">        <span class="built_in">backtract</span>(<span class="number">0</span>,nums,used);</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="非递减子序列">非递减子序列</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><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">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; ans;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; path;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">backtract</span><span class="params">(<span class="type">int</span> start,vector&lt;<span class="type">int</span>&gt; &amp;a)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (path.<span class="built_in">size</span>()&gt;=<span class="number">2</span>)&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (start&gt;=a.<span class="built_in">size</span>())&#123;</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> used[<span class="number">210</span>];</span><br><span class="line">    <span class="built_in">memset</span>(used,<span class="number">0</span>,<span class="built_in">sizeof</span>(used));</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=start;i&lt;a.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> ((!path.<span class="built_in">empty</span>()&amp;&amp;a[i]&lt;path.<span class="built_in">back</span>())||used[a[i]<span class="number">+100</span>])&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        path.<span class="built_in">push_back</span>(a[i]);</span><br><span class="line">        used[a[i]<span class="number">+100</span>]=<span class="number">1</span>;</span><br><span class="line">        <span class="built_in">backtract</span>(i<span class="number">+1</span>,a);</span><br><span class="line">        path.<span class="built_in">pop_back</span>();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">findSubsequences</span>(vector&lt;<span class="type">int</span>&gt;&amp; nums) &#123;</span><br><span class="line">        ans.<span class="built_in">clear</span>();</span><br><span class="line">        path.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="built_in">backtract</span>(<span class="number">0</span>,nums);</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>这个去重逻辑和旧版的实现的是同一件事，都是在做同层去重，只不过由于这个无法排序，只能换一个思路了。</p><blockquote><p>非常棒的问题 👍<br>“<strong>什么时候需要同层去重</strong>”是掌握回溯算法的关键之一。<br>很多人背了模板却写不好题，根本原因就是没理解**“为什么、什么时候需要同层去重”**。<br>下面我们从直觉、场景和代码三个角度讲透 👇</p><hr><h2 id="🧩-一、先明确：什么是“同层去重”？">🧩 一、先明确：什么是“同层去重”？</h2><p>在回溯树中：</p><ul><li>“<strong>同层</strong>”指的是：当前递归函数的一次 for 循环范围；</li><li>“<strong>去重</strong>”指的是：在这一层循环中，不让相同数值重复选取，避免产生重复分支。</li></ul><h3 id="🌰-举例">🌰 举例</h3><p>以 <code>nums = [1, 2, 2]</code> 为例。</p><h4 id="没有去重：">没有去重：</h4><p>回溯树的前两层可能会生成重复分支：</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></pre></td><td class="code"><pre><span class="line">    []</span><br><span class="line">  / | \</span><br><span class="line">1   2   2   ← 两个 2 是重复选择（同层）</span><br></pre></td></tr></table></figure><p>于是生成两个相同子集 <code>[2]</code>。</p><h4 id="有同层去重：">有同层去重：</h4><p>我们在本层循环时记录已经选过的值：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">used = &#123;2&#125;</span><br></pre></td></tr></table></figure><p>第二个 2 就被跳过了。</p><hr><h2 id="🧠-二、什么时候要同层去重？">🧠 二、什么时候要同层去重？</h2><h3 id="✅-1-当输入数据中存在重复元素，且顺序不影响结果时">✅ 1. 当输入数据中存在<strong>重复元素</strong>，且顺序不影响结果时</h3><p>典型例子：</p><table><thead><tr><th>题目</th><th>场景</th><th>是否要同层去重</th></tr></thead><tbody><tr><td>LC39 组合总和 (no duplicates)</td><td>无重复元素</td><td>❌</td></tr><tr><td>LC40 组合总和 II</td><td>元素可能重复</td><td>✅</td></tr><tr><td>LC78 子集 I</td><td>无重复元素</td><td>❌</td></tr><tr><td>LC90 子集 II</td><td>有重复元素</td><td>✅</td></tr></tbody></table><p>这些题目中，<strong>相同的数出现在同一层时</strong>，代表“同一种选择方式重复出现”，要去掉。</p><hr><h3 id="✅-2-当题目要求结果“去重”，但输入中存在相同数时">✅ 2. 当题目要求结果“去重”，但输入中存在相同数时</h3><p><strong>核心判断</strong>：</p><blockquote><p>如果题目保证输入中“有重复”，但要求输出“无重复”，<br>那么就必须进行<strong>同层去重</strong>。</p></blockquote><p>同层去重 = 避免<strong>同一个递归深度</strong>重复使用相同数。</p><hr><h3 id="✅-3-当排序无法使用（需保持原顺序）时，用哈希同层去重">✅ 3. 当排序无法使用（需保持原顺序）时，用哈希同层去重</h3><p>比如 LC491「递增子序列」：</p><ul><li>数组不能排序；</li><li>相同值在同层出现时要跳过；</li><li>所以要用 <code>used[]</code> / <code>unordered_set</code> 记录本层用过的数。</li></ul><hr><h2 id="⚙️-三、什么时候不需要同层去重？">⚙️ 三、什么时候不需要同层去重？</h2><table><thead><tr><th>场景</th><th>是否需要</th></tr></thead><tbody><tr><td>输入数据本身不重复（题目保证）</td><td>❌</td></tr><tr><td>输出允许重复（例如排列问题）</td><td>❌</td></tr><tr><td>递归深度决定唯一结果（比如组合数 k）</td><td>❌</td></tr><tr><td>不同分支必须保留所有情况（例如带位置的全排列）</td><td>❌</td></tr></tbody></table><p>🌰 举例：</p><ul><li>LC46 全排列：即使有重复值，也通常是用 <strong>used 全局标记数组</strong> 去除“同一个元素多次用”，不是“同层去重”。</li><li>LC77 组合：数字从 1…n，本身不重复，无需同层去重。</li></ul><hr><h2 id="📘-四、一句话口诀">📘 四、一句话口诀</h2><blockquote><p><strong>同层去重 = 为了去掉同一递归深度中“值相同”的分支</strong><br>通常出现在「组合类」「子集类」「非排序但有重复元素」的问题中。</p></blockquote><hr><h2 id="✅-五、小结对比">✅ 五、小结对比</h2><table><thead><tr><th>场景</th><th>是否排序</th><th>去重策略</th><th>用法示例</th></tr></thead><tbody><tr><td>数组可排序，顺序不重要</td><td>✅</td><td>相邻跳过</td><td>LC90 子集 II、LC40 组合总和 II</td></tr><tr><td>数组不可排序（需保序）</td><td>❌</td><td>哈希标记 used[]</td><td>LC491 递增子序列</td></tr><tr><td>数组无重复</td><td>—</td><td>不去重</td><td>LC78 子集 I、LC39 组合总和</td></tr></tbody></table><hr><p>是否希望我帮你画一张「同层去重 vs 跨层允许重复」的回溯树图？<br>那张图能一眼看懂为什么只在“同层”去重而“跨层”不去重。</p></blockquote><h3 id="全排列">全排列</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><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></pre></td><td class="code"><pre><span class="line">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; ans;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; path;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">backtract</span><span class="params">(vector&lt;<span class="type">int</span>&gt; &amp;a,vector&lt;<span class="type">bool</span>&gt; &amp;used)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (path.<span class="built_in">size</span>()==a.<span class="built_in">size</span>())&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;a.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (!used[i])&#123;</span><br><span class="line">            path.<span class="built_in">push_back</span>(a[i]);</span><br><span class="line">            used[i]=<span class="literal">true</span>;</span><br><span class="line">            <span class="built_in">backtract</span>(a,used);</span><br><span class="line">            path.<span class="built_in">pop_back</span>();</span><br><span class="line">            used[i]=<span class="literal">false</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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">permute</span>(vector&lt;<span class="type">int</span>&gt;&amp; nums) &#123;</span><br><span class="line">        ans.<span class="built_in">clear</span>();</span><br><span class="line">        path.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">used</span><span class="params">(nums.size(),<span class="literal">false</span>)</span></span>;</span><br><span class="line">        <span class="built_in">backtract</span>(nums,used);</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>组合，子集问题需要传入start，排列不用。</p><h3 id="全排列（可重复版）">全排列（可重复版）</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><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></pre></td><td class="code"><pre><span class="line">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; ans;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; path;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">backtract</span><span class="params">(vector&lt;<span class="type">int</span>&gt; &amp;a,vector&lt;<span class="type">bool</span>&gt; &amp;used)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (path.<span class="built_in">size</span>()==a.<span class="built_in">size</span>())&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;a.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i&gt;<span class="number">0</span>&amp;&amp;a[i]==a[i<span class="number">-1</span>]&amp;&amp;!used[i<span class="number">-1</span>])&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (used[i]==<span class="literal">false</span>)&#123;</span><br><span class="line">            path.<span class="built_in">push_back</span>(a[i]);</span><br><span class="line">            used[i]=<span class="literal">true</span>;</span><br><span class="line">            <span class="built_in">backtract</span>(a,used);</span><br><span class="line">            path.<span class="built_in">pop_back</span>();</span><br><span class="line">            used[i]=<span class="literal">false</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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">permuteUnique</span>(vector&lt;<span class="type">int</span>&gt;&amp; nums) &#123;</span><br><span class="line">        ans.<span class="built_in">clear</span>();</span><br><span class="line">        path.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="built_in">sort</span>(nums.<span class="built_in">begin</span>(),nums.<span class="built_in">end</span>());</span><br><span class="line">        <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">used</span><span class="params">(nums.size(),<span class="literal">false</span>)</span></span>;</span><br><span class="line">        <span class="built_in">backtract</span>(nums,used);</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>加一个去重逻辑。</p><h3 id="重新安排行程（lk332）">重新安排行程（lk332）</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><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">unordered_map&lt;string,map&lt;string,<span class="type">int</span>&gt;&gt; target;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">backtract</span><span class="params">(<span class="type">int</span> num,vector&lt;string&gt; &amp;a)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a.<span class="built_in">size</span>()==num<span class="number">+1</span>)&#123;</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="keyword">for</span> (pair&lt;<span class="type">const</span> string,<span class="type">int</span>&gt; &amp;t: target[a[a.<span class="built_in">size</span>()<span class="number">-1</span>]])&#123;</span><br><span class="line">        <span class="keyword">if</span> (t.second&gt;<span class="number">0</span>)&#123;</span><br><span class="line">            a.<span class="built_in">push_back</span>(t.first);</span><br><span class="line">            t.second--;</span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">backtract</span>(num,a)) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">            a.<span class="built_in">pop_back</span>();</span><br><span class="line">            t.second++;</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">false</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;string&gt; <span class="title">findItinerary</span><span class="params">(vector&lt;vector&lt;string&gt;&gt;&amp; tickets)</span> </span>&#123;</span><br><span class="line">        target.<span class="built_in">clear</span>();</span><br><span class="line">        vector&lt;string&gt; ans;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">const</span> vector&lt;string&gt; &amp;v:tickets)&#123;</span><br><span class="line">            target[v[<span class="number">0</span>]][v[<span class="number">1</span>]]++;</span><br><span class="line">        &#125;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(<span class="string">&quot;JFK&quot;</span>);</span><br><span class="line">        <span class="built_in">backtract</span>(tickets.<span class="built_in">size</span>(),ans);</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>这个感觉像图论的题目，事实上和我以前写过的那种找一条连续合法路径的题目很像，都是用回溯的方法连续探索一条路到死，然后在循环内部搞嵌套。</p><p>这个其实就是图论了，下面的过程和建图并没有什么差别。</p><h3 id="N皇后">N皇后</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><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">vector&lt;vector&lt;string&gt;&gt; ans;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isValid</span><span class="params">(<span class="type">int</span> row, <span class="type">int</span> col, vector&lt;string&gt;&amp; chessboard, <span class="type">int</span> n)</span> </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> i = <span class="number">0</span>; i &lt; row; i++) &#123; <span class="comment">// 这是一个剪枝</span></span><br><span class="line">        <span class="keyword">if</span> (chessboard[i][col] == <span class="string">&#x27;Q&#x27;</span>) &#123;</span><br><span class="line">            <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="comment">// 检查 45度角是否有皇后</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = row - <span class="number">1</span>, j = col - <span class="number">1</span>; i &gt;=<span class="number">0</span> &amp;&amp; j &gt;= <span class="number">0</span>; i--, j--) &#123;</span><br><span class="line">        <span class="keyword">if</span> (chessboard[i][j] == <span class="string">&#x27;Q&#x27;</span>) &#123;</span><br><span class="line">            <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="comment">// 检查 135度角是否有皇后</span></span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = row - <span class="number">1</span>, j = col + <span class="number">1</span>; i &gt;= <span class="number">0</span> &amp;&amp; j &lt; n; i--, j++) &#123;</span><br><span class="line">        <span class="keyword">if</span> (chessboard[i][j] == <span class="string">&#x27;Q&#x27;</span>) &#123;</span><br><span class="line">            <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">backtract</span><span class="params">(<span class="type">int</span> n,<span class="type">int</span> row,vector&lt;string&gt; &amp;m)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (row==n)&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(m);</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> col=<span class="number">0</span>;col&lt;n;col++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">isValid</span>(row,col,m,n))&#123;</span><br><span class="line">            m[row][col]=<span class="string">&#x27;Q&#x27;</span>;</span><br><span class="line">            <span class="built_in">backtract</span>(n,row<span class="number">+1</span>,m);</span><br><span class="line">            m[row][col]=<span class="string">&#x27;.&#x27;</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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;string&gt;&gt; <span class="built_in">solveNQueens</span>(<span class="type">int</span> n) &#123;</span><br><span class="line">        ans.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="function">vector&lt;string&gt; <span class="title">m</span><span class="params">(n,string(n,<span class="string">&#x27;.&#x27;</span>))</span></span>;</span><br><span class="line">        <span class="built_in">backtract</span>(n,<span class="number">0</span>,m);</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="解数独">解数独</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><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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isValid</span><span class="params">(<span class="type">int</span> row, <span class="type">int</span> col, <span class="type">char</span> val, vector&lt;vector&lt;<span class="type">char</span>&gt;&gt;&amp; board)</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">9</span>; i++) &#123; <span class="comment">// 判断行里是否重复</span></span><br><span class="line">        <span class="keyword">if</span> (board[row][i] == val) &#123;</span><br><span class="line">            <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">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; <span class="number">9</span>; j++) &#123; <span class="comment">// 判断列里是否重复</span></span><br><span class="line">        <span class="keyword">if</span> (board[j][col] == val) &#123;</span><br><span class="line">            <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="type">int</span> startRow = (row / <span class="number">3</span>) * <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> startCol = (col / <span class="number">3</span>) * <span class="number">3</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = startRow; i &lt; startRow + <span class="number">3</span>; i++) &#123; <span class="comment">// 判断9方格里是否重复</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = startCol; j &lt; startCol + <span class="number">3</span>; j++) &#123;</span><br><span class="line">            <span class="keyword">if</span> (board[i][j] == val ) &#123;</span><br><span class="line">                <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">    &#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">bool</span> <span class="title">backtract</span><span class="params">(vector&lt;vector&lt;<span class="type">char</span>&gt;&gt; &amp;board)</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;board.<span class="built_in">size</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;board[<span class="number">0</span>].<span class="built_in">size</span>();j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (board[i][j]==<span class="string">&#x27;.&#x27;</span>)&#123;</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">char</span> c=<span class="string">&#x27;1&#x27;</span>;c&lt;=<span class="string">&#x27;9&#x27;</span>;c++)&#123;</span><br><span class="line">                    <span class="keyword">if</span> (<span class="built_in">isValid</span>(i,j,c,board))&#123;</span><br><span class="line">                        board[i][j]=c;</span><br><span class="line">                        <span class="keyword">if</span> (<span class="built_in">backtract</span>(board)) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">                        board[i][j]=<span class="string">&#x27;.&#x27;</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">false</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="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">solveSudoku</span><span class="params">(vector&lt;vector&lt;<span class="type">char</span>&gt;&gt;&amp; board)</span> </span>&#123;</span><br><span class="line">        <span class="built_in">backtract</span>(board);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>无论是“重新安排行程”还是“N皇后”“解数独”，这几道题目很明显都在做一件事情，就是持续探索一种可能，直到不行为止，再回溯。</p><h2 id="贪心理论">贪心理论</h2><h3 id="分发饼干">分发饼干</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">findContentChildren</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; g, vector&lt;<span class="type">int</span>&gt;&amp; s)</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="built_in">sort</span>(g.<span class="built_in">begin</span>(),g.<span class="built_in">end</span>());</span><br><span class="line">        <span class="built_in">sort</span>(s.<span class="built_in">begin</span>(),s.<span class="built_in">end</span>());</span><br><span class="line">        <span class="type">int</span> one=<span class="number">0</span>,two=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (one&lt;g.<span class="built_in">size</span>()&amp;&amp;two&lt;s.<span class="built_in">size</span>())&#123;</span><br><span class="line">            <span class="keyword">if</span> (g[one]&lt;=s[two])&#123;</span><br><span class="line">                ans++;</span><br><span class="line">                one++;</span><br><span class="line">                two++;</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(g[one]&gt;s[two])&#123;</span><br><span class="line">                two++;</span><br><span class="line">            &#125;</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">&#125;;</span><br></pre></td></tr></table></figure><h3 id="摆动序列">摆动序列</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><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">wiggleMaxLength</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (n&lt;=<span class="number">1</span>) <span class="keyword">return</span> n;</span><br><span class="line">        <span class="type">int</span> prediff=nums[<span class="number">1</span>]-nums[<span class="number">0</span>];</span><br><span class="line">        <span class="type">int</span> ans;</span><br><span class="line">        <span class="keyword">if</span> (prediff==<span class="number">0</span>)&#123;</span><br><span class="line">            ans=<span class="number">1</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            ans=<span class="number">2</span>;</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="type">int</span> diff=nums[i]-nums[i<span class="number">-1</span>];</span><br><span class="line">            <span class="keyword">if</span> ((diff&gt;<span class="number">0</span>&amp;&amp;prediff&lt;=<span class="number">0</span>)||(diff&lt;<span class="number">0</span>&amp;&amp;prediff&gt;=<span class="number">0</span>))&#123;</span><br><span class="line">                ans++;</span><br><span class="line">                prediff=diff;</span><br><span class="line">            &#125;</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">&#125;;</span><br></pre></td></tr></table></figure><h3 id="最大子数组和（24机考原题）">最大子数组和（24机考原题）</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><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">maxSubArray</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> ans=<span class="number">-100000</span>;</span><br><span class="line">        <span class="type">int</span> res=<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;n;i++)&#123;</span><br><span class="line">            res+=nums[i];</span><br><span class="line">            <span class="keyword">if</span> (res&gt;ans)&#123;</span><br><span class="line">                ans=res;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (res&lt;<span class="number">0</span>) res=<span class="number">0</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">&#125;;</span><br></pre></td></tr></table></figure><p>大代老师神了，这个思路比动态规划好想多了。</p><p>简单来说，如果这个数加到负数了，那就直接重开。</p><h3 id="买卖股票的最佳时间">买卖股票的最佳时间</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">maxProfit</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; prices)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=prices.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> ans=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">1</span>;i&lt;n;i++)&#123;</span><br><span class="line">            ans+=<span class="built_in">max</span>(prices[i]-prices[i<span class="number">-1</span>],<span class="number">0</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">&#125;;</span><br></pre></td></tr></table></figure><p>我确实没想到了。</p><p>这个东西由于时间无关，所以就是越早卖越好，只要相邻出现正利益，立刻买入无需多言。</p><h3 id="跳跃游戏">跳跃游戏</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><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">canJump</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (n==<span class="number">1</span>) <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">        <span class="type">int</span> cover=<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;=cover;i++)&#123;</span><br><span class="line">            cover=<span class="built_in">max</span>(i+nums[i],cover);</span><br><span class="line">            <span class="keyword">if</span> (cover&gt;=n<span class="number">-1</span>) <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="跳跃游戏变式">跳跃游戏变式</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">jump</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (n==<span class="number">1</span>) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> ans=<span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> ptr=<span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> end=<span class="number">1</span>;</span><br><span class="line">        <span class="keyword">while</span> (end&lt;n)&#123;</span><br><span class="line">            <span class="type">int</span> maxx=<span class="number">0</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i=ptr;i&lt;end;i++)&#123;</span><br><span class="line">                maxx=<span class="built_in">max</span>(i+nums[i],maxx);</span><br><span class="line">            &#125;</span><br><span class="line">            ptr=end;</span><br><span class="line">            end=maxx<span class="number">+1</span>;</span><br><span class="line">            ans++;</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">&#125;;</span><br></pre></td></tr></table></figure><p>你知道这个事情有多脑残吗，三个月前我交的题解，三个月后的我自己没看懂。</p><p>简单来说，ptr和end围成的区间就是每次可以选择的区间，懂了吗。</p><blockquote><p>哈哈，这种感觉太真实了 😄——很多人回看自己几个月前写的贪心代码，尤其是这种“区间推进式”的写法，都会觉得：</p><blockquote><p>“我当时是怎么想的？为什么 <code>end=1</code> ？”</p></blockquote><p>别急，我们一步步还原你三个月前的思路。</p><hr><h2 id="🧩-先看关键初始化部分">🧩 先看关键初始化部分</h2><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="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="type">int</span> ptr = <span class="number">0</span>;</span><br><span class="line"><span class="type">int</span> end = <span class="number">1</span>;   <span class="comment">// 👈 你现在不理解的地方</span></span><br></pre></td></tr></table></figure><p>我们要理解 <code>end=1</code>，得先明白 <strong><code>ptr</code>、<code>end</code> 代表什么</strong>。</p><hr><h2 id="🧭-变量语义（你写的风格）">🧭 变量语义（你写的风格）</h2><table><thead><tr><th>变量</th><th>含义</th></tr></thead><tbody><tr><td><code>ptr</code></td><td>当前层的<strong>起始下标</strong></td></tr><tr><td><code>end</code></td><td>当前层的<strong>结束下标的下一个位置</strong>（右开区间 <code>[ptr, end)</code>）</td></tr><tr><td><code>ans</code></td><td>已跳的次数</td></tr></tbody></table><p>换句话说，每一轮 <code>while</code> 的含义是：</p><blockquote><p>“我们现在在区间 <code>[ptr, end)</code> 内，尝试跳一次，看能到多远。”</p></blockquote><hr><h2 id="🧠-为啥-end-1？">🧠 为啥 <code>end=1</code>？</h2><p>因为：</p><ul><li>初始时，<strong>我们一开始就在下标 0</strong>；</li><li>那么当前层的范围应该是 <strong>只包含第 0 个点</strong>；</li><li>用右开区间 <code>[ptr, end)</code> 表示区间时，如果 <code>ptr=0</code>，只想包含下标 <code>0</code>，那 <code>end</code> 应该是 <code>1</code>。</li></ul><p>也就是说：</p><blockquote><p>初始化 <code>[ptr, end) = [0, 1)</code><br>表示「我当前在第 0 层，只能从位置 0 起跳」。</p></blockquote><hr><h2 id="🧩-如果你把-end-0-或-end-n">🧩 如果你把 <code>end=0</code> 或 <code>end=n</code></h2><p>我们看看会怎样：</p><h3 id="❌-end-0">❌ <code>end = 0</code></h3><ul><li>那么初始区间 <code>[0, 0)</code> 是空的；</li><li>进 <code>while(end&lt;n)</code> → true；</li><li>但 <code>for (int i=ptr; i&lt;end; i++)</code> 不会执行；</li><li><code>maxx</code> 一直是 0；</li><li>进入死循环。</li></ul><p>→ 程序卡死。</p><hr><h3 id="❌-end-n">❌ <code>end = n</code></h3><ul><li>那就是一开始认为“整段都在当前层”；</li><li>跳跃逻辑全乱套；</li><li>直接跳出 <code>while</code>，<code>ans=0</code>；</li><li>输出错误。</li></ul><hr><h3 id="✅-end-1">✅ <code>end = 1</code></h3><p>这刚好表示「当前层只含下标 0」，完全符合初始状态。</p><hr><h2 id="🔄-一轮循环后">🔄 一轮循环后</h2><p>举例：<code>nums = [2,3,1,1,4]</code></p><table><thead><tr><th>循环</th><th><code>[ptr, end)</code></th><th>含义</th></tr></thead><tbody><tr><td>初始</td><td><code>[0, 1)</code></td><td>当前只在第 0 号点</td></tr><tr><td>遍历 i=0 → i+nums[i]=2 → <code>maxx=2</code></td><td></td><td></td></tr><tr><td>更新 <code>ptr=end=1</code>, <code>end=maxx+1=3</code></td><td></td><td></td></tr><tr><td>表示下一层 <code>[1, 3)</code> = {1,2}</td><td></td><td></td></tr></tbody></table><blockquote><p>即从 0 能跳到范围 [1,2]，<br>下一层就从这些点再继续跳。</p></blockquote><hr><h2 id="✅-一句话总结">✅ 一句话总结</h2><p>你的 <code>end=1</code> 是为了：</p><blockquote><p>用 <code>[ptr, end)</code> 表示“当前层能到达的所有点”，<br>初始时只在第 0 个点，所以要设置为 <code>[0, 1)</code>。</p></blockquote><hr><h2 id="💬-小比喻">💬 小比喻</h2><p>想象你在玩跳格子游戏：</p><ul><li><code>ptr</code> 是当前一层的<strong>起点格子</strong>；</li><li><code>end</code> 是这层的<strong>终点格子+1</strong>；</li><li>每层循环表示<strong>你跳一次，能进入下一层可达格子范围</strong>；</li><li>初始化时，你只站在第 0 个格子上，所以 <code>[0,1)</code>。</li></ul><hr><p>要不要我帮你改写成“更自然语义”的版本（例如 <code>start</code> / <code>end</code> 不用右开区间）？<br>那样写出来看起来更直观一点（不需要 <code>+1</code>）。</p></blockquote><h3 id="K次取反后最大化的数组和">K次取反后最大化的数组和</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><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">largestSumAfterKNegations</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums, <span class="type">int</span> k)</span> </span>&#123;</span><br><span class="line">        <span class="built_in">sort</span>(nums.<span class="built_in">begin</span>(),nums.<span class="built_in">end</span>());</span><br><span class="line">        <span class="keyword">while</span> (k--)&#123;</span><br><span class="line">            nums[<span class="number">0</span>]=-nums[<span class="number">0</span>];</span><br><span class="line">            <span class="built_in">sort</span>(nums.<span class="built_in">begin</span>(),nums.<span class="built_in">end</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="keyword">for</span> (<span class="keyword">auto</span> it:nums)&#123;</span><br><span class="line">            ans+=it;</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">&#125;;</span><br></pre></td></tr></table></figure><h3 id="加油站">加油站</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><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">canCompleteCircuit</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; gas, vector&lt;<span class="type">int</span>&gt;&amp; cost)</span> </span>&#123;</span><br><span class="line">        <span class="comment">//-2 -2 -2 3 3</span></span><br><span class="line">        <span class="comment">//-1 -1 1</span></span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; oil;</span><br><span class="line">        <span class="type">int</span> n=gas.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> minn=<span class="number">100000</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            oil.<span class="built_in">push_back</span>(gas[i]-cost[i]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            sum+=oil[i];</span><br><span class="line">            <span class="keyword">if</span> (sum&lt;minn)&#123;</span><br><span class="line">                minn=sum;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (sum&lt;<span class="number">0</span>) <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">if</span> (minn&gt;=<span class="number">0</span>) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">            minn+=oil[i];</span><br><span class="line">            <span class="keyword">if</span> (minn&gt;=<span class="number">0</span>)&#123;</span><br><span class="line">                <span class="keyword">return</span> i;</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">&#125;;</span><br></pre></td></tr></table></figure><h3 id="柠檬水找零">柠檬水找零</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><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">lemonadeChange</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; bills)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=bills.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> h[<span class="number">11</span>];</span><br><span class="line">        <span class="built_in">memset</span>(h,<span class="number">0</span>,<span class="built_in">sizeof</span>(h));</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (bills[i]==<span class="number">5</span>)&#123;</span><br><span class="line">                h[<span class="number">5</span>]++;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span> (bills[i]==<span class="number">10</span>)&#123;</span><br><span class="line">                <span class="keyword">if</span> (h[<span class="number">5</span>]==<span class="number">0</span>)&#123;</span><br><span class="line">                    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    h[<span class="number">5</span>]--;</span><br><span class="line">                    h[<span class="number">10</span>]++;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span> (bills[i]==<span class="number">20</span>)&#123;</span><br><span class="line">                <span class="keyword">if</span> (h[<span class="number">10</span>]&gt;=<span class="number">1</span>&amp;&amp;h[<span class="number">5</span>]&gt;=<span class="number">1</span>)&#123;</span><br><span class="line">                    h[<span class="number">10</span>]--;</span><br><span class="line">                    h[<span class="number">5</span>]--;</span><br><span class="line">                &#125;<span class="keyword">else</span> <span class="keyword">if</span> (h[<span class="number">5</span>]&gt;=<span class="number">3</span>)&#123;</span><br><span class="line">                    h[<span class="number">5</span>]-=<span class="number">3</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</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">            &#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">&#125;;</span><br></pre></td></tr></table></figure><p>这里有三种金额，5，10，20。问题是要找零</p><p>我们可以发现的是，5泛用性较高对策性较强属于超大杯，10泛用性一般对策性较强属于大杯，而20泛用性极低对策性极低属于中杯。</p><p>每次消耗先消耗泛用性低的，留在手里没用，然后再去考虑泛用性高的。</p><h3 id="分发糖果">分发糖果</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><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">candy</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; ratings)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=ratings.<span class="built_in">size</span>();</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">ans</span><span class="params">(n,<span class="number">1</span>)</span></span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">1</span>;i&lt;=n<span class="number">-1</span>;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (ratings[i]&gt;ratings[i<span class="number">-1</span>])&#123;</span><br><span class="line">                ans[i]=ans[i<span class="number">-1</span>]<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=n<span class="number">-2</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">            <span class="keyword">if</span> (ratings[i]&gt;ratings[i<span class="number">+1</span>])&#123;</span><br><span class="line">                ans[i]=<span class="built_in">max</span>(ans[i],ans[i<span class="number">+1</span>]<span class="number">+1</span>);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</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">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            sum+=ans[i];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> sum;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>分发糖果事实上是一类题，与这一题类似的还有PAT B1119</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></pre></td><td class="code"><pre><span class="line"><span class="comment">//PAT B1119答案</span></span><br><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">int</span> 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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">panda</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;panda[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">ans</span><span class="params">(n,<span class="number">200</span>)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">1</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (panda[i]&gt;panda[i<span class="number">-1</span>])&#123;</span><br><span class="line">            ans[i]=ans[i<span class="number">-1</span>]<span class="number">+100</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(panda[i]==panda[i<span class="number">-1</span>])&#123;</span><br><span class="line">            ans[i]=ans[i<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=n<span class="number">-2</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        <span class="keyword">if</span> (panda[i]&gt;panda[i<span class="number">+1</span>])&#123;</span><br><span class="line">            ans[i]=<span class="built_in">max</span>(ans[i],ans[i<span class="number">+1</span>]<span class="number">+100</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(panda[i]==panda[i<span class="number">+1</span>])&#123;</span><br><span class="line">            ans[i]=<span class="built_in">max</span>(ans[i],ans[i<span class="number">+1</span>]);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</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">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        sum+=ans[i];</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;sum&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>都是扫描两次。</p><h3 id="根据身高重建队列">根据身高重建队列</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><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"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(vector&lt;<span class="type">int</span>&gt; &amp;a,vector&lt;<span class="type">int</span>&gt; &amp;b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a[<span class="number">0</span>]==b[<span class="number">0</span>]) <span class="keyword">return</span> a[<span class="number">1</span>]&lt;b[<span class="number">1</span>];</span><br><span class="line">    <span class="keyword">return</span> a[<span class="number">0</span>]&gt;b[<span class="number">0</span>];</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">reconstructQueue</span>(vector&lt;vector&lt;<span class="type">int</span>&gt;&gt;&amp; people) &#123;</span><br><span class="line">        <span class="built_in">sort</span>(people.<span class="built_in">begin</span>(),people.<span class="built_in">end</span>(),cmp);</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; que;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;people.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            <span class="type">int</span> pos=people[i][<span class="number">1</span>];</span><br><span class="line">            que.<span class="built_in">insert</span>(que.<span class="built_in">begin</span>()+pos,people[i]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> que;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>这个思路有点难想了。</p><h3 id="用最少的箭引爆气球">用最少的箭引爆气球</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><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"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(vector&lt;<span class="type">int</span>&gt; &amp;a,vector&lt;<span class="type">int</span>&gt; &amp;b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a[<span class="number">0</span>]==b[<span class="number">0</span>]) <span class="keyword">return</span> a[<span class="number">1</span>]&lt;b[<span class="number">1</span>];</span><br><span class="line">    <span class="keyword">return</span> a[<span class="number">0</span>]&gt;b[<span class="number">0</span>];</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">reconstructQueue</span>(vector&lt;vector&lt;<span class="type">int</span>&gt;&gt;&amp; people) &#123;</span><br><span class="line">        <span class="built_in">sort</span>(people.<span class="built_in">begin</span>(),people.<span class="built_in">end</span>(),cmp);</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; que;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;people.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            <span class="type">int</span> pos=people[i][<span class="number">1</span>];</span><br><span class="line">            que.<span class="built_in">insert</span>(que.<span class="built_in">begin</span>()+pos,people[i]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> que;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>事实上，这个是贪心里最有迹可循的题目，也就是重合线段模型了。</p><h3 id="无重叠区间">无重叠区间</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><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="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(vector&lt;<span class="type">int</span>&gt; &amp;a,vector&lt;<span class="type">int</span>&gt; &amp;b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> a[<span class="number">1</span>]&lt;b[<span class="number">1</span>];</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">eraseOverlapIntervals</span><span class="params">(vector&lt;vector&lt;<span class="type">int</span>&gt;&gt;&amp; intervals)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=intervals.<span class="built_in">size</span>();</span><br><span class="line">        <span class="built_in">sort</span>(intervals.<span class="built_in">begin</span>(),intervals.<span class="built_in">end</span>(),cmp);</span><br><span class="line">        <span class="type">int</span> minn=intervals[<span class="number">0</span>][<span class="number">1</span>];</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++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (intervals[i][<span class="number">0</span>]&gt;=minn)&#123;</span><br><span class="line">                ans++;</span><br><span class="line">                minn=intervals[i][<span class="number">1</span>];</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                <span class="keyword">continue</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> n-ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="划分字母区间">划分字母区间</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">partitionLabels</span><span class="params">(string s)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=s.<span class="built_in">size</span>();</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">        unordered_map&lt;<span class="type">char</span>,<span class="type">int</span>&gt; h;</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">            h[s[i]]=i;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> idx=<span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> pos=<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;n;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (h[s[i]]&gt;idx)&#123;</span><br><span class="line">                idx=h[s[i]];</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (i==idx)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(idx-pos<span class="number">+1</span>);</span><br><span class="line">                idx=h[s[i<span class="number">+1</span>]];</span><br><span class="line">                pos=i<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">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>何尝不是一种线段模型的表示形式，总的而言就是先统计出来每个字符最后出现的位置，然后再定义一个最大值为0，一旦遇到那个字母最后出现位置大于最大值，那么就更新最大值，一旦最大值和i相等了，那么直接保存一次答案，然后把初始指针移动到下一位，继续遍历。</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">static</span> <span class="type">bool</span> <span class="title">cmp</span><span class="params">(vector&lt;<span class="type">int</span>&gt; &amp;a, vector&lt;<span class="type">int</span>&gt; &amp;b)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">return</span> a[<span class="number">0</span>] &lt; b[<span class="number">0</span>];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// 记录每个字母出现的区间</span></span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">countLabels</span>(string s) &#123;</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">hash</span>(<span class="number">26</span>, <span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(<span class="number">2</span>, INT_MIN));</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; hash_filter;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; s.<span class="built_in">size</span>(); ++i) &#123;</span><br><span class="line">            <span class="keyword">if</span> (hash[s[i] - <span class="string">&#x27;a&#x27;</span>][<span class="number">0</span>] == INT_MIN) &#123;</span><br><span class="line">                hash[s[i] - <span class="string">&#x27;a&#x27;</span>][<span class="number">0</span>] = i;</span><br><span class="line">            &#125;</span><br><span class="line">            hash[s[i] - <span class="string">&#x27;a&#x27;</span>][<span class="number">1</span>] = i;</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> i = <span class="number">0</span>; i &lt; hash.<span class="built_in">size</span>(); ++i) &#123;</span><br><span class="line">            <span class="keyword">if</span> (hash[i][<span class="number">0</span>] != INT_MIN) &#123;</span><br><span class="line">                hash_filter.<span class="built_in">push_back</span>(hash[i]);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> hash_filter;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">partitionLabels</span><span class="params">(string s)</span> </span>&#123;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; res;</span><br><span class="line">        <span class="comment">// 这一步得到的 hash 即为无重叠区间题意中的输入样例格式：区间列表</span></span><br><span class="line">        <span class="comment">// 只不过现在我们要求的是区间分割点</span></span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; hash = <span class="built_in">countLabels</span>(s);</span><br><span class="line">        <span class="comment">// 按照左边界从小到大排序</span></span><br><span class="line">        <span class="built_in">sort</span>(hash.<span class="built_in">begin</span>(), hash.<span class="built_in">end</span>(), cmp);</span><br><span class="line">        <span class="comment">// 记录最大右边界</span></span><br><span class="line">        <span class="type">int</span> rightBoard = hash[<span class="number">0</span>][<span class="number">1</span>];</span><br><span class="line">        <span class="type">int</span> leftBoard = <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; hash.<span class="built_in">size</span>(); ++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">if</span> (hash[i][<span class="number">0</span>] &gt; rightBoard) &#123;</span><br><span class="line">                res.<span class="built_in">push_back</span>(rightBoard - leftBoard + <span class="number">1</span>);</span><br><span class="line">                leftBoard = hash[i][<span class="number">0</span>];</span><br><span class="line">            &#125;</span><br><span class="line">            rightBoard = <span class="built_in">max</span>(rightBoard, hash[i][<span class="number">1</span>]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">// 最右端</span></span><br><span class="line">        res.<span class="built_in">push_back</span>(rightBoard - leftBoard + <span class="number">1</span>);</span><br><span class="line">        <span class="keyword">return</span> res;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="合并区间">合并区间</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><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="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(vector&lt;<span class="type">int</span>&gt; &amp;a,vector&lt;<span class="type">int</span>&gt; &amp;b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> a[<span class="number">0</span>]&lt;b[<span class="number">0</span>];</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">merge</span>(vector&lt;vector&lt;<span class="type">int</span>&gt;&gt;&amp; intervals) &#123;</span><br><span class="line">        <span class="type">int</span> n=intervals.<span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; ans;</span><br><span class="line">        <span class="built_in">sort</span>(intervals.<span class="built_in">begin</span>(),intervals.<span class="built_in">end</span>());</span><br><span class="line">        <span class="type">int</span> minn=intervals[<span class="number">0</span>][<span class="number">0</span>];</span><br><span class="line">        <span class="type">int</span> maxx=intervals[<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">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (intervals[i][<span class="number">0</span>]&gt;maxx)&#123;</span><br><span class="line">                vector&lt;<span class="type">int</span>&gt; path;</span><br><span class="line">                path.<span class="built_in">push_back</span>(minn);</span><br><span class="line">                path.<span class="built_in">push_back</span>(maxx);</span><br><span class="line">                ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">                minn=intervals[i][<span class="number">0</span>];</span><br><span class="line">                maxx=intervals[i][<span class="number">1</span>];</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                maxx=<span class="built_in">max</span>(intervals[i][<span class="number">1</span>],maxx);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; path;</span><br><span class="line">        path.<span class="built_in">push_back</span>(minn);</span><br><span class="line">        path.<span class="built_in">push_back</span>(maxx);</span><br><span class="line">        ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>这个也是线段合并模板题，经过讲解我现在理解更深了。</p><h3 id="单调递增的数字">单调递增的数字</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><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"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">monotoneIncreasingDigits</span><span class="params">(<span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">        string str=<span class="built_in">to_string</span>(n);</span><br><span class="line">        <span class="type">int</span> flag=str.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=str.<span class="built_in">size</span>()<span class="number">-1</span>;i&gt;<span class="number">0</span>;i--)&#123;</span><br><span class="line">            <span class="keyword">if</span> (str[i<span class="number">-1</span>]&gt;str[i])&#123;</span><br><span class="line">                flag=i;</span><br><span class="line">                str[i<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=flag;i&lt;str.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            str[i]=<span class="string">&#x27;9&#x27;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">stoi</span>(str);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><blockquote><p>好——下面我把 <strong>贪心解（Greedy）</strong> 的思路讲得尽可能清楚、逐步且可直接拿去写代码。目标是：理解为什么操作是正确的、每一步在做什么、常见边界如何处理，并给出简洁的实现与例子演示。</p><h1>要解决的问题（快速回顾）</h1><p>给定正整数 <code>n</code>，找出最大的整数 <code>x</code>（<code>x ≤ n</code>），使得 <code>x</code> 的每一位从左到右<strong>非递减</strong>（即单调递增/非降：每一位 ≤ 下一位）。</p><p>示例：<code>n=332</code> → 答案 <code>299</code>。</p><hr><h1>核心观察（关键不难但很重要）</h1><p>若一个数的某一位 <code>i-1</code> 大于后一位 <code>i</code>（即 <code>s[i-1] &gt; s[i]</code>），那么任何以当前前缀（包括 <code>s[i-1]</code>）开始并保持后面不变的数都<strong>不是单调非降</strong>。<br>要在不超过 <code>n</code> 的前提下得到尽可能大的单调数，你需要 <strong>把违规点之前的某一位减 1</strong>，然后把那个位置右边所有位都改成 <code>9</code>（因为改成 9 能在保证 ≤ n 的前提下把数尽量变大）。</p><p>举例直觉：<code>332</code></p><ul><li>发现 <code>3 &gt; 2</code>（位置 1 比位置 2 大），所以不能直接用 <code>332</code>。</li><li>把 <code>s[1]</code>（第二位）减 1 → 得到 <code>3 2 ?</code>（现在前缀是 <code>32</code>）</li><li>把后面全部改 <code>9</code> → <code>3 2 9</code>，但 <code>329</code> 仍然不是单调非降（因为 <code>3 &gt; 2</code>），所以你应当继续向左看，把 <code>s[0]</code>（第一位）减 1 → <code>2 ? ?</code>，然后把所有右边改 <code>9</code> → <code>299</code>，这是合法且最大的。</li></ul><hr><h1>具体算法（一步步执行）</h1><ol><li>把 <code>n</code> 转成字符串 <code>s</code>（比如 <code>&quot;332&quot;</code>）。</li><li>从右往左扫描索引 <code>i = len(s)-1</code> 到 <code>1</code>：<ul><li>如果发现 <code>s[i-1] &gt; s[i]</code>：<ul><li>把 <code>s[i-1]--</code>（把左位减 1），</li><li>记录一个位置 <code>mark = i</code>（表示从 <code>i</code> 开始到末尾要全部改成 <code>9</code>）。</li></ul></li></ul></li><li>扫描结束后，把从 <code>mark</code> 到末尾的所有字符都置为 <code>'9'</code>。</li><li>将字符串转回整数返回（注意可能有前导 <code>0</code>，如 <code>1000 -&gt; 0999 -&gt; 999</code>，转换为整数会自动处理）。</li></ol><p><strong>实现细节</strong>：初始化 <code>mark = s.size()</code>（表示如果从未发现违规就无需改成 9）。每次发现 <code>s[i-1] &gt; s[i]</code>，执行 <code>s[i-1]--</code> 并 <code>mark = i</code>（注意不要立刻把右边改成 9 - 先记录位置，继续向左扫描，可能需要多次左减）。</p><hr><h1>为什么这样是正确的（证明直观版）</h1><ul><li>当 <code>s[i-1] &gt; s[i]</code> 时，任何保持前缀不变的数都不可能合法（不单调）。要让前缀变得合法，唯一可行的操作是把前缀中某一位减小（向左找第一个能减的位置），因为减小某一左侧位可以使得后面做任意更大填充而仍 ≤ <code>n</code>。</li><li>为了在不超过 <code>n</code> 的前提下最大化结果，把该位减 1 后，右边所有位都应设为最大可能（即 <code>9</code>）。</li><li>向左继续检查是必要的：减了左边某位之后，可能出现新的 <code>s[j-1] &gt; s[j]</code>（因为你减小了 <code>s[j]</code>），所以需要继续向左处理直到没有违反。上述“先记录<code>mark</code>继续向左”正是实现这个逻辑的高效方法。</li><li>最终形成的数是小于等于原数且单调非降的最大数，因为对任何更大的比它还小的候选数都会在某处违反条件或超过 <code>n</code>。</li></ul><hr><h1>时间与空间复杂度</h1><ul><li>时间：O(d)，d = 数字的位数（将近 <code>log10(n)</code>），非常快。</li><li>空间：O(d)（字符串存储），可认为 O(1) 额外空间。</li></ul><hr><h1>代码（C++，简洁易懂）</h1><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></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">monotoneIncreasingDigits</span><span class="params">(<span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">    string s = <span class="built_in">to_string</span>(n);</span><br><span class="line">    <span class="type">int</span> mark = s.<span class="built_in">size</span>();</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = s.<span class="built_in">size</span>() - <span class="number">1</span>; i &gt; <span class="number">0</span>; --i) &#123;</span><br><span class="line">        <span class="keyword">if</span> (s[i<span class="number">-1</span>] &gt; s[i]) &#123;</span><br><span class="line">            s[i<span class="number">-1</span>]--;</span><br><span class="line">            mark = i;</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 = mark; i &lt; (<span class="type">int</span>)s.<span class="built_in">size</span>(); ++i) s[i] = <span class="string">&#x27;9&#x27;</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">stoi</span>(s);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（Python 版本也很短，可按需提供。）</p><hr><h1>例子逐步演示（两例）</h1><p><strong>例 1：n = 332</strong><br>s = “332”, mark = 3<br>i=2: s[1]=3, s[2]=2 → 3&gt;2 ✓ → s[1]-- =&gt; s=“322”, mark=2<br>i=1: s[0]=3, s[1]=2 → 3&gt;2 ✓ → s[0]-- =&gt; s=“222”, mark=1<br>end loop -&gt; 把从 mark=1 到末尾全设为 ‘9’ -&gt; s = “299” -&gt; 返回 299。</p><p><strong>例 2：n = 1234</strong><br>s=“1234”，从右往左检查没有 s[i-1] &gt; s[i] 的情况，mark 保持为 4（s.size），不用变 9，直接返回 1234。</p><hr><h1>常见边界 / 注意点</h1><ul><li><code>n</code> 本身就是单调非降时，直接返回 <code>n</code>（算法会自动做到）。</li><li>会出现类似 <code>1000</code> 的情形：<br>s = “1000”<br>i=3: 0 !&gt; 0<br>i=2: 0 !&gt; 0<br>i=1: 1 &gt; 0 → s[0]-- =&gt; ‘0’, mark=1 → 最后从 1 开始全部设 9 =&gt; “0999” -&gt; stoi -&gt; 999，正确。</li><li>字符串减法 <code>s[i-1]--</code> 对字符安全（‘0’ 到 ‘9’ 范围里减 1 都有效）；若出现 <code>'0'--</code> 结果是 <code>'/'</code>（ASCII），但不会发生因为当 <code>s[i-1] &gt; s[i]</code> 且 <code>s[i]</code> 最小为 ‘0’ 时 <code>s[i-1]</code> 至少是 ‘1’，故减 1 后仍是数字字符。</li></ul><hr><h1>直观理解（一句话）</h1><p>把从右到左第一个“下降”的点往左找到能调整的位，把它减 1，然后把右边全部填 9；重复直到整个数不再下降 —— 这样得到的不超过原数的单调非降数是<strong>最大的</strong>。</p><hr><p>如果你想，我可以再：</p><ul><li>给出 Python 实现；或</li><li>把“为什么要继续向左”的情形用一个小动画式的多步骤例子（比如 <code>n=3329</code>）画出来。</li></ul><p>你想看哪一个？</p></blockquote><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></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">long</span> <span class="type">long</span> n;</span><br><span class="line">string n_str;</span><br><span class="line"><span class="type">long</span> <span class="type">long</span> best = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">backtrack</span><span class="params">(string cur, <span class="type">int</span> last_digit)</span> </span>&#123;</span><br><span class="line">    <span class="comment">// 把当前字符串转成数字看看是不是一个候选解</span></span><br><span class="line">    <span class="keyword">if</span> (!cur.<span class="built_in">empty</span>()) &#123;</span><br><span class="line">        <span class="type">long</span> <span class="type">long</span> val = <span class="built_in">stoll</span>(cur);</span><br><span class="line">        <span class="keyword">if</span> (val &lt;= n) best = <span class="built_in">max</span>(best, val);</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">return</span>; <span class="comment">// 如果已经超过 n，就没必要继续往下构造了</span></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 如果长度超过 n 的位数，也没必要继续</span></span><br><span class="line">    <span class="keyword">if</span> (cur.<span class="built_in">size</span>() &gt;= n_str.<span class="built_in">size</span>()) <span class="keyword">return</span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 尝试添加新的一位</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> d = last_digit; d &lt;= <span class="number">9</span>; d++) &#123;</span><br><span class="line">        <span class="built_in">backtrack</span>(cur + (<span class="type">char</span>)(<span class="string">&#x27;0&#x27;</span> + d), d);</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">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    cin &gt;&gt; n;</span><br><span class="line">    n_str = <span class="built_in">to_string</span>(n);</span><br><span class="line"></span><br><span class="line">    <span class="built_in">backtrack</span>(<span class="string">&quot;&quot;</span>, <span class="number">0</span>);</span><br><span class="line">    cout &lt;&lt; best &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><h2 id="动态规划理论">动态规划理论</h2><h3 id="斐波那契数列">斐波那契数列</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">fib</span><span class="params">(<span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> f[<span class="number">35</span>];</span><br><span class="line">        f[<span class="number">0</span>]=<span class="number">0</span>,f[<span class="number">1</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">2</span>;i&lt;=<span class="number">30</span>;i++)&#123;</span><br><span class="line">            f[i]=f[i<span class="number">-1</span>]+f[i<span class="number">-2</span>];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> f[n];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="爬楼梯">爬楼梯</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><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">climbStairs</span><span class="params">(<span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">        <span class="comment">//dp[i]的意思是爬上第i层楼梯有几种方法</span></span><br><span class="line">        <span class="type">int</span> dp[<span class="number">46</span>];</span><br><span class="line">        dp[<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line">        dp[<span class="number">2</span>]=<span class="number">2</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">3</span>;i&lt;=<span class="number">45</span>;i++)&#123;</span><br><span class="line">            dp[i]=dp[i<span class="number">-1</span>]+dp[i<span class="number">-2</span>];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[n];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="用最小的花费爬楼梯">用最小的花费爬楼梯</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><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">minCostClimbingStairs</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; cost)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=cost.<span class="built_in">size</span>();</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(n<span class="number">+1</span>)</span></span>;</span><br><span class="line">        dp[<span class="number">0</span>]=<span class="number">0</span>;</span><br><span class="line">        dp[<span class="number">1</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">2</span>;i&lt;=n;i++)&#123;</span><br><span class="line">            dp[i]=<span class="built_in">min</span>(dp[i<span class="number">-1</span>]+cost[i<span class="number">-1</span>],dp[i<span class="number">-2</span>]+cost[i<span class="number">-2</span>]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[n];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="不同路径">不同路径</h3><h4 id="题解一：深度优先搜索">题解一：深度优先搜索</h4><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">private</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">dfs</span><span class="params">(<span class="type">int</span> i, <span class="type">int</span> j, <span class="type">int</span> m, <span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (i &gt; m || j &gt; n) <span class="keyword">return</span> <span class="number">0</span>; <span class="comment">// 越界了</span></span><br><span class="line">        <span class="keyword">if</span> (i == m &amp;&amp; j == n) <span class="keyword">return</span> <span class="number">1</span>; <span class="comment">// 找到一种方法，相当于找到了叶子节点</span></span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">dfs</span>(i + <span class="number">1</span>, j, m, n) + <span class="built_in">dfs</span>(i, j + <span class="number">1</span>, m, n);</span><br><span class="line">    &#125;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">uniquePaths</span><span class="params">(<span class="type">int</span> m, <span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">dfs</span>(<span class="number">1</span>, <span class="number">1</span>, m, n);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>这个写法是比较直观的思路，因为这个题事实上就是一个图，但是问题是会超时</p><h4 id="题解二：动态规划（正解）">题解二：动态规划（正解）</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">uniquePaths</span><span class="params">(<span class="type">int</span> m, <span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(m,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(n));</span><br><span class="line">        dp[<span class="number">0</span>][<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;n;i++)&#123;</span><br><span class="line">            dp[<span class="number">0</span>][i]=<span class="number">1</span>;</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">            dp[i][<span class="number">0</span>]=<span class="number">1</span>;</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">for</span> (<span class="type">int</span> j=<span class="number">1</span>;j&lt;n;j++)&#123;</span><br><span class="line">                dp[i][j]=dp[i<span class="number">-1</span>][j]+dp[i][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">return</span> dp[m<span class="number">-1</span>][n<span class="number">-1</span>];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>和洛谷上那题马的遍历可能是完全一样的题目，这一题可能还比较简单没有加障碍物，也没有限制移动规则。</p><h3 id="不同路径变式">不同路径变式</h3><h4 id="动态规划解法：">动态规划解法：</h4><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">uniquePathsWithObstacles</span><span class="params">(vector&lt;vector&lt;<span class="type">int</span>&gt;&gt;&amp; obstacleGrid)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> m=obstacleGrid.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> n=obstacleGrid[<span class="number">0</span>].<span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(m,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(n,<span class="number">0</span>));</span><br><span class="line">        <span class="keyword">if</span> (obstacleGrid[m<span class="number">-1</span>][n<span class="number">-1</span>]==<span class="number">1</span>||obstacleGrid[<span class="number">0</span>][<span class="number">0</span>]==<span class="number">1</span>)&#123;</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">        dp[<span class="number">0</span>][<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;m;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (obstacleGrid[i][<span class="number">0</span>]==<span class="number">1</span>) <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">else</span> dp[i][<span class="number">0</span>]=<span class="number">1</span>;</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="keyword">if</span> (obstacleGrid[<span class="number">0</span>][i]==<span class="number">1</span>) <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">else</span> dp[<span class="number">0</span>][i]=<span class="number">1</span>;</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">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="keyword">if</span> (obstacleGrid[i][j]==<span class="number">1</span>) <span class="keyword">continue</span>;</span><br><span class="line">                dp[i][j]=dp[i<span class="number">-1</span>][j]+dp[i][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">return</span> dp[m<span class="number">-1</span>][n<span class="number">-1</span>];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>如果在最外围出现了障碍物，那么和障碍物同一条直线上且之后的都无法到达，都是0</p><h4 id="深度优先搜索-记忆化">深度优先搜索+记忆化</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> m, n;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; memo;</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">dfs</span><span class="params">(vector&lt;vector&lt;<span class="type">int</span>&gt;&gt;&amp; grid, <span class="type">int</span> i, <span class="type">int</span> j)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (i &gt;= m || j &gt;= n || grid[i][j] == <span class="number">1</span>) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (i == m - <span class="number">1</span> &amp;&amp; j == n - <span class="number">1</span>) <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">if</span> (memo[i][j] != <span class="number">-1</span>) <span class="keyword">return</span> memo[i][j];</span><br><span class="line">        <span class="keyword">return</span> memo[i][j] = <span class="built_in">dfs</span>(grid, i + <span class="number">1</span>, j) + <span class="built_in">dfs</span>(grid, i, j + <span class="number">1</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">uniquePathsWithObstacles</span><span class="params">(vector&lt;vector&lt;<span class="type">int</span>&gt;&gt;&amp; grid)</span> </span>&#123;</span><br><span class="line">        m = grid.<span class="built_in">size</span>(), n = grid[<span class="number">0</span>].<span class="built_in">size</span>();</span><br><span class="line">        memo.<span class="built_in">assign</span>(m, <span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(n, <span class="number">-1</span>));</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">dfs</span>(grid, <span class="number">0</span>, <span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="整数拆分">整数拆分</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><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">integerBreak</span><span class="params">(<span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(n<span class="number">+1</span>)</span></span>;</span><br><span class="line">        dp[<span class="number">2</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">3</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;=i/<span class="number">2</span>;j++)&#123;</span><br><span class="line">                dp[i]=<span class="built_in">max</span>(dp[i],<span class="built_in">max</span>(j*dp[i-j],j*(i-j)));</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[n];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>我先吐槽，你再给我十辈子我都想不出来这种思路。</p><h3 id="0-1背包理论">0/1背包理论</h3><p><img src="https://s3.bmp.ovh/imgs/2025/10/16/bbedccb90d144180.png" alt></p><h4 id="例题：携带研究材料（01背包模板题）">例题：携带研究材料（01背包模板题）</h4><p>题目描述</p><p>小明是一位科学家，他需要参加一场重要的国际科学大会，以展示自己的最新研究成果。他需要带一些研究材料，但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等，它们各自占据不同的空间，并且具有不同的价值。</p><p>小明的行李空间为 N，问小明应该如何抉择，才能携带最大价值的研究材料，每种研究材料只能选择一次，并且只有选与不选两种选择，不能进行切割。</p><p>输入描述</p><p>第一行包含两个正整数，第一个整数 M 代表研究材料的种类，第二个正整数 N，代表小明的行李空间。</p><p>第二行包含 M 个正整数，代表每种研究材料的所占空间。</p><p>第三行包含 M 个正整数，代表每种研究材料的价值。</p><p>输出描述</p><p>输出一个整数，代表小明能够携带的研究材料的最大价值。</p><p>输入示例</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></pre></td><td class="code"><pre><span class="line">6 1</span><br><span class="line">2 2 3 1 5 2</span><br><span class="line">2 3 1 5 4 3</span><br></pre></td></tr></table></figure><p>输出示例</p><p>提示信息</p><p>小明能够携带 6 种研究材料，但是行李空间只有 1，而占用空间为 1 的研究材料价值为 5，所以最终答案输出 5。</p><p>数据范围：<br>1 &lt;= N &lt;= 5000<br>1 &lt;= M &lt;= 5000<br>研究材料占用空间和价值都小于等于 1000</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></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 class="type">int</span> m,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">    cin&gt;&gt;m&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">value</span><span class="params">(m)</span></span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">weight</span><span class="params">(m)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        cin&gt;&gt;weight[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        cin&gt;&gt;value[i];</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(m,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(n<span class="number">+1</span>,<span class="number">0</span>));</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=weight[<span class="number">0</span>];i&lt;n<span class="number">+1</span>;i++)&#123;</span><br><span class="line">        dp[<span class="number">0</span>][i]=value[<span class="number">0</span>];</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">for</span> (<span class="type">int</span> j=<span class="number">0</span>;j&lt;n<span class="number">+1</span>;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (j&lt;weight[i])&#123;</span><br><span class="line">                dp[i][j]=dp[i<span class="number">-1</span>][j];</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                dp[i][j]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][j],dp[i<span class="number">-1</span>][j-weight[i]]+value[i]);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;dp[m<span class="number">-1</span>][n];</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>即<strong>dp[i][j] 表示从下标为[0-i]的物品里任意取，放进容量为j的背包，价值总和最大是多少</strong>。</p><p><strong>要时刻记着这个dp数组的含义，下面的一些步骤都围绕这dp数组的含义进行的</strong>，如果哪里看懵了，就来回顾一下i代表什么，j又代表什么</p><h4 id="分割等和子集">分割等和子集</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">canPartition</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(<span class="number">10001</span>,<span class="number">0</span>)</span></span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            sum+=nums[i];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (sum%<span class="number">2</span>==<span class="number">1</span>) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> t=sum/<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;n;i++)&#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j=t;j&gt;=nums[i];j--)&#123;</span><br><span class="line">                dp[j]=<span class="built_in">max</span>(dp[j],dp[j-nums[i]]+nums[i]);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (dp[t]==t) <span class="keyword">return</span> <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><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>这个真的很扯你知道吗，不看我这辈子想不到要dp。</p><h4 id="最后一块石头的重量">最后一块石头的重量</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">lastStoneWeightII</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; stones)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=stones.<span class="built_in">size</span>();</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">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            sum+=stones[i];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(<span class="number">1510</span>,<span class="number">0</span>)</span></span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j=sum/<span class="number">2</span>;j&gt;=stones[i];j--)&#123;</span><br><span class="line">                dp[j]=<span class="built_in">max</span>(dp[j],dp[j-stones[i]]+stones[i]);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> sum<span class="number">-2</span>*dp[sum/<span class="number">2</span>];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>这个题目和洛谷的那个分作业有点像，都是01背包求最小值的，应该就是一个模板了</p><p>一维dp从后往前面遍历的目的其实是为了防止同一个物品被多次选择</p><p>更详细的看下面</p><p>dp[j]为 容量为j的背包所背的最大价值。等于就是把原本的二维dp的其中一个维度都拷贝到一个一维数组上了</p><h4 id="目标和">目标和</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="type">int</span> <span class="title">findTargetSumWays</span><span class="params">(<span class="type">int</span>[] nums, <span class="type">int</span> target)</span> </span>&#123;</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> num : nums) &#123;</span><br><span class="line">            sum += num;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> diff = sum - target;</span><br><span class="line">        <span class="keyword">if</span> (diff &lt; <span class="number">0</span> || diff % <span class="number">2</span> != <span class="number">0</span>) &#123;</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> neg = diff / <span class="number">2</span>;</span><br><span class="line">        <span class="type">int</span>[] dp = <span class="keyword">new</span> <span class="type">int</span>[neg + <span class="number">1</span>];</span><br><span class="line">        dp[<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> num : nums) &#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = neg; j &gt;= num; j--) &#123;</span><br><span class="line">                dp[j] += dp[j - num];</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[neg];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><img src="https://s3.bmp.ovh/imgs/2025/10/17/8ad0d9723cb46504.png" alt></p><p>由于 dp 的每一行的计算只和上一行有关，因此可以使用滚动数组的方式，去掉 dp 的第一个维度，将空间复杂度优化到 O(neg)。</p><p>实现时，内层循环需采用倒序遍历的方式，这种方式保证转移来的是 dp[i−1][] 中的元素值。</p><h4 id="1和0">1和0</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">findMaxForm</span><span class="params">(vector&lt;string&gt;&amp; strs, <span class="type">int</span> m, <span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(m<span class="number">+1</span>,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(n<span class="number">+1</span>)); </span><br><span class="line">        <span class="keyword">for</span> (string s:strs)&#123;</span><br><span class="line">            <span class="type">int</span> zero=<span class="number">0</span>,one=<span class="number">0</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">char</span> c:s)&#123;</span><br><span class="line">                <span class="keyword">if</span> (c==<span class="string">&#x27;0&#x27;</span>) zero++;</span><br><span class="line">                <span class="keyword">else</span> one++;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i=m;i&gt;=zero;i--)&#123;</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">int</span> j=n;j&gt;=one;j--)&#123;</span><br><span class="line">                    dp[i][j]=<span class="built_in">max</span>(dp[i][j],dp[i-zero][j-one]<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">        <span class="keyword">return</span> dp[m][n];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="完全背包理论">完全背包理论</h3><p><img src="https://s3.bmp.ovh/imgs/2025/10/18/1fa5f5df155c4a42.png" alt></p><p>完全背包由于每种物品的状态不止有两种，所以递推公式与01背包存在着一些不同。</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt; weight.<span class="built_in">size</span>(); i++) &#123;  <span class="comment">// 当然这一步，如果把dp数组预先初始化为0了，这一步就可以省略，但很多同学应该没有想清楚这一点。</span></span><br><span class="line">    dp[i][<span class="number">0</span>] = <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 正序遍历，如果能放下就一直装物品0</span></span><br><span class="line"><span class="keyword">for</span> (<span class="type">int</span> j = weight[<span class="number">0</span>]; j &lt;= bagWeight; j++)</span><br><span class="line">    dp[<span class="number">0</span>][j] = dp[<span class="number">0</span>][j - weight[<span class="number">0</span>]] + value[<span class="number">0</span>];</span><br></pre></td></tr></table></figure><h4 id="例题（模板）">例题（模板）</h4><p><img src="https://s3.bmp.ovh/imgs/2025/10/18/b66f26eeeb1481f7.png" alt></p><p>题解</p><figure class="highlight c++"><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="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">int</span> n,v;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;v;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">weight</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">value</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;weight[i]&gt;&gt;value[i];</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(n,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(v<span class="number">+1</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;n;i++)&#123;</span><br><span class="line">        dp[i][<span class="number">0</span>]=<span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=weight[<span class="number">0</span>];i&lt;=v;i++)&#123;</span><br><span class="line">        dp[<span class="number">0</span>][i]=dp[<span class="number">0</span>][i-weight[<span class="number">0</span>]]+value[<span class="number">0</span>];</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="keyword">for</span> (<span class="type">int</span> j=<span class="number">0</span>;j&lt;=v;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (j&lt;weight[i])&#123;</span><br><span class="line">                dp[i][j]=dp[i<span class="number">-1</span>][j];</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                dp[i][j]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][j],dp[i][j-weight[i]]+value[i]);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;dp[n<span class="number">-1</span>][v]&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>这个就是完完全全的完全背包模板题了，没有一点绕弯子的那种</p><h4 id="零钱兑换">零钱兑换</h4><p><img src="https://s3.bmp.ovh/imgs/2025/10/18/e4780fb6e99f8d37.png" alt></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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">change</span><span class="params">(<span class="type">int</span> amount, vector&lt;<span class="type">int</span>&gt;&amp; coins)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> bagSize = amount;</span><br><span class="line"></span><br><span class="line">        vector&lt;vector&lt;<span class="type">uint64_t</span>&gt;&gt; <span class="built_in">dp</span>(coins.<span class="built_in">size</span>(), <span class="built_in">vector</span>&lt;<span class="type">uint64_t</span>&gt;(bagSize + <span class="number">1</span>, <span class="number">0</span>));</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 初始化最上行</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt;= bagSize; j++) &#123;</span><br><span class="line">            <span class="keyword">if</span> (j % coins[<span class="number">0</span>] == <span class="number">0</span>) dp[<span class="number">0</span>][j] = <span class="number">1</span>;</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> i = <span class="number">0</span>; i &lt; coins.<span class="built_in">size</span>(); i++) &#123;</span><br><span class="line">            dp[i][<span class="number">0</span>] = <span class="number">1</span>;</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> i = <span class="number">1</span>; i &lt; coins.<span class="built_in">size</span>(); i++) &#123; <span class="comment">// 行，遍历物品</span></span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt;= bagSize; j++) &#123; <span class="comment">// 列，遍历背包</span></span><br><span class="line">                <span class="keyword">if</span> (coins[i] &gt; j) dp[i][j] = dp[i - <span class="number">1</span>][j]; </span><br><span class="line">                <span class="keyword">else</span> dp[i][j] = dp[i - <span class="number">1</span>][j] +  dp[i][j - coins[i]];</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[coins.<span class="built_in">size</span>() - <span class="number">1</span>][bagSize];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">change</span><span class="params">(<span class="type">int</span> amount, vector&lt;<span class="type">int</span>&gt;&amp; coins)</span> </span>&#123;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">uint64_t</span>&gt; <span class="title">dp</span><span class="params">(amount + <span class="number">1</span>, <span class="number">0</span>)</span></span>; <span class="comment">// 防止相加数据超int</span></span><br><span class="line">        dp[<span class="number">0</span>] = <span class="number">1</span>; <span class="comment">// 只有一种方式达到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; coins.<span class="built_in">size</span>(); i++) &#123; <span class="comment">// 遍历物品</span></span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = coins[i]; j &lt;= amount; j++) &#123; <span class="comment">// 遍历背包</span></span><br><span class="line">                dp[j] += dp[j - coins[i]];</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[amount]; <span class="comment">// 返回组合数</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h4 id="组合总和（变式2）">组合总和（变式2）</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">combinationSum4</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums, <span class="type">int</span> target)</span> </span>&#123;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(target + <span class="number">1</span>, <span class="number">0</span>)</span></span>;</span><br><span class="line">        dp[<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">0</span>; i &lt;= target; i++) &#123; <span class="comment">// 遍历背包</span></span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; nums.<span class="built_in">size</span>(); j++) &#123; <span class="comment">// 遍历物品</span></span><br><span class="line">                <span class="keyword">if</span> (i - nums[j] &gt;= <span class="number">0</span> &amp;&amp; dp[i] &lt;= INT_MAX - dp[i - nums[j]]) &#123;</span><br><span class="line">                    dp[i] += dp[i - nums[j]];</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> dp[target];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p><img src="https://s3.bmp.ovh/imgs/2025/10/18/dad5b012e2e89963.png" alt></p><p><strong>如果求组合数就是外层for循环遍历物品，内层for遍历背包</strong>。</p><p><strong>如果求排列数就是外层for遍历背包，内层for循环遍历物品</strong>。</p><p><em><strong>简单来说就是：顺序有关就要先遍历背包，以防出问题，无关就先遍历物品。</strong></em></p><h4 id="01背包与完全背包在写法上的差别">01背包与完全背包在写法上的差别</h4><blockquote><p>非常好的问题👏，这个是背包问题的核心区分点之一。<br>我们来系统地讲清楚 <strong>01 背包</strong> 和 <strong>完全背包</strong> 在「一维 DP」时的<strong>递推公式差别</strong>。</p><hr><h2 id="🧩-一、共同点（大框架相同）">🧩 一、共同点（大框架相同）</h2><p>无论是 01 背包还是 完全背包，它们都要解决这样的问题：</p><blockquote><p>在容量为 <code>V</code> 的背包中，放若干个物品，使得价值最大。</p></blockquote><p>每个物品 <code>i</code> 有：</p><ul><li>重量（或体积）<code>w[i]</code></li><li>价值 <code>v[i]</code></li></ul><p>定义一维数组：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dp[j] = 容量为 j 时的最大价值</span><br></pre></td></tr></table></figure><hr><h2 id="🧱-二、01-背包公式（每件只能选一次）">🧱 二、01 背包公式（每件只能选一次）</h2><h3 id="状态转移方程：">状态转移方程：</h3><p>[<br>dp[j] = \max(dp[j], dp[j - w[i]] + v[i])<br>]</p><h3 id="🔁-遍历顺序（从右往左）：">🔁 遍历顺序（<strong>从右往左</strong>）：</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></pre></td><td class="code"><pre><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="comment">// 枚举物品</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> j = V; j &gt;= w[i]; j--) &#123; <span class="comment">// 从大到小</span></span><br><span class="line">        dp[j] = <span class="built_in">max</span>(dp[j], dp[j - w[i]] + v[i]);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="💡-为什么倒序？">💡 为什么倒序？</h4><p>防止同一个物品被重复使用。<br>如果从左到右更新，那么在处理第 i 个物品时，<br><code>dp[j - w[i]]</code> 可能已经被第 i 个物品更新过，就会出现「重复选」的错误。</p><hr><h2 id="🌀-三、完全背包公式（每件可以无限次选）">🌀 三、完全背包公式（每件可以无限次选）</h2><h3 id="状态转移方程：-2">状态转移方程：</h3><p>[<br>dp[j] = \max(dp[j], dp[j - w[i]] + v[i])<br>]</p><p>👉 <strong>看起来公式一样</strong>，但遍历顺序不同！</p><h3 id="🔁-遍历顺序（从左往右）：">🔁 遍历顺序（<strong>从左往右</strong>）：</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></pre></td><td class="code"><pre><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="comment">// 枚举物品</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> j = w[i]; j &lt;= V; j++) &#123; <span class="comment">// 从小到大</span></span><br><span class="line">        dp[j] = <span class="built_in">max</span>(dp[j], dp[j - w[i]] + v[i]);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="💡-为什么正序？">💡 为什么正序？</h4><p>因为完全背包允许同一个物品被多次使用。<br>当你从左往右更新时，<code>dp[j - w[i]]</code> 是<strong>本轮</strong>更新后的值，<br>代表“可以继续选当前物品 i”。</p><hr><h2 id="🎯-四、对比总结表">🎯 四、对比总结表</h2><table><thead><tr><th>项目</th><th>01 背包</th><th>完全背包</th></tr></thead><tbody><tr><td>是否可重复</td><td>❌ 每个物品只能选一次</td><td>✅ 可重复选</td></tr><tr><td>状态方程</td><td><code>dp[j] = max(dp[j], dp[j - w[i]] + v[i])</code></td><td>同上</td></tr><tr><td>遍历顺序</td><td><code>for j = V → w[i]</code>（倒序）</td><td><code>for j = w[i] → V</code>（正序）</td></tr><tr><td>原因</td><td>防止重复使用物品</td><td>允许重复使用物品</td></tr><tr><td>二维版对应转移</td><td><code>dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i])</code></td><td><code>dp[i][j] = max(dp[i-1][j], dp[i][j-w[i]] + v[i])</code></td></tr></tbody></table><hr><h2 id="🧠-五、直观理解图">🧠 五、直观理解图</h2><p>假设物品重 2，价值 3，容量 6。</p><table><thead><tr><th>过程</th><th>说明</th></tr></thead><tbody><tr><td><strong>01 背包倒序</strong></td><td>计算 dp[6] 时不会用到刚更新的 dp[4]（防止重复选）</td></tr><tr><td><strong>完全背包正序</strong></td><td>计算 dp[6] 时会用到刚更新的 dp[4]（表示可以再选一次）</td></tr></tbody></table><hr><h2 id="🧩-六、举个例子对比">🧩 六、举个例子对比</h2><p>假设：</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></pre></td><td class="code"><pre><span class="line">重量 w = [1, 3, 4]</span><br><span class="line">价值 v = [15, 20, 30]</span><br><span class="line">容量 V = 4</span><br></pre></td></tr></table></figure><h3 id="01-背包结果：">01 背包结果：</h3><ul><li>最优选法：选 4 重量物品 → 价值 30</li></ul><h3 id="完全背包结果：">完全背包结果：</h3><ul><li>最优选法：选 4 个 1 重量物品 → 价值 60</li></ul><hr><h2 id="✅-总结一句话记忆">✅ 总结一句话记忆</h2><table><thead><tr><th>名称</th><th>一维遍历方向</th><th>思想记忆</th></tr></thead><tbody><tr><td><strong>01 背包</strong></td><td>从右往左</td><td>防止重复选</td></tr><tr><td><strong>完全背包</strong></td><td>从左往右</td><td>允许重复选</td></tr></tbody></table><hr><p>如果你想，我可以帮你画出一个具体 dp 表格（例如容量=5, w=[2,3], v=[3,4]），<br>并演示在正序 vs 倒序时 dp 数组是如何变化的。<br>要我画那个表吗？</p></blockquote><h4 id="爬楼梯-2">爬楼梯</h4><p><img src="https://s3.bmp.ovh/imgs/2025/10/18/90c9fdbfb3f9e1a8.png" alt></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></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 class="type">int</span> n,m;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(n<span class="number">+1</span>,<span class="number">0</span>)</span></span>;</span><br><span class="line">    dp[<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;=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;=m;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (i&gt;=j)&#123;</span><br><span class="line">                dp[i]+=dp[i-j];</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;dp[n]&lt;&lt;endl;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="零钱兑换（变）">零钱兑换（变）</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">coinChange</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; coins, <span class="type">int</span> amount)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=coins.<span class="built_in">size</span>();</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(amount<span class="number">+1</span>,INT_MAX)</span></span>;</span><br><span class="line">        dp[<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;n;i++)&#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j=coins[i];j&lt;=amount;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (dp[j-coins[i]]!=INT_MAX)&#123;</span><br><span class="line">                    dp[j]=<span class="built_in">min</span>(dp[j],dp[j-coins[i]]<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">        <span class="keyword">if</span> (dp[amount]==INT_MAX) <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">return</span> dp[amount];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h4 id="完全平方数">完全平方数</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">numSquares</span><span class="params">(<span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; a;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">1</span>;i*i&lt;=n;i++)&#123;</span><br><span class="line">            a.<span class="built_in">push_back</span>(i*i);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> m=a.<span class="built_in">size</span>();</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(n<span class="number">+1</span>,INT_MAX)</span></span>;</span><br><span class="line">        dp[<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;m;i++)&#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j=a[i];j&lt;=n;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (dp[j-a[i]]!=INT_MAX)&#123;</span><br><span class="line">                    dp[j]=<span class="built_in">min</span>(dp[j],dp[j-a[i]]<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">        <span class="keyword">return</span> dp[n];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h4 id="单词拆分">单词拆分</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">wordBreak</span><span class="params">(string s, vector&lt;string&gt;&amp; wordDict)</span> </span>&#123;</span><br><span class="line">        <span class="function">unordered_set&lt;string&gt; <span class="title">wordSet</span><span class="params">(wordDict.begin(), wordDict.end())</span></span>;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">dp</span><span class="params">(s.size() + <span class="number">1</span>, <span class="literal">false</span>)</span></span>;</span><br><span class="line">        dp[<span class="number">0</span>] = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= s.<span class="built_in">size</span>(); i++) &#123;   <span class="comment">// 遍历背包</span></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 class="comment">// 遍历物品</span></span><br><span class="line">                string word = s.<span class="built_in">substr</span>(j, i - j); <span class="comment">//substr(起始位置，截取的个数)</span></span><br><span class="line">                <span class="keyword">if</span> (wordSet.<span class="built_in">find</span>(word) != wordSet.<span class="built_in">end</span>() &amp;&amp; dp[j]) &#123;</span><br><span class="line">                    dp[i] = <span class="literal">true</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="keyword">return</span> dp[s.<span class="built_in">size</span>()];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="多重背包理论">多重背包理论</h3><p><img src="https://s3.bmp.ovh/imgs/2025/10/18/8a345f9182f1b009.png" alt></p><figure class="highlight c++"><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></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;vector&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="type">int</span> bagWeight,n;</span><br><span class="line">    cin &gt;&gt; bagWeight &gt;&gt; n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">weight</span><span class="params">(n, <span class="number">0</span>)</span></span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">value</span><span class="params">(n, <span class="number">0</span>)</span></span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">nums</span><span class="params">(n, <span class="number">0</span>)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; i++) cin &gt;&gt; weight[i];</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; i++) cin &gt;&gt; value[i];</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; i++) cin &gt;&gt; nums[i];</span><br><span class="line"></span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(bagWeight + <span class="number">1</span>, <span class="number">0</span>)</span></span>;</span><br><span class="line"></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="comment">// 遍历物品</span></span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> j = bagWeight; j &gt;= weight[i]; j--) &#123; <span class="comment">// 遍历背包容量</span></span><br><span class="line">            <span class="comment">// 以上为01背包，然后加一个遍历个数</span></span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> k = <span class="number">1</span>; k &lt;= nums[i] &amp;&amp; (j - k * weight[i]) &gt;= <span class="number">0</span>; k++) &#123; <span class="comment">// 遍历个数</span></span><br><span class="line">                dp[j] = <span class="built_in">max</span>(dp[j], dp[j - k * weight[i]] + k * value[i]);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    cout &lt;&lt; dp[bagWeight] &lt;&lt; endl;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>多重背包事实上就是一种01背包的变体，只要用上面的方法将每个物品全部展开就行，然后就可以当01背包处理了。</p><h3 id="背包理论总结篇">背包理论总结篇</h3><p><img src="https://s3.bmp.ovh/imgs/2025/10/18/db35ad9e1bd76fcc.png" alt></p><p><img src="https://s3.bmp.ovh/imgs/2025/10/18/1fed0382f1592c33.png" alt></p><p><img src="https://s3.bmp.ovh/imgs/2025/10/18/40b9a39892d761ef.png" alt></p><h3 id="相邻约束DP">相邻约束DP</h3><h4 id="打家劫舍">打家劫舍</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">rob</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (n==<span class="number">1</span>) <span class="keyword">return</span> nums[<span class="number">0</span>];</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(n,<span class="number">0</span>)</span></span>;</span><br><span class="line">        dp[<span class="number">0</span>]=nums[<span class="number">0</span>];</span><br><span class="line">        dp[<span class="number">1</span>]=<span class="built_in">max</span>(nums[<span class="number">0</span>],nums[<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">            dp[i]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>],dp[i<span class="number">-2</span>]+nums[i]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[n<span class="number">-1</span>];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>这个题型叫做相邻约束DP，就是相邻数不能选。</p><h4 id="打家劫舍（变式二）">打家劫舍（变式二）</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">rob</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (n==<span class="number">1</span>) <span class="keyword">return</span> nums[<span class="number">0</span>];</span><br><span class="line">        <span class="type">int</span> res1=<span class="built_in">robans</span>(nums,<span class="number">1</span>,n<span class="number">-1</span>);</span><br><span class="line">        <span class="type">int</span> res2=<span class="built_in">robans</span>(nums,<span class="number">0</span>,n<span class="number">-2</span>);</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">max</span>(res1,res2);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">robans</span><span class="params">(vector&lt;<span class="type">int</span>&gt; &amp;nums,<span class="type">int</span> start,<span class="type">int</span> end)</span></span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (start==end) <span class="keyword">return</span> nums[start];</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(n,<span class="number">0</span>)</span></span>;</span><br><span class="line">        dp[start]=nums[start];</span><br><span class="line">        dp[start<span class="number">+1</span>]=<span class="built_in">max</span>(nums[start],nums[start<span class="number">+1</span>]);</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=start<span class="number">+2</span>;i&lt;=end;i++)&#123;</span><br><span class="line">            dp[i]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>],dp[i<span class="number">-2</span>]+nums[i]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[end];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>事实上也就只有两种情况，只偷头/只偷尾，至于只偷中间，这个情况是不可能的，不会获得最佳答案。</p><h3 id="状态机DP">状态机DP</h3><h4 id="买卖股票的最佳时机">买卖股票的最佳时机</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">maxProfit</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; prices)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> len = prices.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (len == <span class="number">0</span>) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(len, <span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(<span class="number">2</span>));</span><br><span class="line">        dp[<span class="number">0</span>][<span class="number">0</span>] -= prices[<span class="number">0</span>];</span><br><span class="line">        dp[<span class="number">0</span>][<span class="number">1</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">1</span>; i &lt; len; i++) &#123;</span><br><span class="line">            dp[i][<span class="number">0</span>] = <span class="built_in">max</span>(dp[i - <span class="number">1</span>][<span class="number">0</span>], -prices[i]);</span><br><span class="line">            dp[i][<span class="number">1</span>] = <span class="built_in">max</span>(dp[i - <span class="number">1</span>][<span class="number">1</span>], prices[i] + dp[i - <span class="number">1</span>][<span class="number">0</span>]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[len - <span class="number">1</span>][<span class="number">1</span>];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;<span class="comment">//DP写法</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">maxProfit</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; prices)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=prices.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> res=<span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> minn=<span class="number">100010</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            minn=<span class="built_in">min</span>(minn,prices[i]);</span><br><span class="line">            res=<span class="built_in">max</span>(res,prices[i]-minn);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> res;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;<span class="comment">//贪心写法</span></span><br></pre></td></tr></table></figure><p>我觉得这题贪心是最优解有没有懂的（</p><p>如果第i天持有股票即<code>dp[i][0]</code>， 那么可以由两个状态推出来</p><ul><li>第i-1天就持有股票，那么就保持现状，所得现金就是昨天持有股票的所得现金 即：<code>dp[i - 1][0]</code></li><li>第i天买入股票，所得现金就是买入今天的股票后所得现金即：-prices[i]</li></ul><p>那么dp[i][0]应该选所得现金最大的，所以<code>dp[i][0] = max(dp[i - 1][0], -prices[i]);</code></p><p>如果第i天不持有股票即<code>dp[i][1]</code>， 也可以由两个状态推出来</p><ul><li>第i-1天就不持有股票，那么就保持现状，所得现金就是昨天不持有股票的所得现金 即：<code>dp[i - 1][1]</code></li><li>第i天卖出股票，所得现金就是按照今天股票价格卖出后所得现金即：<code>prices[i] + dp[i - 1][0]</code></li></ul><p>同样dp[i][1]取最大的，<code>dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);</code></p><p>这样递推公式我们就分析完了</p><h4 id="买卖股票的最佳时机（变式1）">买卖股票的最佳时机（变式1）</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">maxProfit</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; prices)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=prices.<span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(n,<span class="built_in">vector</span>(<span class="number">2</span>,<span class="number">0</span>));</span><br><span class="line">        dp[<span class="number">0</span>][<span class="number">0</span>]=-prices[<span class="number">0</span>];</span><br><span class="line">        dp[<span class="number">0</span>][<span class="number">1</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">1</span>;i&lt;n;i++)&#123;</span><br><span class="line">            dp[i][<span class="number">0</span>]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][<span class="number">0</span>],dp[i<span class="number">-1</span>][<span class="number">1</span>]-prices[i]);</span><br><span class="line">            dp[i][<span class="number">1</span>]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][<span class="number">1</span>],dp[i<span class="number">-1</span>][<span class="number">0</span>]+prices[i]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[n<span class="number">-1</span>][<span class="number">1</span>];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>利用二维dp定义了两种状态，0为持股，1为不持股，利用上述的递推公式就可以写出来</p><p>但是，不如贪心。</p><h4 id="买卖股票的最佳时机（变式2）">买卖股票的最佳时机（变式2）</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">maxProfit</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; prices)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=prices.<span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(n,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(<span class="number">5</span>,<span class="number">0</span>));</span><br><span class="line">        dp[<span class="number">0</span>][<span class="number">0</span>]=<span class="number">0</span>;</span><br><span class="line">        dp[<span class="number">0</span>][<span class="number">1</span>]=-prices[<span class="number">0</span>];</span><br><span class="line">        dp[<span class="number">0</span>][<span class="number">2</span>]=<span class="number">0</span>;</span><br><span class="line">        dp[<span class="number">0</span>][<span class="number">3</span>]=-prices[<span class="number">0</span>];</span><br><span class="line">        dp[<span class="number">0</span>][<span class="number">4</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">1</span>;i&lt;n;i++)&#123;</span><br><span class="line">            dp[i][<span class="number">0</span>]=dp[i<span class="number">-1</span>][<span class="number">0</span>];</span><br><span class="line">            dp[i][<span class="number">1</span>]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][<span class="number">1</span>],dp[i<span class="number">-1</span>][<span class="number">0</span>]-prices[i]);</span><br><span class="line">            dp[i][<span class="number">2</span>]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][<span class="number">2</span>],dp[i<span class="number">-1</span>][<span class="number">1</span>]+prices[i]);</span><br><span class="line">            dp[i][<span class="number">3</span>]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][<span class="number">3</span>],dp[i<span class="number">-1</span>][<span class="number">2</span>]-prices[i]);</span><br><span class="line">            dp[i][<span class="number">4</span>]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][<span class="number">4</span>],dp[i<span class="number">-1</span>][<span class="number">3</span>]+prices[i]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[n<span class="number">-1</span>][<span class="number">4</span>];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>和上题做法差不多。</p><h4 id="买卖股票的最佳时机（最终变式）">买卖股票的最佳时机（最终变式）</h4><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">maxProfit</span><span class="params">(<span class="type">int</span> k, vector&lt;<span class="type">int</span>&gt;&amp; prices)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=prices.<span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(n,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(<span class="number">2</span>*k<span class="number">+1</span>,<span class="number">0</span>));</span><br><span class="line">        dp[<span class="number">0</span>][<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">1</span>;i&lt;=<span class="number">2</span>*k;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (i%<span class="number">2</span>==<span class="number">1</span>)&#123;</span><br><span class="line">                dp[<span class="number">0</span>][i]=-prices[<span class="number">0</span>];</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                dp[<span class="number">0</span>][i]=<span class="number">0</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;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;=<span class="number">2</span>*k;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (j==<span class="number">0</span>)&#123;</span><br><span class="line">                    dp[i][j]=dp[i<span class="number">-1</span>][j];</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">else</span> <span class="keyword">if</span> (j%<span class="number">2</span>==<span class="number">1</span>)&#123;</span><br><span class="line">                    dp[i][j]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][j],dp[i<span class="number">-1</span>][j<span class="number">-1</span>]-prices[i]);</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    dp[i][j]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][j],dp[i<span class="number">-1</span>][j<span class="number">-1</span>]+prices[i]);</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> dp[n<span class="number">-1</span>][<span class="number">2</span>*k];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>最公式</p><h4 id="买卖股票的最佳时机（含冷静期）">买卖股票的最佳时机（含冷静期）</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">maxProfit</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; prices)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n = prices.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (n == <span class="number">0</span>) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(n, <span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(<span class="number">4</span>, <span class="number">0</span>));</span><br><span class="line">        dp[<span class="number">0</span>][<span class="number">0</span>] -= prices[<span class="number">0</span>]; <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">            dp[i][<span class="number">0</span>] = <span class="built_in">max</span>(dp[i - <span class="number">1</span>][<span class="number">0</span>], <span class="built_in">max</span>(dp[i - <span class="number">1</span>][<span class="number">3</span>] - prices[i], dp[i - <span class="number">1</span>][<span class="number">1</span>] - prices[i]));</span><br><span class="line">            dp[i][<span class="number">1</span>] = <span class="built_in">max</span>(dp[i - <span class="number">1</span>][<span class="number">1</span>], dp[i - <span class="number">1</span>][<span class="number">3</span>]);</span><br><span class="line">            dp[i][<span class="number">2</span>] = dp[i - <span class="number">1</span>][<span class="number">0</span>] + prices[i];</span><br><span class="line">            dp[i][<span class="number">3</span>] = dp[i - <span class="number">1</span>][<span class="number">2</span>];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">max</span>(dp[n - <span class="number">1</span>][<span class="number">3</span>], <span class="built_in">max</span>(dp[n - <span class="number">1</span>][<span class="number">1</span>], dp[n - <span class="number">1</span>][<span class="number">2</span>]));</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>状态机DP的套路很明显了</p><p>第一步：列举所有状态并且定义所有状态</p><p>第二步：明确状态转移的方式</p><p>第三步：确定初始状态</p><p>第四步：开始面向答案编程（</p><h4 id="买卖股票的最佳时机（含手续费）">买卖股票的最佳时机（含手续费）</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">maxProfit</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; prices, <span class="type">int</span> fee)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=prices.<span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(n,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(<span class="number">2</span>,<span class="number">0</span>));</span><br><span class="line">        dp[<span class="number">0</span>][<span class="number">0</span>]=-prices[<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">            dp[i][<span class="number">0</span>]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][<span class="number">0</span>],dp[i<span class="number">-1</span>][<span class="number">1</span>]-prices[i]);</span><br><span class="line">            dp[i][<span class="number">1</span>]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][<span class="number">1</span>],dp[i<span class="number">-1</span>][<span class="number">0</span>]+prices[i]-fee);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[n<span class="number">-1</span>][<span class="number">1</span>];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="区间序列类DP">区间序列类DP</h3><h4 id="最长递增子序列">最长递增子序列</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">lengthOfLIS</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(n,<span class="number">1</span>)</span></span>;</span><br><span class="line">        <span class="type">int</span> maxx=<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++)&#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> (nums[i]&gt;nums[j])&#123;</span><br><span class="line">                    dp[i]=<span class="built_in">max</span>(dp[i],dp[j]<span class="number">+1</span>);</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            maxx=<span class="built_in">max</span>(dp[i],maxx);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> maxx;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>这题需要双层循环的原因是这个要求可以不连续</p><h4 id="最长连续递增序列">最长连续递增序列</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">findLengthOfLCIS</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(n,<span class="number">1</span>)</span></span>;</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++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (nums[i]&gt;nums[i<span class="number">-1</span>])&#123;</span><br><span class="line">                dp[i]=dp[i<span class="number">-1</span>]<span class="number">+1</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            ans=<span class="built_in">max</span>(ans,dp[i]);</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">&#125;;</span><br></pre></td></tr></table></figure><p>这个只要单层的原因是一定要求连续</p><h4 id="最长重复子数组">最长重复子数组</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">findLength</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums1, vector&lt;<span class="type">int</span>&gt;&amp; nums2)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums<span class="number">1.</span><span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> m=nums<span class="number">2.</span><span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(n<span class="number">+1</span>,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(m<span class="number">+1</span>,<span class="number">0</span>));</span><br><span class="line">        <span class="type">int</span> ans=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="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;=m;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (nums1[i<span class="number">-1</span>]==nums2[j<span class="number">-1</span>])&#123;</span><br><span class="line">                    dp[i][j]=dp[i<span class="number">-1</span>][j<span class="number">-1</span>]<span class="number">+1</span>;</span><br><span class="line">                &#125;</span><br><span class="line">                ans=<span class="built_in">max</span>(ans,dp[i][j]);</span><br><span class="line">            &#125;</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">&#125;;</span><br></pre></td></tr></table></figure><p>为什么不用处理不相等的情况，那是因为这是子数组，不是子序列，如果遇到不相等的情况直接过了就行</p><h4 id="最长公共子序列">最长公共子序列</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">longestCommonSubsequence</span><span class="params">(string text1, string text2)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=text<span class="number">1.</span><span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> m=text<span class="number">2.</span><span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(n<span class="number">+1</span>,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(m<span class="number">+1</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">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;=m;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (text1[i<span class="number">-1</span>]==text2[j<span class="number">-1</span>])&#123;</span><br><span class="line">                    dp[i][j]=dp[i<span class="number">-1</span>][j<span class="number">-1</span>]<span class="number">+1</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    dp[i][j]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][j],dp[i][j<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">        <span class="keyword">return</span> dp[n][m];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;<span class="comment">//dp[i][j]：长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]</span></span><br></pre></td></tr></table></figure><h4 id="不相交的钱">不相交的钱</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">maxUncrossedLines</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums1, vector&lt;<span class="type">int</span>&gt;&amp; nums2)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums<span class="number">1.</span><span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> m=nums<span class="number">2.</span><span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(n<span class="number">+1</span>,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(m<span class="number">+1</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">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;=m;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (nums1[i<span class="number">-1</span>]==nums2[j<span class="number">-1</span>])&#123;</span><br><span class="line">                    dp[i][j]=dp[i<span class="number">-1</span>][j<span class="number">-1</span>]<span class="number">+1</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    dp[i][j]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>][j],dp[i][j<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">        <span class="keyword">return</span> dp[n][m];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>这个实际上建模一下就能发现是上面那一题的公式了</p><h3 id="编辑距离类DP">编辑距离类DP</h3><blockquote><p>编辑距离类 DP 是 <strong>字符串动态规划里的一大类经典问题</strong>，主要用于衡量两个字符串之间的差异，或者从一个字符串变成另一个字符串所需的最少操作次数。这个概念在算法竞赛、自然语言处理、文本比对中都非常常见。下面我给你整理一个 <strong>完整概念 + 模板 + 核心思想</strong>，让你一看就懂。</p><hr><h1>✅ <strong>1. 编辑距离的基本概念</strong></h1><ul><li>给定两个字符串 <code>A</code>（长度 n）和 <code>B</code>（长度 m）</li><li>允许三种操作把 <code>A</code> 变成 <code>B</code>：<ol><li><strong>插入</strong>一个字符</li><li><strong>删除</strong>一个字符</li><li><strong>替换</strong>一个字符</li></ol></li><li><strong>目标</strong>：最少操作次数 → 这就是“编辑距离”（Levenshtein distance）</li></ul><hr><h1>✅ <strong>2. DP 状态定义</strong></h1><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dp[i][j] = 将 A[1..i] 变成 B[1..j] 的最少操作次数</span><br></pre></td></tr></table></figure><hr><h1>✅ <strong>3. 状态转移方程</strong></h1><ol><li>如果 A[i] == B[j] → 不需要操作：</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dp[i][j] = dp[i-1][j-1]</span><br></pre></td></tr></table></figure><ol><li>否则可以：</li></ol><ul><li>插入 B[j] → <code>dp[i][j-1] + 1</code></li><li>删除 A[i] → <code>dp[i-1][j] + 1</code></li><li>替换 A[i] → <code>dp[i-1][j-1] + 1</code></li></ul><p>综合：</p><figure class="highlight text"><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">dp[i][j] = min(</span><br><span class="line">    dp[i-1][j] + 1,    // 删除</span><br><span class="line">    dp[i][j-1] + 1,    // 插入</span><br><span class="line">    dp[i-1][j-1] + (A[i]==B[j]?0:1) // 替换或相等</span><br><span class="line">)</span><br></pre></td></tr></table></figure><hr><h1>✅ <strong>4. 边界条件</strong></h1><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">dp[<span class="number">0</span>][<span class="number">0</span>] = <span class="number">0</span>;       <span class="comment">// 空字符串变空字符串 = 0</span></span><br><span class="line">dp[i][<span class="number">0</span>] = i;       <span class="comment">// A[1..i] → &quot;&quot; 需要删除 i 次</span></span><br><span class="line">dp[<span class="number">0</span>][j] = j;       <span class="comment">// &quot;&quot; → B[1..j] 需要插入 j 次</span></span><br></pre></td></tr></table></figure><hr><h1>✅ <strong>5. C++ 典型模板</strong></h1><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></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> n = A.<span class="built_in">size</span>(), m = B.<span class="built_in">size</span>();</span><br><span class="line">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(n<span class="number">+1</span>, <span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(m<span class="number">+1</span>, <span class="number">0</span>));</span><br><span class="line"></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">0</span>; i &lt;= n; i++) dp[i][<span class="number">0</span>] = i;</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++) dp[<span class="number">0</span>][j] = j;</span><br><span class="line"></span><br><span class="line"><span class="comment">// DP 计算</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">for</span> (<span class="type">int</span> j = <span class="number">1</span>; j &lt;= m; j++) &#123;</span><br><span class="line">        <span class="keyword">if</span> (A[i<span class="number">-1</span>] == B[j<span class="number">-1</span>]) dp[i][j] = dp[i<span class="number">-1</span>][j<span class="number">-1</span>];</span><br><span class="line">        <span class="keyword">else</span> dp[i][j] = <span class="built_in">min</span>(&#123;dp[i<span class="number">-1</span>][j]<span class="number">+1</span>, dp[i][j<span class="number">-1</span>]<span class="number">+1</span>, dp[i<span class="number">-1</span>][j<span class="number">-1</span>]<span class="number">+1</span>&#125;);</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="type">int</span> edit_distance = dp[n][m];</span><br></pre></td></tr></table></figure><hr><h1>✅ <strong>6. 常见变种</strong></h1><ol><li><strong>只允许插入/删除</strong> → 常用于 LCS（最长公共子序列）</li><li><strong>带权操作</strong> → 可以给删除、插入、替换不同代价</li><li><strong>打印编辑步骤</strong> → 通过回溯 dp 矩阵</li><li><strong>空间优化</strong> → 只保留上一行 dp → O(min(n,m)) 空间</li></ol><hr><h1>🔹 <strong>7. 小技巧/记忆口诀</strong></h1><ul><li>dp[i][j] → A 前 i 个字符变成 B 前 j 个字符</li><li>三种操作：<strong>删/增/替换</strong> → min 三个状态</li><li>相等不操作 → <code>dp[i][j] = dp[i-1][j-1]</code></li><li>初始化 <code>dp[0][j] = j, dp[i][0] = i</code></li></ul></blockquote><h4 id="判断子序列">判断子序列</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">isSubsequence</span><span class="params">(string s, string t)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=s.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> m=t.<span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(n<span class="number">+1</span>,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(m<span class="number">+1</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">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;=m;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (s[i<span class="number">-1</span>]==t[j<span class="number">-1</span>])&#123;</span><br><span class="line">                    dp[i][j]=dp[i<span class="number">-1</span>][j<span class="number">-1</span>]<span class="number">+1</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    dp[i][j]=dp[i][j<span class="number">-1</span>];<span class="comment">//记得注意和原本那个最长子序列的差别。</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="keyword">if</span> (dp[n][m]==n) <span class="keyword">return</span> <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><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>感觉已经像一个模板了</p><h4 id="两个字符串的增删操作">两个字符串的增删操作</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">minDistance</span><span class="params">(string word1, string word2)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=word<span class="number">1.</span><span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> m=word<span class="number">2.</span><span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(n<span class="number">+1</span>,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(m<span class="number">+1</span>));</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;=n;i++)&#123;</span><br><span class="line">            dp[i][<span class="number">0</span>]=i;</span><br><span class="line">        &#125;</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">            dp[<span class="number">0</span>][j]=j;</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="keyword">for</span> (<span class="type">int</span> j=<span class="number">1</span>;j&lt;=m;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (word1[i<span class="number">-1</span>]==word2[j<span class="number">-1</span>])&#123;</span><br><span class="line">                    dp[i][j]=dp[i<span class="number">-1</span>][j<span class="number">-1</span>];</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    dp[i][j]=<span class="built_in">min</span>(dp[i<span class="number">-1</span>][j]<span class="number">+1</span>,dp[i][j<span class="number">-1</span>]<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">        <span class="keyword">return</span> dp[n][m];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;<span class="comment">//本质上是字符串匹配问题的变种</span></span><br></pre></td></tr></table></figure><p>事实上就是用双重的循环去比较字符串，分为相同和不相同两种情况分别对进行动态规划。</p><h4 id="真-编辑距离">真 编辑距离</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">minDistance</span><span class="params">(string word1, string word2)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=word<span class="number">1.</span><span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> m=word<span class="number">2.</span><span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(n<span class="number">+1</span>,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(m<span class="number">+1</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">1</span>;i&lt;=n;i++)&#123;</span><br><span class="line">            dp[i][<span class="number">0</span>]=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;=m;i++)&#123;</span><br><span class="line">            dp[<span class="number">0</span>][i]=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="keyword">for</span> (<span class="type">int</span> j=<span class="number">1</span>;i&lt;=m;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (word1[i<span class="number">-1</span>]==word2[j<span class="number">-1</span>])&#123;</span><br><span class="line">                    dp[i][j]=dp[i<span class="number">-1</span>][j<span class="number">-1</span>];</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    dp[i][j]=<span class="built_in">min</span>(&#123;dp[i<span class="number">-1</span>][j],dp[i][j<span class="number">-1</span>],dp[i<span class="number">-1</span>][j<span class="number">-1</span>]&#125;)<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">        <span class="keyword">return</span> dp[n][m];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>第一步：面向答案，开始进行dp的定义</p><p>第二步：初始化</p><p>第三步：考虑相等和不相等的情况。</p><p>第四步：面向答案编程（</p><h3 id="回文类">回文类</h3><h4 id="回文字串">回文字串</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">countSubstrings</span><span class="params">(string s)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=s.<span class="built_in">size</span>();</span><br><span class="line">        vector&lt;vector&lt;<span class="type">bool</span>&gt;&gt; <span class="built_in">dp</span>(n,<span class="built_in">vector</span>&lt;<span class="type">bool</span>&gt;(n,<span class="number">0</span>));</span><br><span class="line">        <span class="type">int</span> ans=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j=i;j&lt;n;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (s[i]==s[j])&#123;</span><br><span class="line">                    <span class="keyword">if</span> (j-i&lt;=<span class="number">1</span>)&#123;</span><br><span class="line">                        ans++;</span><br><span class="line">                        dp[i][j]=<span class="number">1</span>;</span><br><span class="line">                    &#125;<span class="keyword">else</span> <span class="keyword">if</span>(dp[i<span class="number">+1</span>][j<span class="number">-1</span>])&#123;</span><br><span class="line">                        ans++;</span><br><span class="line">                        dp[i][j]=<span class="number">1</span>;</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    dp[i][j]=<span class="number">0</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="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h4 id="最长回文子序列">最长回文子序列</h4><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">longestPalindromeSubseq</span><span class="params">(string s)</span> </span>&#123;</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">dp</span>(s.<span class="built_in">size</span>(), <span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(s.<span class="built_in">size</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; s.<span class="built_in">size</span>(); i++) dp[i][i] = <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = s.<span class="built_in">size</span>() - <span class="number">1</span>; i &gt;= <span class="number">0</span>; i--) &#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = i + <span class="number">1</span>; j &lt; s.<span class="built_in">size</span>(); j++) &#123;</span><br><span class="line">                <span class="keyword">if</span> (s[i] == s[j]) &#123;</span><br><span class="line">                    dp[i][j] = dp[i + <span class="number">1</span>][j - <span class="number">1</span>] + <span class="number">2</span>;</span><br><span class="line">                &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                    dp[i][j] = <span class="built_in">max</span>(dp[i + <span class="number">1</span>][j], dp[i][j - <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">        <span class="keyword">return</span> dp[<span class="number">0</span>][s.<span class="built_in">size</span>() - <span class="number">1</span>];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="总结">总结</h3><p><img src="https://s3.bmp.ovh/imgs/2025/11/21/b39db20358fb987c.png" alt></p><h2 id="单调栈">单调栈</h2><h3 id="每日温度">每日温度</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><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dailyTemperatures</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; temperatures)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=temperatures.<span class="built_in">size</span>();</span><br><span class="line">        stack&lt;<span class="type">int</span>&gt; st;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">ans</span><span class="params">(n)</span></span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">            <span class="keyword">while</span> (!st.<span class="built_in">empty</span>()&amp;&amp;temperatures[st.<span class="built_in">top</span>()]&lt;=temperatures[i])&#123;</span><br><span class="line">                st.<span class="built_in">pop</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            ans[i]=st.<span class="built_in">empty</span>()?<span class="number">0</span>:st.<span class="built_in">top</span>()-i;</span><br><span class="line">            st.<span class="built_in">push</span>(i);</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">&#125;;</span><br></pre></td></tr></table></figure><h3 id="下一个更大的元素">下一个更大的元素</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><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">nextGreaterElement</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums1, vector&lt;<span class="type">int</span>&gt;&amp; nums2)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n = nums<span class="number">1.</span><span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> m = nums<span class="number">2.</span><span class="built_in">size</span>();</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">ans</span><span class="params">(n, <span class="number">-1</span>)</span></span>;</span><br><span class="line">        unordered_map&lt;<span class="type">int</span>, <span class="type">int</span>&gt; nextGreater;</span><br><span class="line">        stack&lt;<span class="type">int</span>&gt; st;  <span class="comment">// 单调递减栈（存 nums2 的值）</span></span><br><span class="line"></span><br><span class="line">        <span class="comment">// 从右往左遍历 nums2</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = m - <span class="number">1</span>; i &gt;= <span class="number">0</span>; i--) &#123;</span><br><span class="line">            <span class="type">int</span> x = nums2[i];</span><br><span class="line">            <span class="comment">// 栈顶 &lt;= 当前元素，说明栈顶不是它的下一个更大值</span></span><br><span class="line">            <span class="keyword">while</span> (!st.<span class="built_in">empty</span>() &amp;&amp; st.<span class="built_in">top</span>() &lt;= x) &#123;</span><br><span class="line">                st.<span class="built_in">pop</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="comment">// 栈顶即为右边第一个比 x 大的元素</span></span><br><span class="line">            nextGreater[x] = st.<span class="built_in">empty</span>() ? <span class="number">-1</span> : st.<span class="built_in">top</span>();</span><br><span class="line">            st.<span class="built_in">push</span>(x);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 查询 nums1</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; i++) &#123;</span><br><span class="line">            ans[i] = nextGreater[nums1[i]];</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>这个模板依旧没差，这个讲的跟清楚，单调栈其实就是记录已经遍历过的元素。</p><h3 id="下一个更大的元素（变式一）">下一个更大的元素（变式一）</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><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">nextGreaterElements</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n = nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">ans</span><span class="params">(n, <span class="number">-1</span>)</span></span>;</span><br><span class="line">        stack&lt;<span class="type">int</span>&gt; st;</span><br><span class="line"></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">2</span> * n - <span class="number">1</span>; i &gt;= <span class="number">0</span>; i--) &#123;</span><br><span class="line">            <span class="type">int</span> idx = i % n;  <span class="comment">// 当前真实下标（循环取模）</span></span><br><span class="line"></span><br><span class="line">            <span class="comment">// 弹出所有比当前值小或相等的元素</span></span><br><span class="line">            <span class="keyword">while</span> (!st.<span class="built_in">empty</span>() &amp;&amp; nums[st.<span class="built_in">top</span>()] &lt;= nums[idx]) &#123;</span><br><span class="line">                st.<span class="built_in">pop</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="keyword">if</span> (!st.<span class="built_in">empty</span>()) &#123;</span><br><span class="line">                ans[idx] = nums[st.<span class="built_in">top</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">            st.<span class="built_in">push</span>(idx);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="接雨水">接雨水</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">trap</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; height)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n = height.<span class="built_in">size</span>();</span><br><span class="line">        stack&lt;<span class="type">int</span>&gt; st;</span><br><span class="line">        <span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; i++) &#123;</span><br><span class="line">            <span class="keyword">while</span> (!st.<span class="built_in">empty</span>() &amp;&amp; height[i] &gt; height[st.<span class="built_in">top</span>()]) &#123;</span><br><span class="line">                <span class="type">int</span> mid = st.<span class="built_in">top</span>(); </span><br><span class="line">                st.<span class="built_in">pop</span>();</span><br><span class="line">                <span class="keyword">if</span> (st.<span class="built_in">empty</span>()) <span class="keyword">break</span>; <span class="comment">// 没左挡板</span></span><br><span class="line">                <span class="type">int</span> left = st.<span class="built_in">top</span>();</span><br><span class="line">                <span class="type">int</span> width = i - left - <span class="number">1</span>;</span><br><span class="line">                <span class="type">int</span> h = <span class="built_in">min</span>(height[left], height[i]) - height[mid];</span><br><span class="line">                ans += width * h;</span><br><span class="line">            &#125;</span><br><span class="line">            st.<span class="built_in">push</span>(i);</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">&#125;;</span><br></pre></td></tr></table></figure><h3 id="柱形图中最大的矩形">柱形图中最大的矩形</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">largestRectangleArea</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; h)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=h.<span class="built_in">size</span>();</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">arr1</span><span class="params">(n<span class="number">+2</span>)</span></span>;<span class="comment">//左边</span></span><br><span class="line">        stack&lt;<span class="type">int</span>&gt; st1;</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">while</span> (!st<span class="number">1.</span><span class="built_in">empty</span>()&amp;&amp;h[st<span class="number">1.</span><span class="built_in">top</span>()]&gt;=h[i])&#123;</span><br><span class="line">                st<span class="number">1.</span><span class="built_in">pop</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            arr1[i]=st<span class="number">1.</span><span class="built_in">empty</span>()?<span class="number">-1</span>:st<span class="number">1.</span><span class="built_in">top</span>();</span><br><span class="line">            st<span class="number">1.</span><span class="built_in">push</span>(i);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">arr2</span><span class="params">(n<span class="number">+2</span>)</span></span>;<span class="comment">//右边</span></span><br><span class="line">        stack&lt;<span class="type">int</span>&gt; st2;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">            <span class="keyword">while</span> (!st<span class="number">2.</span><span class="built_in">empty</span>()&amp;&amp;h[st<span class="number">2.</span><span class="built_in">top</span>()]&gt;=h[i])&#123;</span><br><span class="line">                st<span class="number">2.</span><span class="built_in">pop</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            arr2[i]=st<span class="number">2.</span><span class="built_in">empty</span>()?n:st<span class="number">2.</span><span class="built_in">top</span>();</span><br><span class="line">            st<span class="number">2.</span><span class="built_in">push</span>(i);</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="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            ans=<span class="built_in">max</span>(ans,(arr2[i]-arr1[i]<span class="number">-1</span>)*h[i]);</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">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="comment">//版本二</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">largestRectangleArea</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; heights)</span> </span>&#123;</span><br><span class="line">        stack&lt;<span class="type">int</span>&gt; st;</span><br><span class="line">        heights.<span class="built_in">insert</span>(heights.<span class="built_in">begin</span>(), <span class="number">0</span>); <span class="comment">// 数组头部加入元素0</span></span><br><span class="line">        heights.<span class="built_in">push_back</span>(<span class="number">0</span>); <span class="comment">// 数组尾部加入元素0</span></span><br><span class="line">        st.<span class="built_in">push</span>(<span class="number">0</span>);</span><br><span class="line">        <span class="type">int</span> result = <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; heights.<span class="built_in">size</span>(); i++) &#123;</span><br><span class="line">            <span class="keyword">while</span> (heights[i] &lt; heights[st.<span class="built_in">top</span>()]) &#123;</span><br><span class="line">                <span class="type">int</span> mid = st.<span class="built_in">top</span>();</span><br><span class="line">                st.<span class="built_in">pop</span>();</span><br><span class="line">                <span class="type">int</span> w = i - st.<span class="built_in">top</span>() - <span class="number">1</span>;</span><br><span class="line">                <span class="type">int</span> h = heights[mid];</span><br><span class="line">                result = <span class="built_in">max</span>(result, w * h);</span><br><span class="line">            &#125;</span><br><span class="line">            st.<span class="built_in">push</span>(i);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> result;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>版本二和接雨水很类似，感觉可以背一下板子。</p><h2 id="图论">图论</h2><p>由于主播已经学过DFS和BFS了，因此不多赘述这个基本概念。</p><h3 id="可达路径">可达路径</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><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></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 class="type">int</span> n,m;</span><br><span class="line">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; ans;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; path;</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> start,vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; &amp;mp)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (start==n)&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(path);</span><br><span class="line">        <span class="keyword">return</span>;</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="keyword">if</span> (mp[start][i]==<span class="number">1</span>)&#123;</span><br><span class="line">            path.<span class="built_in">push_back</span>(i);</span><br><span class="line">            <span class="built_in">dfs</span>(i,mp);</span><br><span class="line">            path.<span class="built_in">pop_back</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="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">mp</span>(n<span class="number">+1</span>,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(n<span class="number">+1</span>));</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        <span class="type">int</span> x,y;</span><br><span class="line">        cin&gt;&gt;x&gt;&gt;y;</span><br><span class="line">        mp[x][y]=<span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    path.<span class="built_in">push_back</span>(<span class="number">1</span>);</span><br><span class="line">    <span class="built_in">dfs</span>(<span class="number">1</span>,mp);</span><br><span class="line">    <span class="keyword">if</span> (ans.<span class="built_in">size</span>()==<span class="number">0</span>)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;-1&quot;</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><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</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;ans[i].<span class="built_in">size</span>();j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (j==ans[i].<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">                cout&lt;&lt;ans[i][j]&lt;&lt;endl;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                cout&lt;&lt;ans[i][j]&lt;&lt;<span class="string">&quot; &quot;</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="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>很典型的DFS模板题</p><h3 id="岛屿类">岛屿类</h3><h4 id="岛屿统计">岛屿统计</h4><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><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></pre></td><td class="code"><pre><span class="line"><span class="comment">//DFS</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">int</span> xx[<span class="number">4</span>]=&#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> yy[<span class="number">4</span>]=&#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 class="type">int</span> mp[<span class="number">55</span>][<span class="number">55</span>];</span><br><span class="line"><span class="type">int</span> n,m;</span><br><span class="line"><span class="type">int</span> vis[<span class="number">55</span>][<span class="number">55</span>];</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> x,<span class="type">int</span> y)</span></span>&#123;</span><br><span class="line">    vis[x][y]=<span class="number">1</span>;<span class="comment">//这边要开局就标记</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="type">int</span> dx=x+xx[i];</span><br><span class="line">        <span class="type">int</span> dy=y+yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx&lt;<span class="number">0</span>||dx&gt;=n||dy&lt;<span class="number">0</span>||dy&gt;=m||vis[dx][dy]||mp[dx][dy]==<span class="number">0</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">dfs</span>(dx,dy);</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">    cin&gt;&gt;n&gt;&gt;m;</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;m;j++)&#123;</span><br><span class="line">            cin&gt;&gt;mp[i][j];</span><br><span class="line">        &#125;</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="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;m;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (mp[i][j]==<span class="number">1</span>&amp;&amp;!vis[i][j])&#123;</span><br><span class="line">                ans++;</span><br><span class="line">                <span class="built_in">dfs</span>(i,j);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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><span class="line"></span><br><span class="line"><span class="comment">//BFS</span></span><br><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;vector&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="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> dir[<span class="number">4</span>][<span class="number">2</span>] = &#123;<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">0</span>, <span class="number">-1</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">-1</span>&#125;; <span class="comment">// 四个方向</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">bfs</span><span class="params">(<span class="type">const</span> vector&lt;vector&lt;<span class="type">int</span>&gt;&gt;&amp; grid, vector&lt;vector&lt;<span class="type">bool</span>&gt;&gt;&amp; visited, <span class="type">int</span> x, <span class="type">int</span> y)</span> </span>&#123;</span><br><span class="line">    queue&lt;pair&lt;<span class="type">int</span>, <span class="type">int</span>&gt;&gt; que;</span><br><span class="line">    que.<span class="built_in">push</span>(&#123;x, y&#125;);</span><br><span class="line">    visited[x][y] = <span class="literal">true</span>; <span class="comment">// 只要加入队列，立刻标记</span></span><br><span class="line">    <span class="keyword">while</span>(!que.<span class="built_in">empty</span>()) &#123;</span><br><span class="line">        pair&lt;<span class="type">int</span> ,<span class="type">int</span>&gt; cur = que.<span class="built_in">front</span>(); que.<span class="built_in">pop</span>();</span><br><span class="line">        <span class="type">int</span> curx = cur.first;</span><br><span class="line">        <span class="type">int</span> cury = cur.second;</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> nextx = curx + dir[i][<span class="number">0</span>];</span><br><span class="line">            <span class="type">int</span> nexty = cury + dir[i][<span class="number">1</span>];</span><br><span class="line">            <span class="keyword">if</span> (nextx &lt; <span class="number">0</span> || nextx &gt;= grid.<span class="built_in">size</span>() || nexty &lt; <span class="number">0</span> || nexty &gt;= grid[<span class="number">0</span>].<span class="built_in">size</span>()) <span class="keyword">continue</span>;  <span class="comment">// 越界了，直接跳过</span></span><br><span class="line">            <span class="keyword">if</span> (!visited[nextx][nexty] &amp;&amp; grid[nextx][nexty] == <span class="number">1</span>) &#123;</span><br><span class="line">                que.<span class="built_in">push</span>(&#123;nextx, nexty&#125;);</span><br><span class="line">                visited[nextx][nexty] = <span class="literal">true</span>; <span class="comment">// 只要加入队列立刻标记</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"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="type">int</span> n, m;</span><br><span class="line">    cin &gt;&gt; n &gt;&gt; m;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">grid</span>(n, <span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(m, <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; 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; m; j++) &#123;</span><br><span class="line">            cin &gt;&gt; grid[i][j];</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    vector&lt;vector&lt;<span class="type">bool</span>&gt;&gt; <span class="built_in">visited</span>(n, <span class="built_in">vector</span>&lt;<span class="type">bool</span>&gt;(m, <span class="literal">false</span>));</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> result = <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; 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; m; j++) &#123;</span><br><span class="line">            <span class="keyword">if</span> (!visited[i][j] &amp;&amp; grid[i][j] == <span class="number">1</span>) &#123;</span><br><span class="line">                result++; <span class="comment">// 遇到没访问过的陆地，+1</span></span><br><span class="line">                <span class="built_in">bfs</span>(grid, visited, i, j); <span class="comment">// 将与其链接的陆地都标记上 true</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><br><span class="line"></span><br><span class="line">    cout &lt;&lt; result &lt;&lt; endl;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>很模板很公式</p><h4 id="最大岛屿">最大岛屿</h4><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 class="type">int</span> xx[<span class="number">4</span>]=&#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> yy[<span class="number">4</span>]=&#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 class="type">int</span> mp[<span class="number">55</span>][<span class="number">55</span>];</span><br><span class="line"><span class="type">int</span> n,m;</span><br><span class="line"><span class="type">int</span> vis[<span class="number">55</span>][<span class="number">55</span>];</span><br><span class="line"><span class="type">int</span> cnt;</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> x,<span class="type">int</span> y)</span></span>&#123;</span><br><span class="line">    vis[x][y]=<span class="number">1</span>;</span><br><span class="line">    cnt++;</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> dx=x+xx[i];</span><br><span class="line">        <span class="type">int</span> dy=y+yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx&lt;<span class="number">0</span>||dx&gt;=n||dy&lt;<span class="number">0</span>||dy&gt;=m||vis[dx][dy]||mp[dx][dy]==<span class="number">0</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">dfs</span>(dx,dy);</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">    cin&gt;&gt;n&gt;&gt;m;</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;m;j++)&#123;</span><br><span class="line">            cin&gt;&gt;mp[i][j];</span><br><span class="line">        &#125;</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="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;m;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (mp[i][j]==<span class="number">1</span>&amp;&amp;!vis[i][j])&#123;</span><br><span class="line">                cnt=<span class="number">0</span>;</span><br><span class="line">                <span class="built_in">dfs</span>(i,j);</span><br><span class="line">                ans=<span class="built_in">max</span>(ans,cnt);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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>dfs的作用是打标记，一旦遇到一个合理的节点，立刻启动下一层递归，因此我们可以在递归开始就收集答案并且计数。</p><h4 id="岛屿面积">岛屿面积</h4><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></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 class="type">int</span> xx[<span class="number">4</span>]=&#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> yy[<span class="number">4</span>]=&#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 class="type">int</span> mp[<span class="number">55</span>][<span class="number">55</span>];</span><br><span class="line"><span class="type">int</span> n,m;</span><br><span class="line"><span class="type">int</span> vis[<span class="number">55</span>][<span class="number">55</span>];</span><br><span class="line"><span class="type">int</span> cnt;</span><br><span class="line"><span class="type">int</span> sum;</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> x,<span class="type">int</span> y)</span></span>&#123;</span><br><span class="line">    vis[x][y]=<span class="number">1</span>;</span><br><span class="line">    sum++;</span><br><span class="line">    <span class="keyword">if</span>  (x==<span class="number">0</span>||x==n<span class="number">-1</span>||y==<span class="number">0</span>||y==m<span class="number">-1</span>)&#123;</span><br><span class="line">        cnt=<span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;<span class="number">4</span>;i++)&#123;</span><br><span class="line">        <span class="type">int</span> dx=x+xx[i];</span><br><span class="line">        <span class="type">int</span> dy=y+yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx&lt;<span class="number">0</span>||dx&gt;=n||dy&lt;<span class="number">0</span>||dy&gt;=m||vis[dx][dy]||mp[dx][dy]==<span class="number">0</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">dfs</span>(dx,dy);</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">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    <span class="type">int</span> ans=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="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;m;j++)&#123;</span><br><span class="line">            cin&gt;&gt;mp[i][j];</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">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;m;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (mp[i][j]==<span class="number">1</span>&amp;&amp;!vis[i][j])&#123;</span><br><span class="line">                cnt=<span class="number">1</span>;</span><br><span class="line">                sum=<span class="number">0</span>;</span><br><span class="line">                <span class="built_in">dfs</span>(i,j);</span><br><span class="line">                <span class="keyword">if</span> (cnt==<span class="number">1</span>)&#123;</span><br><span class="line">                    ans+=sum;</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">    cout&lt;&lt;ans&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><h4 id="沉没孤岛">沉没孤岛</h4><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></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 class="type">int</span> xx[<span class="number">4</span>]=&#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> yy[<span class="number">4</span>]=&#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 class="type">int</span> mp[<span class="number">55</span>][<span class="number">55</span>];</span><br><span class="line"><span class="type">int</span> n,m;</span><br><span class="line"><span class="type">int</span> vis[<span class="number">55</span>][<span class="number">55</span>];</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> x,<span class="type">int</span> y)</span></span>&#123;</span><br><span class="line">    vis[x][y]=<span class="number">1</span>;</span><br><span class="line">    mp[x][y]=<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">4</span>;i++)&#123;</span><br><span class="line">        <span class="type">int</span> dx=x+xx[i];</span><br><span class="line">        <span class="type">int</span> dy=y+yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx&lt;<span class="number">0</span>||dx&gt;=n||dy&lt;<span class="number">0</span>||dy&gt;=m||vis[dx][dy]||!mp[dx][dy])&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">dfs</span>(dx,dy);</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">    cin&gt;&gt;n&gt;&gt;m;</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;m;j++)&#123;</span><br><span class="line">            cin&gt;&gt;mp[i][j];</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">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (mp[i][<span class="number">0</span>]==<span class="number">1</span>) <span class="built_in">dfs</span>(i,<span class="number">0</span>);</span><br><span class="line">        <span class="keyword">if</span> (mp[i][m<span class="number">-1</span>]==<span class="number">1</span>) <span class="built_in">dfs</span>(i,m<span class="number">-1</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (mp[<span class="number">0</span>][i]==<span class="number">1</span>) <span class="built_in">dfs</span>(<span class="number">0</span>,i);</span><br><span class="line">        <span class="keyword">if</span> (mp[n<span class="number">-1</span>][i]==<span class="number">1</span>) <span class="built_in">dfs</span>(n<span class="number">-1</span>,i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <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> (mp[i][j]==<span class="number">2</span>)&#123;</span><br><span class="line">                mp[i][j]=<span class="number">1</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(mp[i][j]==<span class="number">1</span>)&#123;</span><br><span class="line">                mp[i][j]=<span class="number">0</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="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;m;j++)&#123;</span><br><span class="line">            cout&lt;&lt;mp[i][j]&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;endl;</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><h4 id="篮球杯淹没岛屿">篮球杯淹没岛屿</h4><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><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></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 class="type">int</span> xx[<span class="number">4</span>]=&#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> yy[<span class="number">4</span>]=&#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 class="type">char</span> mp[<span class="number">1050</span>][<span class="number">1050</span>];</span><br><span class="line"><span class="type">int</span> vis[<span class="number">1050</span>][<span class="number">1050</span>];</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> x,y;</span><br><span class="line">&#125;;</span><br><span class="line">vector&lt;node&gt; b;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">soak</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">4</span>;i++)&#123;</span><br><span class="line">        <span class="type">int</span> dx=x+xx[i];</span><br><span class="line">        <span class="type">int</span> dy=y+yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx&lt;<span class="number">0</span>||dy&lt;<span class="number">0</span>||dx&gt;=n||dy&gt;=n)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">if</span> (mp[dx][dy]==<span class="string">&#x27;.&#x27;</span>)&#123;</span><br><span class="line">                <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">    &#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> x,<span class="type">int</span> y)</span></span>&#123;</span><br><span class="line">    vis[x][y]=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">if</span> (!<span class="built_in">soak</span>(x,y))&#123;</span><br><span class="line">        b.<span class="built_in">push_back</span>((node)&#123;x,y&#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">0</span>;i&lt;<span class="number">4</span>;i++)&#123;</span><br><span class="line">        <span class="type">int</span> dx=x+xx[i];</span><br><span class="line">        <span class="type">int</span> dy=y+yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx&lt;<span class="number">0</span>||dy&lt;<span class="number">0</span>||dx&gt;=n||dy&gt;=n||vis[dx][dy]||mp[dx][dy]==<span class="string">&#x27;.&#x27;</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">dfs</span>(dx,dy);</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">dfs1</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> y)</span></span>&#123;</span><br><span class="line">    vis[x][y]=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;<span class="number">4</span>;i++)&#123;</span><br><span class="line">        <span class="type">int</span> dx=x+xx[i];</span><br><span class="line">        <span class="type">int</span> dy=y+yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx&lt;<span class="number">0</span>||dy&lt;<span class="number">0</span>||dx&gt;=n||dy&gt;=n||vis[dx][dy]||mp[dx][dy]==<span class="string">&#x27;.&#x27;</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">dfs1</span>(dx,dy);</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">    cin&gt;&gt;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++)&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j=<span class="number">0</span>;j&lt;n;j++)&#123;</span><br><span class="line">            cin&gt;&gt;mp[i][j];</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> sum1=<span class="number">0</span>,sum2=<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;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;n;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (mp[i][j]==<span class="string">&#x27;#&#x27;</span>&amp;&amp;!vis[i][j])&#123;</span><br><span class="line">                sum1++;</span><br><span class="line">                <span class="built_in">dfs1</span>(i,j);</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">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">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;n;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (mp[i][j]==<span class="string">&#x27;#&#x27;</span>&amp;&amp;!vis[i][j])&#123;</span><br><span class="line">                <span class="built_in">dfs</span>(i,j);</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">for</span> (<span class="keyword">auto</span> it:b)&#123;</span><br><span class="line">        mp[it.x][it.y]=<span class="string">&#x27;-&#x27;</span>;</span><br><span class="line">    &#125;<span class="comment">//注意这里别直接修改成海，不然的话就会被认为是分裂出了新的岛屿</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">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;n;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (mp[i][j]==<span class="string">&#x27;#&#x27;</span>&amp;&amp;!vis[i][j])&#123;</span><br><span class="line">                sum2++;</span><br><span class="line">                <span class="built_in">dfs1</span>(i,j);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;sum1-sum2&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><em><strong>你要记住，这种题目如果内存不是限制的很死，不要在原图上修改和打标记，真的很容易错。</strong></em></p><p><em><strong>在原图上的标记会有非常非常非常多麻烦的连锁反应，水平不够千万千万千万不要这么干，是特别坏的习惯。</strong></em></p><h4 id="高山流水">高山流水</h4><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></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 class="type">int</span> n,m;</span><br><span class="line"><span class="type">int</span> mp[<span class="number">110</span>][<span class="number">110</span>];</span><br><span class="line"><span class="type">int</span> xx[<span class="number">4</span>]=&#123;<span class="number">0</span>,<span class="number">0</span>,<span class="number">1</span>,<span class="number">-1</span>&#125;,yy[<span class="number">4</span>]=&#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 class="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> x,y;</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> x,<span class="type">int</span> y,vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; &amp;vis)</span></span>&#123;</span><br><span class="line">    vis[x][y]=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;<span class="number">4</span>;i++)&#123;</span><br><span class="line">        <span class="type">int</span> dx=x+xx[i];</span><br><span class="line">        <span class="type">int</span> dy=y+yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx&lt;<span class="number">0</span>||dy&lt;<span class="number">0</span>||dx&gt;=n||dy&gt;=m||vis[dx][dy]||mp[x][y]&gt;mp[dx][dy])&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">dfs</span>(dx,dy,vis);</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">    cin&gt;&gt;n&gt;&gt;m;</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;m;j++)&#123;</span><br><span class="line">            cin&gt;&gt;mp[i][j];</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">vis1</span>(n,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(m,<span class="number">0</span>));</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">vis2</span>(n,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(m,<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;n;i++)&#123;</span><br><span class="line">        <span class="built_in">dfs</span>(i,<span class="number">0</span>,vis1);</span><br><span class="line">        <span class="built_in">dfs</span>(i,m<span class="number">-1</span>,vis2);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        <span class="built_in">dfs</span>(<span class="number">0</span>,i,vis1);</span><br><span class="line">        <span class="built_in">dfs</span>(n<span class="number">-1</span>,i,vis2);</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;node&gt; ans;</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;m;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (vis1[i][j]==<span class="number">1</span>&amp;&amp;vis2[i][j]==<span class="number">1</span>)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>((node)&#123;i,j&#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">for</span> (<span class="keyword">auto</span> it:ans)&#123;</span><br><span class="line">        cout&lt;&lt;it.x&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;it.y&lt;&lt;endl;</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 class="comment">//Can run is ok</span></span><br></pre></td></tr></table></figure><h4 id="引水入城（2024机考压轴题）">引水入城（2024机考压轴题）</h4><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><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></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">int</span> n,m;</span><br><span class="line"><span class="type">int</span> mp[<span class="number">1010</span>][<span class="number">1010</span>];</span><br><span class="line"><span class="type">int</span> vis[<span class="number">1010</span>][<span class="number">1010</span>];</span><br><span class="line"><span class="type">int</span> xx[<span class="number">4</span>]=&#123;<span class="number">0</span>,<span class="number">0</span>,<span class="number">1</span>,<span class="number">-1</span>&#125;,yy[<span class="number">4</span>]=&#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 class="type">int</span> l[<span class="number">1010</span>][<span class="number">1010</span>],r[<span class="number">1010</span>][<span class="number">1010</span>];<span class="comment">//这个用来记录可以覆盖到的左右区间端点，dp用的</span></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> x,<span class="type">int</span> y)</span></span>&#123;</span><br><span class="line">    vis[x][y]=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;<span class="number">4</span>;i++)&#123;</span><br><span class="line">        <span class="type">int</span> dx=x+xx[i];</span><br><span class="line">        <span class="type">int</span> dy=y+yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx&lt;<span class="number">0</span>||dy&lt;<span class="number">0</span>||dx&gt;=n||dy&gt;=m||mp[x][y]&lt;=mp[dx][dy])&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (!vis[dx][dy])&#123;</span><br><span class="line">            <span class="built_in">dfs</span>(dx,dy);</span><br><span class="line">        &#125;</span><br><span class="line">        l[x][y]=<span class="built_in">min</span>(l[x][y],l[dx][dy]);</span><br><span class="line">        r[x][y]=<span class="built_in">max</span>(r[x][y],r[dx][dy]);</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">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    <span class="built_in">memset</span>(l,<span class="number">200000</span>,<span class="built_in">sizeof</span>(l));</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;m;j++)&#123;</span><br><span class="line">            cin&gt;&gt;mp[i][j];</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">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        l[n<span class="number">-1</span>][i]=i;</span><br><span class="line">        r[n<span class="number">-1</span>][i]=i;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (!vis[<span class="number">0</span>][i])&#123;</span><br><span class="line">            <span class="built_in">dfs</span>(<span class="number">0</span>,i);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">bool</span> flag=<span class="number">1</span>;</span><br><span class="line">    <span class="type">int</span> ans=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (vis[n<span class="number">-1</span>][i]==<span class="number">0</span>)&#123;</span><br><span class="line">            flag=<span class="number">0</span>;</span><br><span class="line">            ans++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (!flag)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="number">0</span>&lt;&lt;endl;</span><br><span class="line">        cout&lt;&lt;ans&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><span class="line">    ans=<span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> left=<span class="number">0</span>,right=r[<span class="number">0</span>][<span class="number">0</span>];</span><br><span class="line">    <span class="keyword">while</span> (left&lt;=m<span class="number">-1</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;=m<span class="number">-1</span>;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (l[<span class="number">0</span>][i]&lt;=left)&#123;</span><br><span class="line">                right=<span class="built_in">max</span>(right,r[<span class="number">0</span>][i]);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        left=right<span class="number">+1</span>;</span><br><span class="line">        ans++;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;<span class="number">1</span>&lt;&lt;endl;</span><br><span class="line">    cout&lt;&lt;ans&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>省选，我曾经都不敢直面的题目。</p><p>这题的思路并不难想，弯弯绕绕的不多，大方向是图论，在一些细节处理上存在有小方向的问题。我等下细致的讲一下吧。</p><p>第一次见到这道题的时候，说实话我是望而却步的。它看起来既涉及图论又有动态规划和贪心的影子，感觉思路很复杂，不知道从哪下手。</p><p>后来真正静下心去分析，才发现它的大方向确实是图论问题，但核心思路并不难，只是综合性很强：</p><ul><li>用 DFS 建立从高处流向低处的关系，</li><li>结合动态规划记录每个点能覆盖到的区间，</li><li>最后再用贪心完成最少区间覆盖。</li></ul><p>如果真的要把这一题A出来，真的要对这些前置知识有很深刻的理解（所以还不赶紧接着刷算法）</p><p>DFS可以处理水流问题我们都是知道的，我们可以尝试去枚举每一个最上面的点，然后利用动态规划给出这个点能到的最左和最右区间（我个人感觉这个不动态规划也是可以的，理论可行后面讲），最后就是一个很简单的贪心区间统计问题了。</p><p>我现在讲讲不用DP的思路啊，纯我自己想的，洛谷好像没这种思路。因为不用DP我们每次探索都是一次独立的过程，这个时候我们就需要一个局部的vis数组和一个全局的vis数组，全局的vis数组用来判断最底层是不是都可以被覆盖到，然后我们怎么更新最左侧和最右侧，只要我们在到最后一排的时候更新就行了，多说无益，直接上代码</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><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></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">int</span> n, m;</span><br><span class="line"><span class="type">int</span> mp[<span class="number">1010</span>][<span class="number">1010</span>];</span><br><span class="line"><span class="type">int</span> xx[<span class="number">4</span>] = &#123;<span class="number">0</span>, <span class="number">0</span>, <span class="number">1</span>, <span class="number">-1</span>&#125;, yy[<span class="number">4</span>] = &#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 class="type">int</span> l[<span class="number">1010</span>], r[<span class="number">1010</span>];</span><br><span class="line"><span class="type">bool</span> global_vis[<span class="number">1010</span>][<span class="number">1010</span>]; <span class="comment">// 全局vis数组，用于检查最后一行是否全部被灌溉</span></span><br><span class="line"></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> x, <span class="type">int</span> y, <span class="type">int</span> start, vector&lt;vector&lt;<span class="type">bool</span>&gt;&gt;&amp; local_vis)</span> </span>&#123;</span><br><span class="line">    local_vis[x][y] = <span class="literal">true</span>;</span><br><span class="line">    global_vis[x][y] = <span class="literal">true</span>; <span class="comment">// 同时更新全局vis数组</span></span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span> (x == n<span class="number">-1</span>) &#123;</span><br><span class="line">        l[start] = <span class="built_in">min</span>(y, l[start]);</span><br><span class="line">        r[start] = <span class="built_in">max</span>(y, r[start]);</span><br><span class="line">    &#125;</span><br><span class="line">    </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> dx = x + xx[i];</span><br><span class="line">        <span class="type">int</span> dy = y + yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx &lt; <span class="number">0</span> || dy &lt; <span class="number">0</span> || dx &gt;= n || dy &gt;= m || mp[x][y] &lt;= mp[dx][dy]) &#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (!local_vis[dx][dy]) &#123;</span><br><span class="line">            <span class="built_in">dfs</span>(dx, dy, start, local_vis);</span><br><span class="line">        &#125;</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">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    cin &gt;&gt; n &gt;&gt; m;</span><br><span class="line">    <span class="built_in">memset</span>(l, <span class="number">0x3f</span>, <span class="built_in">sizeof</span>(l)); <span class="comment">// 使用标准的大数初始化</span></span><br><span class="line">    <span class="built_in">memset</span>(r, <span class="number">-1</span>, <span class="built_in">sizeof</span>(r));   <span class="comment">// 初始化r数组</span></span><br><span class="line">    <span class="built_in">memset</span>(global_vis, <span class="number">0</span>, <span class="built_in">sizeof</span>(global_vis)); <span class="comment">// 初始化全局vis数组</span></span><br><span class="line">    </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; m; j++) &#123;</span><br><span class="line">            cin &gt;&gt; mp[i][j];</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">// 为每个起点创建独立的局部vis数组</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; m; i++) &#123;</span><br><span class="line">        vector&lt;vector&lt;<span class="type">bool</span>&gt;&gt; <span class="built_in">local_vis</span>(n, <span class="built_in">vector</span>&lt;<span class="type">bool</span>&gt;(m, <span class="literal">false</span>));</span><br><span class="line">        <span class="keyword">if</span> (!global_vis[<span class="number">0</span>][i]) &#123; <span class="comment">// 如果起点已经被全局标记，可以跳过</span></span><br><span class="line">            <span class="built_in">dfs</span>(<span class="number">0</span>, i, i, local_vis);</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="type">bool</span> flag = <span class="literal">true</span>;</span><br><span class="line">    <span class="type">int</span> uncovered = <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; m; i++) &#123;</span><br><span class="line">        <span class="keyword">if</span> (!global_vis[n<span class="number">-1</span>][i]) &#123;</span><br><span class="line">            flag = <span class="literal">false</span>;</span><br><span class="line">            uncovered++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span> (!flag) &#123;</span><br><span class="line">        cout &lt;&lt; <span class="number">0</span> &lt;&lt; endl;</span><br><span class="line">        cout &lt;&lt; uncovered &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><span class="line">    </span><br><span class="line">    <span class="comment">// 贪心覆盖区间</span></span><br><span class="line">    <span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> left = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (left &lt; m) &#123;</span><br><span class="line">        <span class="type">int</span> right = <span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; m; i++) &#123;</span><br><span class="line">            <span class="keyword">if</span> (l[i] &lt;= left) &#123;</span><br><span class="line">                right = <span class="built_in">max</span>(right, r[i]);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        left = right + <span class="number">1</span>;</span><br><span class="line">        ans++;</span><br><span class="line">    &#125;</span><br><span class="line">    cout &lt;&lt; <span class="number">1</span> &lt;&lt; endl;</span><br><span class="line">    cout &lt;&lt; ans &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 class="comment">//我自己写的思路，让AI补了注释和改了改变量名</span></span><br></pre></td></tr></table></figure><h4 id="建造最大工岛">建造最大工岛</h4><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><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="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">int</span> mp[<span class="number">55</span>][<span class="number">55</span>];</span><br><span class="line"><span class="type">int</span> us[<span class="number">55</span>][<span class="number">55</span>];</span><br><span class="line"><span class="type">int</span> n,m;</span><br><span class="line"><span class="type">int</span> vis[<span class="number">55</span>][<span class="number">55</span>];</span><br><span class="line"><span class="type">int</span> xx[<span class="number">4</span>]=&#123;<span class="number">0</span>,<span class="number">0</span>,<span class="number">-1</span>,<span class="number">1</span>&#125;,yy[<span class="number">4</span>]=&#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 class="type">int</span> cnt;</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> x,<span class="type">int</span> y,<span class="type">int</span> color)</span></span>&#123;</span><br><span class="line">    vis[x][y]=<span class="number">1</span>;</span><br><span class="line">    us[x][y]=color;</span><br><span class="line">    cnt++;</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> dx=x+xx[i];</span><br><span class="line">        <span class="type">int</span> dy=y+yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx&lt;<span class="number">0</span>||dy&lt;<span class="number">0</span>||dx&gt;=n||dy&gt;=m||vis[dx][dy]||mp[dx][dy]==<span class="number">0</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">dfs</span>(dx,dy,color);</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">    cin&gt;&gt;n&gt;&gt;m;</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;m;j++)&#123;</span><br><span class="line">            cin&gt;&gt;mp[i][j];</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; h;</span><br><span class="line">    <span class="type">int</span> idx=<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;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;m;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (!vis[i][j]&amp;&amp;mp[i][j]==<span class="number">1</span>)&#123;</span><br><span class="line">                cnt=<span class="number">0</span>;</span><br><span class="line">                <span class="built_in">dfs</span>(i,j,idx);</span><br><span class="line">                h[idx]=cnt;</span><br><span class="line">                idx++;</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="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">2</span>;i&lt;idx;i++)&#123;</span><br><span class="line">        ans=<span class="built_in">max</span>(ans,h[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <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> (mp[i][j]==<span class="number">0</span>)&#123;</span><br><span class="line">                <span class="type">int</span> sum=<span class="number">1</span>;</span><br><span class="line">                set&lt;<span class="type">int</span>&gt; s;</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">int</span> k=<span class="number">0</span>;k&lt;<span class="number">4</span>;k++)&#123;</span><br><span class="line">                    <span class="type">int</span> dx=i+xx[k];</span><br><span class="line">                    <span class="type">int</span> dy=j+yy[k];</span><br><span class="line">                    <span class="keyword">if</span> (us[dx][dy]!=<span class="number">0</span>&amp;&amp;s.<span class="built_in">find</span>(us[dx][dy])==s.<span class="built_in">end</span>())&#123;</span><br><span class="line">                        sum+=h[us[dx][dy]];</span><br><span class="line">                        s.<span class="built_in">insert</span>(us[dx][dy]);</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;</span><br><span class="line">                ans=<span class="built_in">max</span>(ans,sum);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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><h4 id="海岸线统计">海岸线统计</h4><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><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></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 class="type">int</span> n,m;</span><br><span class="line"><span class="type">int</span> mp[<span class="number">55</span>][<span class="number">55</span>];</span><br><span class="line"><span class="type">int</span> vis[<span class="number">55</span>][<span class="number">55</span>];</span><br><span class="line"><span class="type">int</span> xx[<span class="number">4</span>]=&#123;<span class="number">0</span>,<span class="number">0</span>,<span class="number">-1</span>,<span class="number">1</span>&#125;,yy[<span class="number">4</span>]=&#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 class="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> x,y;</span><br><span class="line">&#125;;</span><br><span class="line">vector&lt;node&gt; b;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">soak</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="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">0</span>;i&lt;<span class="number">4</span>;i++)&#123;</span><br><span class="line">        <span class="type">int</span> dx=x+xx[i];</span><br><span class="line">        <span class="type">int</span> dy=y+yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx&lt;<span class="number">0</span>||dy&lt;<span class="number">0</span>||dx&gt;n<span class="number">+1</span>||dy&gt;m<span class="number">+1</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">if</span> (mp[dx][dy]==<span class="number">0</span>)&#123;</span><br><span class="line">                sum++;</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> sum;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">sea</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">4</span>;i++)&#123;</span><br><span class="line">        <span class="type">int</span> dx=x+xx[i];</span><br><span class="line">        <span class="type">int</span> dy=y+yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx&lt;<span class="number">0</span>||dy&lt;<span class="number">0</span>||dx&gt;n<span class="number">+1</span>||dy&gt;m<span class="number">+1</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">if</span> (mp[dx][dy]==<span class="number">0</span>)&#123;</span><br><span class="line">                <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#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><span class="line"><span class="function"><span class="type">void</span> <span class="title">dfs</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> y)</span></span>&#123;</span><br><span class="line">    vis[x][y]=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">sea</span>(x,y))&#123;</span><br><span class="line">        b.<span class="built_in">push_back</span>((node)&#123;x,y&#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">0</span>;i&lt;<span class="number">4</span>;i++)&#123;</span><br><span class="line">        <span class="type">int</span> dx=x+xx[i];</span><br><span class="line">        <span class="type">int</span> dy=y+yy[i];</span><br><span class="line">        <span class="keyword">if</span> (dx&lt;<span class="number">1</span>||dy&lt;<span class="number">1</span>||dx&gt;n||dy&gt;m||vis[dx][dy]||mp[dx][dy]==<span class="number">0</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">dfs</span>(dx,dy);</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">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    <span class="type">int</span> us[<span class="number">55</span>][<span class="number">55</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">for</span> (<span class="type">int</span> j=<span class="number">1</span>;j&lt;=m;j++)&#123;</span><br><span class="line">            cin&gt;&gt;mp[i][j];</span><br><span class="line">            us[i][j]=mp[i][j];</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;=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;=m;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (mp[i][j]==<span class="number">1</span>&amp;&amp;!vis[i][j])&#123;</span><br><span class="line">                <span class="built_in">dfs</span>(i,j);</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">for</span> (<span class="keyword">auto</span> it:b)&#123;</span><br><span class="line">        us[it.x][it.y]=<span class="number">2</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// for (int i=0;i&lt;n;i++)&#123;</span></span><br><span class="line">    <span class="comment">//     for (int j=0;j&lt;m;j++)&#123;</span></span><br><span class="line">    <span class="comment">//         cout&lt;&lt;us[i][j];</span></span><br><span class="line">    <span class="comment">//     &#125;</span></span><br><span class="line">    <span class="comment">//     cout&lt;&lt;endl;</span></span><br><span class="line">    <span class="comment">// &#125;</span></span><br><span class="line">    <span class="type">int</span> ans=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="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;=m;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (us[i][j]==<span class="number">2</span>)&#123;</span><br><span class="line">                ans+=<span class="built_in">soak</span>(i,j);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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>处理完图把图输出出来先看一眼是一个好习惯喵</p><p>这时候有人就要问了，主播主播，如果有内海怎么办喵，有内海你就从图边缘开始DFS，遇到陆地停止，然后把外海染色就行了。</p><h3 id="字符串迁移（最短路问题）">字符串迁移（最短路问题）</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><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></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 class="type">int</span> n;</span><br><span class="line">string tbe,tend;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    string a;</span><br><span class="line">    <span class="type">int</span> step;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    cin&gt;&gt;tbe&gt;&gt;tend;</span><br><span class="line">    unordered_set&lt;string&gt; lis;</span><br><span class="line">    unordered_set&lt;string&gt; vis;</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">        string b;</span><br><span class="line">        cin&gt;&gt;b;</span><br><span class="line">        lis.<span class="built_in">insert</span>(b);</span><br><span class="line">    &#125;</span><br><span class="line">    queue&lt;node&gt; bfs;</span><br><span class="line">    bfs.<span class="built_in">push</span>((node)&#123;tbe,<span class="number">1</span>&#125;);</span><br><span class="line">    <span class="keyword">while</span> (!bfs.<span class="built_in">empty</span>())&#123;</span><br><span class="line">        string word=bfs.<span class="built_in">front</span>().a;</span><br><span class="line">        <span class="type">int</span> cnt=bfs.<span class="built_in">front</span>().step;</span><br><span class="line">        bfs.<span class="built_in">pop</span>();</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;word.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            string neww=word;</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">26</span>;j++)&#123;</span><br><span class="line">                neww[i]=<span class="string">&#x27;a&#x27;</span>+j;</span><br><span class="line">                <span class="keyword">if</span> (neww==tend)&#123;</span><br><span class="line">                    cout&lt;&lt;cnt<span class="number">+1</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><span class="line">                <span class="keyword">if</span> (lis.<span class="built_in">find</span>(neww)!=lis.<span class="built_in">end</span>()&amp;&amp;vis.<span class="built_in">find</span>(neww)==vis.<span class="built_in">end</span>())&#123;</span><br><span class="line">                    vis.<span class="built_in">insert</span>(neww);</span><br><span class="line">                    bfs.<span class="built_in">push</span>((node)&#123;neww,cnt<span class="number">+1</span>&#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">    cout&lt;&lt;<span class="string">&quot;-1&quot;</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>DFS我自己试过了，解决的思路和这个差不多，但是DFS由于天生就是那种一条路走到黑的，不适合求这种最短路问题，最后也是美美超时。</p><p>DFS和BFS的区别在于，一个是方向导向的，一个是节点导向的，DFS会向一个方向一条路走到黑，而BFS更像是广撒网，把这个节点连接的全部走完了再说。</p><p>你可以理解为，DFS过程就是一条龙一直往一个方向走到黑为止，而BFS的过程就是水面的涟漪，是扩散式的，求最短路为什么BFS更好用，就是因为你可以理解为BFS可以直接往外面扩散，第一次扩散到答案的地方就是最短路了。</p><h3 id="有向图的完全联通">有向图的完全联通</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><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="comment">//DFS版</span></span><br><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">int</span> n,k;</span><br><span class="line"><span class="type">int</span> vis[<span class="number">110</span>];</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> start,vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; &amp;mp)</span></span>&#123;</span><br><span class="line">    vis[start]=<span class="number">1</span>;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; p=mp[start];</span><br><span class="line">    <span class="type">int</span> n=p.<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;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (vis[p[i]]==<span class="number">1</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">dfs</span>(p[i],mp);</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">    cin&gt;&gt;n&gt;&gt;k;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">mp</span>(n);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;k;i++)&#123;</span><br><span class="line">        <span class="type">int</span> a,b;</span><br><span class="line">        cin&gt;&gt;a&gt;&gt;b;</span><br><span class="line">        a--;</span><br><span class="line">        b--;</span><br><span class="line">        mp[a].<span class="built_in">push_back</span>(b);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">dfs</span>(<span class="number">0</span>,mp);</span><br><span class="line">    <span class="type">bool</span> check=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (vis[i]==<span class="number">0</span>)&#123;</span><br><span class="line">            <span class="comment">//cout&lt;&lt;vis[i]&lt;&lt;&quot; &quot;;</span></span><br><span class="line">            check=<span class="number">0</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">//cout&lt;&lt;endl;</span></span><br><span class="line">    <span class="keyword">if</span> (!check)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;-1&quot;</span>&lt;&lt;endl;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;1&quot;</span>&lt;&lt;endl;</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><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></pre></td><td class="code"><pre><span class="line"><span class="comment">//BFS版</span></span><br><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">int</span> n,k;</span><br><span class="line"><span class="type">int</span> vis[<span class="number">110</span>];</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">    cin&gt;&gt;n&gt;&gt;k;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">mp</span>(n);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;k;i++)&#123;</span><br><span class="line">        <span class="type">int</span> a,b;</span><br><span class="line">        cin&gt;&gt;a&gt;&gt;b;</span><br><span class="line">        a--;</span><br><span class="line">        b--;</span><br><span class="line">        mp[a].<span class="built_in">push_back</span>(b);</span><br><span class="line">    &#125;</span><br><span class="line">    queue&lt;<span class="type">int</span>&gt; q;</span><br><span class="line">    q.<span class="built_in">push</span>(<span class="number">0</span>);</span><br><span class="line">    <span class="keyword">while</span> (!q.<span class="built_in">empty</span>())&#123;</span><br><span class="line">        <span class="type">int</span> node=q.<span class="built_in">front</span>();</span><br><span class="line">        q.<span class="built_in">pop</span>();</span><br><span class="line">        vis[node]=<span class="number">1</span>;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; p=mp[node];</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;p.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (!vis[p[i]])&#123;</span><br><span class="line">                q.<span class="built_in">push</span>(p[i]);</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="type">bool</span> check=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (!vis[i])&#123;</span><br><span class="line">            check=<span class="number">0</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (check)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="number">1</span>&lt;&lt;endl;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;-1&quot;</span>&lt;&lt;endl;</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><h3 id="并查集理论基础">并查集理论基础</h3><h4 id="模板">模板</h4><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="type">int</span> n = <span class="number">1005</span>; <span class="comment">// n根据题目中节点数量而定，一般比节点数量大一点就好</span></span><br><span class="line">vector&lt;<span class="type">int</span>&gt; father = <span class="built_in">vector</span>&lt;<span class="type">int</span>&gt; (n, <span class="number">0</span>); <span class="comment">// C++里的一种数组结构</span></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">        father[i] = i;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// 并查集里寻根的过程</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> u)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">return</span> u == father[u] ? u : father[u] = <span class="built_in">find</span>(father[u]); <span class="comment">// 路径压缩</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 判断 u 和 v是否找到同一个根</span></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isSame</span><span class="params">(<span class="type">int</span> u, <span class="type">int</span> v)</span> </span>&#123;</span><br><span class="line">    u = <span class="built_in">find</span>(u);</span><br><span class="line">    v = <span class="built_in">find</span>(v);</span><br><span class="line">    <span class="keyword">return</span> u == v;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 将v-&gt;u 这条边加入并查集</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">join</span><span class="params">(<span class="type">int</span> u, <span class="type">int</span> v)</span> </span>&#123;</span><br><span class="line">    u = <span class="built_in">find</span>(u); <span class="comment">// 寻找u的根</span></span><br><span class="line">    v = <span class="built_in">find</span>(v); <span class="comment">// 寻找v的根</span></span><br><span class="line">    <span class="keyword">if</span> (u == v) <span class="keyword">return</span> ; <span class="comment">// 如果发现根相同，则说明在一个集合，不用两个节点相连直接返回</span></span><br><span class="line">    father[v] = u;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="寻找存在的路线">寻找存在的路线</h4><p>这一题很明显有两种解法，一种是传统DFS/BFS，另外一种是并查集写法，这里不写传统法。</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></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 class="type">int</span> n,m;</span><br><span class="line"><span class="type">int</span> father[<span class="number">110</span>];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">findfather</span><span class="params">(<span class="type">int</span> u)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (u==father[u]) <span class="keyword">return</span> u;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">return</span> father[u]=<span class="built_in">findfather</span>(father[u]);</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">join</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span>&#123;</span><br><span class="line">    a=<span class="built_in">findfather</span>(a);</span><br><span class="line">    b=<span class="built_in">findfather</span>(b);</span><br><span class="line">    <span class="keyword">if</span> (a==b) <span class="keyword">return</span>;</span><br><span class="line">    <span class="keyword">else</span>&#123;</span><br><span class="line">        father[b]=a;</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">isin</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span>&#123;</span><br><span class="line">    a=<span class="built_in">findfather</span>(a);</span><br><span class="line">    b=<span class="built_in">findfather</span>(b);</span><br><span class="line">    <span class="keyword">if</span> (a==b) <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">return</span> <span class="number">0</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">    cin&gt;&gt;n&gt;&gt;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">        father[i]=i;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        <span class="type">int</span> a,b;</span><br><span class="line">        cin&gt;&gt;a&gt;&gt;b;</span><br><span class="line">        <span class="built_in">join</span>(a,b);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> s,d;</span><br><span class="line">    cin&gt;&gt;s&gt;&gt;d;</span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">isin</span>(s,d))&#123;</span><br><span class="line">        cout&lt;&lt;<span class="number">1</span>&lt;&lt;endl;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;<span class="number">0</span>&lt;&lt;endl;</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><h4 id="多余连接">多余连接</h4><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 class="type">int</span> father[<span class="number">1010</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> u)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (u==father[u])&#123;</span><br><span class="line">        <span class="keyword">return</span> u;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">return</span> father[u]=<span class="built_in">find</span>(father[u]);</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">issame</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span>&#123;</span><br><span class="line">    a=<span class="built_in">find</span>(a);</span><br><span class="line">    b=<span class="built_in">find</span>(b);</span><br><span class="line">    <span class="keyword">if</span> (a==b)&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</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">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">join</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span>&#123;</span><br><span class="line">    a=<span class="built_in">find</span>(a);</span><br><span class="line">    b=<span class="built_in">find</span>(b);</span><br><span class="line">    <span class="keyword">if</span> (a==b)&#123;</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        father[b]=a;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> n,s,t;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <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">        father[i]=i;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;s&gt;&gt;t;</span><br><span class="line">        <span class="keyword">if</span> (!<span class="built_in">issame</span>(s,t))&#123;</span><br><span class="line">            <span class="built_in">join</span>(s,t);</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;s&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;t&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><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>思路：不在同一个集合的加入，已经在同一个集合的直接输出。</p><h4 id="多余连接（有向图）">多余连接（有向图）</h4><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><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="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">int</span> n,s,t;</span><br><span class="line"><span class="type">int</span> father[<span class="number">1010</span>];</span><br><span class="line"><span class="type">int</span> in[<span class="number">1010</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">1</span>;i&lt;=n;i++)&#123;</span><br><span class="line">        father[i]=i;</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">find</span><span class="params">(<span class="type">int</span> u)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (u==father[u])&#123;</span><br><span class="line">        <span class="keyword">return</span> u;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">return</span> father[u]=<span class="built_in">find</span>(father[u]);</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">issame</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span>&#123;</span><br><span class="line">    a=<span class="built_in">find</span>(a);</span><br><span class="line">    b=<span class="built_in">find</span>(b);</span><br><span class="line">    <span class="keyword">if</span> (a==b)&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</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">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">join</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span>&#123;</span><br><span class="line">    a=<span class="built_in">find</span>(a);</span><br><span class="line">    b=<span class="built_in">find</span>(b);</span><br><span class="line">    <span class="keyword">if</span> (a==b)&#123;</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        father[b]=a;</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">removetree</span><span class="params">(vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; &amp;edge,<span class="type">int</span> a)</span></span>&#123;</span><br><span class="line">    <span class="built_in">init</span>();</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==a)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">issame</span>(edge[i][<span class="number">0</span>],edge[i][<span class="number">1</span>]))&#123;</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">join</span>(edge[i][<span class="number">0</span>],edge[i][<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">return</span> <span class="number">1</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">removedge</span><span class="params">(vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; &amp;edge)</span></span>&#123;</span><br><span class="line">    <span class="built_in">init</span>();</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">issame</span>(edge[i][<span class="number">0</span>],edge[i][<span class="number">1</span>]))&#123;</span><br><span class="line">            cout&lt;&lt;edge[i][<span class="number">0</span>]&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;edge[i][<span class="number">1</span>];</span><br><span class="line">            <span class="keyword">return</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">join</span>(edge[i][<span class="number">0</span>],edge[i][<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"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; edge;</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;s&gt;&gt;t;</span><br><span class="line">        in[t]++;</span><br><span class="line">        edge.<span class="built_in">push_back</span>(&#123;s,t&#125;);</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; vec;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        <span class="keyword">if</span> (in[edge[i][<span class="number">1</span>]]==<span class="number">2</span>)&#123;</span><br><span class="line">            vec.<span class="built_in">push_back</span>(i);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (vec.<span class="built_in">size</span>()&gt;<span class="number">0</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;vec.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">removetree</span>(edge,vec[i]))&#123;</span><br><span class="line">                cout&lt;&lt;edge[vec[i]][<span class="number">0</span>]&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;edge[vec[i]][<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><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">removedge</span>(edge);</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>顺便补充一下如何找到有向图和无向图里的环</p><blockquote><p>好的，这里是两个 C++ 演示，分别用于无向图和有向图。</p><p>两个例子都使用邻接表来存储图，并都依赖于 <strong>深度优先搜索 (DFS)</strong>。核心区别在于它们如何检测“回边”（back edge）。</p><hr><h2 id="🌳-无向图-Undirected-Graph">🌳 无向图 (Undirected Graph)</h2><p>在无向图中，我们使用一个 <code>visited</code> 数组和一个 <code>parent</code> 变量。当我们访问一个节点 <code>u</code> 时，我们遍历它的邻居 <code>v</code>：</p><ul><li>如果 <code>v</code> 是 <code>u</code> 的父节点，我们忽略它。</li><li>如果 <code>v</code> <strong>不是父节点</strong>，但<strong>已经被访问过</strong> (<code>visited[v] == true</code>)，我们就找到了一个环。</li></ul><p>我们使用一个额外的 <code>path</code> 向量来追踪当前的 DFS 路径，以便在找到环时能立即输出成环节点。</p><p>C++</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><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></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;vector&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;algorithm&gt;</span> <span class="comment">// 用于 std::find</span></span></span><br><span class="line"></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">// 邻接表</span></span><br><span class="line">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; adj;</span><br><span class="line"><span class="comment">// 访问标记</span></span><br><span class="line">vector&lt;<span class="type">bool</span>&gt; visited;</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * @brief 打印环路</span></span><br><span class="line"><span class="comment"> * @param path 当前的DFS路径</span></span><br><span class="line"><span class="comment"> * @param startNode 环的起始节点 (即那个 &quot;已被访问&quot; 的节点)</span></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">printCycle</span><span class="params">(<span class="type">const</span> vector&lt;<span class="type">int</span>&gt;&amp; path, <span class="type">int</span> startNode)</span> </span>&#123;</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;找到环: &quot;</span>;</span><br><span class="line">    <span class="comment">// 从 path 中找到 startNode 第一次出现的位置</span></span><br><span class="line">    <span class="keyword">auto</span> it = <span class="built_in">find</span>(path.<span class="built_in">begin</span>(), path.<span class="built_in">end</span>(), startNode);</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 打印从 startNode 到 path 末尾的所有节点</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> i = it; i != path.<span class="built_in">end</span>(); ++i) &#123;</span><br><span class="line">        cout &lt;&lt; *i &lt;&lt; <span class="string">&quot; -&gt; &quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// 最后再打印一次 startNode，形成闭环</span></span><br><span class="line">    cout &lt;&lt; startNode &lt;&lt; endl;</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="comment"> * @brief 无向图的DFS</span></span><br><span class="line"><span class="comment"> * @param u 当前节点</span></span><br><span class="line"><span class="comment"> * @param parent_node u 的父节点</span></span><br><span class="line"><span class="comment"> * @param path 到达 u 的路径</span></span><br><span class="line"><span class="comment"> * @return bool 是否找到了环</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">dfs_undirected</span><span class="params">(<span class="type">int</span> u, <span class="type">int</span> parent_node, vector&lt;<span class="type">int</span>&gt;&amp; path)</span> </span>&#123;</span><br><span class="line">    visited[u] = <span class="literal">true</span>;</span><br><span class="line">    path.<span class="built_in">push_back</span>(u); <span class="comment">// 将当前节点加入路径</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> v : adj[u]) &#123;</span><br><span class="line">        <span class="comment">// 忽略父节点</span></span><br><span class="line">        <span class="keyword">if</span> (v == parent_node) &#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 情况一：v 已被访问，且不是父节点</span></span><br><span class="line">        <span class="keyword">if</span> (visited[v]) &#123;</span><br><span class="line">            <span class="comment">// 找到了环！v 是环的起点，u 是环的终点</span></span><br><span class="line">            path.<span class="built_in">push_back</span>(v); <span class="comment">// 把环的起点也加进来，方便打印</span></span><br><span class="line">            <span class="built_in">printCycle</span>(path, v);</span><br><span class="line">            path.<span class="built_in">pop_back</span>(); <span class="comment">// 恢复 path 状态（非必须，因为马上要返回 true）</span></span><br><span class="line">            <span class="keyword">return</span> <span class="literal">true</span>; <span class="comment">// 找到环，立即返回</span></span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 情况二：v 未被访问</span></span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">dfs_undirected</span>(v, u, path)) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">true</span>; <span class="comment">// 如果子调用找到了环，也立即返回</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    path.<span class="built_in">pop_back</span>(); <span class="comment">// 回溯：将当前节点移出路径</span></span><br><span class="line">    <span class="keyword">return</span> <span class="literal">false</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="type">int</span> n = <span class="number">6</span>; <span class="comment">// 6个节点 (0 到 5)</span></span><br><span class="line">    adj.<span class="built_in">resize</span>(n);</span><br><span class="line">    visited.<span class="built_in">resize</span>(n, <span class="literal">false</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 构造一个带环的图</span></span><br><span class="line">    <span class="comment">//     0</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">//   |   |</span></span><br><span class="line">    <span class="comment">//   3 - 4</span></span><br><span class="line">    <span class="comment">//   |</span></span><br><span class="line">    <span class="comment">//   5</span></span><br><span class="line">    adj[<span class="number">0</span>].<span class="built_in">push_back</span>(<span class="number">1</span>);</span><br><span class="line">    adj[<span class="number">0</span>].<span class="built_in">push_back</span>(<span class="number">2</span>);</span><br><span class="line">    </span><br><span class="line">    adj[<span class="number">1</span>].<span class="built_in">push_back</span>(<span class="number">0</span>);</span><br><span class="line">    adj[<span class="number">1</span>].<span class="built_in">push_back</span>(<span class="number">2</span>);</span><br><span class="line">    adj[<span class="number">1</span>].<span class="built_in">push_back</span>(<span class="number">3</span>);</span><br><span class="line"></span><br><span class="line">    adj[<span class="number">2</span>].<span class="built_in">push_back</span>(<span class="number">0</span>);</span><br><span class="line">    adj[<span class="number">2</span>].<span class="built_in">push_back</span>(<span class="number">1</span>);</span><br><span class="line">    adj[<span class="number">2</span>].<span class="built_in">push_back</span>(<span class="number">4</span>);</span><br><span class="line"></span><br><span class="line">    adj[<span class="number">3</span>].<span class="built_in">push_back</span>(<span class="number">1</span>);</span><br><span class="line">    adj[<span class="number">3</span>].<span class="built_in">push_back</span>(<span class="number">4</span>);</span><br><span class="line">    adj[<span class="number">3</span>].<span class="built_in">push_back</span>(<span class="number">5</span>);</span><br><span class="line"></span><br><span class="line">    adj[<span class="number">4</span>].<span class="built_in">push_back</span>(<span class="number">2</span>);</span><br><span class="line">    adj[<span class="number">4</span>].<span class="built_in">push_back</span>(<span class="number">3</span>);</span><br><span class="line"></span><br><span class="line">    adj[<span class="number">5</span>].<span class="built_in">push_back</span>(<span class="number">3</span>);</span><br><span class="line"></span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;--- 正在查找无向图中的环 ---&quot;</span> &lt;&lt; endl;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; path;</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">0</span>; i &lt; n; ++i) &#123;</span><br><span class="line">        <span class="keyword">if</span> (!visited[i]) &#123;</span><br><span class="line">            <span class="comment">// 我们只需要找到第一个环</span></span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">dfs_undirected</span>(i, <span class="number">-1</span>, path)) &#123;</span><br><span class="line">                <span class="comment">// 示例可能找到多个环，这里只演示找到的第一个</span></span><br><span class="line">                <span class="comment">// 如 0 -&gt; 1 -&gt; 2 -&gt; 0</span></span><br><span class="line">                <span class="comment">// 或 1 -&gt; 3 -&gt; 4 -&gt; 2 -&gt; 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"></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><hr><h2 id="✈️-有向图-Directed-Graph">✈️ 有向图 (Directed Graph)</h2><p>在有向图中，我们不能只用 <code>visited</code> 数组。我们需要一个数组来追踪<strong>三种状态</strong>：</p><ul><li><code>0</code>: 未访问 (unvisited)</li><li><code>1</code>: <strong>访问中</strong> (visiting / on current recursion stack)</li><li><code>2</code>: 已访问 (visited / processing finished)</li></ul><p>当我们从 <code>u</code> 访问 <code>v</code> 时：</p><ul><li>如果 <code>v</code> 的状态是 <code>1</code> (访问中)，说明 <code>v</code> 是 <code>u</code> 的祖先，我们找到了一个环。</li><li>如果 <code>v</code> 的状态是 <code>2</code> (已访问)，说明 <code>v</code> 属于另一个已处理完的分支，这不是环。</li></ul><p>C++</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><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></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;vector&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;algorithm&gt;</span> <span class="comment">// 用于 std::find</span></span></span><br><span class="line"></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">// 邻接表</span></span><br><span class="line">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; adj_directed;</span><br><span class="line"><span class="comment">// 访问状态: 0=未访问, 1=访问中, 2=已访问</span></span><br><span class="line">vector&lt;<span class="type">int</span>&gt; visited_directed;</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * @brief 打印环路 (与无向图版本相同)</span></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">printCycle_directed</span><span class="params">(<span class="type">const</span> vector&lt;<span class="type">int</span>&gt;&amp; path, <span class="type">int</span> startNode)</span> </span>&#123;</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;找到环: &quot;</span>;</span><br><span class="line">    <span class="keyword">auto</span> it = <span class="built_in">find</span>(path.<span class="built_in">begin</span>(), path.<span class="built_in">end</span>(), startNode);</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> i = it; i != path.<span class="built_in">end</span>(); ++i) &#123;</span><br><span class="line">        cout &lt;&lt; *i &lt;&lt; <span class="string">&quot; -&gt; &quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    cout &lt;&lt; startNode &lt;&lt; endl;</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="comment"> * @brief 有向图的DFS</span></span><br><span class="line"><span class="comment"> * @param u 当前节点</span></span><br><span class="line"><span class="comment"> * @param path 到达 u 的路径</span></span><br><span class="line"><span class="comment"> * @return bool 是否找到了环</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">dfs_directed</span><span class="params">(<span class="type">int</span> u, vector&lt;<span class="type">int</span>&gt;&amp; path)</span> </span>&#123;</span><br><span class="line">    visited_directed[u] = <span class="number">1</span>; <span class="comment">// 标记为 &quot;访问中&quot;</span></span><br><span class="line">    path.<span class="built_in">push_back</span>(u);       <span class="comment">// 加入路径</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> v : adj_directed[u]) &#123;</span><br><span class="line">        <span class="comment">// 情况一：v 正在访问中 (状态为 1)</span></span><br><span class="line">        <span class="keyword">if</span> (visited_directed[v] == <span class="number">1</span>) &#123;</span><br><span class="line">            <span class="comment">// 找到了环！v 是环的起点</span></span><br><span class="line">            path.<span class="built_in">push_back</span>(v);</span><br><span class="line">            <span class="built_in">printCycle_directed</span>(path, v);</span><br><span class="line">            path.<span class="built_in">pop_back</span>();</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 情况二：v 未访问 (状态为 0)</span></span><br><span class="line">        <span class="keyword">if</span> (visited_directed[v] == <span class="number">0</span>) &#123;</span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">dfs_directed</span>(v, path)) &#123;</span><br><span class="line">                <span class="keyword">return</span> <span class="literal">true</span>; <span class="comment">// 子调用找到了环</span></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">// 情况三：v 已访问 (状态为 2)</span></span><br><span class="line">        <span class="comment">// 这是安全的，v 属于已处理完的分支，不是环。</span></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    visited_directed[u] = <span class="number">2</span>; <span class="comment">// 标记为 &quot;已访问完毕&quot;</span></span><br><span class="line">    path.<span class="built_in">pop_back</span>();         <span class="comment">// 回溯：移出路径</span></span><br><span class="line">    <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">&#125;</span><br><span class="line"></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 class="number">5</span>; <span class="comment">// 5个节点 (0 到 4)</span></span><br><span class="line">    adj_directed.<span class="built_in">resize</span>(n);</span><br><span class="line">    visited_directed.<span class="built_in">resize</span>(n, <span class="number">0</span>); <span class="comment">// 初始状态 0</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">// 构造一个带环的图</span></span><br><span class="line">    <span class="comment">// 0 -&gt; 1 -&gt; 2</span></span><br><span class="line">    <span class="comment">//      ^    |</span></span><br><span class="line">    <span class="comment">//      |    v</span></span><br><span class="line">    <span class="comment">//      4 &lt;- 3</span></span><br><span class="line">    adj_directed[<span class="number">0</span>].<span class="built_in">push_back</span>(<span class="number">1</span>);</span><br><span class="line">    adj_directed[<span class="number">1</span>].<span class="built_in">push_back</span>(<span class="number">2</span>);</span><br><span class="line">    adj_directed[<span class="number">2</span>].<span class="built_in">push_back</span>(<span class="number">3</span>);</span><br><span class="line">    adj_directed[<span class="number">3</span>].<span class="built_in">push_back</span>(<span class="number">4</span>);</span><br><span class="line">    adj_directed[<span class="number">4</span>].<span class="built_in">push_back</span>(<span class="number">1</span>); <span class="comment">// 这条边 (4 -&gt; 1) 构成了环 1-2-3-4-1</span></span><br><span class="line"></span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;--- 正在查找有向图中的环 ---&quot;</span> &lt;&lt; endl;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; path;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; ++i) &#123;</span><br><span class="line">        <span class="keyword">if</span> (visited_directed[i] == <span class="number">0</span>) &#123;</span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">dfs_directed</span>(i, path)) &#123;</span><br><span class="line">                <span class="comment">// 示例中会找到 1 -&gt; 2 -&gt; 3 -&gt; 4 -&gt; 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">    </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></blockquote><h3 id="最短路算法">最短路算法</h3><h4 id="prim算法（存点）">prim算法（存点）</h4><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></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">int</span> v,e,v1,v2,val;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;v&gt;&gt;e;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">grid</span>(v<span class="number">+1</span>,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(v<span class="number">+1</span>,<span class="number">10010</span>));</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;e;i++)&#123;</span><br><span class="line">        cin&gt;&gt;v1&gt;&gt;v2&gt;&gt;val;</span><br><span class="line">        grid[v1][v2]=val;</span><br><span class="line">        grid[v2][v1]=val;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">mindist</span><span class="params">(v<span class="number">+1</span>,<span class="number">10010</span>)</span></span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">in</span><span class="params">(v<span class="number">+1</span>,<span class="literal">false</span>)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">1</span>;i&lt;v;i++)&#123;</span><br><span class="line">        <span class="type">int</span> cur=<span class="number">-1</span>;</span><br><span class="line">        <span class="type">int</span> minn=<span class="number">10011</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j=<span class="number">1</span>;j&lt;=v;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (!in[j]&amp;&amp;mindist[j]&lt;minn)&#123;</span><br><span class="line">                minn=mindist[j];</span><br><span class="line">                cur=j;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        in[cur]=<span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j=<span class="number">1</span>;j&lt;=v;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (!in[j]&amp;&amp;grid[cur][j]&lt;mindist[j])&#123;</span><br><span class="line">                mindist[j]=grid[cur][j];</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="type">int</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">2</span>;i&lt;=v;i++)&#123;</span><br><span class="line">        ans+=mindist[i];</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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><h4 id="Kruskal算法（存边）">Kruskal算法（存边）</h4><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><span class="line">60</span><br><span class="line">61</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 class="type">int</span> v,e,v1,v2,val;</span><br><span class="line"><span class="type">int</span> father[<span class="number">1010</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">1</span>;i&lt;=v;i++)&#123;</span><br><span class="line">        father[i]=i;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span>;</span><br><span class="line">&#125;</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> a)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a==father[a])&#123;</span><br><span class="line">        <span class="keyword">return</span> a;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">return</span> father[a]=<span class="built_in">find</span>(father[a]);</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">issame</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span>&#123;</span><br><span class="line">    a=<span class="built_in">find</span>(a);</span><br><span class="line">    b=<span class="built_in">find</span>(b);</span><br><span class="line">    <span class="keyword">if</span> (a==b)&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</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">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">join</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span>&#123;</span><br><span class="line">    a=<span class="built_in">find</span>(a);</span><br><span class="line">    b=<span class="built_in">find</span>(b);</span><br><span class="line">    <span class="keyword">if</span> (a==b)&#123;</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        father[b]=a;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> fr,to,d;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(node a,node b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> a.d&lt;b.d;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;v&gt;&gt;e;</span><br><span class="line">    <span class="built_in">init</span>();</span><br><span class="line">    vector&lt;node&gt; mp;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;e;i++)&#123;</span><br><span class="line">        cin&gt;&gt;v1&gt;&gt;v2&gt;&gt;val;</span><br><span class="line">        mp.<span class="built_in">push_back</span>((node)&#123;v1,v2,val&#125;);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(mp.<span class="built_in">begin</span>(),mp.<span class="built_in">end</span>(),cmp);</span><br><span class="line">    <span class="type">int</span> ans=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:mp)&#123;</span><br><span class="line">        <span class="keyword">if</span> (!<span class="built_in">issame</span>(it.fr,it.to))&#123;</span><br><span class="line">            ans+=it.d;</span><br><span class="line">            <span class="built_in">join</span>(it.fr,it.to);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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><h4 id="拓扑排序">拓扑排序</h4><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 class="type">int</span> n,m;</span><br><span class="line"><span class="type">int</span> in[<span class="number">100010</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">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">g</span>(n<span class="number">+1</span>);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        <span class="type">int</span> u,v;</span><br><span class="line">        cin&gt;&gt;u&gt;&gt;v;</span><br><span class="line">        g[u].<span class="built_in">push_back</span>(v);</span><br><span class="line">        in[v]++;</span><br><span class="line">    &#125;</span><br><span class="line">    queue&lt;<span class="type">int</span>&gt; q;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (in[i]==<span class="number">0</span>)&#123;</span><br><span class="line">            q.<span class="built_in">push</span>(i);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; res;</span><br><span class="line">    <span class="keyword">while</span> (!q.<span class="built_in">empty</span>())&#123;</span><br><span class="line">        <span class="type">int</span> p=q.<span class="built_in">front</span>();</span><br><span class="line">        q.<span class="built_in">pop</span>();</span><br><span class="line">        res.<span class="built_in">push_back</span>(p);</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;g[p].<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            in[g[p][i]]--;</span><br><span class="line">            <span class="keyword">if</span> (in[g[p][i]]==<span class="number">0</span>)&#123;</span><br><span class="line">                q.<span class="built_in">push</span>(g[p][i]);</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> (res.<span class="built_in">size</span>()==n)&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;res.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (i==res.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">                cout&lt;&lt;res[i];</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                cout&lt;&lt;res[i]&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;-1&quot;</span>&lt;&lt;endl;</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><blockquote><p>判断图中有没有环，比找到环并输出它要<strong>更简单</strong>。你不需要 <code>path</code> 栈来追踪路径，只需要在DFS中返回一个布尔值（<code>true</code> 或 <code>false</code>）即可。</p><p>这里介绍两种图最主流的判断方法。</p><hr><h2 id="🌳-无向图-Undirected-Graph-2">🌳 无向图 (Undirected Graph)</h2><p>对于无向图，我们有两种常用方法：</p><h3 id="方法一：DFS-深度优先搜索">方法一：DFS (深度优先搜索)</h3><p>这是最直观的方法，逻辑与上一题类似，但更精简：</p><ol><li>你需要一个 <code>visited</code> 数组和一个在递归时传递的 <code>parent</code>（父节点）参数。</li><li><code>bool dfs(int u, int parent)</code>:<ul><li>标记 <code>visited[u] = true</code>。</li><li>遍历 <code>u</code> 的所有邻居 <code>v</code>：<ul><li><strong>情况一：<code>v == parent</code></strong><ul><li>这是来时的路，忽略。</li></ul></li><li><strong>情况二：<code>visited[v] == true</code></strong> (且 <code>v != parent</code>)<ul><li><strong>找到环！</strong> 你遇到了一个已被访问的、非父节点的节点。立即返回 <code>true</code>。</li></ul></li><li><strong>情况三：<code>visited[v] == false</code></strong><ul><li>递归 <code>dfs(v, u)</code> (此时 <code>u</code> 成为 <code>v</code> 的父节点)。</li><li>如果递归调用返回 <code>true</code>，说明在子树中找到了环，立即返回 <code>true</code>。</li></ul></li></ul></li><li>如果所有邻居都遍历完，没有发现环，返回 <code>false</code>。</li></ul></li></ol><blockquote><p><strong>主函数</strong>：你需要遍历所有节点。如果一个节点 <code>i</code> 尚未访问 (<code>!visited[i]</code>)，就从它开始 <code>dfs(i, -1)</code>。只要<strong>任意一次</strong> <code>dfs</code> 调用返回 <code>true</code>，整个图就存在环。</p></blockquote><h3 id="方法二：并查集-Union-Find">方法二：并查集 (Union-Find)</h3><p>这是一个非常高效的专门用于无向图判环的方法：</p><ol><li>初始化并查集，每个节点都是一个单独的集合。</li><li>遍历图中的<strong>每一条边</strong> <code>(u, v)</code>：<ul><li>调用 <code>find(u)</code> 找到 <code>u</code> 的根节点 <code>rootU</code>。</li><li>调用 <code>find(v)</code> 找到 <code>v</code> 的根节点 <code>rootV</code>。</li><li><strong>判断</strong>：<ul><li>如果 <code>rootU == rootV</code>，说明 <code>u</code> 和 <code>v</code> <strong>已经</strong>在同一个连通分量（集合）里了。现在这条新边 <code>(u, v)</code> 再次连接了它们，<strong>构成了一个环</strong>。立即返回 <code>true</code>。</li><li>如果 <code>rootU != rootV</code>，说明 <code>u</code> 和 <code>v</code> 分属两个不同集合。调用 <code>union(u, v)</code> 合并它们。</li></ul></li></ul></li><li>如果遍历完所有边都没有返回 <code>true</code>，则图中无环，返回 <code>false</code>。</li></ol><hr><h2 id="✈️-有向图-Directed-Graph-2">✈️ 有向图 (Directed Graph)</h2><p>对于有向图，我们也有两种常用方法：</p><h3 id="方法一：DFS-三态标记法">方法一：DFS (三态标记法)</h3><p>这是最经典的方法，你需要一个数组来标记节点的三种状态：</p><ul><li><code>0</code>: <strong>未访问</strong> (unvisited)</li><li><code>1</code>: <strong>访问中</strong> (visiting / on recursion stack)</li><li><code>2</code>: <strong>已访问</strong> (visited / processing finished)</li></ul><ol><li><code>bool dfs(int u)</code>:<ul><li>标记 <code>visited[u] = 1</code> (访问中)。</li><li>遍历 <code>u</code> 的所有邻居 <code>v</code>（<code>u -&gt; v</code>）：<ul><li><strong>情况一：<code>visited[v] == 1</code></strong><ul><li><strong>找到环！</strong> 你访问到了一个也正在&quot;访问中&quot;的节点（即 <code>v</code> 是 <code>u</code> 的祖先）。立即返回 <code>true</code>。</li></ul></li><li><strong>情况二：<code>visited[v] == 0</code></strong><ul><li>递归 <code>dfs(v)</code>。</li><li>如果递归调用返回 <code>true</code>，立即返回 <code>true</code>。</li></ul></li><li><strong>情况三：<code>visited[v] == 2</code></strong><ul><li><code>v</code> 节点已经处理完毕，属于其他分支，不是环。忽略。</li></ul></li></ul></li><li><strong>回溯</strong>：标记 <code>visited[u] = 2</code> (已访问)。</li><li>返回 <code>false</code>。</li></ul></li></ol><blockquote><p><strong>主函数</strong>：同样需要遍历所有节点。如果一个节点 <code>i</code> 的状态是 <code>0</code> (未访问)，就从它开始 <code>dfs(i)</code>。</p></blockquote><h3 id="方法二：拓扑排序-Kahn’s-Algorithm">方法二：拓扑排序 (Kahn’s Algorithm)</h3><p>这个方法基于<strong>入度 (in-degree)</strong>。有向无环图 (DAG) 必定可以进行拓扑排序，反之，如果<strong>无法完成</strong>拓扑排序，则说明图中<strong>有环</strong>。</p><ol><li><strong>计算入度</strong>：计算所有节点的入度（有多少条边指向它）。</li><li><strong>初始化队列</strong>：将所有<strong>入度为 0</strong> 的节点放入一个队列 <code>q</code>。</li><li><strong>计数</strong>：初始化一个计数器 <code>count = 0</code>。</li><li><strong>循环</strong>：<ul><li>当 <code>q</code> 不为空时：<ul><li>出队一个节点 <code>u</code>。</li><li><code>count++</code>。</li><li>遍历 <code>u</code> 的所有邻居 <code>v</code>（<code>u -&gt; v</code>）：<ul><li>将 <code>v</code> 的入度减 1 (<code>indegree[v]--</code>)。</li><li>如果 <code>indegree[v]</code> 变为 0，将 <code>v</code> 入队。</li></ul></li></ul></li></ul></li><li><strong>判断</strong>：<ul><li>循环结束后，比较 <code>count</code> 和图的总节点数 <code>N</code>。</li><li>如果 <code>count == N</code>，说明所有节点都成功入队并出队，拓扑排序完成，<strong>无环</strong>。</li><li>如果 <code>count &lt; N</code>，说明有些节点（在环上）的入度永远无法变为 0，无法入队，<strong>有环</strong>。</li></ul></li></ol></blockquote><h4 id="dijkstra算法">dijkstra算法</h4><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></pre></td><td class="code"><pre><span class="line"><span class="comment">//未优化版</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">int</span> n,m;</span><br><span class="line"><span class="type">int</span> v1,v2,val;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">grid</span>(n<span class="number">+1</span>,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(n<span class="number">+1</span>,INT_MAX));</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">mindist</span><span class="params">(n<span class="number">+1</span>,INT_MAX)</span></span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">vis</span><span class="params">(n<span class="number">+1</span>,<span class="literal">false</span>)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        cin&gt;&gt;v1&gt;&gt;v2&gt;&gt;val;</span><br><span class="line">        grid[v1][v2]=val;</span><br><span class="line">    &#125;</span><br><span class="line">    mindist[<span class="number">1</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">1</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="type">int</span> cur=<span class="number">-1</span>;</span><br><span class="line">        <span class="type">int</span> minn=INT_MAX;</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="keyword">if</span> (!vis[j]&amp;&amp;mindist[j]&lt;minn)&#123;</span><br><span class="line">                cur=j;</span><br><span class="line">                minn=mindist[j];</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        vis[cur]=<span class="literal">true</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="keyword">if</span> (!vis[j]&amp;&amp;grid[cur][j]!=INT_MAX&amp;&amp;mindist[cur]+grid[cur][j]&lt;mindist[j])&#123;</span><br><span class="line">                mindist[j]=grid[cur][j]+mindist[cur];</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> (mindist[n]==INT_MAX)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;-1&quot;</span>&lt;&lt;endl;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;mindist[n]&lt;&lt;endl;</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>思路和prim算法是很相似的，不过一个是处理有向图一个是处理无向图，而且这个算法的mindist是到起源的点。</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="comment">//堆优化版</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">cmp</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">operator</span><span class="params">()</span><span class="params">(<span class="type">const</span> pair&lt;<span class="type">int</span>,<span class="type">int</span>&gt; &amp;a,<span class="type">const</span> pair&lt;<span class="type">int</span>,<span class="type">int</span>&gt; &amp;b)</span></span>&#123;</span><br><span class="line">        <span class="keyword">return</span> a.second&gt;b.second;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> to;</span><br><span class="line">    <span class="type">int</span> v;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="type">int</span> n,m;</span><br><span class="line"><span class="type">int</span> v1,v2,val;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    vector&lt;list&lt;node&gt;&gt; <span class="built_in">grid</span>(n<span class="number">+1</span>);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        cin&gt;&gt;v1&gt;&gt;v2&gt;&gt;val;</span><br><span class="line">        grid[v1].<span class="built_in">push_back</span>((node)&#123;v2,val&#125;);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> start=<span class="number">1</span>;</span><br><span class="line">    <span class="type">int</span> end=n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">mindist</span><span class="params">(n<span class="number">+1</span>,INT_MAX)</span></span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">vis</span><span class="params">(n<span class="number">+1</span>,<span class="literal">false</span>)</span></span>;</span><br><span class="line">    priority_queue&lt;pair&lt;<span class="type">int</span>,<span class="type">int</span>&gt;,vector&lt;pair&lt;<span class="type">int</span>,<span class="type">int</span>&gt;&gt;,cmp&gt; q;</span><br><span class="line">    q.<span class="built_in">push</span>(<span class="built_in">pair</span>&lt;<span class="type">int</span>,<span class="type">int</span>&gt;(start,<span class="number">0</span>));</span><br><span class="line">    mindist[start]=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (!q.<span class="built_in">empty</span>())&#123;</span><br><span class="line">        pair&lt;<span class="type">int</span>,<span class="type">int</span>&gt; cur=q.<span class="built_in">top</span>();</span><br><span class="line">        q.<span class="built_in">pop</span>();</span><br><span class="line">        <span class="keyword">if</span> (vis[cur.first]) <span class="keyword">continue</span>;</span><br><span class="line">        vis[cur.first]=<span class="number">1</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> it:grid[cur.first])&#123;</span><br><span class="line">            <span class="keyword">if</span> (!vis[it.to]&amp;&amp;mindist[cur.first]+it.v&lt;mindist[it.to])&#123;</span><br><span class="line">                mindist[it.to]=mindist[cur.first]+it.v;</span><br><span class="line">                q.<span class="built_in">push</span>(<span class="built_in">pair</span>&lt;<span class="type">int</span>,<span class="type">int</span>&gt;(it.to,mindist[it.to]));</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> (mindist[end]==INT_MAX)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;-1&quot;</span>&lt;&lt;endl;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;mindist[end]&lt;&lt;endl;</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>好处是大大降低了时间复杂度喵。</p><p>这个只能用邻接表，用邻接矩阵就相当于没有优化了。</p><p>事实上就是让边带两个信息，一个是起始点，一个是后面接的边。</p><h4 id="Bellman-ford算法">Bellman_ford算法</h4><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 class="type">int</span> n,m,v1,v2,val;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; grid;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        cin&gt;&gt;v1&gt;&gt;v2&gt;&gt;val;</span><br><span class="line">        grid.<span class="built_in">push_back</span>(&#123;v1,v2,val&#125;);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> start=<span class="number">1</span>;</span><br><span class="line">    <span class="type">int</span> end=n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">mindist</span><span class="params">(n<span class="number">+1</span>,INT_MAX)</span></span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">vis</span><span class="params">(n<span class="number">+1</span>,<span class="literal">false</span>)</span></span>;</span><br><span class="line">    mindist[start]=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">1</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">for</span> (vector&lt;<span class="type">int</span>&gt; &amp;it:grid)&#123;</span><br><span class="line">            <span class="type">int</span> from=it[<span class="number">0</span>];</span><br><span class="line">            <span class="type">int</span> to=it[<span class="number">1</span>];</span><br><span class="line">            <span class="type">int</span> len=it[<span class="number">2</span>];</span><br><span class="line">            <span class="keyword">if</span> (mindist[from]!=INT_MAX&amp;&amp;mindist[to]&gt;mindist[from]+len)&#123;</span><br><span class="line">                mindist[to]=mindist[from]+len;</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> (mindist[end]==INT_MAX)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;unconnected&quot;</span>&lt;&lt;endl;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;mindist[end]&lt;&lt;endl;</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><h5 id="加入队列优化（SPFA）">加入队列优化（SPFA）</h5><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 class="type">int</span> n,m,v1,v2,val;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> to;</span><br><span class="line">    <span class="type">int</span> len;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    vector&lt;list&lt;node&gt;&gt; <span class="built_in">grid</span>(n<span class="number">+1</span>);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        cin&gt;&gt;v1&gt;&gt;v2&gt;&gt;val;</span><br><span class="line">        grid[v1].<span class="built_in">push_back</span>((node)&#123;v2,val&#125;);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">mindist</span><span class="params">(n<span class="number">+1</span>,INT_MAX)</span></span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">vis</span><span class="params">(n<span class="number">+1</span>,<span class="literal">false</span>)</span></span>;</span><br><span class="line">    <span class="type">int</span> start=<span class="number">1</span>;</span><br><span class="line">    <span class="type">int</span> end=n;</span><br><span class="line">    queue&lt;<span class="type">int</span>&gt; q;</span><br><span class="line">    q.<span class="built_in">push</span>(start);</span><br><span class="line">    vis[start]=<span class="literal">true</span>;</span><br><span class="line">    mindist[start]=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (!q.<span class="built_in">empty</span>())&#123;</span><br><span class="line">        <span class="type">int</span> cur=q.<span class="built_in">front</span>();</span><br><span class="line">        q.<span class="built_in">pop</span>();</span><br><span class="line">        vis[cur]=<span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> it:grid[cur])&#123;</span><br><span class="line">            <span class="keyword">if</span> (mindist[it.to]&gt;mindist[cur]+it.len)&#123;</span><br><span class="line">                mindist[it.to]=mindist[cur]+it.len;</span><br><span class="line">                <span class="keyword">if</span> (!vis[it.to])&#123;</span><br><span class="line">                    q.<span class="built_in">push</span>(it.to);</span><br><span class="line">                    vis[it.to]=<span class="literal">true</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">    <span class="keyword">if</span> (mindist[end]==INT_MAX)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;unconnected&quot;</span>&lt;&lt;endl;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;mindist[end]&lt;&lt;endl;</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><h5 id="用于判断有无负权回路（简单好写）">用于判断有无负权回路（简单好写）</h5><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></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 class="type">int</span> n,m,v1,v2,val;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; grid;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        cin&gt;&gt;v1&gt;&gt;v2&gt;&gt;val;</span><br><span class="line">        grid.<span class="built_in">push_back</span>(&#123;v1,v2,val&#125;);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> start=<span class="number">1</span>;</span><br><span class="line">    <span class="type">int</span> end=n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">mindist</span><span class="params">(n<span class="number">+1</span>,INT_MAX)</span></span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">vis</span><span class="params">(n<span class="number">+1</span>,<span class="literal">false</span>)</span></span>;</span><br><span class="line">    mindist[start]=<span class="number">0</span>;</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="keyword">for</span> (vector&lt;<span class="type">int</span>&gt; &amp;it:grid)&#123;</span><br><span class="line">            <span class="type">int</span> from=it[<span class="number">0</span>];</span><br><span class="line">            <span class="type">int</span> to=it[<span class="number">1</span>];</span><br><span class="line">            <span class="type">int</span> len=it[<span class="number">2</span>];</span><br><span class="line">            <span class="keyword">if</span> (mindist[from]!=INT_MAX&amp;&amp;mindist[to]&gt;mindist[from]+len)&#123;</span><br><span class="line">                mindist[to]=mindist[from]+len;</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">for</span> (vector&lt;<span class="type">int</span>&gt; &amp;it:grid)&#123;</span><br><span class="line">        <span class="type">int</span> from=it[<span class="number">0</span>];</span><br><span class="line">        <span class="type">int</span> to=it[<span class="number">1</span>];</span><br><span class="line">        <span class="type">int</span> len=it[<span class="number">2</span>];</span><br><span class="line">        <span class="keyword">if</span> (mindist[from]!=INT_MAX&amp;&amp;mindist[to]&gt;mindist[from]+len)&#123;</span><br><span class="line">            flag=<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">if</span> (flag) cout&lt;&lt;<span class="string">&quot;circle&quot;</span>&lt;&lt; endl;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(mindist[end]==INT_MAX)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;unconnected&quot;</span>&lt;&lt;endl;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;mindist[end]&lt;&lt;endl;</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>我们知道，对于每一条边去进行一次松弛，假设一共有n个节点，那么只要松弛n-1次就能得到正确答案，而且n-1次之后，如果没有负权回路的话，再怎么松弛结果都不会再改变了。就可以利用这样子的一个特性去判断是否有负权回路。只要我们再松弛一次，观察数组的变化我们就可以知道是否有负权回路了。</p><h5 id="SPFA带负环检测（事实上，这个在极端数据下发挥会更好）">SPFA带负环检测（事实上，这个在极端数据下发挥会更好）</h5><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><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></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="keyword">struct</span> <span class="title class_">Edge</span> &#123;</span><br><span class="line">    <span class="type">int</span> to, w;</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">    ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> T;</span><br><span class="line">    cin &gt;&gt; T; <span class="comment">// 多组测试</span></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">        cin &gt;&gt; n &gt;&gt; m;</span><br><span class="line"></span><br><span class="line">        vector&lt;vector&lt;Edge&gt;&gt; <span class="built_in">g</span>(n + <span class="number">1</span>);</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; m; i++) &#123;</span><br><span class="line">            <span class="type">int</span> u, v, w;</span><br><span class="line">            cin &gt;&gt; u &gt;&gt; v &gt;&gt; w;</span><br><span class="line">            g[u].<span class="built_in">push_back</span>(&#123;v, w&#125;);</span><br><span class="line">            <span class="keyword">if</span> (w &gt;= <span class="number">0</span>) &#123; </span><br><span class="line">                <span class="comment">// 如果边权非负，加反向边，这样可检测无向负环</span></span><br><span class="line">                g[v].<span class="built_in">push_back</span>(&#123;u, w&#125;);</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="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dist</span><span class="params">(n + <span class="number">1</span>, <span class="number">0</span>)</span></span>;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">cnt</span><span class="params">(n + <span class="number">1</span>, <span class="number">0</span>)</span></span>;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">inq</span><span class="params">(n + <span class="number">1</span>, <span class="literal">false</span>)</span></span>;</span><br><span class="line">        queue&lt;<span class="type">int</span>&gt; q;</span><br><span class="line"></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">            q.<span class="built_in">push</span>(i);</span><br><span class="line">            inq[i] = <span class="literal">true</span>;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="type">bool</span> hasCycle = <span class="literal">false</span>;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// SPFA 主体</span></span><br><span class="line">        <span class="keyword">while</span> (!q.<span class="built_in">empty</span>() &amp;&amp; !hasCycle) &#123;</span><br><span class="line">            <span class="type">int</span> u = q.<span class="built_in">front</span>(); q.<span class="built_in">pop</span>();</span><br><span class="line">            inq[u] = <span class="literal">false</span>;</span><br><span class="line"></span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">auto</span> &amp;e : g[u]) &#123;</span><br><span class="line">                <span class="type">int</span> v = e.to, w = e.w;</span><br><span class="line">                <span class="keyword">if</span> (dist[v] &gt; dist[u] + w) &#123;</span><br><span class="line">                    dist[v] = dist[u] + w;</span><br><span class="line">                    cnt[v] = cnt[u] + <span class="number">1</span>;</span><br><span class="line">                    <span class="keyword">if</span> (cnt[v] &gt;= n) &#123; <span class="comment">// 松弛超过 n-1 次 → 负环</span></span><br><span class="line">                        hasCycle = <span class="literal">true</span>;</span><br><span class="line">                        <span class="keyword">break</span>;</span><br><span class="line">                    &#125;</span><br><span class="line">                    <span class="keyword">if</span> (!inq[v]) &#123;</span><br><span class="line">                        q.<span class="built_in">push</span>(v);</span><br><span class="line">                        inq[v] = <span class="literal">true</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"></span><br><span class="line">        <span class="keyword">if</span> (hasCycle) cout &lt;&lt; <span class="string">&quot;YES\n&quot;</span>;</span><br><span class="line">        <span class="keyword">else</span> cout &lt;&lt; <span class="string">&quot;NO\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line"></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><br></pre></td></tr></table></figure><h5 id="有限最短路（其实是带有负环的模板）">有限最短路（其实是带有负环的模板）</h5><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></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;vector&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;list&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;climits&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> src, dst,k ,p1, p2, val ,m , n;</span><br><span class="line">    </span><br><span class="line">    cin &gt;&gt; n &gt;&gt; m;</span><br><span class="line"></span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; grid;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span>; i &lt; m; i++)&#123;</span><br><span class="line">        cin &gt;&gt; p1 &gt;&gt; p2 &gt;&gt; val;</span><br><span class="line">        grid.<span class="built_in">push_back</span>(&#123;p1, p2, val&#125;);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    cin &gt;&gt; src &gt;&gt; dst &gt;&gt; k;</span><br><span class="line"></span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">minDist</span><span class="params">(n + <span class="number">1</span> , INT_MAX)</span></span>;</span><br><span class="line">    minDist[src] = <span class="number">0</span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">minDist_copy</span><span class="params">(n + <span class="number">1</span>)</span></span>; <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;= k + <span class="number">1</span>; i++) &#123;</span><br><span class="line">        minDist_copy = minDist; <span class="comment">// 获取上一次计算的结果</span></span><br><span class="line">        <span class="keyword">for</span> (vector&lt;<span class="type">int</span>&gt; &amp;side : grid) &#123;</span><br><span class="line">            <span class="type">int</span> from = side[<span class="number">0</span>];</span><br><span class="line">            <span class="type">int</span> to = side[<span class="number">1</span>];</span><br><span class="line">            <span class="type">int</span> price = side[<span class="number">2</span>];</span><br><span class="line">            <span class="comment">// 注意使用 minDist_copy 来计算 minDist </span></span><br><span class="line">            <span class="keyword">if</span> (minDist_copy[from] != INT_MAX &amp;&amp; minDist[to] &gt; minDist_copy[from] + price) &#123;  </span><br><span class="line">                minDist[to] = minDist_copy[from] + price;</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> (minDist[dst] == INT_MAX) cout &lt;&lt; <span class="string">&quot;unreachable&quot;</span> &lt;&lt; endl; <span class="comment">// 不能到达终点</span></span><br><span class="line">    <span class="keyword">else</span> cout &lt;&lt; minDist[dst] &lt;&lt; endl; <span class="comment">// 到达终点最短路径</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><blockquote><p>如果做有负权回路的判断，都要在每一次松弛开始前记录上一次松弛的结果</p></blockquote><blockquote><p>非常棒的问题 ✅ 你已经踩到了 <strong>Bellman-Ford 算法里一个非常细节但关键的点</strong>。<br>你的直觉完全正确，只是要再明确一点 <strong>“什么时候需要上一次的副本 minDist_copy”</strong> 和 <strong>“为什么”</strong>。</p><hr><h2 id="🧩-我们先分清楚两个场景：">🧩 我们先分清楚两个场景：</h2><table><thead><tr><th>场景</th><th>图中是否有负权</th><th>是否允许经过同一个点多次</th><th>算法</th><th>是否需要 <code>minDist_copy</code></th></tr></thead><tbody><tr><td>普通最短路（如 Dijkstra）</td><td>无负权</td><td>否</td><td>Dijkstra</td><td>❌ 不需要</td></tr><tr><td>有负权边但无负环</td><td>允许有限次松弛</td><td>Bellman-Ford</td><td>✅ 需要</td><td></td></tr><tr><td>有负环但不要求检测（例如“最多走 k 条边”）</td><td>有负权回路但限制边数</td><td>限制版 Bellman-Ford（k次）</td><td>✅ 必须要</td><td></td></tr><tr><td>要检测负环</td><td>有负环</td><td>Bellman-Ford 检测模式</td><td>❌ 不需要 <code>copy</code>（因为松弛 n 次即可发现环）</td><td></td></tr></tbody></table><hr><h2 id="🧩-为什么要-minDist-copy">🧩 为什么要 <code>minDist_copy</code></h2><p>假设我们在一次循环里直接这样写：</p><figure class="highlight cpp"><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"><span class="keyword">if</span> (minDist[from] != INT_MAX &amp;&amp; minDist[to] &gt; minDist[from] + w)</span><br><span class="line">    minDist[to] = minDist[from] + w;</span><br></pre></td></tr></table></figure><p>这意味着在 <strong>同一轮松弛中更新的值会立即影响本轮后续的松弛</strong>。</p><p>这在一般 Bellman-Ford（松弛 n−1 轮）中<strong>是没问题的</strong>，因为每轮都尝试遍历所有边，最后仍能收敛到正确最短路。</p><p>但在以下两种情况下，它会出错：</p><hr><h3 id="❌-情况1：限制最多走-k-条边（比如“最多转-k-次机票”）">❌ 情况1：限制最多走 k 条边（比如“最多转 k 次机票”）</h3><p>你这个程序其实就是这个问题的变体：</p><blockquote><p>“给定最多能走 k 条边，求从 src 到 dst 的最短路径。”</p></blockquote><p>在这种题目里：</p><ul><li>第 i 轮松弛表示：<strong>用 i 条边以内可以到达的最短路</strong>；</li><li>所以第 i 轮的结果，<strong>只能用第 i−1 轮的结果来推</strong>。</li></ul><p>👉 如果不加 <code>minDist_copy</code>，你在第 i 轮中更新的结果可能立即影响第 i 轮后面的边，相当于用了 <strong>超过 i 条边</strong> 的结果，<br>从而违反了“至多 k 条边”的限制。</p><p>因此在这种 <strong>“有层数/边数限制”</strong> 的 Bellman-Ford 里，<br><code>minDist_copy</code> 是 <strong>必须的</strong>。</p><hr><h3 id="✅-情况2：普通-Bellman-Ford（无-k-限制）">✅ 情况2：普通 Bellman-Ford（无 k 限制）</h3><p>如果只是要求单源最短路（无边数限制），<br>Bellman-Ford 每轮遍历所有边 n−1 次，理论上不需要 <code>copy</code>，<br>因为允许更新立即生效不会改变最终正确性。</p><hr><h3 id="⚠️-情况3：有负权回路但“题目保证不成环”">⚠️ 情况3：有负权回路但“题目保证不成环”</h3><p>如果题目没负环，但你为了保险使用 <code>copy</code>，完全没问题，<br>只是略微慢一点（多一次数组拷贝）。</p><hr><h2 id="🔍-总结要点">🔍 总结要点</h2><table><thead><tr><th>用途</th><th>是否需要 <code>minDist_copy</code></th><th>说明</th></tr></thead><tbody><tr><td>普通 Bellman-Ford 最短路</td><td>❌</td><td>立即更新也行，n−1 轮后收敛</td></tr><tr><td>检测负环</td><td>❌</td><td>立即更新没问题</td></tr><tr><td>限制边数 k（例如机票题）</td><td>✅</td><td>必须要，用上一轮结果防止越界松弛</td></tr><tr><td>防止被负环影响（题目保证有限步）</td><td>✅</td><td>可以防止误松弛进无限环</td></tr></tbody></table><hr><h2 id="✅-你的代码分析">✅ 你的代码分析</h2><p>你的版本其实是正确实现了**“最多经过 k 条边的最短路”**（类似 LeetCode 787 “K Stops Flight” 那类问题）：</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">minDist_copy = minDist;</span><br><span class="line"><span class="keyword">if</span> (minDist_copy[from] != INT_MAX &amp;&amp; minDist[to] &gt; minDist_copy[from] + price)</span><br><span class="line">    minDist[to] = minDist_copy[from] + price;</span><br></pre></td></tr></table></figure><p>✔️ 正确，逻辑上严格遵守“只使用前 k−1 层信息更新第 k 层”。</p><p>所以：</p><ul><li>如果题目要求<strong>限制边数</strong>，你的写法是 ✅ 必须的；</li><li>如果是普通单源最短路（无 k 限制），就可以去掉 <code>minDist_copy</code>；</li><li>如果图中存在负环，而你只跑固定 k 轮（不是检测负环），那就靠 <code>minDist_copy</code> 保证算法不会被负环无限松弛拖崩。</li></ul><hr><h2 id="✅-一句话总结：">✅ 一句话总结：</h2><blockquote><p>💡 在单源有限最短路问题中（比如“最多经过 k 条边”），<br>每轮都要用上一次松弛的 <code>minDist_copy</code> 来保证状态层数不被串扰；<br>否则算法会意外用到当前轮的新结果，相当于使用了更多边，结果错误。</p></blockquote></blockquote><h4 id="Floyd算法">Floyd算法</h4><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 class="type">int</span> n,m,v1,v2,val;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">grid</span>(n<span class="number">+1</span>,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(n<span class="number">+1</span>,<span class="number">10010</span>));</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        cin&gt;&gt;v1&gt;&gt;v2&gt;&gt;val;</span><br><span class="line">        grid[v1][v2]=val;</span><br><span class="line">        grid[v2][v1]=val;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> k=<span class="number">1</span>;k&lt;=n;k++)&#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="keyword">for</span> (<span class="type">int</span> j=<span class="number">1</span>;j&lt;=n;j++)&#123;</span><br><span class="line">                grid[i][j]=<span class="built_in">min</span>(grid[i][j],grid[i][k]+grid[k][j]);</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="type">int</span> z,start,end;</span><br><span class="line">    cin&gt;&gt;z;</span><br><span class="line">    <span class="keyword">while</span>(z--)&#123;</span><br><span class="line">        cin&gt;&gt;start&gt;&gt;end;</span><br><span class="line">        <span class="keyword">if</span> (grid[start][end]!=<span class="number">10010</span>)&#123;</span><br><span class="line">            cout&lt;&lt;grid[start][end]&lt;&lt;endl;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;-1&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><h3 id="总结篇">总结篇</h3><p>我将会在下面分为几种情况来选择不同的算法</p><p><em><strong>题目说明是无向图：</strong></em></p><p>**稠密图：**prim，基于点，mindist表示的是距离最小生成树的最近距离</p><p>**稀疏图：**Kruskal，基于边，利用贪心算法和并查集每次选取最短的边，边的两端如果不在同一个集合，那么就加入。</p><p><em><strong>题目说明是有向图且单源：</strong></em></p><p>**题目中不存在负边：**使用Dijkstra算法，其中的mindist表示的是点到源点的距离，与prim在写法上非常相似，唯一的不同只有mindist的差别（？）堆优化版需要转化思路存边。</p><p>**题目中存在负边且存在有负权回路：**使用最原始的B_f算法，对边进行松弛，或者使用带上了负环检测的SPFA。</p><p>**题目中存在负边且无负权回路：**使用SPFA，最高效。</p><p>**题目是问有限最短路：**用B_f算法的变体，记得每次循环都要拷贝mindist</p><p><em><strong>题目说明多源：</strong></em></p><p>使用Floyd算法。</p><h2 id="行向深渊：旅途的终点？">行向深渊：旅途的终点？</h2><p>2025.10.02——2025.10.29</p><p>在跳过有些题目和章节的情况下，我耗时一个月，刷完了代码随想录。</p><p>这份算法笔记我可以说是非常厉害，由浅入深，透彻，清晰，把我很多最开始没搞懂的算法全部揉碎了讲。</p><p>我可以肯定，我绝对认识比三个月前清晰很多很多。</p><p>接下来是二刷，我会以自己写blog的形式来进行复习和总结，不过在这之前我需要抓住10月的尾巴，去整理一下一些其他东西</p><p>这不是终点</p><p>——by Schariac125</p><p>2025.10.29 写于福州大学旗山校区</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1&gt;New Start——两个月速通代码随想录&lt;/h1&gt;
&lt;h2 id=&quot;写在前面&quot;&gt;写在前面&lt;/h2&gt;
&lt;p&gt;代码随想录的训练应该紧接在PAT乙级之后，这一套题目可以很迅速的帮助复习以及查缺补漏一些算法，难度适中，题目选取是优秀，有代表性的，名副其实。&lt;/p&gt;
&lt;p&gt;不过这</summary>
      
    
    
    
    <category term="程序设计" scheme="http://example.com/categories/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/"/>
    
    
    <category term="C++,算法" scheme="http://example.com/tags/C-%E7%AE%97%E6%B3%95/"/>
    
  </entry>
  
  <entry>
    <title>PTA乙级各题答案</title>
    <link href="http://example.com/2025/10/05/PTA%E4%B9%99%E7%BA%A7%E5%90%84%E9%A2%98%E7%AD%94%E6%A1%88/"/>
    <id>http://example.com/2025/10/05/PTA%E4%B9%99%E7%BA%A7%E5%90%84%E9%A2%98%E7%AD%94%E6%A1%88/</id>
    <published>2025-10-05T13:30:00.000Z</published>
    <updated>2025-10-15T13:28:45.093Z</updated>
    
    <content type="html"><![CDATA[<h1>PTA乙级各题答案</h1><h2 id="前言：">前言：</h2><p>这份答案是笔者在2025年备考期间自行整理的答案，绝大部分为笔者亲自书写代码， 部分可能会借鉴AI思路。</p><p>不排除PAT官方后续修改测试数据而导致答案出现错误的情况，如有发现可向我反馈（反馈方式已经贴在了README文件中）</p><p>有不懂的可以在转专业大群找到我并询问（<s>如果我还记得我这串代码写了什么</s>）</p><p>编译语言为C++（g++），其他编译语言如C不保证能够通过（绝对不保证能通过）。</p><p>因笔者水平有限，答案并不一定为时间空间复杂度最优解（<s>其实是大部分不是</s>），只保证可AC，oi大佬轻喷OTZ</p><p>​                                                                                                                                                                                                     ——By Schariac125</p><h2 id="正文：">正文：</h2><h2 id="1001">1001</h2><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></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">    cin&gt;&gt;n;</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> (<span class="number">1</span>)&#123;</span><br><span class="line">        <span class="keyword">if</span> (n==<span class="number">1</span>)&#123;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span> (n%<span class="number">2</span>==<span class="number">1</span>)&#123;</span><br><span class="line">            n=(<span class="number">3</span>*n<span class="number">+1</span>)/<span class="number">2</span>;</span><br><span class="line">            ans++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span> (n%<span class="number">2</span>==<span class="number">0</span>)&#123;</span><br><span class="line">            n/=<span class="number">2</span>;</span><br><span class="line">            ans++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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><h2 id="1002">1002</h2><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">string num;</span><br><span class="line"><span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">string b[<span class="number">15</span>] = &#123;<span class="string">&quot;ling&quot;</span>,<span class="string">&quot;yi&quot;</span>,<span class="string">&quot;er&quot;</span>,<span class="string">&quot;san&quot;</span>,<span class="string">&quot;si&quot;</span>,<span class="string">&quot;wu&quot;</span>,<span class="string">&quot;liu&quot;</span>,<span class="string">&quot;qi&quot;</span>,<span class="string">&quot;ba&quot;</span>,<span class="string">&quot;jiu&quot;</span>&#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">getline</span>(cin,num);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;num.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        sum+=(num[i]-<span class="string">&#x27;0&#x27;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;string&gt; ans;</span><br><span class="line">    <span class="keyword">while</span> (sum&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        <span class="type">int</span> temp=sum%<span class="number">10</span>;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(b[temp]);</span><br><span class="line">        sum/=<span class="number">10</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=ans.<span class="built_in">size</span>()<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==<span class="number">0</span>)&#123;</span><br><span class="line">            cout&lt;&lt;ans[i];</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;ans[i]&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">//cout&lt;&lt;sum&lt;&lt;endl;</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="1003">1003</h2><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="function"><span class="type">bool</span> <span class="title">checkPAT</span><span class="params">(<span class="type">const</span> string &amp;s)</span> </span>&#123;</span><br><span class="line">    <span class="comment">// 检查只包含 P A T</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c : s) &#123;</span><br><span class="line">        <span class="keyword">if</span> (c != <span class="string">&#x27;P&#x27;</span> &amp;&amp; c != <span class="string">&#x27;A&#x27;</span> &amp;&amp; c != <span class="string">&#x27;T&#x27;</span>)</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> p = s.<span class="built_in">find</span>(<span class="string">&#x27;P&#x27;</span>);</span><br><span class="line">    <span class="type">int</span> t = s.<span class="built_in">find</span>(<span class="string">&#x27;T&#x27;</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 必须有且仅有一个P和一个T 且P在T前</span></span><br><span class="line">    <span class="keyword">if</span> (p == string::npos || t == string::npos || p &gt;= t) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">count</span>(s.<span class="built_in">begin</span>(), s.<span class="built_in">end</span>(), <span class="string">&#x27;P&#x27;</span>) != <span class="number">1</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">count</span>(s.<span class="built_in">begin</span>(), s.<span class="built_in">end</span>(), <span class="string">&#x27;T&#x27;</span>) != <span class="number">1</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> x = p;                    <span class="comment">// P 左边的 A 数量</span></span><br><span class="line">    <span class="type">int</span> y = t - p - <span class="number">1</span>;            <span class="comment">// P 和 T 之间的 A 数量</span></span><br><span class="line">    <span class="type">int</span> z = s.<span class="built_in">length</span>() - t - <span class="number">1</span>;   <span class="comment">// T 右边的 A 数量</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> (y == <span class="number">0</span>) <span class="keyword">return</span> <span class="literal">false</span>;     <span class="comment">// 中间必须至少有一个 A</span></span><br><span class="line">    <span class="keyword">return</span> z == x * y;</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="type">int</span> n;</span><br><span class="line">    cin &gt;&gt; n;</span><br><span class="line">    <span class="keyword">while</span> (n--) &#123;</span><br><span class="line">        string a;</span><br><span class="line">        cin &gt;&gt; a;</span><br><span class="line">        cout &lt;&lt; (<span class="built_in">checkPAT</span>(a) ? <span class="string">&quot;YES&quot;</span> : <span class="string">&quot;NO&quot;</span>) &lt;&lt; endl;</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><h2 id="1004">1004</h2><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></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="keyword">class</span> <span class="title class_">stu</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    string name;</span><br><span class="line">    string num;</span><br><span class="line">    <span class="type">double</span> gpa;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(stu a,stu b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> a.gpa&gt;b.gpa;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    vector&lt;stu&gt; add;</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">        stu l;</span><br><span class="line">        cin&gt;&gt;l.name&gt;&gt;l.num&gt;&gt;l.gpa;</span><br><span class="line">        add.<span class="built_in">push_back</span>(l);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(add.<span class="built_in">begin</span>(),add.<span class="built_in">end</span>(),cmp);</span><br><span class="line">    cout&lt;&lt;add[<span class="number">0</span>].name&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;add[<span class="number">0</span>].num&lt;&lt;endl;</span><br><span class="line">    cout&lt;&lt;add[add.<span class="built_in">size</span>()<span class="number">-1</span>].name&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;add[add.<span class="built_in">size</span>()<span class="number">-1</span>].num&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><h2 id="1005">1005</h2><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></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">int</span> n,a;</span><br><span class="line"><span class="type">int</span> b[<span class="number">10005</span>];</span><br><span class="line"><span class="type">int</span> vis[<span class="number">10005</span>];</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">biao</span><span class="params">(<span class="type">int</span> s)</span></span>&#123;</span><br><span class="line">    <span class="keyword">while</span> (<span class="number">1</span>)&#123;</span><br><span class="line">        <span class="keyword">if</span> (s==<span class="number">1</span>)&#123;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span> (s%<span class="number">2</span>==<span class="number">0</span>)&#123;</span><br><span class="line">            s/=<span class="number">2</span>;</span><br><span class="line">            <span class="keyword">if</span> (!b[s])&#123;</span><br><span class="line">                b[s]=<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">else</span> <span class="keyword">if</span> (s%<span class="number">2</span>==<span class="number">1</span>)&#123;</span><br><span class="line">            s=(<span class="number">3</span>*s<span class="number">+1</span>)/<span class="number">2</span>;</span><br><span class="line">            <span class="keyword">if</span> (!b[s])&#123;</span><br><span class="line">                b[s]=<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">    <span class="keyword">return</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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">        cin&gt;&gt;a;</span><br><span class="line">        vis[a]=<span class="number">1</span>;</span><br><span class="line">        <span class="keyword">if</span> (b[a]==<span class="number">0</span>)&#123;</span><br><span class="line">            <span class="built_in">biao</span>(a);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">2</span>;i&lt;=<span class="number">10005</span>;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (b[i]==<span class="number">0</span>&amp;&amp;vis[i]==<span class="number">1</span>)&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(i);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(ans.<span class="built_in">begin</span>(),ans.<span class="built_in">end</span>(),<span class="built_in">greater</span>&lt;<span class="type">int</span>&gt;());</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==ans.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">            cout&lt;&lt;ans[i];</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;ans[i]&lt;&lt;<span class="string">&quot; &quot;</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="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这东西前面几个测试点数据太弱了。</p><h2 id="1006">1006</h2><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></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">int</span> 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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="type">int</span> b=n/<span class="number">100</span>;</span><br><span class="line">    <span class="type">int</span> s=(n/<span class="number">10</span>)%<span class="number">10</span>;</span><br><span class="line">    <span class="type">int</span> g=n%<span class="number">10</span>;</span><br><span class="line">    <span class="type">int</span> r=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">while</span> (b&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&#x27;B&#x27;</span>;</span><br><span class="line">        b--;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (s&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&#x27;S&#x27;</span>;</span><br><span class="line">        s--;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (g&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        cout&lt;&lt;r;</span><br><span class="line">        r++;</span><br><span class="line">        g--;</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="1007">1007</h2><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="function"><span class="type">bool</span> <span class="title">su</span><span class="params">(<span class="type">int</span> a)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a==<span class="number">2</span>) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">2</span>;i*i&lt;=a;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (a%i==<span class="number">0</span>)&#123;</span><br><span class="line">                <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">    &#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="type">int</span> 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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="type">int</span> ans=<span class="number">0</span>;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; b;</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> (<span class="built_in">su</span>(i))&#123;</span><br><span class="line">            b.<span class="built_in">push_back</span>(i);</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;b.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (b[i]-b[i<span class="number">-1</span>]==<span class="number">2</span>)&#123;</span><br><span class="line">            ans++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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><h2 id="1008">1008</h2><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="type">int</span> n,m,x;</span><br><span class="line">deque&lt;<span class="type">int</span>&gt; d;<span class="comment">//双端队列</span></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">    cin&gt;&gt;n&gt;&gt;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">        cin&gt;&gt;x;</span><br><span class="line">        d.<span class="built_in">push_back</span>(x);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (m--)&#123;</span><br><span class="line">        <span class="type">int</span> r=d.<span class="built_in">back</span>();</span><br><span class="line">        d.<span class="built_in">pop_back</span>();</span><br><span class="line">        d.<span class="built_in">push_front</span>(r);    </span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:d)&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(it);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==ans.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">            cout&lt;&lt;ans[i];</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;ans[i]&lt;&lt;<span class="string">&quot; &quot;</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="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>看到题目的第一反应就是双端队列了，STL是真的很好用。</p><h2 id="1009">1009</h2><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">string a;</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">getline</span>(cin,a);</span><br><span class="line">    vector&lt;string&gt; ans;</span><br><span class="line">    string word;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c:a)&#123;</span><br><span class="line">        <span class="keyword">if</span> (c==<span class="string">&#x27; &#x27;</span>)&#123;</span><br><span class="line">            <span class="keyword">if</span> (!word.<span class="built_in">empty</span>())&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(word);</span><br><span class="line">                word.<span class="built_in">clear</span>();</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            word+=c;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (!word.<span class="built_in">empty</span>())&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(word);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=ans.<span class="built_in">size</span>()<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==<span class="number">0</span>)&#123;</span><br><span class="line">            cout&lt;&lt;ans[i];</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;ans[i]&lt;&lt;<span class="string">&quot; &quot;</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="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>重点在于把每个单词按空格分割出来</p><h2 id="1010">1010</h2><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></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> a, b;</span><br><span class="line">    <span class="type">bool</span> hasOutput = <span class="literal">false</span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">while</span> (cin &gt;&gt; a &gt;&gt; b) &#123;</span><br><span class="line">        <span class="keyword">if</span> (b != <span class="number">0</span>) &#123;</span><br><span class="line">            <span class="keyword">if</span> (hasOutput) cout &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">            cout &lt;&lt; a * b &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; b - <span class="number">1</span>;</span><br><span class="line">            hasOutput = <span class="literal">true</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> (!hasOutput) &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;0 0&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line"></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="1011">1011</h2><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></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 class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"><span class="type">int</span> t;</span><br><span class="line"><span class="type">int</span> a,b,c;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;t;</span><br><span class="line">    <span class="type">int</span> h=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">while</span> (t--)&#123;</span><br><span class="line">        cin&gt;&gt;a&gt;&gt;b&gt;&gt;c;</span><br><span class="line">        <span class="keyword">if</span> (a+b&gt;c)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Case #&quot;</span>&lt;&lt;h&lt;&lt;<span class="string">&quot;: true&quot;</span>&lt;&lt;endl;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Case #&quot;</span>&lt;&lt;h&lt;&lt;<span class="string">&quot;: false&quot;</span>&lt;&lt;endl;</span><br><span class="line">        &#125;</span><br><span class="line">        h++;</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="1012">1012</h2><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><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></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">int</span> n,x;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; ans1,ans2,ans3,ans4,ans5;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <span class="keyword">while</span>(n--)&#123;</span><br><span class="line">        cin&gt;&gt;x;</span><br><span class="line">        <span class="keyword">if</span> (x%<span class="number">5</span>==<span class="number">0</span>&amp;&amp;x%<span class="number">2</span>==<span class="number">0</span>)&#123;</span><br><span class="line">            ans<span class="number">1.</span><span class="built_in">push_back</span>(x);</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(x%<span class="number">5</span>==<span class="number">1</span>)&#123;</span><br><span class="line">            ans<span class="number">2.</span><span class="built_in">push_back</span>(x);</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(x%<span class="number">5</span>==<span class="number">2</span>)&#123;</span><br><span class="line">            ans<span class="number">3.</span><span class="built_in">push_back</span>(x);</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(x%<span class="number">5</span>==<span class="number">3</span>)&#123;</span><br><span class="line">            ans<span class="number">4.</span><span class="built_in">push_back</span>(x);</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(x%<span class="number">5</span>==<span class="number">4</span>)&#123;</span><br><span class="line">            ans<span class="number">5.</span><span class="built_in">push_back</span>(x);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (ans<span class="number">1.</span><span class="built_in">empty</span>())&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;N&quot;</span>&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="type">int</span> sum1=<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;ans<span class="number">1.</span><span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            sum1+=ans1[i];</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;sum1&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (ans<span class="number">2.</span><span class="built_in">empty</span>())&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;N&quot;</span>&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="type">int</span> sum2=<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;ans<span class="number">2.</span><span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            sum2+=ans2[i]*<span class="built_in">pow</span>(<span class="number">-1</span>,i<span class="number">+2</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;sum2&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (ans<span class="number">3.</span><span class="built_in">empty</span>())&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;N&quot;</span>&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;ans<span class="number">3.</span><span class="built_in">size</span>()&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (ans<span class="number">4.</span><span class="built_in">empty</span>())&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;N&quot;</span>&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="type">double</span> sum4=<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;ans<span class="number">4.</span><span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            sum4+=<span class="number">1.0</span>*ans4[i];</span><br><span class="line">        &#125;</span><br><span class="line">        sum4/=ans<span class="number">4.</span><span class="built_in">size</span>();</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%.1f &quot;</span>,sum4);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (ans<span class="number">5.</span><span class="built_in">empty</span>())&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;N&quot;</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="type">int</span> maxx=<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;ans<span class="number">5.</span><span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            maxx=<span class="built_in">max</span>(maxx,ans5[i]);</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;maxx;</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><h2 id="1013">1013</h2><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></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">bool</span> <span class="title">su</span><span class="params">(<span class="type">int</span> a)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a &lt; <span class="number">2</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    <span class="keyword">if</span> (a == <span class="number">2</span>) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">2</span>;i*i&lt;=a;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (a%i==<span class="number">0</span>) <span class="keyword">return</span> <span class="literal">false</span>;</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><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> m,n;</span><br><span class="line">    cin&gt;&gt;m&gt;&gt;n;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">    <span class="type">int</span> num = <span class="number">2</span>; </span><br><span class="line">    <span class="keyword">while</span> (ans.<span class="built_in">size</span>() &lt; n)&#123;  </span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">su</span>(num)) ans.<span class="built_in">push_back</span>(num);</span><br><span class="line">        num++;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> flag = <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=m<span class="number">-1</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i == n<span class="number">-1</span>)&#123;</span><br><span class="line">            cout &lt;&lt; ans[i]; <span class="comment">// 最后一个数字后不加空格</span></span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span> (flag == <span class="number">10</span>)&#123;</span><br><span class="line">            cout &lt;&lt; ans[i] &lt;&lt; endl;</span><br><span class="line">            flag = <span class="number">1</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout &lt;&lt; ans[i] &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">            flag++;</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="1014">1014</h2><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></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">    ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line">    string s1, s2, s3, s4;</span><br><span class="line">    <span class="built_in">getline</span>(cin, s1);</span><br><span class="line">    <span class="built_in">getline</span>(cin, s2);</span><br><span class="line">    <span class="built_in">getline</span>(cin, s3);</span><br><span class="line">    <span class="built_in">getline</span>(cin, s4);</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 1) 找星期</span></span><br><span class="line">    <span class="type">int</span> i = <span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> n12 = <span class="built_in">min</span>(s<span class="number">1.</span><span class="built_in">size</span>(), s<span class="number">2.</span><span class="built_in">size</span>());</span><br><span class="line">    <span class="type">int</span> dayIdx = <span class="number">-1</span>;</span><br><span class="line">    <span class="keyword">for</span> (; i &lt; n12; ++i) &#123;</span><br><span class="line">        <span class="keyword">if</span> (s1[i] == s2[i] &amp;&amp; s1[i] &gt;= <span class="string">&#x27;A&#x27;</span> &amp;&amp; s1[i] &lt;= <span class="string">&#x27;G&#x27;</span>) &#123;</span><br><span class="line">            dayIdx = s1[i] - <span class="string">&#x27;A&#x27;</span>;</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"></span><br><span class="line">    <span class="comment">// 2) 找小时（从 i+1 开始）</span></span><br><span class="line">    <span class="type">int</span> hour = <span class="number">-1</span>;</span><br><span class="line">    <span class="keyword">for</span> (++i; i &lt; n12; ++i) &#123;</span><br><span class="line">        <span class="keyword">if</span> (s1[i] == s2[i]) &#123;</span><br><span class="line">            <span class="type">char</span> c = s1[i];</span><br><span class="line">            <span class="keyword">if</span> (c &gt;= <span class="string">&#x27;0&#x27;</span> &amp;&amp; c &lt;= <span class="string">&#x27;9&#x27;</span>) &#123;</span><br><span class="line">                hour = c - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">                <span class="keyword">break</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (c &gt;= <span class="string">&#x27;A&#x27;</span> &amp;&amp; c &lt;= <span class="string">&#x27;N&#x27;</span>) &#123;</span><br><span class="line">                hour = c - <span class="string">&#x27;A&#x27;</span> + <span class="number">10</span>;</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><br><span class="line">    <span class="comment">// 3) 找分钟（第一个相同的英文字母位置）</span></span><br><span class="line">    <span class="type">int</span> n34 = <span class="built_in">min</span>(s<span class="number">3.</span><span class="built_in">size</span>(), s<span class="number">4.</span><span class="built_in">size</span>());</span><br><span class="line">    <span class="type">int</span> minute = <span class="number">-1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> k = <span class="number">0</span>; k &lt; n34; ++k) &#123;</span><br><span class="line">        <span class="keyword">if</span> (s3[k] == s4[k] &amp;&amp; ((s3[k] &gt;= <span class="string">&#x27;A&#x27;</span> &amp;&amp; s3[k] &lt;= <span class="string">&#x27;Z&#x27;</span>) || (s3[k] &gt;= <span class="string">&#x27;a&#x27;</span> &amp;&amp; s3[k] &lt;= <span class="string">&#x27;z&#x27;</span>))) &#123;</span><br><span class="line">            minute = 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"></span><br><span class="line">    <span class="type">static</span> <span class="type">const</span> <span class="type">char</span>* dayName[] = &#123;<span class="string">&quot;MON&quot;</span>,<span class="string">&quot;TUE&quot;</span>,<span class="string">&quot;WED&quot;</span>,<span class="string">&quot;THU&quot;</span>,<span class="string">&quot;FRI&quot;</span>,<span class="string">&quot;SAT&quot;</span>,<span class="string">&quot;SUN&quot;</span>&#125;;</span><br><span class="line">    cout &lt;&lt; dayName[dayIdx] &lt;&lt; <span class="string">&#x27; &#x27;</span>;</span><br><span class="line">    cout &lt;&lt; <span class="built_in">setw</span>(<span class="number">2</span>) &lt;&lt; <span class="built_in">setfill</span>(<span class="string">&#x27;0&#x27;</span>) &lt;&lt; hour &lt;&lt; <span class="string">&#x27;:&#x27;</span></span><br><span class="line">         &lt;&lt; <span class="built_in">setw</span>(<span class="number">2</span>) &lt;&lt; <span class="built_in">setfill</span>(<span class="string">&#x27;0&#x27;</span>) &lt;&lt; minute &lt;&lt; <span class="string">&quot;\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></pre></td></tr></table></figure><h2 id="1015">1015</h2><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="keyword">class</span> <span class="title class_">stu</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> num;</span><br><span class="line">    <span class="type">int</span> d,c;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(stu x,stu y)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (x.c+x.d==y.c+y.d)&#123;</span><br><span class="line">        <span class="keyword">if</span> (x.d==y.d)&#123;</span><br><span class="line">            <span class="keyword">return</span> x.num&lt;y.num;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">return</span> x.d&gt;y.d;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">return</span> x.d+x.c&gt;y.d+y.c;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> n,l,h;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;l&gt;&gt;h;</span><br><span class="line">    stu a;</span><br><span class="line">    <span class="type">int</span> m=<span class="number">0</span>;</span><br><span class="line">    vector&lt;stu&gt; one,sec,thr,four;</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">        cin&gt;&gt;a.num&gt;&gt;a.d&gt;&gt;a.c;</span><br><span class="line">        <span class="keyword">if</span> (a.d&gt;=l&amp;&amp;a.c&gt;=l)&#123;</span><br><span class="line">            m++;</span><br><span class="line">            <span class="keyword">if</span> (a.d&gt;=h&amp;&amp;a.c&gt;=h)&#123;</span><br><span class="line">                one.<span class="built_in">push_back</span>(a);</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(a.d&gt;=h&amp;&amp;a.c&lt;h)&#123;</span><br><span class="line">                sec.<span class="built_in">push_back</span>(a);</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(a.d&lt;h&amp;&amp;a.c&lt;h&amp;&amp;a.d&gt;=a.c)&#123;</span><br><span class="line">                thr.<span class="built_in">push_back</span>(a);</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                four.<span class="built_in">push_back</span>(a);</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">sort</span>(one.<span class="built_in">begin</span>(),one.<span class="built_in">end</span>(),cmp);</span><br><span class="line">    <span class="built_in">sort</span>(sec.<span class="built_in">begin</span>(),sec.<span class="built_in">end</span>(),cmp);</span><br><span class="line">    <span class="built_in">sort</span>(thr.<span class="built_in">begin</span>(),thr.<span class="built_in">end</span>(),cmp);</span><br><span class="line">    <span class="built_in">sort</span>(four.<span class="built_in">begin</span>(),four.<span class="built_in">end</span>(),cmp);</span><br><span class="line">    cout&lt;&lt;m&lt;&lt;endl;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:one)&#123;</span><br><span class="line">        cout&lt;&lt;it.num&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;it.d&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;it.c&lt;&lt;endl;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:sec)&#123;</span><br><span class="line">        cout&lt;&lt;it.num&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;it.d&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;it.c&lt;&lt;endl;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:thr)&#123;</span><br><span class="line">        cout&lt;&lt;it.num&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;it.d&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;it.c&lt;&lt;endl;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:four)&#123;</span><br><span class="line">        cout&lt;&lt;it.num&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;it.d&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;it.c&lt;&lt;endl;</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>写代码的过程是很痛苦的，你应该庆幸的是学号只有八位不用开string</p><p>磨性子，耐心写写。</p><h2 id="1016">1016</h2><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></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">string a,b;</span><br><span class="line"><span class="type">int</span> Da,Db,suma=<span class="number">0</span>,sumb=<span class="number">0</span>;</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">    cin&gt;&gt;a&gt;&gt;Da&gt;&gt;b&gt;&gt;Db;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> c:a)&#123;</span><br><span class="line">        <span class="keyword">if</span> (c-<span class="string">&#x27;0&#x27;</span>==Da)&#123;</span><br><span class="line">            suma=suma*<span class="number">10</span>+Da;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> c:b)&#123;</span><br><span class="line">        <span class="keyword">if</span> (c-<span class="string">&#x27;0&#x27;</span>==Db)&#123;</span><br><span class="line">            sumb=sumb*<span class="number">10</span>+Db;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;suma+sumb&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>没有尝试过int会不会爆，有兴趣可以一试，我以防极端数据用了字符串。</p><h2 id="1017">1017</h2><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">string a;</span><br><span class="line"><span class="type">int</span> b;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;a&gt;&gt;b;</span><br><span class="line">    <span class="type">int</span> r=<span class="number">0</span>,num=<span class="number">0</span>;</span><br><span class="line">    string s,ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c:a)&#123;</span><br><span class="line">        num=r*<span class="number">10</span>+(c-<span class="string">&#x27;0&#x27;</span>);</span><br><span class="line">        s+=(num/b)+<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        r=num%b;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> pos=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (pos&lt;s.<span class="built_in">size</span>()<span class="number">-1</span>&amp;&amp;s[pos]==<span class="string">&#x27;0&#x27;</span>)&#123;</span><br><span class="line">        pos++;</span><br><span class="line">    &#125;</span><br><span class="line">    ans=s.<span class="built_in">substr</span>(pos);</span><br><span class="line">    cout&lt;&lt;ans&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;r&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>高精度除法，变态的模拟题。</p><h2 id="1018">1018</h2><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">int</span> a[<span class="number">3</span>][<span class="number">3</span>] = &#123;</span><br><span class="line">    &#123;<span class="number">0</span>, <span class="number">1</span>, <span class="number">-1</span>&#125;,</span><br><span class="line">    &#123;<span class="number">-1</span>, <span class="number">0</span>, <span class="number">1</span>&#125;,</span><br><span class="line">    &#123;<span class="number">1</span>, <span class="number">-1</span>, <span class="number">0</span>&#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> s1=<span class="number">0</span>,p1=<span class="number">0</span>,f1=<span class="number">0</span>;</span><br><span class="line"><span class="type">int</span> s2=<span class="number">0</span>,p2=<span class="number">0</span>,f2=<span class="number">0</span>;</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">    cin &gt;&gt; n;</span><br><span class="line">    map&lt;<span class="type">char</span>,<span class="type">int</span>&gt; m;</span><br><span class="line">    m[<span class="string">&#x27;C&#x27;</span>]=<span class="number">0</span>, m[<span class="string">&#x27;J&#x27;</span>]=<span class="number">1</span>, m[<span class="string">&#x27;B&#x27;</span>]=<span class="number">2</span>;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> win1[<span class="number">3</span>]=&#123;<span class="number">0</span>&#125;, win2[<span class="number">3</span>]=&#123;<span class="number">0</span>&#125;;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">while</span> (n--) &#123;</span><br><span class="line">        <span class="type">char</span> x,y;</span><br><span class="line">        cin &gt;&gt; x &gt;&gt; y;</span><br><span class="line">        <span class="type">int</span> c = m[x];</span><br><span class="line">        <span class="type">int</span> d = m[y];</span><br><span class="line">        <span class="keyword">if</span> (a[c][d] == <span class="number">0</span>) &#123;</span><br><span class="line">            p1++, p2++;</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span> (a[c][d] == <span class="number">1</span>) &#123;</span><br><span class="line">            s1++, f2++, win1[c]++;</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            s2++, f1++, win2[d]++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    cout &lt;&lt; s1 &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; p1 &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; f1 &lt;&lt; endl;</span><br><span class="line">    cout &lt;&lt; s2 &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; p2 &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; f2 &lt;&lt; endl;</span><br><span class="line"></span><br><span class="line">    <span class="type">char</span> gesture[<span class="number">3</span>] = &#123;<span class="string">&#x27;C&#x27;</span>,<span class="string">&#x27;J&#x27;</span>,<span class="string">&#x27;B&#x27;</span>&#125;;</span><br><span class="line">    <span class="type">int</span> order[<span class="number">3</span>] = &#123;<span class="number">2</span>,<span class="number">0</span>,<span class="number">1</span>&#125;; <span class="comment">// 按 B,C,J 优先级</span></span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> max1 = order[<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; <span class="number">3</span>; i++) &#123;</span><br><span class="line">        <span class="type">int</span> idx = order[i];</span><br><span class="line">        <span class="keyword">if</span> (win1[idx] &gt; win1[max1]) max1 = idx;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> max2 = order[<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; <span class="number">3</span>; i++) &#123;</span><br><span class="line">        <span class="type">int</span> idx = order[i];</span><br><span class="line">        <span class="keyword">if</span> (win2[idx] &gt; win2[max2]) max2 = idx;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    cout &lt;&lt; gesture[max1] &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; gesture[max2] &lt;&lt; endl;</span><br><span class="line"></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>这个题目可以用一串很长的if else干掉，但是你知道的，那样代码超级长，打表好写一点。</p><h2 id="1019">1019</h2><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></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">string <span class="title">to4</span><span class="params">(<span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">    string s = <span class="built_in">to_string</span>(n);</span><br><span class="line">    <span class="keyword">while</span> (s.<span class="built_in">size</span>() &lt; <span class="number">4</span>) s = <span class="string">&quot;0&quot;</span> + s;</span><br><span class="line">    <span class="keyword">return</span> s;</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="type">int</span> n;</span><br><span class="line">    cin &gt;&gt; n;</span><br><span class="line">    <span class="keyword">while</span> (<span class="literal">true</span>) &#123;</span><br><span class="line">        string s = <span class="built_in">to4</span>(n);</span><br><span class="line">        string s1 = s, s2 = s;</span><br><span class="line">        <span class="built_in">sort</span>(s<span class="number">1.</span><span class="built_in">begin</span>(), s<span class="number">1.</span><span class="built_in">end</span>(), <span class="built_in">greater</span>&lt;<span class="type">char</span>&gt;()); <span class="comment">// 降序</span></span><br><span class="line">        <span class="built_in">sort</span>(s<span class="number">2.</span><span class="built_in">begin</span>(), s<span class="number">2.</span><span class="built_in">end</span>());                  <span class="comment">// 升序</span></span><br><span class="line">        <span class="type">int</span> a = <span class="built_in">stoi</span>(s1);</span><br><span class="line">        <span class="type">int</span> b = <span class="built_in">stoi</span>(s2);</span><br><span class="line">        n = a - b;</span><br><span class="line">        cout &lt;&lt; s1 &lt;&lt; <span class="string">&quot; - &quot;</span> &lt;&lt; s2 &lt;&lt; <span class="string">&quot; = &quot;</span> &lt;&lt; <span class="built_in">to4</span>(n) &lt;&lt; endl;</span><br><span class="line">        <span class="keyword">if</span> (n == <span class="number">0</span> || n == <span class="number">6174</span>) <span class="keyword">break</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>保留前导0，纯神人来的。</p><p>to_string：数字转字符串</p><p>stoi()：字符串转数字</p><h2 id="1020">1020</h2><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">int</span> n;</span><br><span class="line"><span class="type">double</span> d;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">coke</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">double</span> k,p;</span><br><span class="line">&#125;a[<span class="number">1010</span>];</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(coke x,coke y)</span></span>&#123;</span><br><span class="line">    <span class="type">double</span> p1=x.p/x.k;</span><br><span class="line">    <span class="type">double</span> p2=y.p/y.k;</span><br><span class="line">    <span class="keyword">return</span> p1&gt;=p2;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;d;</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;a[i].k;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;a[i].p;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(a,a+n,cmp);</span><br><span class="line">    <span class="type">double</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">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (a[i].k&gt;=d)&#123;</span><br><span class="line">            ans+=(a[i].p/a[i].k)*d;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            ans+=a[i].p;</span><br><span class="line">            d-=a[i].k;</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;%.2f&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><p>贪心算法模板题，如果不知道什么是贪心就说明你基础不扎实了，建议退出文档补修贪心。</p><h2 id="1021">1021</h2><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></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">string 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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">10</span>];</span><br><span class="line">    <span class="built_in">memset</span>(a,<span class="number">0</span>,<span class="built_in">sizeof</span>(a));</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c:n)&#123;</span><br><span class="line">        a[c-<span class="string">&#x27;0&#x27;</span>]++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;=<span class="number">9</span>;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (a[i]!=<span class="number">0</span>)&#123;</span><br><span class="line">            cout&lt;&lt;i&lt;&lt;<span class="string">&quot;:&quot;</span>&lt;&lt;a[i]&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="1022">1022</h2><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 class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> a,b,n,d;</span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;a&gt;&gt;b&gt;&gt;d;</span><br><span class="line">    n=a+b;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">    <span class="keyword">if</span> (n==<span class="number">0</span>)&#123;<span class="comment">//记得特判</span></span><br><span class="line">        cout&lt;&lt;<span class="number">0</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="keyword">while</span> (n&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(n%d);</span><br><span class="line">        n/=d;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=ans.<span class="built_in">size</span>()<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        cout&lt;&lt;ans[i];</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><h2 id="1023">1023</h2><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">vector&lt;<span class="type">int</span>&gt; ans,a;</span><br><span class="line"><span class="type">int</span> x,minn=<span class="number">10</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> j=<span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> t[<span class="number">10</span>];</span><br><span class="line">    <span class="built_in">memset</span>(t,<span class="number">0</span>,<span class="built_in">sizeof</span>(t));</span><br><span class="line">    <span class="keyword">while</span> (j&lt;<span class="number">10</span>)&#123;</span><br><span class="line">        cin&gt;&gt;x;</span><br><span class="line">        t[j]=x;</span><br><span class="line">        j++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;=<span class="number">9</span>;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (t[i]==<span class="number">0</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">while</span> (t[i]--)&#123;</span><br><span class="line">                a.<span class="built_in">push_back</span>(i);</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="type">int</span> flag=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:a)&#123;</span><br><span class="line">        <span class="keyword">if</span> (it!=<span class="number">0</span>)&#123;</span><br><span class="line">            minn=<span class="built_in">min</span>(it,minn);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:a)&#123;</span><br><span class="line">        <span class="keyword">if</span> (!flag&amp;&amp;it==minn)&#123;</span><br><span class="line">            flag=<span class="number">1</span>;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(it);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(ans.<span class="built_in">begin</span>(),ans.<span class="built_in">end</span>());</span><br><span class="line">    cout&lt;&lt;minn;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:ans)&#123;</span><br><span class="line">        cout&lt;&lt;it;</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>对于首位不能是0这个问题，我采取的方法是先找出这些数字中的非0最小值，然后维护另一个数组，为保证这个最小值只被去除一次，定义了flag变量进行标记，一旦去除，flag立刻重置为1，保证不会再去除第二个。</p><p>输出时只需要将非0最小值输出，紧跟着输出排序后的ans数组即可。</p><h2 id="1024">1024</h2><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">string a, num, b;</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">    cin &gt;&gt; a;</span><br><span class="line">    <span class="comment">// 处理数字部分（去掉 &#x27;+&#x27;）</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> c : a) &#123;</span><br><span class="line">        <span class="keyword">if</span> (c == <span class="string">&#x27;E&#x27;</span>) <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">if</span> (c == <span class="string">&#x27;+&#x27;</span>) <span class="keyword">continue</span>;</span><br><span class="line">        num += c;</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">auto</span> p = a.<span class="built_in">find</span>(<span class="string">&#x27;E&#x27;</span>);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = p + <span class="number">1</span>; i &lt; a.<span class="built_in">size</span>(); i++) b += a[i];</span><br><span class="line">    <span class="type">int</span> x = <span class="built_in">stoi</span>(b);</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 输出符号</span></span><br><span class="line">    <span class="keyword">if</span> (num[<span class="number">0</span>] == <span class="string">&#x27;-&#x27;</span>) &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;-&quot;</span>;</span><br><span class="line">        num = num.<span class="built_in">substr</span>(<span class="number">1</span>); <span class="comment">// 去掉负号</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="type">int</span> dot = num.<span class="built_in">find</span>(<span class="string">&#x27;.&#x27;</span>);</span><br><span class="line">    string digits = num.<span class="built_in">substr</span>(<span class="number">0</span>, dot) + num.<span class="built_in">substr</span>(dot + <span class="number">1</span>);</span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> (x &gt;= <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="comment">// 小数点右移</span></span><br><span class="line">        <span class="keyword">if</span> (x &gt;= (<span class="type">int</span>)num.<span class="built_in">size</span>() - dot - <span class="number">1</span>) &#123;</span><br><span class="line">            <span class="comment">// 移到末尾或更右 → 直接输出并补0</span></span><br><span class="line">            cout &lt;&lt; digits;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; x - (num.<span class="built_in">size</span>() - dot - <span class="number">1</span>); i++) cout &lt;&lt; <span class="string">&quot;0&quot;</span>;</span><br><span class="line">        &#125; <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> pos = dot + x; </span><br><span class="line">            cout &lt;&lt; digits.<span class="built_in">substr</span>(<span class="number">0</span>, pos) &lt;&lt; <span class="string">&quot;.&quot;</span> &lt;&lt; digits.<span class="built_in">substr</span>(pos);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        <span class="comment">// 小数点左移</span></span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;0.&quot;</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; -x - <span class="number">1</span>; i++) cout &lt;&lt; <span class="string">&quot;0&quot;</span>;</span><br><span class="line">        cout &lt;&lt; digits;</span><br><span class="line">    &#125;</span><br><span class="line"></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><h2 id="1025">1025</h2><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 class="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> add,data,next;</span><br><span class="line">&#125;;</span><br><span class="line">unordered_map&lt;<span class="type">int</span>,node&gt; a;</span><br><span class="line"><span class="type">int</span> beginn,n,k;</span><br><span class="line">node r;</span><br><span class="line">deque&lt;node&gt; d;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;beginn&gt;&gt;n&gt;&gt;k;</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">       cin&gt;&gt;r.add&gt;&gt;r.data&gt;&gt;r.next;</span><br><span class="line">       a[r.add]=r;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span>(beginn!=<span class="number">-1</span>)&#123;</span><br><span class="line">        d.<span class="built_in">push_back</span>(a[beginn]);</span><br><span class="line">        beginn=a[beginn].next;</span><br><span class="line">    &#125;</span><br><span class="line">    stack&lt;node&gt; s;</span><br><span class="line">    vector&lt;node&gt; ans;</span><br><span class="line">    <span class="keyword">while</span> (!d.<span class="built_in">empty</span>())&#123;</span><br><span class="line">        <span class="keyword">if</span> (d.<span class="built_in">size</span>()&lt;k)&#123;</span><br><span class="line">            <span class="keyword">while</span>(!d.<span class="built_in">empty</span>())&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(d.<span class="built_in">front</span>());</span><br><span class="line">                d.<span class="built_in">pop_front</span>();</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="type">int</span> x=k;</span><br><span class="line">            <span class="keyword">while</span>(x--)&#123;</span><br><span class="line">                s.<span class="built_in">push</span>(d.<span class="built_in">front</span>());</span><br><span class="line">                d.<span class="built_in">pop_front</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">while</span>(!s.<span class="built_in">empty</span>())&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(s.<span class="built_in">top</span>());</span><br><span class="line">                s.<span class="built_in">pop</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="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;(<span class="type">int</span>)ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i!=ans.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">            ans[i].next=ans[i<span class="number">+1</span>].add;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            ans[i].next=<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="keyword">auto</span> &amp;it:ans)&#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%05d %d &quot;</span>,it.add,it.data);</span><br><span class="line">        <span class="keyword">if</span> (it.next != <span class="number">-1</span>)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%05d\n&quot;</span>,it.next);</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;-1\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>前排提醒：如果现在还不知道链表是什么，搓不出来一条完整的单向链表/双向链表，那么你需要做的就是退出文档，补修链表相关知识</p><p>这一题我是受到了24年机考原题那题翻转链表的启发，然后劈里啪啦打了一大串代码，然后提交到PTA发生段错误，遂换方法。</p><p>链表类题目的基本套路就是把链表放到数组里面进行存储和处理，要注意的是，这题修改链表不是单纯的把链表结点结构体重新排序，排序完之后要修改链表每个节点的指向，这很重要。</p><p>至于链表地址的存储，我选择使用unordered_map，可以有效防止越界的出现，这个数据结构在哈希表中也有很广泛的应用。</p><p>反转的实现我采用了stack，利用先进后出的特性可以直接输出反转后结果。</p><p>然后就是修改节点指向，没什么好说的</p><p>这题写完之后可以在写一下PTA L2-022。</p><p>顺便附带上双端队列优化后的L2-022答案</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></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 class="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> add,data,next;</span><br><span class="line">&#125;;</span><br><span class="line">unordered_map&lt;<span class="type">int</span>,node&gt; m;</span><br><span class="line">deque&lt;node&gt; d;</span><br><span class="line"><span class="type">int</span> tbegin,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">    cin&gt;&gt;tbegin&gt;&gt;n;</span><br><span class="line">    node l;</span><br><span class="line">    <span class="keyword">while</span>(n--)&#123;</span><br><span class="line">        cin&gt;&gt;l.add&gt;&gt;l.data&gt;&gt;l.next;</span><br><span class="line">        m[l.add]=l;</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;node&gt; ans;</span><br><span class="line">    <span class="keyword">while</span>(tbegin!=<span class="number">-1</span>)&#123;</span><br><span class="line">        d.<span class="built_in">push_back</span>(m[tbegin]);</span><br><span class="line">        tbegin=m[tbegin].next;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (!d.<span class="built_in">empty</span>()) &#123;</span><br><span class="line">    <span class="keyword">if</span> (d.<span class="built_in">size</span>() &gt;= <span class="number">2</span>) &#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(d.<span class="built_in">back</span>());</span><br><span class="line">        ans.<span class="built_in">push_back</span>(d.<span class="built_in">front</span>());</span><br><span class="line">        d.<span class="built_in">pop_back</span>();</span><br><span class="line">        d.<span class="built_in">pop_front</span>();</span><br><span class="line">    &#125; <span class="keyword">else</span> &#123; </span><br><span class="line">        ans.<span class="built_in">push_back</span>(d.<span class="built_in">front</span>());</span><br><span class="line">        d.<span class="built_in">pop_front</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">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==ans.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">            ans[i].next=<span class="number">-1</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            ans[i].next=ans[i<span class="number">+1</span>].add;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:ans)&#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%05d %d &quot;</span>,it.add,it.data);</span><br><span class="line">        <span class="keyword">if</span> (it.next != <span class="number">-1</span>)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%05d\n&quot;</span>,it.next);</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;-1\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="1026">1026</h2><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></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">double</span> c1,c2;</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">    cin&gt;&gt;c1&gt;&gt;c2;</span><br><span class="line">    <span class="type">double</span> t1=(c2-c1)/<span class="number">100</span>;</span><br><span class="line">    <span class="type">int</span> t2=(c2-c1)/<span class="number">100</span>;</span><br><span class="line">    <span class="type">double</span> s1=t1-t2;</span><br><span class="line">    <span class="keyword">if</span> (s1&gt;=<span class="number">0.5</span>&amp;&amp;s1&lt;<span class="number">1</span>)&#123;</span><br><span class="line">        t2++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> hh=t2/<span class="number">3600</span>;</span><br><span class="line">    <span class="type">int</span> mm=(t2%<span class="number">3600</span>)/<span class="number">60</span>;</span><br><span class="line">    <span class="type">int</span> ss=t2%<span class="number">60</span>;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%02d:%02d:%02d&quot;</span>,hh,mm,ss);</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><h2 id="1027">1027</h2><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></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">vector&lt;<span class="type">int</span>&gt; <span class="title">a</span><span class="params">(<span class="number">1001</span>)</span></span>;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="type">char</span> f;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;f;</span><br><span class="line">    <span class="type">int</span> num=<span class="number">3</span>;</span><br><span class="line">    a[<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;=<span class="number">1000</span>;i++)&#123;</span><br><span class="line">        a[i]=num*<span class="number">2</span>;</span><br><span class="line">        num+=<span class="number">2</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">sum</span><span class="params">(<span class="number">1005</span>)</span></span>;</span><br><span class="line">    <span class="built_in">partial_sum</span>(a.<span class="built_in">begin</span>(),a.<span class="built_in">end</span>(),sum.<span class="built_in">begin</span>());<span class="comment">//前缀和函数，用于快速求前缀和</span></span><br><span class="line">    <span class="type">int</span> c=<span class="number">0</span>;<span class="comment">//层数</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:sum)&#123;</span><br><span class="line">        <span class="keyword">if</span> (it&gt;n)&#123;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            c++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> x=<span class="number">0</span>,y=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=c<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==<span class="number">0</span>)&#123;</span><br><span class="line">            x=((a[c<span class="number">-1</span>]/<span class="number">2</span>)<span class="number">-1</span>)/<span class="number">2</span>;</span><br><span class="line">            <span class="keyword">while</span>(x--)&#123;</span><br><span class="line">                cout&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            cout&lt;&lt;f&lt;&lt;endl;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            x=((a[c<span class="number">-1</span>]/<span class="number">2</span>)-(a[i]/<span class="number">2</span>))/<span class="number">2</span>;</span><br><span class="line">            <span class="keyword">while</span> (x--)&#123;</span><br><span class="line">                cout&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            y=a[i]/<span class="number">2</span>;</span><br><span class="line">            <span class="keyword">while</span> (y--)&#123;</span><br><span class="line">                cout&lt;&lt;f;</span><br><span class="line">            &#125;</span><br><span class="line">            cout&lt;&lt;endl;</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;=c<span class="number">-1</span>;i++)&#123;</span><br><span class="line">        x=((a[c<span class="number">-1</span>]/<span class="number">2</span>)-(a[i]/<span class="number">2</span>))/<span class="number">2</span>;</span><br><span class="line">            <span class="keyword">while</span> (x--)&#123;</span><br><span class="line">                cout&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            y=a[i]/<span class="number">2</span>;</span><br><span class="line">            <span class="keyword">while</span> (y--)&#123;</span><br><span class="line">                cout&lt;&lt;f;</span><br><span class="line">            &#125;</span><br><span class="line">            cout&lt;&lt;endl;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;n-sum[c<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><p>前缀和模板题，最丧心病狂的在于输出那个过程（是的我确实很讨厌模拟）</p><p>模板题没什么可讲的，不知道前缀和的去补修一下，补修完了绝对会做。</p><h2 id="1028">1028</h2><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></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">int</span> n;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">man</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    string name;</span><br><span class="line">    <span class="type">int</span> yyyy,mm,dd;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(man x,man y)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (x.yyyy==y.yyyy)&#123;</span><br><span class="line">        <span class="keyword">if</span> (x.mm==y.mm)&#123;</span><br><span class="line">            <span class="keyword">return</span> x.dd&lt;y.dd;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">return</span> x.mm&lt;y.mm;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">return</span> x.yyyy&lt;y.yyyy;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line">vector&lt;man&gt; add;</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">    cin&gt;&gt;n;</span><br><span class="line">    man r;</span><br><span class="line">    <span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span>(n--)&#123;</span><br><span class="line">        cin&gt;&gt;r.name;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d/%d/%d&quot;</span>,&amp;r.yyyy,&amp;r.mm,&amp;r.dd);</span><br><span class="line">        <span class="keyword">if</span> (r.yyyy&gt;<span class="number">2014</span>||r.yyyy&lt;<span class="number">1814</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(r.yyyy==<span class="number">2014</span>&amp;&amp;r.mm&gt;<span class="number">9</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(r.yyyy==<span class="number">2014</span>&amp;&amp;r.mm==<span class="number">9</span>&amp;&amp;r.dd&gt;<span class="number">6</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(r.yyyy==<span class="number">1814</span>&amp;&amp;r.mm&lt;<span class="number">9</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(r.yyyy==<span class="number">1814</span>&amp;&amp;r.mm==<span class="number">9</span>&amp;&amp;r.dd&lt;<span class="number">6</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(r.mm&gt;<span class="number">12</span>||r.dd&gt;<span class="number">31</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            add.<span class="built_in">push_back</span>(r);</span><br><span class="line">            sum++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (sum==<span class="number">0</span>)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="number">0</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="built_in">sort</span>(add.<span class="built_in">begin</span>(),add.<span class="built_in">end</span>(),cmp);</span><br><span class="line">        cout&lt;&lt;sum&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;add[<span class="number">0</span>].name&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;add[add.<span class="built_in">size</span>()<span class="number">-1</span>].name;</span><br><span class="line">    &#125;</span><br><span class="line">    </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><h2 id="1029">1029</h2><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></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">string a,b;</span><br><span class="line">unordered_set&lt;<span class="type">char</span>&gt; used;</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">    cin&gt;&gt;a&gt;&gt;b;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;b.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        b[i]=<span class="built_in">toupper</span>(b[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c:a)&#123;</span><br><span class="line">        <span class="type">char</span> c1=<span class="built_in">toupper</span>(c);</span><br><span class="line">        <span class="keyword">if</span> (b.<span class="built_in">find</span>(c1)==string::npos&amp;&amp;!used.<span class="built_in">count</span>(c1))&#123;</span><br><span class="line">            cout&lt;&lt;c1;</span><br><span class="line">            used.<span class="built_in">insert</span>(c1);</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>这题用STL中的find就很好解答，然后建立一个集合就可以保证只被输出一次，但是陈越搞了个很抽象的东西，大小写一律只输出大写，这个没搞好会晕晕绕绕的。遂干脆把b里面全部转化为大写进行判断。</p><h2 id="1030">1030</h2><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 class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"><span class="type">int</span> n,p;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; a;</span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;p;</span><br><span class="line">    <span class="type">int</span> x;</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">        cin&gt;&gt;x;</span><br><span class="line">        a.<span class="built_in">push_back</span>(x);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(a.<span class="built_in">begin</span>(),a.<span class="built_in">end</span>());</span><br><span class="line">    <span class="type">int</span> l=<span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> ans=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> r=<span class="number">0</span>;r&lt;a.<span class="built_in">size</span>();)&#123;</span><br><span class="line">        <span class="keyword">if</span> (a[l]*p&gt;=a[r])&#123;</span><br><span class="line">            ans=<span class="built_in">max</span>(ans,r-l<span class="number">+1</span>);</span><br><span class="line">            r++;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(a[l]*p&lt;a[r])&#123;</span><br><span class="line">            l++;</span><br><span class="line">            <span class="keyword">if</span> (l&gt;r) r=l;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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>这题主要涉及的算法是双指针，或许可以换一个说法叫做单调性枚举</p><p>思路非常简单，由于要选取最大值和最小值，我们直接采用一个排序，也就是sort。</p><p>sort函数默认是从小到大排序的，因此我们选定的一个区间内的左端点就是最小值，右端点就是最大值。</p><p>一旦满足条件，就说明最大值不够大了，将右指针向右边移动，同理，不满足情况就移动左指针。</p><p>这里有一个小细节需要注意一下啊，如果左指针超过右指针了，需要移动右指针到左指针位置</p><p>在每次满足的地方收集一下答案就可以，最后输出答案。</p><p>这里讲一个题外话啊，我刚开始看这一题的时候看成了要求一个固定区间，就是不让我打乱顺序了，洋洋洒洒写了个单调双端队列，然后直接爆0。</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">int</span> n,p;</span><br><span class="line">deque&lt;<span class="type">int</span>&gt; maxx;</span><br><span class="line">deque&lt;<span class="type">int</span>&gt; minn;</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">    cin&gt;&gt;n&gt;&gt;p;</span><br><span class="line">    <span class="type">int</span> x;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; a;</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">        cin&gt;&gt;x;</span><br><span class="line">        a.<span class="built_in">push_back</span>(x);</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="type">int</span> l=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> r=<span class="number">0</span>;r&lt;a.<span class="built_in">size</span>();r++)&#123;<span class="comment">//注意，单调双端队列存储的是下标</span></span><br><span class="line">        <span class="keyword">while</span>(!maxx.<span class="built_in">empty</span>()&amp;&amp;a[maxx.<span class="built_in">back</span>()]&lt;=a[r])&#123;</span><br><span class="line">            maxx.<span class="built_in">pop_back</span>();</span><br><span class="line">        &#125;</span><br><span class="line">        maxx.<span class="built_in">push_back</span>(r);</span><br><span class="line">        <span class="keyword">while</span>(!minn.<span class="built_in">empty</span>()&amp;&amp;a[minn.<span class="built_in">back</span>()]&gt;=a[r])&#123;</span><br><span class="line">            minn.<span class="built_in">pop_back</span>();</span><br><span class="line">        &#125;</span><br><span class="line">        minn.<span class="built_in">push_back</span>(r);</span><br><span class="line">        <span class="keyword">while</span>(!maxx.<span class="built_in">empty</span>()&amp;&amp;!minn.<span class="built_in">empty</span>()&amp;&amp;a[minn.<span class="built_in">front</span>()]*p&lt;a[maxx.<span class="built_in">front</span>()])&#123;</span><br><span class="line">            <span class="keyword">if</span> (minn.<span class="built_in">front</span>()==l)&#123;</span><br><span class="line">                minn.<span class="built_in">pop_front</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (maxx.<span class="built_in">front</span>()==l)&#123;</span><br><span class="line">                maxx.<span class="built_in">pop_front</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            l++;</span><br><span class="line">        &#125;</span><br><span class="line">        ans=<span class="built_in">max</span>(ans,r-l<span class="number">+1</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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>这个不会也无所谓，因为单调双端队列结合双指针确实太难了。</p><h2 id="1031">1031</h2><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></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">string a;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="type">int</span> q[<span class="number">17</span>]=&#123;<span class="number">7</span>,<span class="number">9</span>,<span class="number">10</span>,<span class="number">5</span>,<span class="number">8</span>,<span class="number">4</span>,<span class="number">2</span>,<span class="number">1</span>,<span class="number">6</span>,<span class="number">3</span>,<span class="number">7</span>,<span class="number">9</span>,<span class="number">10</span>,<span class="number">5</span>,<span class="number">8</span>,<span class="number">4</span>,<span class="number">2</span>&#125;;</span><br><span class="line"><span class="type">char</span> d[<span class="number">11</span>]=&#123;<span class="string">&#x27;1&#x27;</span>,<span class="string">&#x27;0&#x27;</span>,<span class="string">&#x27;X&#x27;</span>,<span class="string">&#x27;9&#x27;</span>,<span class="string">&#x27;8&#x27;</span>,<span class="string">&#x27;7&#x27;</span>,<span class="string">&#x27;6&#x27;</span>,<span class="string">&#x27;5&#x27;</span>,<span class="string">&#x27;4&#x27;</span>,<span class="string">&#x27;3&#x27;</span>,<span class="string">&#x27;2&#x27;</span>&#125;;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <span class="type">int</span> cant=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">        cin&gt;&gt;a;</span><br><span class="line">        <span class="type">int</span> sum=<span class="number">0</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">0</span>;i&lt;<span class="number">17</span>;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> ((a[i]&gt;=<span class="string">&#x27;A&#x27;</span>&amp;&amp;a[i]&lt;=<span class="string">&#x27;Z&#x27;</span>)||(a[i]&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;a[i]&lt;=<span class="string">&#x27;z&#x27;</span>))&#123;</span><br><span class="line">                flag=<span class="number">1</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                <span class="type">int</span> num=(a[i]-<span class="string">&#x27;0&#x27;</span>)*q[i];</span><br><span class="line">                sum+=num;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (flag)&#123;</span><br><span class="line">            cout&lt;&lt;a&lt;&lt;endl;</span><br><span class="line">            cant++;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">if</span> (d[sum%<span class="number">11</span>]==a[<span class="number">17</span>])&#123;</span><br><span class="line">                <span class="keyword">continue</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                cout&lt;&lt;a&lt;&lt;endl;</span><br><span class="line">                cant++;</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> (cant==<span class="number">0</span>)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;All passed&quot;</span>&lt;&lt;endl;</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><h2 id="1032">1032</h2><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></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 class="type">int</span> n;</span><br><span class="line"><span class="type">int</span> a[<span class="number">100005</span>];</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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="type">int</span> num,gpa;</span><br><span class="line">    <span class="type">int</span> m=n;</span><br><span class="line">    <span class="built_in">memset</span>(a,<span class="number">0</span>,<span class="built_in">sizeof</span>(a));</span><br><span class="line">    <span class="keyword">while</span>(m--)&#123;</span><br><span class="line">        cin&gt;&gt;num&gt;&gt;gpa;</span><br><span class="line">        a[num]+=gpa;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> maxx=a[<span class="number">1</span>],maxnum=<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]&gt;maxx)&#123;</span><br><span class="line">            maxx=a[i];</span><br><span class="line">            maxnum=i;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;maxnum&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;maxx;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;<span class="comment">//传统派数组解法</span></span><br></pre></td></tr></table></figure><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></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">    cin &gt;&gt; n;</span><br><span class="line"></span><br><span class="line">    map&lt;<span class="type">int</span>, <span class="type">int</span>&gt; score;  <span class="comment">// key=学校编号，value=总分</span></span><br><span class="line">    <span class="type">int</span> num, gpa;</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; num &gt;&gt; gpa;</span><br><span class="line">        score[num] += gpa;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> maxnum = <span class="number">0</span>, maxx = <span class="number">-1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> &amp;p : score) &#123;</span><br><span class="line">        <span class="keyword">if</span> (p.second &gt; maxx) &#123;</span><br><span class="line">            maxx = p.second;</span><br><span class="line">            maxnum = p.first;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    cout &lt;&lt; maxnum &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; maxx;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;<span class="comment">//非传统派map解法</span></span><br></pre></td></tr></table></figure><p>数组解法容易踩坑，就是如果这些人全部都是0分呢。</p><h2 id="1033">1033</h2><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></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">string a,b;</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">if</span> (!<span class="built_in">getline</span>(cin, a)) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">if</span> (!<span class="built_in">getline</span>(cin, b)) b = <span class="string">&quot;&quot;</span>;</span><br><span class="line">    string word;</span><br><span class="line">    <span class="type">int</span> flag=<span class="number">0</span>;<span class="comment">//这个变量用来记录上档键坏掉了没1坏0好</span></span><br><span class="line">    <span class="keyword">auto</span> p=a.<span class="built_in">find</span>(<span class="string">&#x27;+&#x27;</span>);</span><br><span class="line">    <span class="keyword">if</span> (p!=string::npos)&#123;</span><br><span class="line">        flag=<span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (flag==<span class="number">1</span>)&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">char</span> c:b)&#123;</span><br><span class="line">            <span class="keyword">if</span> (c&gt;=<span class="string">&#x27;A&#x27;</span>&amp;&amp;c&lt;=<span class="string">&#x27;Z&#x27;</span>)&#123;</span><br><span class="line">                <span class="keyword">continue</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(c&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;c&lt;=<span class="string">&#x27;z&#x27;</span>)&#123;</span><br><span class="line">                p=a.<span class="built_in">find</span>(<span class="built_in">toupper</span>(c));</span><br><span class="line">                <span class="keyword">if</span> (p!=string::npos)&#123;</span><br><span class="line">                    <span class="keyword">continue</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    word+=c;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                p=a.<span class="built_in">find</span>(c);</span><br><span class="line">                <span class="keyword">if</span> (p!=string::npos)&#123;</span><br><span class="line">                    <span class="keyword">continue</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    word+=c;</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 class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">char</span> c:b)&#123;</span><br><span class="line">            <span class="type">char</span> c1=<span class="built_in">toupper</span>(c);</span><br><span class="line">            p=a.<span class="built_in">find</span>(c1);</span><br><span class="line">            <span class="keyword">if</span> (p!=string::npos)&#123;</span><br><span class="line">                <span class="keyword">continue</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                word+=c;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;word;</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>看到我代码的6和7行，为什么这里要这么写而不是用一般的cin呢？</p><p>很简单，因为题目有一个测试样例是没有坏键，这样的话，读入会发生很严重的错误，用getline就会解决这个问题。</p><blockquote><p>这里我只看到了满满的恶意，我挂在这里了好几次，问GPT好几次它也没找出来，到最后才发现，可见这个点有多么刁钻。</p></blockquote><h2 id="1034">1034</h2><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><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><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</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="keyword">struct</span> <span class="title class_">Fraction</span> &#123;</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> num, den; <span class="comment">// 分子、分母</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="function"><span class="type">long</span> <span class="type">long</span> <span class="title">gcd</span><span class="params">(<span class="type">long</span> <span class="type">long</span> a, <span class="type">long</span> <span class="type">long</span> b)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">return</span> b == <span class="number">0</span> ? <span class="built_in">abs</span>(a) : <span class="built_in">gcd</span>(b, a % b);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 约分 &amp; 保证分母为正</span></span><br><span class="line"><span class="function">Fraction <span class="title">reduction</span><span class="params">(Fraction f)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (f.den &lt; <span class="number">0</span>) &#123; <span class="comment">// 让分母始终为正</span></span><br><span class="line">        f.den = -f.den;</span><br><span class="line">        f.num = -f.num;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (f.num == <span class="number">0</span>) &#123;</span><br><span class="line">        f.den = <span class="number">1</span>; <span class="comment">// 0 的分母设为 1</span></span><br><span class="line">        <span class="keyword">return</span> f;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> g = <span class="built_in">gcd</span>(f.num, f.den);</span><br><span class="line">    f.num /= g;</span><br><span class="line">    f.den /= g;</span><br><span class="line">    <span class="keyword">return</span> f;</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="function"><span class="type">void</span> <span class="title">printFraction</span><span class="params">(Fraction f)</span> </span>&#123;</span><br><span class="line">    f = <span class="built_in">reduction</span>(f);</span><br><span class="line">    <span class="type">bool</span> negative = f.num &lt; <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">if</span> (negative) cout &lt;&lt; <span class="string">&quot;(&quot;</span>;</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> n = f.num, d = f.den;</span><br><span class="line">    <span class="keyword">if</span> (n % d == <span class="number">0</span>) &#123;</span><br><span class="line">        cout &lt;&lt; n / d;</span><br><span class="line">    &#125; <span class="keyword">else</span> <span class="keyword">if</span> (<span class="built_in">abs</span>(n) &gt; d) &#123;</span><br><span class="line">        cout &lt;&lt; n / d &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; <span class="built_in">abs</span>(n) % d &lt;&lt; <span class="string">&quot;/&quot;</span> &lt;&lt; d;</span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        cout &lt;&lt; n &lt;&lt; <span class="string">&quot;/&quot;</span> &lt;&lt; d;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (negative) cout &lt;&lt; <span class="string">&quot;)&quot;</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="function">Fraction <span class="title">add</span><span class="params">(Fraction a, Fraction b)</span> </span>&#123;</span><br><span class="line">    Fraction r;</span><br><span class="line">    r.num = a.num * b.den + b.num * a.den;</span><br><span class="line">    r.den = a.den * b.den;</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">reduction</span>(r);</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="function">Fraction <span class="title">sub</span><span class="params">(Fraction a, Fraction b)</span> </span>&#123;</span><br><span class="line">    Fraction r;</span><br><span class="line">    r.num = a.num * b.den - b.num * a.den;</span><br><span class="line">    r.den = a.den * b.den;</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">reduction</span>(r);</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="function">Fraction <span class="title">mul</span><span class="params">(Fraction a, Fraction b)</span> </span>&#123;</span><br><span class="line">    Fraction r;</span><br><span class="line">    r.num = a.num * b.num;</span><br><span class="line">    r.den = a.den * b.den;</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">reduction</span>(r);</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="function">Fraction <span class="title">divide</span><span class="params">(Fraction a, Fraction b)</span> </span>&#123;</span><br><span class="line">    Fraction r;</span><br><span class="line">    r.num = a.num * b.den;</span><br><span class="line">    r.den = a.den * b.num;</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">reduction</span>(r);</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">    string s1, s2;</span><br><span class="line">    cin &gt;&gt; s1 &gt;&gt; s2;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 解析输入</span></span><br><span class="line">    Fraction A, B;</span><br><span class="line">    <span class="built_in">sscanf</span>(s<span class="number">1.</span><span class="built_in">c_str</span>(), <span class="string">&quot;%lld/%lld&quot;</span>, &amp;A.num, &amp;A.den);</span><br><span class="line">    <span class="built_in">sscanf</span>(s<span class="number">2.</span><span class="built_in">c_str</span>(), <span class="string">&quot;%lld/%lld&quot;</span>, &amp;B.num, &amp;B.den);</span><br><span class="line"></span><br><span class="line">    A = <span class="built_in">reduction</span>(A);</span><br><span class="line">    B = <span class="built_in">reduction</span>(B);</span><br><span class="line"></span><br><span class="line">    <span class="comment">// A + B</span></span><br><span class="line">    <span class="built_in">printFraction</span>(A);</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot; + &quot;</span>;</span><br><span class="line">    <span class="built_in">printFraction</span>(B);</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot; = &quot;</span>;</span><br><span class="line">    <span class="built_in">printFraction</span>(<span class="built_in">add</span>(A, B));</span><br><span class="line">    cout &lt;&lt; endl;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// A - B</span></span><br><span class="line">    <span class="built_in">printFraction</span>(A);</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot; - &quot;</span>;</span><br><span class="line">    <span class="built_in">printFraction</span>(B);</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot; = &quot;</span>;</span><br><span class="line">    <span class="built_in">printFraction</span>(<span class="built_in">sub</span>(A, B));</span><br><span class="line">    cout &lt;&lt; endl;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// A * B</span></span><br><span class="line">    <span class="built_in">printFraction</span>(A);</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot; * &quot;</span>;</span><br><span class="line">    <span class="built_in">printFraction</span>(B);</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot; = &quot;</span>;</span><br><span class="line">    <span class="built_in">printFraction</span>(<span class="built_in">mul</span>(A, B));</span><br><span class="line">    cout &lt;&lt; endl;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// A / B</span></span><br><span class="line">    <span class="built_in">printFraction</span>(A);</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot; / &quot;</span>;</span><br><span class="line">    <span class="built_in">printFraction</span>(B);</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot; = &quot;</span>;</span><br><span class="line">    <span class="keyword">if</span> (B.num == <span class="number">0</span>) &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Inf&quot;</span>; <span class="comment">// 除数为 0</span></span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        <span class="built_in">printFraction</span>(<span class="built_in">divide</span>(A, B));</span><br><span class="line">    &#125;</span><br><span class="line">    cout &lt;&lt; endl;</span><br><span class="line"></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="1035">1035</h2><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></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, x;</span><br><span class="line">    cin &gt;&gt; n;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; a, 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><br><span class="line">        cin &gt;&gt; x;</span><br><span class="line">        a.<span class="built_in">push_back</span>(x);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; i++) &#123;</span><br><span class="line">        cin &gt;&gt; x;</span><br><span class="line">        b.<span class="built_in">push_back</span>(x);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; t = a;</span><br><span class="line"></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 class="comment">// i 表示正在插入第 i 个元素</span></span><br><span class="line">        <span class="built_in">sort</span>(t.<span class="built_in">begin</span>(), t.<span class="built_in">begin</span>() + i + <span class="number">1</span>);</span><br><span class="line">        <span class="keyword">if</span> (t == b) &#123;</span><br><span class="line">            <span class="built_in">sort</span>(t.<span class="built_in">begin</span>(), t.<span class="built_in">begin</span>() + i + <span class="number">2</span>);</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;Insertion Sort\n&quot;</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; n; j++) &#123;</span><br><span class="line">                <span class="keyword">if</span> (j) cout &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">                cout &lt;&lt; t[j];</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><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 归并排序模拟</span></span><br><span class="line">    t = a;</span><br><span class="line">    <span class="type">int</span> s = <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">while</span> (s &lt; n) &#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 += <span class="number">2</span> * s) &#123;</span><br><span class="line">            <span class="type">int</span> r = <span class="built_in">min</span>(i + <span class="number">2</span> * s, n);</span><br><span class="line">            <span class="built_in">sort</span>(t.<span class="built_in">begin</span>() + i, t.<span class="built_in">begin</span>() + r);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (t == b) &#123;</span><br><span class="line">            s *= <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; n; i += <span class="number">2</span> * s) &#123;</span><br><span class="line">                <span class="type">int</span> r = <span class="built_in">min</span>(i + <span class="number">2</span> * s, n);</span><br><span class="line">                <span class="built_in">sort</span>(t.<span class="built_in">begin</span>() + i, t.<span class="built_in">begin</span>() + r);</span><br><span class="line">            &#125;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;Merge Sort\n&quot;</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; n; j++) &#123;</span><br><span class="line">                <span class="keyword">if</span> (j) cout &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">                cout &lt;&lt; t[j];</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><span class="line">        s *= <span class="number">2</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>难点：什么是插入排序什么是归并排序。</p><p>插入排序好理解，这里重点介绍一下归并排序</p><blockquote><h1>归并排序（特别是题目里常用的“自底向上”/迭代版本）详解</h1><p>下面我用通俗的语言＋具体例子把归并排序每一步都拆开讲清楚，顺便说明 PAT B1035 里为什么要按 <code>s=1,2,4...</code> 这样检查中间状态，以及如何得到“下一步”的结果。</p><hr><h3 id="一、归并排序的核心思想（概念）">一、归并排序的核心思想（概念）</h3><p>归并排序是分治（divide-and-conquer）：</p><ol><li>把数组拆成若干个有序的小段（初始每个段长度为 1，显然已排序）。</li><li>把相邻的两个有序段合并成一个更长的有序段（长度翻倍）。</li><li>重复第 2 步直到整段有序。</li></ol><p>两种常见实现：</p><ul><li>递归（自顶向下）：把区间不断二分，底层合并上来。</li><li>迭代/自底向上：从段长 <code>s=1</code> 开始，每轮把相邻两段（各长 s）合并成长度 <code>2s</code> 的段，s *= 2。</li></ul><p>PAT B1035 常用的是第二种（便于模拟并逐轮检查中间状态）。</p><hr><h3 id="二、合并（merge）具体做法">二、合并（merge）具体做法</h3><p>合并两个已排序的子数组 <code>L</code> 和 <code>R</code>（长度分别为 s 或可能不足 s）：</p><ul><li>用两个指针 <code>i, j</code> 指向 <code>L</code> 和 <code>R</code> 的起始位置，</li><li>比较 <code>L[i]</code> 和 <code>R[j]</code>，把较小的放到结果中，移动对应指针，</li><li>直到一个子数组耗尽，把另一个剩余部分直接追加到结果。</li></ul><p>这个过程是稳定的，时间复杂度是 <code>O(len(L)+len(R))</code>。</p><p>实现上可以用手写合并（两个指针）或用 <code>std::inplace_merge</code> / <code>std::merge</code> / 甚至 <code>sort</code> 对那一整块做排序（但 <code>sort</code> 的语义更重，时间复杂度也高一点，但在 PAT 模拟中用 <code>sort</code> 对每个 2s 区间做排序也能得到相同的结果）。</p><hr><h3 id="三、逐轮（s-1-2-4-8…）示例（完整演示）">三、逐轮（s=1,2,4,8…）示例（完整演示）</h3><p>假设初始数组：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">A = [3, 1, 2, 8, 7, 5, 9, 4, 6, 0]</span><br></pre></td></tr></table></figure><p><strong>s = 1</strong>（把每对长度为1的相邻块合并）<br>处理块对： [3] &amp; [1], [2] &amp; [8], [7] &amp; [5], [9] &amp; [4], [6] &amp; [0]<br>合并后得到：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">after s=1: [1,3, 2,8, 5,7, 4,9, 0,6]</span><br></pre></td></tr></table></figure><p><strong>s = 2</strong>（把每对长度为2的相邻块合并）<br>处理块对： [1,3] &amp; [2,8] → [1,2,3,8]<br>[5,7] &amp; [4,9] → [4,5,7,9]<br>[0,6] （尾段没有伴侣，保持 [0,6]）<br>合并后：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">after s=2: [1,2,3,8, 4,5,7,9, 0,6]</span><br></pre></td></tr></table></figure><p><strong>s = 4</strong>（合并长度为4的块）<br>处理块对： [1,2,3,8] &amp; [4,5,7,9] → [1,2,3,4,5,7,8,9]<br>[0,6] 仍为尾段<br>合并后：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">after s=4: [1,2,3,4,5,7,8,9, 0,6]</span><br></pre></td></tr></table></figure><p><strong>s = 8</strong>（合并长度为8的块）<br>合并 [1…8] 和 [9…10]（即前 8 个与最后 2 个）：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">最终排序: [0,1,2,3,4,5,6,7,8,9]</span><br></pre></td></tr></table></figure><blockquote><p>注意：每一步（每次 s 倍增完成）你得到的数组就是一个“可观测的中间状态”。PAT 的 <code>B</code> 就可能等于其中某一轮结束后的数组。</p></blockquote><hr><h3 id="四、如何在题目中判定和给出“下一步”结果（实战要点）">四、如何在题目中判定和给出“下一步”结果（实战要点）</h3><ul><li>在模拟时，每完成一轮（即把所有 <code>i</code> 从 <code>0</code> 到 <code>n</code> 的 <code>2*s</code> 块处理完），就把当前数组和给定的 <code>B</code> 比较。</li><li>如果相等，说明 <code>B</code> 是在当前 <code>s</code> 完成后的状态。<strong>接下来你需要把 <code>s</code> 翻倍（<code>s \*= 2</code>），再做一次完整的合并（对所有长度为 <code>2\*s</code> 的区间合并/排序）得到“下一步”的数组并输出。</strong></li><li>特别注意：<strong>不要在单个块处理完成后就比较</strong>（题目要求快照是每轮结束后的状态）；也不要漏掉初始数组（<code>s=1</code> 之前的状态）这种边界。</li></ul><p>举例流程（伪步骤）：</p><ol><li>t = A，s = 1</li><li>对所有 i (步长 2*s) 做合并 -&gt; 得到 t</li><li>如果 t == B：那说明当前是 <code>s</code> 的状态，令 s *= 2，做一轮合并得到 next，输出 next。</li><li>否则 s *= 2，回到第2步，直到 s &gt;= n。</li></ol><hr><h3 id="五、代码提示（迭代合并，用-inplace-merge-更“正宗”）">五、代码提示（迭代合并，用 <code>inplace_merge</code> 更“正宗”）</h3><p>下面是把上面逻辑写成的关键片段（在完整程序里用来检测并输出下一步）。<code>inplace_merge</code> 会把 <code>[l, mid)</code> 与 <code>[mid, r)</code> 两个已排序区间合并为一个已排序区间。</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></pre></td><td class="code"><pre><span class="line"><span class="comment">// t 为当前数组拷贝，n 为长度</span></span><br><span class="line"><span class="type">int</span> s = <span class="number">1</span>;</span><br><span class="line"><span class="keyword">while</span> (s &lt; n) &#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 += <span class="number">2</span>*s) &#123;</span><br><span class="line">        <span class="type">int</span> mid = <span class="built_in">min</span>(i + s, n);</span><br><span class="line">        <span class="type">int</span> r = <span class="built_in">min</span>(i + <span class="number">2</span>*s, n);</span><br><span class="line">        <span class="keyword">if</span> (mid &lt; r) &#123;</span><br><span class="line">            <span class="built_in">inplace_merge</span>(t.<span class="built_in">begin</span>() + i, t.<span class="built_in">begin</span>() + mid, t.<span class="built_in">begin</span>() + r);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (t == B) &#123;</span><br><span class="line">        <span class="comment">// 找到匹配，执行下一轮</span></span><br><span class="line">        s *= <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; n; i += <span class="number">2</span>*s) &#123;</span><br><span class="line">            <span class="type">int</span> mid = <span class="built_in">min</span>(i + s, n);</span><br><span class="line">            <span class="type">int</span> r = <span class="built_in">min</span>(i + <span class="number">2</span>*s, n);</span><br><span class="line">            <span class="keyword">if</span> (mid &lt; r) <span class="built_in">inplace_merge</span>(t.<span class="built_in">begin</span>() + i, t.<span class="built_in">begin</span>() + mid, t.<span class="built_in">begin</span>() + r);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">// 输出 t 即为下一步结果</span></span><br><span class="line">        <span class="keyword">break</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    s *= <span class="number">2</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><blockquote><p>说明：之前很多同学用 <code>sort(t.begin()+i, t.begin()+r)</code> 来代替 <code>inplace_merge</code>，结果在行为上等价（因为合并后那段是有序的），在 PAT 的题目下用 <code>sort</code> 也能通过，写法更简单，但 <code>inplace_merge</code> 更接近真实归并逻辑且更高效。</p></blockquote><hr><h3 id="六、常见陷阱（注意点总结）">六、常见陷阱（注意点总结）</h3><ul><li><strong>比较时机</strong>：必须在每轮合并结束后比较 <code>t</code> 和 <code>B</code>，不是在合并单个块中间比较。</li><li><strong>尾段长度</strong>：当尾段不足 <code>s</code> 或不足 <code>2*s</code> 时也要正确处理（<code>mid=min(i+s,n)</code>， <code>r=min(i+2*s,n)</code>）。</li><li><strong>初始状态</strong>：有可能 <code>B</code> 等于初始数组（还没做任何合并），要考虑这种情况（通常在循环前比较一次或在 s=1 的循环中就能捕获）。</li><li><strong>稳定性/相等判断</strong>：务必用完整的数组比较（<code>t == B</code>），元素顺序必须完全一致。</li></ul><hr><p>如果你愿意，我可以：</p><ul><li>用你提供的具体 <code>A</code> 和 <code>B</code> 做一次可视化演示（逐轮列出数组），或者</li><li>把上面的 <code>inplace_merge</code> 版本写成完整的、可直接提交的 C++ 程序（包含插入排序判定 + 归并判定），方便你直接测试。</li></ul><p>你想要哪一个？</p></blockquote><h2 id="1036">1036</h2><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></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">int</span> n;</span><br><span class="line"><span class="type">char</span> b;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;b;</span><br><span class="line">    <span class="type">int</span> h;</span><br><span class="line">    <span class="keyword">if</span> (n%<span class="number">2</span>==<span class="number">0</span>)&#123;</span><br><span class="line">        h=n/<span class="number">2</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        h=n/<span class="number">2</span><span class="number">+1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">char</span>&gt;&gt; <span class="built_in">a</span>(h,<span class="built_in">vector</span>&lt;<span class="type">char</span>&gt;(n));</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;h;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;n;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (i==<span class="number">0</span>||i==h<span class="number">-1</span>)&#123;</span><br><span class="line">                a[i][j]=b;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                <span class="keyword">if</span> (j==<span class="number">0</span>||j==n<span class="number">-1</span>)&#123;</span><br><span class="line">                    a[i][j]=b;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    a[i][j]=<span class="string">&#x27; &#x27;</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">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;h;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;n;j++)&#123;</span><br><span class="line">            cout&lt;&lt;a[i][j];</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;endl;</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><h2 id="1037">1037</h2><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 class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"><span class="type">int</span> pg,ps,pk;</span><br><span class="line"><span class="type">int</span> ag,as,ak;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</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;%lld.%lld.%lld %lld.%lld.%lld&quot;</span>,&amp;pg,&amp;ps,&amp;pk,&amp;ag,&amp;as,&amp;ak);</span><br><span class="line">    <span class="type">int</span> ansg,anss,ansk;</span><br><span class="line">    <span class="type">int</span> sump=pk+ps*<span class="number">29</span>+pg*<span class="number">29</span>*<span class="number">17</span>;</span><br><span class="line">    <span class="type">int</span> suma=ak+as*<span class="number">29</span>+ag*<span class="number">29</span>*<span class="number">17</span>;</span><br><span class="line">    <span class="type">int</span> c=suma-sump;</span><br><span class="line">    <span class="keyword">if</span> (c&lt;<span class="number">0</span>)&#123;</span><br><span class="line">        c=-c;</span><br><span class="line">        ansg=c/<span class="number">493</span>;</span><br><span class="line">        anss=(c%<span class="number">493</span>)/<span class="number">29</span>;</span><br><span class="line">        ansk=c%<span class="number">29</span>;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;-&quot;</span>&lt;&lt;ansg&lt;&lt;<span class="string">&quot;.&quot;</span>&lt;&lt;anss&lt;&lt;<span class="string">&quot;.&quot;</span>&lt;&lt;ansk;</span><br><span class="line">    &#125;<span class="keyword">else</span> <span class="keyword">if</span>(c&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        ansg=c/<span class="number">493</span>;</span><br><span class="line">        anss=(c%<span class="number">493</span>)/<span class="number">29</span>;</span><br><span class="line">        ansk=c%<span class="number">29</span>;</span><br><span class="line">        cout&lt;&lt;ansg&lt;&lt;<span class="string">&quot;.&quot;</span>&lt;&lt;anss&lt;&lt;<span class="string">&quot;.&quot;</span>&lt;&lt;ansk;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;0.0.0&quot;</span>&lt;&lt;endl;</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><h2 id="1038">1038</h2><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></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">int</span> n,score,k;</span><br><span class="line">unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; hash1;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">        cin&gt;&gt;score;</span><br><span class="line">        hash1[score]++;</span><br><span class="line">    &#125;</span><br><span class="line">    cin&gt;&gt;k;</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="type">int</span> finds;</span><br><span class="line">        cin&gt;&gt;finds;</span><br><span class="line">        <span class="keyword">if</span> (i==k)&#123;</span><br><span class="line">            cout&lt;&lt;hash1[finds];</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;hash1[finds]&lt;&lt;<span class="string">&quot; &quot;</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="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>哈希表模板题，以分数为key，其实我觉得其他方法应该也可以是实现一样的效果。</p><p>但哈希表在极端数据下可能会更好用一点。</p><h2 id="1039">1039</h2><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">string a,b;</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">getline</span>(cin,a);</span><br><span class="line">    <span class="built_in">getline</span>(cin,b);</span><br><span class="line">    unordered_map&lt;<span class="type">char</span>,<span class="type">int</span>&gt; hasha;</span><br><span class="line">    unordered_map&lt;<span class="type">char</span>,<span class="type">int</span>&gt; hashb;</span><br><span class="line">    <span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">    <span class="type">bool</span> flag=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c:a)&#123;</span><br><span class="line">        hasha[c]++;</span><br><span class="line">    &#125;</span><br><span class="line">    set&lt;<span class="type">char</span>&gt; keyb;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c:b)&#123;</span><br><span class="line">        hashb[c]++;</span><br><span class="line">        keyb.<span class="built_in">insert</span>(c);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> c:keyb)&#123;</span><br><span class="line">        <span class="keyword">if</span> (hashb[c]&gt;hasha[c])&#123;</span><br><span class="line">            flag=<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">if</span> (flag)&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> c:keyb)&#123;</span><br><span class="line">            <span class="keyword">if</span> (hashb[c]&gt;hasha[c])&#123;</span><br><span class="line">                sum+=hashb[c]-hasha[c];</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        sum=a.<span class="built_in">size</span>()-b.<span class="built_in">size</span>();</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (flag)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;No &quot;</span>&lt;&lt;sum;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;Yes &quot;</span>&lt;&lt;sum;</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>依旧哈希表，将字符作为key，字符的数量就是值</p><p>将目标串和给定串里面每个字符的个数都统计出来，然后对目标串的元素进行去重，这里我采用的方法是利用set的自动去重特性（set的底层结构是红黑树，会把里面的元素自动排序，这一点要注意，不过这一题是顺序无关的，所以也就无所谓了）</p><p>我们最开始去遍历这个集合中所有的字符，如果发现有不足的，立马将flag重置为1，然后进行下一步处理，统计到底有多少个不足，把这个结果加到sum里面，最后输出即可。</p><p>如果flag是0，那sum等于什么还要我说吗？</p><blockquote><p>如果不想unordered_map的，可以试试看字符串哈希，当然这种方法我不推荐就是了，对这题有点太杀鸡焉用牛刀了。</p></blockquote><h2 id="1040">1040</h2><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></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">    string s;</span><br><span class="line">    cin &gt;&gt; s;</span><br><span class="line">    <span class="type">const</span> <span class="type">long</span> <span class="type">long</span> MOD = <span class="number">1000000007LL</span>;</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> cntP = <span class="number">0</span>, cntT = <span class="number">0</span>, ans = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 统计所有 T</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c : s) <span class="keyword">if</span> (c == <span class="string">&#x27;T&#x27;</span>) cntT++;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 一次遍历计算</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c : s) &#123;</span><br><span class="line">        <span class="keyword">if</span> (c == <span class="string">&#x27;P&#x27;</span>) &#123;</span><br><span class="line">            cntP++;</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span> (c == <span class="string">&#x27;A&#x27;</span>) &#123;</span><br><span class="line">            ans = (ans + cntP * cntT) % MOD;</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span> (c == <span class="string">&#x27;T&#x27;</span>) &#123;</span><br><span class="line">            cntT--;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    cout &lt;&lt; ans % MOD &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>我想的搜索，但发现不对，这个不是找连续子串，后来想的栈，但发现又不对。</p><p>然后我放弃了。</p><p>问了一下GPT，他给我的思路是这样的：</p><blockquote><p>先统计字符串中 <code>T</code> 的总数 <code>cntT</code>。</p><p>从左到右遍历：</p><ul><li>遇到 <code>P</code>：<code>cntP++</code></li><li>遇到 <code>A</code>：<code>ans += cntP * cntT</code>（模 <code>1e9+7</code>）</li><li>遇到 <code>T</code>：<code>cntT--</code></li></ul><p>时间 O(n)，空间 O(1)。</p></blockquote><p>纯数学题。</p><h2 id="1041">1041</h2><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></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;<span class="type">int</span>,<span class="type">int</span>&gt; a;</span><br><span class="line">map&lt;<span class="type">int</span>,string&gt; b;</span><br><span class="line"><span class="type">int</span> n,m,x,y;</span><br><span class="line">string s;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">        cin&gt;&gt;s&gt;&gt;x&gt;&gt;y;</span><br><span class="line">        a[x]=y;</span><br><span class="line">        b[x]=s;</span><br><span class="line">    &#125;</span><br><span class="line">    cin&gt;&gt;m;</span><br><span class="line">    <span class="keyword">while</span> (m--)&#123;</span><br><span class="line">        cin&gt;&gt;x;</span><br><span class="line">        cout&lt;&lt;b[x]&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;a[x]&lt;&lt;endl;</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>一秒想map，其他方法没试过。</p><h2 id="1042">1042</h2><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></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">string a;</span><br><span class="line">map&lt;<span class="type">char</span>,<span class="type">int</span>&gt; m;</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">getline</span>(cin,a);<span class="comment">//注意，测试样例里面的句子有空格，所以要记得用getline，否则会输入错误</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> &amp;c:a)&#123;</span><br><span class="line">        c=<span class="built_in">tolower</span>(c);</span><br><span class="line">    &#125;</span><br><span class="line">    set&lt;<span class="type">char</span>&gt; s;<span class="comment">//会自动按照字典序排序，很好用吧</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c:a)&#123;</span><br><span class="line">        <span class="keyword">if</span> (c&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;c&lt;=<span class="string">&#x27;z&#x27;</span>)&#123;</span><br><span class="line">            s.<span class="built_in">insert</span>(c);</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">char</span> c:a)&#123;</span><br><span class="line">        <span class="keyword">if</span> (c&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;c&lt;=<span class="string">&#x27;z&#x27;</span>)&#123;</span><br><span class="line">            m[c]++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">char</span> ans;</span><br><span class="line">    <span class="type">int</span> maxx=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> c:s)&#123;</span><br><span class="line">        <span class="keyword">if</span> (m[c]&gt;maxx)&#123;</span><br><span class="line">            ans=c;</span><br><span class="line">            maxx=m[c];</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;m[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="1043">1043</h2><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></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">string a;</span><br><span class="line">string res=<span class="string">&quot;PATest&quot;</span>;</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">getline</span>(cin,a);</span><br><span class="line">    <span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">    map&lt;<span class="type">char</span>,<span class="type">int</span>&gt; count;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c:a)&#123;</span><br><span class="line">        count[c]++;</span><br><span class="line">        <span class="keyword">if</span> (c==<span class="string">&#x27;P&#x27;</span>||c==<span class="string">&#x27;A&#x27;</span>||c==<span class="string">&#x27;T&#x27;</span>||c==<span class="string">&#x27;e&#x27;</span>||c==<span class="string">&#x27;s&#x27;</span>||c==<span class="string">&#x27;t&#x27;</span>)&#123;</span><br><span class="line">            sum++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (sum&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">char</span> c:res)&#123;</span><br><span class="line">            <span class="keyword">if</span> (count[c]!=<span class="number">0</span>)&#123;</span><br><span class="line">                cout&lt;&lt;c;</span><br><span class="line">                count[c]--;</span><br><span class="line">                sum--;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                <span class="keyword">continue</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="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>我第一遍看错题了，以为是要把原字符串的字符提取出来然后还要保留原顺序。</p><p>当时在想，这东西怎么这么变态？</p><p>后来再看了一下题，发现也还好。</p><p>简单来说，我们是要疯狂去用PATest这三个字母去组成目标字符串，那我们就统计一下这几个字符的数量，并且要记得统计这几个字符串的总数量。</p><p>17行开始是这串代码最重要的部分，我设置了一个while循环，循环进行的内部条件是sum大于0，在内部，我们重复遍历目标串，一旦发现这个字符还可以添加，那我们就输出，同时减掉这个字符的数目以及总数目，当sum为0时就可以退出循环了。</p><p>涉及的算法？只是个模拟罢了。</p><h2 id="1044">1044</h2><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="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    vector&lt;string&gt; low=&#123;<span class="string">&quot;tret&quot;</span>,<span class="string">&quot;jan&quot;</span>,<span class="string">&quot;feb&quot;</span>,<span class="string">&quot;mar&quot;</span>,<span class="string">&quot;apr&quot;</span>,<span class="string">&quot;may&quot;</span>,<span class="string">&quot;jun&quot;</span>,<span class="string">&quot;jly&quot;</span>,<span class="string">&quot;aug&quot;</span>,<span class="string">&quot;sep&quot;</span>,<span class="string">&quot;oct&quot;</span>,<span class="string">&quot;nov&quot;</span>,<span class="string">&quot;dec&quot;</span>&#125;;</span><br><span class="line">    vector&lt;string&gt; high=&#123;<span class="string">&quot;tam&quot;</span>,<span class="string">&quot;hel&quot;</span>,<span class="string">&quot;maa&quot;</span>,<span class="string">&quot;huh&quot;</span>,<span class="string">&quot;tou&quot;</span>,<span class="string">&quot;kes&quot;</span>,<span class="string">&quot;hei&quot;</span>,<span class="string">&quot;elo&quot;</span>,<span class="string">&quot;syy&quot;</span>,<span class="string">&quot;lok&quot;</span>,<span class="string">&quot;mer&quot;</span>,<span class="string">&quot;jou&quot;</span>&#125;;</span><br><span class="line">    unordered_map&lt;string,<span class="type">int</span>&gt; mp;</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">13</span>;i++) mp[low[i]]=i;</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">12</span>;i++) mp[high[i]]=(i<span class="number">+1</span>)*<span class="number">13</span>;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> N;cin&gt;&gt;N;cin.<span class="built_in">ignore</span>();</span><br><span class="line">    <span class="keyword">while</span>(N--)&#123;</span><br><span class="line">        string s;<span class="built_in">getline</span>(cin,s);</span><br><span class="line">        <span class="keyword">if</span>(<span class="built_in">isdigit</span>(s[<span class="number">0</span>]))&#123; <span class="comment">// 数字 -&gt; 火星文</span></span><br><span class="line">            <span class="type">int</span> x=<span class="built_in">stoi</span>(s),hi=x/<span class="number">13</span>,lo=x%<span class="number">13</span>;</span><br><span class="line">            <span class="keyword">if</span>(hi&amp;&amp;lo) cout&lt;&lt;high[hi<span class="number">-1</span>]&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;low[lo]&lt;&lt;<span class="string">&quot;\n&quot;</span>;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(hi) cout&lt;&lt;high[hi<span class="number">-1</span>]&lt;&lt;<span class="string">&quot;\n&quot;</span>;</span><br><span class="line">            <span class="keyword">else</span> cout&lt;&lt;low[lo]&lt;&lt;<span class="string">&quot;\n&quot;</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123; <span class="comment">// 火星文 -&gt; 数字</span></span><br><span class="line">            stringstream <span class="built_in">ss</span>(s);string a,b;ss&gt;&gt;a;</span><br><span class="line">            <span class="type">int</span> x=mp[a];</span><br><span class="line">            <span class="keyword">if</span>(ss&gt;&gt;b) x+=mp[b];</span><br><span class="line">            cout&lt;&lt;x&lt;&lt;<span class="string">&quot;\n&quot;</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><br></pre></td></tr></table></figure><p>题目很简单，但你知道的，PAT乙级思路基础，那写起来就不基础</p><p>这个东西就是要建立四个映射，两个用数组，两个用map，然后就很无聊了</p><p>这里讲一下20行的stringstream函数，这个可以快速拆分空格，有点好用，当然其实自己手搓也是可以。</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></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">    string s = <span class="string">&quot;123 456 abc&quot;</span>;</span><br><span class="line">    <span class="function">stringstream <span class="title">ss</span><span class="params">(s)</span></span>; <span class="comment">// 把 s 放进 ss</span></span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> a, b;</span><br><span class="line">    string c;</span><br><span class="line">    ss &gt;&gt; a &gt;&gt; b &gt;&gt; c; <span class="comment">// 像 cin 一样读</span></span><br><span class="line">    cout &lt;&lt; a &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; b &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; c; <span class="comment">// 123 456 abc</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>关键点：</strong></p><ul><li><code>stringstream ss(s)</code> 就像把字符串 <code>s</code> 变成一个 <code>cin</code>，可以用 <code>&gt;&gt;</code> 依次读取。</li><li>自动按空格、换行分割，不用自己写 <code>split</code>。</li></ul><blockquote><p>我要吐槽啊，陈越真的很喜欢思路基础code起来不基础的那种题，反正体验感不是很好（小声bb）</p></blockquote><h2 id="1045">1045</h2><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></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">int</span> n;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; num;</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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="type">int</span> x;</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">        cin&gt;&gt;x;</span><br><span class="line">        num.<span class="built_in">push_back</span>(x);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">uppp</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">loww</span><span class="params">(n)</span></span>;</span><br><span class="line">    stack&lt;<span class="type">int</span>&gt; s1,s2;</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">while</span>(!s<span class="number">1.</span><span class="built_in">empty</span>()&amp;&amp;num[s<span class="number">1.</span><span class="built_in">top</span>()]&lt;=num[i])&#123;</span><br><span class="line">            s<span class="number">1.</span><span class="built_in">pop</span>();</span><br><span class="line">        &#125;</span><br><span class="line">        uppp[i]=s<span class="number">1.</span><span class="built_in">empty</span>()?<span class="number">-1</span>:s<span class="number">1.</span><span class="built_in">top</span>();</span><br><span class="line">        s<span class="number">1.</span><span class="built_in">push</span>(i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        <span class="keyword">while</span>(!s<span class="number">2.</span><span class="built_in">empty</span>()&amp;&amp;num[s<span class="number">2.</span><span class="built_in">top</span>()]&gt;=num[i])&#123;</span><br><span class="line">            s<span class="number">2.</span><span class="built_in">pop</span>();</span><br><span class="line">        &#125;</span><br><span class="line">        loww[i]=s<span class="number">2.</span><span class="built_in">empty</span>()?<span class="number">-1</span>:s<span class="number">2.</span><span class="built_in">top</span>();</span><br><span class="line">        s<span class="number">2.</span><span class="built_in">push</span>(i);</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (loww[i]==<span class="number">-1</span>&amp;&amp;uppp[i]==<span class="number">-1</span>)&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(num[i]);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(ans.<span class="built_in">begin</span>(),ans.<span class="built_in">end</span>());</span><br><span class="line">    cout&lt;&lt;ans.<span class="built_in">size</span>()&lt;&lt;endl;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i) cout&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">        cout&lt;&lt;ans[i];</span><br><span class="line">    &#125;</span><br><span class="line">    cout&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>这题还是很有意思的。</p><p>我看到这一题的第一反应是单调栈，第二反应是前后缀最大最小值。</p><p>不知道单调栈的下面几行可以不用看了，等下我会写一篇前后缀最大最小值的题解</p><p>由于我前几天刚刚温习了一下单调栈，就用单调栈写了，实际上前后缀的做法是更好理解的。</p><p>如果这个元素满足条件，那么在它前面一定没有比它大的元素，在它的后面一定没有比他小的元素，那么很简单，单调栈就呼之欲出了。</p><p>单调栈算法比较常见的应用场景是寻找左右边第一个大于/小于自己的元素，并且在另一个数组容器中存储下标。而这一题我们也去找找。如果能找到，就存他的下标，找不到就把这个值设定为-1。</p><p>最后我们去遍历数组中元素，如果他的两个单调栈数组值都是-1，那么就说明这个元素符合条件，存入ans数组（这里我一定要吐槽啊，其实可以直接输出的，但是PAT天天都要求最后一个元素不能有空格）</p><p>然后输出ans数组就可以了。</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></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">    ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);<span class="comment">//这两行可以不用在意</span></span><br><span class="line">    <span class="type">int</span> n; <span class="keyword">if</span>(!(cin&gt;&gt;n)) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">a</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++) cin&gt;&gt;a[i];</span><br><span class="line"></span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">leftMax</span><span class="params">(n)</span>, <span class="title">rightMin</span><span class="params">(n)</span></span>;</span><br><span class="line">    leftMax[<span class="number">0</span>]=a[<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++) leftMax[i]=<span class="built_in">max</span>(leftMax[i<span class="number">-1</span>], a[i]);</span><br><span class="line">    rightMin[n<span class="number">-1</span>]=a[n<span class="number">-1</span>];</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=n<span class="number">-2</span>;i&gt;=<span class="number">0</span>;i--) rightMin[i]=<span class="built_in">min</span>(rightMin[i<span class="number">+1</span>], a[i]);</span><br><span class="line"></span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> ( (i==<span class="number">0</span> || a[i] &gt;= leftMax[i<span class="number">-1</span>]) &amp;&amp; (i==n<span class="number">-1</span> || a[i] &lt;= rightMin[i<span class="number">+1</span>]) )</span><br><span class="line">            ans.<span class="built_in">push_back</span>(a[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(ans.<span class="built_in">begin</span>(), ans.<span class="built_in">end</span>());</span><br><span class="line">    cout &lt;&lt; ans.<span class="built_in">size</span>() &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i) cout &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">        cout &lt;&lt; ans[i];</span><br><span class="line">    &#125;</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\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></pre></td></tr></table></figure><p>这个的做法也相当简单了，就是找到左右边的最大最小值，然后判断条件就行了，和leetcode那题接雨水有点像。</p><p>我是推荐写第二种方法的，当然第一种方法也是不错的，更有“算法竞赛”味不是？</p><p>单调栈win在复用性和模板性更强，前缀和win在更好理解。</p><h2 id="1046">1046</h2><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></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">int</span> n,numa,numb,ha,hb,wina=<span class="number">0</span>,winb=<span class="number">0</span>;</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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">        cin&gt;&gt;numa&gt;&gt;ha&gt;&gt;numb&gt;&gt;hb;</span><br><span class="line">        <span class="type">int</span> sum=numa+numb;</span><br><span class="line">        <span class="keyword">if</span> (sum==ha&amp;&amp;sum!=hb)&#123;</span><br><span class="line">            wina++;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(sum==hb&amp;sum!=ha)&#123;</span><br><span class="line">            winb++;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;winb&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;wina;</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><h2 id="1047">1047</h2><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></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">int</span> n,team,man,score;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; sum;</span><br><span class="line">    set&lt;<span class="type">int</span>&gt; key1;</span><br><span class="line">    <span class="keyword">while</span>(n--)&#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d-%d %d&quot;</span>,&amp;team,&amp;man,&amp;score);</span><br><span class="line">        sum[team]+=score;</span><br><span class="line">        key<span class="number">1.</span><span class="built_in">insert</span>(team);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> maxx=<span class="number">0</span>,maxteam;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:key1)&#123;</span><br><span class="line">        <span class="keyword">if</span> (sum[it]&gt;maxx)&#123;</span><br><span class="line">            maxx=sum[it];</span><br><span class="line">            maxteam=it;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;maxteam&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;maxx;</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>关于map类的应用我已经懒得赘述了，前面考了那么多应该要会了。</p><h2 id="1048">1048</h2><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">string a, b;</span><br><span class="line"><span class="type">char</span> s[<span class="number">15</span>] = &#123;<span class="string">&#x27;0&#x27;</span>,<span class="string">&#x27;1&#x27;</span>,<span class="string">&#x27;2&#x27;</span>,<span class="string">&#x27;3&#x27;</span>,<span class="string">&#x27;4&#x27;</span>,<span class="string">&#x27;5&#x27;</span>,<span class="string">&#x27;6&#x27;</span>,<span class="string">&#x27;7&#x27;</span>,<span class="string">&#x27;8&#x27;</span>,<span class="string">&#x27;9&#x27;</span>,<span class="string">&#x27;J&#x27;</span>,<span class="string">&#x27;Q&#x27;</span>,<span class="string">&#x27;K&#x27;</span>&#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">    cin &gt;&gt; a &gt;&gt; b;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 右对齐：补齐长度</span></span><br><span class="line">    <span class="keyword">while</span> (a.<span class="built_in">size</span>() &lt; b.<span class="built_in">size</span>()) a = <span class="string">&quot;0&quot;</span> + a;</span><br><span class="line">    <span class="keyword">while</span> (b.<span class="built_in">size</span>() &lt; a.<span class="built_in">size</span>()) b = <span class="string">&quot;0&quot;</span> + b;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> x, y, n;</span><br><span class="line">    <span class="type">int</span> len = b.<span class="built_in">size</span>();</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = len - <span class="number">1</span>, k = <span class="number">1</span>; i &gt;= <span class="number">0</span>; i--, k++) &#123;  <span class="comment">// k 从 1 开始，表示第 k 位（从右往左数）</span></span><br><span class="line">        x = b[i] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        y = a[i] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="keyword">if</span> (k % <span class="number">2</span> == <span class="number">1</span>) &#123; <span class="comment">// 奇数位</span></span><br><span class="line">            n = (x + y) % <span class="number">13</span>;</span><br><span class="line">            b[i] = s[n];</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;          <span class="comment">// 偶数位</span></span><br><span class="line">            n = x - y;</span><br><span class="line">            <span class="keyword">if</span> (n &lt; <span class="number">0</span>) n += <span class="number">10</span>;</span><br><span class="line">            b[i] = s[n];</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    cout &lt;&lt; b &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>注意一下a和b不一样长的问题。</p><h2 id="1049">1049</h2><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></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">long</span> <span class="type">long</span> n;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <span class="type">long</span> <span class="type">double</span> sum=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">long</span> <span class="type">long</span> i=<span class="number">0</span>; i&lt;n; i++) &#123;</span><br><span class="line">        <span class="type">long</span> <span class="type">double</span> x;</span><br><span class="line">        cin&gt;&gt;x;</span><br><span class="line">        sum+=x*(<span class="type">long</span> <span class="type">double</span>)(i<span class="number">+1</span>)*(n-i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%.2Lf\n&quot;</span>,sum); <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><p>我想，一定有小聪明蛋一开始想着前缀和，然后写出一个前缀和加双向遍历，喜提15分挂了两个测试点</p><p>因为时间复杂度n2了啊还能因为什么，自己想想是不是每个元素都被遍历了两次（</p><p>但这题本质上是数学题。</p><p>具体思路自己ai一下，我打不出公式</p><h2 id="1050">1050</h2><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><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</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">int</span> 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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">a</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;a[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(a.<span class="built_in">begin</span>(),a.<span class="built_in">end</span>(),<span class="built_in">greater</span>&lt;<span class="type">int</span>&gt;());</span><br><span class="line">    <span class="type">int</span> x=<span class="number">1</span>,y=n,j,minn=<span class="number">10000</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">1</span>;i*i&lt;=n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (n%i==<span class="number">0</span>)&#123;</span><br><span class="line">            j=n/i;</span><br><span class="line">            <span class="keyword">if</span> (j-i&lt;minn)&#123;</span><br><span class="line">                x=i;</span><br><span class="line">                y=j;</span><br><span class="line">                minn=j-i;</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="type">int</span> left=<span class="number">0</span>,right=x<span class="number">-1</span>,topp=<span class="number">0</span>,bottom=y<span class="number">-1</span>;</span><br><span class="line">    <span class="type">int</span> cur=<span class="number">0</span>;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">ans</span>(y,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(x));</span><br><span class="line">    <span class="keyword">while</span> (topp&lt;=bottom&amp;&amp;left&lt;=right)&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=left;i&lt;=right;i++)&#123;</span><br><span class="line">            ans[topp][i]=a[cur];</span><br><span class="line">            cur++;</span><br><span class="line">        &#125;</span><br><span class="line">        ++topp;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=topp;i&lt;=bottom;i++)&#123;</span><br><span class="line">            ans[i][right]=a[cur];</span><br><span class="line">            cur++;</span><br><span class="line">        &#125;</span><br><span class="line">        --right;</span><br><span class="line">        <span class="keyword">if</span> (topp&lt;=bottom)&#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i=right;i&gt;=left;i--)&#123;</span><br><span class="line">                ans[bottom][i]=a[cur];</span><br><span class="line">                cur++;</span><br><span class="line">            &#125;</span><br><span class="line">            --bottom;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (left&lt;=right)&#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i=bottom;i&gt;=topp;i--)&#123;</span><br><span class="line">                ans[i][left]=a[cur];</span><br><span class="line">                cur++;</span><br><span class="line">            &#125;</span><br><span class="line">            left++;</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">0</span>;i&lt;y;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;x;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (j==x<span class="number">-1</span>)&#123;</span><br><span class="line">                cout&lt;&lt;ans[i][j];</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                cout&lt;&lt;ans[i][j]&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;endl;</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>螺旋矩阵，数组类模拟最长的河最高的山，在2014年的NOIP普及组T3就是这个</p><p>螺旋矩阵事实上有一个用DFS的做法，但是别想那个了，那个包超时的，我以前练搜索的时候写过一次，递归层数太高了（等下下面贴上洛谷螺旋矩阵我的DFS做法）（找不到了，怎么回事呢）</p><p>为什么用模拟，很简单，模拟是最优算法。</p><p>这一题还和普通的螺旋矩阵不一样，它顺带要自己求长和宽。我们直接预设长和宽，然后从1开始到sqrt（n）进行遍历，这样子做可以确保我们用于遍历的变量i始终是相对小的那一个，然后用常规方法就可以求出长和宽了。</p><p>由于PTA的神必测评机，我特别喜欢把数据先存到数组里面然后再统一输出答案，然后看看螺旋矩阵最核心的部分，我们建立一个while循环，并且确定这个矩阵左右上下边界，先从最上面从左到右，接着再从上到下。每一次这个过程结束我们都需要剥去已经被填充了数字的那一层，即类似于我31行和36行的写法。最后输出答案。</p><h2 id="1051">1051</h2><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></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">double</span> r1,p1,r2,p2;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;r1&gt;&gt;p1&gt;&gt;r2&gt;&gt;p2;</span><br><span class="line">    <span class="type">double</span> r=r1*r2;</span><br><span class="line">    <span class="type">double</span> p=p1+p2;</span><br><span class="line">    <span class="type">double</span> a=r*<span class="built_in">cos</span>(p);</span><br><span class="line">    <span class="type">double</span> b=r*<span class="built_in">sin</span>(p);</span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">fabs</span>(a)&lt;<span class="number">0.005</span>) a=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">fabs</span>(b)&lt;<span class="number">0.005</span>) b=<span class="number">0</span>;<span class="comment">//注意浮点误差</span></span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span> (b&lt;<span class="number">0</span>)&#123;</span><br><span class="line">        b=-b;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%.2f-%.2fi&quot;</span>,a,b);</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%.2f+%.2fi&quot;</span>,a,b);</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>浮点误差，很重要。</p><h2 id="1052">1052</h2><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></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">vector&lt;string&gt; hand, eyes, mouth;</span><br><span class="line">string s;</span><br><span class="line"><span class="type">int</span> n, a, b, c, d, e;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">parse</span><span class="params">(vector&lt;string&gt; &amp;v)</span> </span>&#123;</span><br><span class="line">    string word;</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="type">int</span>)s.<span class="built_in">size</span>(); i++) &#123;</span><br><span class="line">        <span class="keyword">if</span> (s[i] == <span class="string">&#x27;[&#x27;</span>) &#123;</span><br><span class="line">            word.<span class="built_in">clear</span>();</span><br><span class="line">            <span class="type">bool</span> found = <span class="literal">false</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = i + <span class="number">1</span>; j &lt; (<span class="type">int</span>)s.<span class="built_in">size</span>(); j++) &#123; <span class="comment">// ✅ 加上 j &lt; s.size()</span></span><br><span class="line">                <span class="keyword">if</span> (s[j] == <span class="string">&#x27;]&#x27;</span>) &#123;</span><br><span class="line">                    v.<span class="built_in">push_back</span>(word);</span><br><span class="line">                    i = j;  <span class="comment">// ✅ 跳过已经处理的区间，避免重复</span></span><br><span class="line">                    found = <span class="literal">true</span>;</span><br><span class="line">                    <span class="keyword">break</span>;</span><br><span class="line">                &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                    word += s[j];</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (!found) <span class="keyword">break</span>; <span class="comment">// ✅ 没找到 &#x27;]&#x27; 直接退出，避免死循环</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><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">getline</span>(cin, s);</span><br><span class="line">    <span class="built_in">parse</span>(hand);</span><br><span class="line">    <span class="built_in">getline</span>(cin, s);</span><br><span class="line">    <span class="built_in">parse</span>(eyes);</span><br><span class="line">    <span class="built_in">getline</span>(cin, s);</span><br><span class="line">    <span class="built_in">parse</span>(mouth);</span><br><span class="line"></span><br><span class="line">    cin &gt;&gt; n;</span><br><span class="line">    <span class="keyword">while</span> (n--) &#123;</span><br><span class="line">        cin &gt;&gt; a &gt;&gt; b &gt;&gt; c &gt;&gt; d &gt;&gt; e;</span><br><span class="line">        <span class="comment">// ✅ 增加下界检查，避免 0 和负数导致崩溃</span></span><br><span class="line">        <span class="keyword">if</span> (a &lt; <span class="number">1</span> || b &lt; <span class="number">1</span> || c &lt; <span class="number">1</span> || d &lt; <span class="number">1</span> || e &lt; <span class="number">1</span> ||</span><br><span class="line">            a &gt; (<span class="type">int</span>)hand.<span class="built_in">size</span>() || b &gt; (<span class="type">int</span>)eyes.<span class="built_in">size</span>() ||</span><br><span class="line">            c &gt; (<span class="type">int</span>)mouth.<span class="built_in">size</span>() || d &gt; (<span class="type">int</span>)eyes.<span class="built_in">size</span>() ||</span><br><span class="line">            e &gt; (<span class="type">int</span>)hand.<span class="built_in">size</span>()) &#123;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;Are you kidding me? @\\/@\n&quot;</span>;</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            cout &lt;&lt; hand[a - <span class="number">1</span>] &lt;&lt; <span class="string">&quot;(&quot;</span> &lt;&lt; eyes[b - <span class="number">1</span>] &lt;&lt; mouth[c - <span class="number">1</span>] &lt;&lt; eyes[d - <span class="number">1</span>] &lt;&lt; <span class="string">&quot;)&quot;</span> &lt;&lt; hand[e - <span class="number">1</span>] &lt;&lt; <span class="string">&quot;\n&quot;</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="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>最难的地方在于把那几个符号全部搓出来，然后没了。</p><h2 id="1053">1053</h2><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></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, d;</span><br><span class="line">    <span class="type">double</span> e;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;e&gt;&gt;d;</span><br><span class="line">    <span class="type">int</span> maybe=<span class="number">0</span>, must=<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;n;i++) &#123;</span><br><span class="line">        <span class="type">int</span> k;</span><br><span class="line">        cin&gt;&gt;k;</span><br><span class="line">        <span class="type">int</span> day=<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;k;j++) &#123;</span><br><span class="line">            <span class="type">double</span> ei;</span><br><span class="line">            cin&gt;&gt;ei;</span><br><span class="line">            <span class="keyword">if</span> (ei&lt;e) day++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (k&lt;=d&amp;&amp;day&gt;k/<span class="number">2.0</span>) &#123;</span><br><span class="line">            maybe++;</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span> (k&gt;d&amp;&amp;day&gt;k/<span class="number">2.0</span>) &#123; </span><br><span class="line">            must++;</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;%.1f%% %.1f%%&quot;</span>,maybe*<span class="number">100.0</span>/n,must*<span class="number">100.0</span>/n);</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="1054">1054</h2><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></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">int</span> n; string num;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isnum</span><span class="params">(string a)</span></span>&#123;</span><br><span class="line">    <span class="keyword">try</span>&#123;</span><br><span class="line">        <span class="type">size_t</span> idx;</span><br><span class="line">        <span class="built_in">stod</span>(a,&amp;idx);</span><br><span class="line">        <span class="keyword">if</span>(idx!=a.<span class="built_in">size</span>()) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    &#125;<span class="built_in">catch</span>(...)&#123; <span class="keyword">return</span> <span class="literal">false</span>; &#125;</span><br><span class="line">    <span class="type">int</span> dot=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">char</span> c:a) <span class="keyword">if</span>(c==<span class="string">&#x27;.&#x27;</span>) dot++;</span><br><span class="line">    <span class="keyword">if</span>(dot&gt;<span class="number">1</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    <span class="type">size_t</span> pos=a.<span class="built_in">find</span>(<span class="string">&#x27;.&#x27;</span>);</span><br><span class="line">    <span class="keyword">if</span>(pos!=string::npos &amp;&amp; a.<span class="built_in">size</span>()-pos<span class="number">-1</span>&gt;<span class="number">2</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    <span class="type">double</span> val=<span class="built_in">stod</span>(a);</span><br><span class="line">    <span class="keyword">return</span> !(val&lt;<span class="number">-1000</span>||val&gt;<span class="number">1000</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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="type">double</span> sum=<span class="number">0</span>; <span class="type">int</span> m=<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;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;num;</span><br><span class="line">        <span class="keyword">if</span>(<span class="built_in">isnum</span>(num)) sum+=<span class="built_in">stod</span>(num),m++;</span><br><span class="line">        <span class="keyword">else</span> cout&lt;&lt;<span class="string">&quot;ERROR: &quot;</span>&lt;&lt;num&lt;&lt;<span class="string">&quot; is not a legal number&quot;</span>&lt;&lt;endl;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(m==<span class="number">0</span>) cout&lt;&lt;<span class="string">&quot;The average of 0 numbers is Undefined\n&quot;</span>;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(m==<span class="number">1</span>) <span class="built_in">printf</span>(<span class="string">&quot;The average of 1 number is %.2f\n&quot;</span>,sum);</span><br><span class="line">    <span class="keyword">else</span> <span class="built_in">printf</span>(<span class="string">&quot;The average of %d numbers is %.2f\n&quot;</span>,m,sum/m);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>依旧字符串模拟</p><p>讲一下那个try怎么用的</p><blockquote><p>你上一题的代码里 <code>try</code> 的作用就是<strong>安全地用 <code>stod</code> 把字符串转换成数字</strong>，防止程序崩溃。</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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isnum</span><span class="params">(string a)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">try</span> &#123;</span><br><span class="line">        <span class="type">size_t</span> idx;</span><br><span class="line">        <span class="built_in">stod</span>(a, &amp;idx);</span><br><span class="line">        <span class="keyword">if</span> (idx != a.<span class="built_in">size</span>()) <span class="keyword">return</span> <span class="literal">false</span>; <span class="comment">// 有多余字符</span></span><br><span class="line">    &#125; <span class="built_in">catch</span> (...) &#123;  <span class="comment">// ← 这里就是 try 的作用</span></span><br><span class="line">        <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    ...</span><br><span class="line">    <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>🔎 <strong>执行流程：</strong></p><ol><li><p><code>stod(a, &amp;idx)</code> 试图把字符串 <code>a</code> 转成 <code>double</code>。</p></li><li><p>如果 <code>a</code> 是非法字符串（比如 <code>&quot;abc&quot;</code>, <code>&quot;12..3&quot;</code>, <code>&quot;1e9999&quot;</code>），<code>stod</code> 会<strong>抛出异常</strong>：</p><ul><li><code>std::invalid_argument</code>（无法转换，比如 <code>abc</code>）</li><li><code>std::out_of_range</code>（数字太大，比如 <code>1e9999</code>）</li></ul></li><li><p><code>try</code> 会捕获到异常，不让程序崩溃，立刻跳到 <code>catch(...)</code> 执行：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">catch</span> (...) &#123; <span class="keyword">return</span> <span class="literal">false</span>; &#125;</span><br></pre></td></tr></table></figure><p>表示这个字符串不合法。</p></li></ol><p>如果没有 <code>try/catch</code>，遇到非法字符串时程序会直接终止（运行时错误）。</p><hr><p>✅ <strong>简化理解：</strong></p><ul><li><code>try</code> = 让程序“试一试”执行里面的代码</li><li>如果成功就继续往下走</li><li>如果失败（抛异常），就去 <code>catch</code> 执行，把错误“接住”</li><li>不会让程序崩溃</li></ul></blockquote><h2 id="1055">1055</h2><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><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></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="keyword">class</span> <span class="title class_">stu</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> h;</span><br><span class="line">    string name;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(stu x,stu y)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (x.h==y.h)&#123;</span><br><span class="line">        <span class="keyword">return</span> x.name&lt;y.name;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">return</span> x.h&gt;y.h;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> n,k;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;k;</span><br><span class="line">    <span class="function">vector&lt;stu&gt; <span class="title">a</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;a[i].name&gt;&gt;a[i].h;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(a.<span class="built_in">begin</span>(),a.<span class="built_in">end</span>(),cmp);</span><br><span class="line">    <span class="type">int</span> aft=n%k+n/k;</span><br><span class="line">    deque&lt;string&gt; d;</span><br><span class="line">    <span class="type">int</span> flag=<span class="number">0</span>,cur=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (d.<span class="built_in">size</span>()&lt;aft)&#123;</span><br><span class="line">        <span class="keyword">if</span> (flag==<span class="number">0</span>)&#123;</span><br><span class="line">            d.<span class="built_in">push_back</span>(a[cur].name);</span><br><span class="line">            flag=<span class="number">1</span>;</span><br><span class="line">            cur++;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            d.<span class="built_in">push_front</span>(a[cur].name);</span><br><span class="line">            flag=<span class="number">0</span>;</span><br><span class="line">            cur++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;string&gt; after;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:d)&#123;</span><br><span class="line">        after.<span class="built_in">push_back</span>(d.<span class="built_in">front</span>());</span><br><span class="line">        d.<span class="built_in">pop_front</span>();</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;after.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==after.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">            cout&lt;&lt;after[i]&lt;&lt;endl;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;after[i]&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    d.<span class="built_in">clear</span>();</span><br><span class="line">    <span class="keyword">while</span> (cur&lt;n)&#123;</span><br><span class="line">        vector&lt;string&gt; ans;</span><br><span class="line">        <span class="type">int</span> flag1=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (d.<span class="built_in">size</span>()&lt;n/k)&#123;</span><br><span class="line">            <span class="keyword">if</span> (flag1==<span class="number">0</span>)&#123;</span><br><span class="line">                d.<span class="built_in">push_back</span>(a[cur].name);</span><br><span class="line">                cur++;</span><br><span class="line">                flag1=<span class="number">1</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                d.<span class="built_in">push_front</span>(a[cur].name);</span><br><span class="line">                cur++;</span><br><span class="line">                flag1=<span class="number">0</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="keyword">auto</span> it:d)&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(d.<span class="built_in">front</span>());</span><br><span class="line">            d.<span class="built_in">pop_front</span>();</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (i==ans.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">                cout&lt;&lt;ans[i]&lt;&lt;endl;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                cout&lt;&lt;ans[i]&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        ans.<span class="built_in">clear</span>();</span><br><span class="line">        d.<span class="built_in">clear</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>双端队列最王朝的一集，还有人质疑吗？</p><p>我们把最特殊的最后一排单独拉出来处理，最后一排的计算公式是n%k+n/k，如果n可以被k整除，那么每排就是n/k人，如果不能，我们就把余数的那些人（n%k）加上去，也就是最后得到了n%k+n/k。</p><p>依次读入每个学生类的名字与身高，再写一个cmp函数用来对这些同学进行排序（其实这里可以用匿名函数的写法，不过那样子写会让代码可读性降低）</p><p>先处理最后一排的人，我们让排序后数组的元素依次交错入列，这样子就可以保证类似“山”形的排列，一旦队列中的元素数量等于我们预先设定好的人数，那么就直接退出。</p><p>其实这里可以直接遍历队列输出的，但你知道的，PTA的神必测评机对最后一个数据的空格要求比较严苛，所以我这里还是另外开了一个数组用来输出答案。</p><p>处理完最后一排，应该可以发现我预先设定的cur变量已经指向了非最后一排的第一个元素，那么接下来处理常规情况，建立一个while循环，当cur&lt;n的时候持续进行。在循环内部，设置一个答案数组，以及原本的双端队列，然后处理方式和上面一样，只不过要记得使用完清理掉数组和队列中的元素。</p><h2 id="1056">1056</h2><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></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">int</span> 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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">a</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;a[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> u=<span class="number">1</span>&lt;&lt;n;</span><br><span class="line">    <span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">    set&lt;<span class="type">int</span>&gt; s;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;u;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (__builtin_popcount(i)==<span class="number">2</span>)&#123;<span class="comment">//这个内层的意思是这个二进制数里有几个1.</span></span><br><span class="line">            vector&lt;<span class="type">int</span>&gt; b;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j=<span class="number">0</span>;j&lt;n;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (i&amp;(<span class="number">1</span>&lt;&lt;j))&#123;</span><br><span class="line">                    b.<span class="built_in">push_back</span>(a[j]);</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="type">int</span> x=<span class="number">10</span>*b[<span class="number">0</span>]+b[<span class="number">1</span>];</span><br><span class="line">            <span class="type">int</span> y=<span class="number">10</span>*b[<span class="number">1</span>]+b[<span class="number">0</span>];</span><br><span class="line">            <span class="keyword">if</span> (s.<span class="built_in">find</span>(x)==s.<span class="built_in">end</span>()&amp;&amp;s.<span class="built_in">find</span>(y)==s.<span class="built_in">end</span>())&#123;</span><br><span class="line">                <span class="keyword">if</span> (x==y)&#123;</span><br><span class="line">                    sum+=x;</span><br><span class="line">                    s.<span class="built_in">insert</span>(x);</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    sum+=(x+y);</span><br><span class="line">                    s.<span class="built_in">insert</span>(x);</span><br><span class="line">                    s.<span class="built_in">insert</span>(y);</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">    cout&lt;&lt;sum&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>选数类问题是一系列比较抽象的问题，在不同的数据范围内有不同的解法，例如这一题最优的解法其实应该是双重循环，但我用了位掩码的做法只是想练一下这个写法。</p><p>一般而言，在选的数数量非常小的情况下，循环是更快的，虽然很笨，但真的很快。但是一旦要选取的数数量变多了，循环就会显的非常繁琐，这时候位掩码的作用就出来了。</p><p>事实上，位掩码也有很大的局限性，例如在总共数数量大于20，那么就会立刻超时，适用范围是总数少，但要选的数数量多。</p><table><thead><tr><th>n 的规模</th><th>k 的规模</th><th>最优解法建议</th></tr></thead><tbody><tr><td><strong>n ≤ 20</strong></td><td>任意 k</td><td><strong>位掩码枚举</strong>，复杂度 O(2^n · n)，暴力可行</td></tr><tr><td><strong>n ≤ 30, k 很小</strong></td><td>k ≤ 5~6</td><td><strong>回溯/DFS 枚举组合</strong>，复杂度 O( C(n,k) · k )</td></tr><tr><td><strong>n 很大 (n ≥ 10^5)</strong></td><td>k=2 或 k=3</td><td><strong>双重/三重循环</strong> 或者 <strong>数学公式</strong>，复杂度 O(n²) 或 O(n³)，注意优化</td></tr><tr><td><strong>n 很大 (n ≥ 10^5)</strong></td><td>k 不固定</td><td>需要 <strong>动态规划 / 前缀和 / 状态压缩 DP</strong>，避免显式枚举子集</td></tr></tbody></table><p>所以这题其实挺有意思的，分数虽然不多，但是可以引申出一类题目。</p><h2 id="1057">1057</h2><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></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">string a;</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">getline</span>(cin,a);</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">char</span> c:a)&#123;</span><br><span class="line">        <span class="keyword">if</span> (c&gt;=<span class="string">&#x27;a&#x27;</span>&amp;&amp;c&lt;=<span class="string">&#x27;z&#x27;</span>)&#123;</span><br><span class="line">            sum+=c-<span class="string">&#x27;a&#x27;</span><span class="number">+1</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(c&gt;=<span class="string">&#x27;A&#x27;</span>&amp;&amp;c&lt;=<span class="string">&#x27;Z&#x27;</span>)&#123;</span><br><span class="line">            sum+=c-<span class="string">&#x27;A&#x27;</span><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">if</span> (sum!=<span class="number">0</span>)&#123;</span><br><span class="line">    <span class="type">int</span> ans1=<span class="number">0</span>,ans0=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (sum&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        <span class="type">int</span> t=sum%<span class="number">2</span>;</span><br><span class="line">        <span class="keyword">if</span> (t==<span class="number">1</span>)&#123;</span><br><span class="line">            ans1++;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            ans0++;</span><br><span class="line">        &#125;</span><br><span class="line">        sum/=<span class="number">2</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans0&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;ans1;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;<span class="number">0</span>&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;<span class="number">0</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="1058">1058</h2><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><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></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">    ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> N, M;</span><br><span class="line">    <span class="keyword">if</span> (!(cin &gt;&gt; N &gt;&gt; M)) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">score</span><span class="params">(M)</span></span>;</span><br><span class="line">    vector&lt; set&lt;<span class="type">char</span>&gt; &gt; <span class="built_in">correct</span>(M);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; M; ++i) &#123;</span><br><span class="line">        <span class="type">int</span> full, optCnt, corCnt;</span><br><span class="line">        cin &gt;&gt; full &gt;&gt; optCnt &gt;&gt; corCnt;</span><br><span class="line">        score[i] = full;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; corCnt; ++j) &#123;</span><br><span class="line">            <span class="type">char</span> c; cin &gt;&gt; c;</span><br><span class="line">            correct[i].<span class="built_in">insert</span>(c);</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">    string line;</span><br><span class="line">    <span class="built_in">getline</span>(cin, line); <span class="comment">// 吃掉当前行末的换行</span></span><br><span class="line"></span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">wrong_cnt</span><span class="params">(M, <span class="number">0</span>)</span></span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> stu = <span class="number">0</span>; stu &lt; N; ++stu) &#123;</span><br><span class="line">        <span class="built_in">getline</span>(cin, line);</span><br><span class="line">        <span class="type">int</span> total = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 逐题解析：按每个 &#x27;(&#x27; ... &#x27;)&#x27; 块解析</span></span><br><span class="line">        <span class="type">int</span> idx = <span class="number">0</span>; <span class="comment">// 当前题目索引</span></span><br><span class="line">        <span class="type">int</span> i = <span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> L = (<span class="type">int</span>)line.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">while</span> (i &lt; L &amp;&amp; idx &lt; M) &#123;</span><br><span class="line">            <span class="comment">// 寻找 &#x27;(&#x27;</span></span><br><span class="line">            <span class="keyword">while</span> (i &lt; L &amp;&amp; line[i] != <span class="string">&#x27;(&#x27;</span>) ++i;</span><br><span class="line">            <span class="keyword">if</span> (i &gt;= L) <span class="keyword">break</span>;</span><br><span class="line">            ++i; <span class="comment">// 跳过 &#x27;(&#x27;</span></span><br><span class="line"></span><br><span class="line">            <span class="comment">// 读取选中个数（整数，可能多位）</span></span><br><span class="line">            <span class="keyword">while</span> (i &lt; L &amp;&amp; line[i] == <span class="string">&#x27; &#x27;</span>) ++i;</span><br><span class="line">            <span class="type">int</span> cnt = <span class="number">0</span>;</span><br><span class="line">            <span class="keyword">while</span> (i &lt; L &amp;&amp; <span class="built_in">isdigit</span>(line[i])) &#123;</span><br><span class="line">                cnt = cnt * <span class="number">10</span> + (line[i] - <span class="string">&#x27;0&#x27;</span>);</span><br><span class="line">                ++i;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 读取 cnt 个选项字母</span></span><br><span class="line">            set&lt;<span class="type">char</span>&gt; chosen;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> t = <span class="number">0</span>; t &lt; cnt; ++t) &#123;</span><br><span class="line">                <span class="keyword">while</span> (i &lt; L &amp;&amp; !<span class="built_in">isalpha</span>(line[i])) ++i;</span><br><span class="line">                <span class="keyword">if</span> (i &lt; L &amp;&amp; <span class="built_in">isalpha</span>(line[i])) &#123;</span><br><span class="line">                    chosen.<span class="built_in">insert</span>(line[i]);</span><br><span class="line">                    ++i;</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">// 跳到 &#x27;)&#x27; （或者继续）</span></span><br><span class="line">            <span class="keyword">while</span> (i &lt; L &amp;&amp; line[i] != <span class="string">&#x27;)&#x27;</span>) ++i;</span><br><span class="line">            <span class="keyword">if</span> (i &lt; L &amp;&amp; line[i] == <span class="string">&#x27;)&#x27;</span>) ++i;</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 判分：全部正确才给分</span></span><br><span class="line">            <span class="keyword">if</span> (chosen == correct[idx]) &#123;</span><br><span class="line">                total += score[idx];</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                wrong_cnt[idx] += <span class="number">1</span>;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            ++idx; <span class="comment">// 处理下一题</span></span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        cout &lt;&lt; total &lt;&lt; <span class="string">&quot;\n&quot;</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="type">int</span> max_wrong = <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; M; ++i) max_wrong = <span class="built_in">max</span>(max_wrong, wrong_cnt[i]);</span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> (max_wrong == <span class="number">0</span>) &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Too simple\n&quot;</span>;</span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        <span class="comment">// 收集所有达到最大错题数的题号（1-based）</span></span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; M; ++i) <span class="keyword">if</span> (wrong_cnt[i] == max_wrong) ans.<span class="built_in">push_back</span>(i + <span class="number">1</span>);</span><br><span class="line">        <span class="comment">// 输出格式：次数 + 空格 + 题号列表</span></span><br><span class="line">        cout &lt;&lt; max_wrong;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> x : ans) cout &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; x;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line"></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>很无趣，纯粹的大模拟，就单纯恶心你来的，你看我用AI你就知道了。</p><p>出题人超级喜欢字符串分割，我已经无力去喷了。</p><h2 id="1059">1059</h2><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">int</span> n,k,mm;</span><br><span class="line">string a;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isprime</span><span class="params">(<span class="type">int</span> x)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (x==<span class="number">1</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    <span class="keyword">if</span> (x==<span class="number">2</span>) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">2</span>;i*i&lt;=x;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (x%i==<span class="number">0</span>)&#123;</span><br><span class="line">                <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">    &#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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;string&gt; <span class="title">add</span><span class="params">(n)</span></span>;</span><br><span class="line">    set&lt;string&gt; s;</span><br><span class="line">    unordered_map&lt;string,<span class="type">int</span>&gt; m;</span><br><span class="line">    unordered_map&lt;string,string&gt; ans;</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;add[i];</span><br><span class="line">        s.<span class="built_in">insert</span>(add[i]);</span><br><span class="line">        m[add[i]]++;</span><br><span class="line">        <span class="keyword">if</span> (i==<span class="number">0</span>)&#123;</span><br><span class="line">            ans[add[i]]=<span class="string">&quot;Mystery Award&quot;</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(<span class="built_in">isprime</span>(i<span class="number">+1</span>))&#123;</span><br><span class="line">            ans[add[i]]=<span class="string">&quot;Minion&quot;</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            ans[add[i]]=<span class="string">&quot;Chocolate&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cin&gt;&gt;mm;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;mm;i++)&#123;</span><br><span class="line">        cin&gt;&gt;a;</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">find</span>(a)==s.<span class="built_in">end</span>())&#123;</span><br><span class="line">            cout&lt;&lt;a&lt;&lt;<span class="string">&quot;: Are you kidding?&quot;</span>&lt;&lt;endl;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(s.<span class="built_in">find</span>(a)!=s.<span class="built_in">end</span>()&amp;&amp;m[a]&gt;<span class="number">1</span>)&#123;</span><br><span class="line">            cout&lt;&lt;a&lt;&lt;<span class="string">&quot;: Checked&quot;</span>&lt;&lt;endl;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(s.<span class="built_in">find</span>(a)!=s.<span class="built_in">end</span>()&amp;&amp;m[a]==<span class="number">1</span>)&#123;</span><br><span class="line">            m[a]++;</span><br><span class="line">            cout&lt;&lt;a&lt;&lt;<span class="string">&quot;: &quot;</span>&lt;&lt;ans[a]&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="1060">1060</h2><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">int</span> n;</span><br><span class="line"><span class="type">int</span> l,r,ans=<span class="number">0</span>;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; a;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">can</span><span class="params">(<span class="type">int</span> m)</span></span>&#123;</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">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (a[i]&gt;m)&#123;<span class="comment">//我头几次这里写成&gt;=了没发现，改了半天才找到。</span></span><br><span class="line">            sum++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (sum&gt;m)&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</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">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <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="type">int</span> x;</span><br><span class="line">        cin&gt;&gt;x;</span><br><span class="line">        a.<span class="built_in">push_back</span>(x);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(a.<span class="built_in">begin</span>(),a.<span class="built_in">end</span>());<span class="comment">//多余的，我拿来调试用的。</span></span><br><span class="line">    l=<span class="number">0</span>;</span><br><span class="line">    r=<span class="number">100010</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">can</span>(mid))&#123;</span><br><span class="line">            l=mid<span class="number">+1</span>;</span><br><span class="line">            ans=mid;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            r=mid<span class="number">-1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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>纯粹的二分答案，极致的享受。</p><p>我们找到上下界，然后进行二分答案，写一个函数来判断这个答案能否满足结果，如果可以，修改边界收集答案，如果不行，再修改边界。循环结束就是答案。</p><p>如果对STL函数熟悉的应该可以知道，这题还有一个更加超标的解法那就是lower_bound与upper_bound函数</p><blockquote><h1><code>lower_bound</code> 与 <code>upper_bound</code> 函数详解</h1><p>在 C++ 标准库中，<code>lower_bound</code> 和 <code>upper_bound</code> 是两个非常实用的二分查找算法函数，它们都定义在 <code>&lt;algorithm&gt;</code> 头文件中。这两个函数用于在<strong>已排序</strong>的序列中查找特定值的位置。</p><h2 id="1-lower-bound">1. <code>lower_bound</code></h2><h3 id="功能：">功能：</h3><p>在有序序列中查找第一个<strong>大于或等于</strong>目标值的元素位置。</p><h3 id="函数原型：">函数原型：</h3><figure class="highlight plaintext"><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">template &lt;class ForwardIterator, class T&gt;</span><br><span class="line">ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, const T&amp; val);</span><br></pre></td></tr></table></figure><h3 id="参数：">参数：</h3><ul><li><code>first</code>, <code>last</code>：前向迭代器，表示要查找的范围（左闭右开区间）</li><li><code>val</code>：要查找的目标值</li></ul><h3 id="返回值：">返回值：</h3><ul><li>返回指向序列中第一个<strong>大于或等于</strong><code>val</code> 的元素的迭代器</li><li>如果所有元素都小于<code>val</code>，则返回<code>last</code></li></ul><h3 id="示例：">示例：</h3><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></pre></td><td class="code"><pre><span class="line">vector&lt;int&gt; v = &#123;1, 3, 3, 5, 7, 9&#125;;</span><br><span class="line"></span><br><span class="line">// 查找第一个 &gt;= 3 的元素</span><br><span class="line">auto it = lower_bound(v.begin(), v.end(), 3); // 指向第一个3（索引1）</span><br><span class="line"></span><br><span class="line">// 查找第一个 &gt;= 4 的元素</span><br><span class="line">it = lower_bound(v.begin(), v.end(), 4); // 指向5（索引3）</span><br><span class="line"></span><br><span class="line">// 查找第一个 &gt;= 10 的元素</span><br><span class="line">it = lower_bound(v.begin(), v.end(), 10); // 返回 v.end()</span><br></pre></td></tr></table></figure><h2 id="2-upper-bound">2. <code>upper_bound</code></h2><h3 id="功能：-2">功能：</h3><p>在有序序列中查找第一个<strong>大于</strong>目标值的元素位置。</p><h3 id="函数原型：-2">函数原型：</h3><figure class="highlight plaintext"><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">template &lt;class ForwardIterator, class T&gt;</span><br><span class="line">ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, const T&amp; val);</span><br></pre></td></tr></table></figure><h3 id="参数：-2">参数：</h3><p>同 <code>lower_bound</code></p><h3 id="返回值：-2">返回值：</h3><ul><li>返回指向序列中第一个<strong>大于</strong><code>val</code> 的元素的迭代器</li><li>如果所有元素都小于或等于<code>val</code>，则返回<code>last</code></li></ul><h3 id="示例：-2">示例：</h3><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></pre></td><td class="code"><pre><span class="line">vector&lt;int&gt; v = &#123;1, 3, 3, 5, 7, 9&#125;;</span><br><span class="line"></span><br><span class="line">// 查找第一个 &gt; 3 的元素</span><br><span class="line">auto it = upper_bound(v.begin(), v.end(), 3); // 指向5（索引3）</span><br><span class="line"></span><br><span class="line">// 查找第一个 &gt; 5 的元素</span><br><span class="line">it = upper_bound(v.begin(), v.end(), 5); // 指向7（索引4）</span><br><span class="line"></span><br><span class="line">// 查找第一个 &gt; 9 的元素</span><br><span class="line">it = upper_bound(v.begin(), v.end(), 9); // 返回 v.end()</span><br></pre></td></tr></table></figure><h2 id="3-关键区别">3. 关键区别</h2><table><thead><tr><th>特性</th><th><code>lower_bound</code></th><th><code>upper_bound</code></th></tr></thead><tbody><tr><td>查找条件</td><td>第一个<strong>大于或等于</strong>目标值</td><td>第一个<strong>大于</strong>目标值</td></tr><tr><td>对于重复元素</td><td>指向第一个匹配元素</td><td>指向最后一个匹配元素的下一个位置</td></tr><tr><td>返回值关系</td><td><code>lower_bound &lt;= upper_bound</code></td><td><code>lower_bound &lt;= upper_bound</code></td></tr></tbody></table><h2 id="4-实用技巧">4. 实用技巧</h2><h3 id="统计特定值出现的次数：">统计特定值出现的次数：</h3><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></pre></td><td class="code"><pre><span class="line">vector&lt;int&gt; v = &#123;1, 3, 3, 3, 5, 7&#125;;</span><br><span class="line">int target = 3;</span><br><span class="line"></span><br><span class="line">auto low = lower_bound(v.begin(), v.end(), target);</span><br><span class="line">auto up = upper_bound(v.begin(), v.end(), target);</span><br><span class="line"></span><br><span class="line">int count = distance(low, up); // 3</span><br></pre></td></tr></table></figure><h3 id="在有序序列中插入元素：">在有序序列中插入元素：</h3><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></pre></td><td class="code"><pre><span class="line">vector&lt;int&gt; v = &#123;1, 3, 5, 7&#125;;</span><br><span class="line">int new_val = 4;</span><br><span class="line"></span><br><span class="line">// 找到第一个 &gt;= 4 的位置</span><br><span class="line">auto pos = lower_bound(v.begin(), v.end(), new_val);</span><br><span class="line">v.insert(pos, new_val); // v = &#123;1, 3, 4, 5, 7&#125;</span><br></pre></td></tr></table></figure><h3 id="检查元素是否存在：">检查元素是否存在：</h3><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></pre></td><td class="code"><pre><span class="line">vector&lt;int&gt; v = &#123;1, 3, 5, 7&#125;;</span><br><span class="line">int target = 5;</span><br><span class="line"></span><br><span class="line">// 检查元素是否存在</span><br><span class="line">bool exists = binary_search(v.begin(), v.end(), target); // true</span><br><span class="line"></span><br><span class="line">// 等价于：</span><br><span class="line">bool exists2 = (lower_bound(v.begin(), v.end(), target) != v.end() &amp;&amp; </span><br><span class="line">               *lower_bound(v.begin(), v.end(), target) == target); // true</span><br></pre></td></tr></table></figure><h2 id="5-性能特点">5. 性能特点</h2><ul><li><strong>时间复杂度</strong>：O(log n)，其中 n 是序列长度</li><li><strong>前提条件</strong>：序列必须是有序的（通常是非降序）</li><li><strong>优势</strong>：比线性查找高效，特别适合大型数据集</li></ul><h2 id="6-在爱丁顿数问题中的应用">6. 在爱丁顿数问题中的应用</h2><p>在爱丁顿数问题中，我们需要统计大于某个值 E 的天数：</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></pre></td><td class="code"><pre><span class="line">bool can(int m) &#123;</span><br><span class="line">    // 使用 upper_bound 找到第一个大于 m 的元素位置</span><br><span class="line">    auto it = upper_bound(a.begin(), a.end(), m);</span><br><span class="line">    int sum = a.end() - it; // 计算大于 m 的元素数量</span><br><span class="line">    return sum &gt;= m;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这种方法比遍历整个数组更高效，时间复杂度从 O(n) 降为 O(log n)。</p></blockquote><p>这里打个岔，我刚开始写了二分答案但是挂了三个测试点，我都开始怀疑自己了二分答案怎么还能错，想了各种原因后面才发现</p><p>我&gt;写成&gt;=了……题没审好。</p><h2 id="1061">1061</h2><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">int</span> n,m;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; score;</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">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        <span class="type">int</span> x;</span><br><span class="line">        cin&gt;&gt;x;</span><br><span class="line">        score.<span class="built_in">push_back</span>(x);</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        <span class="type">int</span> y;</span><br><span class="line">        cin&gt;&gt;y;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(y);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">        <span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">b</span><span class="params">(m)</span></span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">            cin&gt;&gt;b[i];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (b[i]==ans[i])&#123;</span><br><span class="line">                sum+=score[i];</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;sum&lt;&lt;endl;</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="1062">1062</h2><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></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 class="function"><span class="type">int</span> <span class="title">gcd</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span>&#123;<span class="keyword">return</span> b?<span class="built_in">gcd</span>(b,a%b):a;&#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> n1,m1,n2,m2,k;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d/%d&quot;</span>,&amp;n1,&amp;m1);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d/%d&quot;</span>,&amp;n2,&amp;m2);</span><br><span class="line">    cin&gt;&gt;k;</span><br><span class="line">    <span class="keyword">if</span>(n1*m2&gt;n2*m1)&#123;<span class="built_in">swap</span>(n1,n2);<span class="built_in">swap</span>(m1,m2);&#125;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=k*n2/m2;i++)</span><br><span class="line">        <span class="keyword">if</span>(i*m1&gt;k*n1&amp;&amp;i*m2&lt;k*n2&amp;&amp;<span class="built_in">gcd</span>(i,k)==<span class="number">1</span>)</span><br><span class="line">            ans.<span class="built_in">push_back</span>(i);</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span>(i)cout&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">        cout&lt;&lt;ans[i]&lt;&lt;<span class="string">&quot;/&quot;</span>&lt;&lt;k;</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><h2 id="1063">1063</h2><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></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">double</span> <span class="title">dis</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">sqrt</span>(a*a+b*b);</span><br><span class="line">&#125;</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">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <span class="type">double</span> maxx=<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;n;i++)&#123;</span><br><span class="line">        <span class="type">int</span> x,y;</span><br><span class="line">        cin&gt;&gt;x&gt;&gt;y;</span><br><span class="line">        maxx=<span class="built_in">max</span>(maxx,<span class="built_in">dis</span>(x,y));</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%.2f&quot;</span>,maxx);</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><h2 id="1064">1064</h2><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></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">sum</span><span class="params">(<span class="type">int</span> a)</span></span>&#123;</span><br><span class="line">    <span class="type">int</span> res=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (a&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        <span class="type">int</span> t=a%<span class="number">10</span>;</span><br><span class="line">        res+=t;</span><br><span class="line">        a/=<span class="number">10</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res;</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="type">int</span> n;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <span class="comment">//unordered_map&lt;int,int&gt; hash1;</span></span><br><span class="line">    set&lt;<span class="type">int</span>&gt; ans;</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="type">int</span> b;</span><br><span class="line">        cin&gt;&gt;b;</span><br><span class="line">        <span class="comment">//hash1[sum(b)]++;</span></span><br><span class="line">        ans.<span class="built_in">insert</span>(<span class="built_in">sum</span>(b));</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; p;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:ans)&#123;</span><br><span class="line">        p.<span class="built_in">push_back</span>(it);</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;p.<span class="built_in">size</span>()&lt;&lt;endl;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;p.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==p.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">            cout&lt;&lt;p[i];</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;p[i]&lt;&lt;<span class="string">&quot; &quot;</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="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>给我看笑了。</p><p>你以为这个朋友数一定是要有人和它相同吗，不不不，只要这个数字有就行了。</p><p>那你还说啥啊，直接set就完了呗。</p><h2 id="1065">1065</h2><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">int</span> n;</span><br><span class="line">string a,b;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(string x,string y)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> x&lt;y;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    unordered_map&lt;string,string&gt; h1;</span><br><span class="line">    set&lt;string&gt; people;</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;a&gt;&gt;b;</span><br><span class="line">        h1[a]=b;</span><br><span class="line">        h1[b]=a;</span><br><span class="line">        people.<span class="built_in">insert</span>(a);</span><br><span class="line">        people.<span class="built_in">insert</span>(b);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> m;</span><br><span class="line">    cin&gt;&gt;m;</span><br><span class="line">    set&lt;string&gt; id;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        string s;</span><br><span class="line">        cin&gt;&gt;s;</span><br><span class="line">        id.<span class="built_in">insert</span>(s);</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;string&gt; ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:id)&#123;</span><br><span class="line">        <span class="keyword">if</span> (people.<span class="built_in">find</span>(it)==people.<span class="built_in">end</span>())&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(it);</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(people.<span class="built_in">find</span>(it)!=people.<span class="built_in">end</span>()&amp;&amp;id.<span class="built_in">find</span>(h1[it])==id.<span class="built_in">end</span>())&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(it);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans.<span class="built_in">size</span>()&lt;&lt;endl;</span><br><span class="line">    <span class="built_in">sort</span>(ans.<span class="built_in">begin</span>(),ans.<span class="built_in">end</span>(),cmp);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==ans.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">            cout&lt;&lt;ans[i];</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;ans[i]&lt;&lt;<span class="string">&quot; &quot;</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="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>又是STL熟练度检测题，用unordered_map建立夫妻相互映射就行，然后在目标集合中查询即可。</p><h2 id="1066">1066</h2><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></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">int</span> m,n,a,b,r;</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">    cin&gt;&gt;m&gt;&gt;n&gt;&gt;a&gt;&gt;b&gt;&gt;r;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">image</span>(m,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(n));</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;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;n;j++)&#123;</span><br><span class="line">            cin&gt;&gt;image[i][j];</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">0</span>;i&lt;m;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;n;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (image[i][j]&gt;=a&amp;&amp;image[i][j]&lt;=b)&#123;</span><br><span class="line">                image[i][j]=r;</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">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;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;n;j++)&#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%03d&quot;</span>,image[i][j]);</span><br><span class="line">            <span class="keyword">if</span> (j!=n<span class="number">-1</span>) cout&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;endl;</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="1067">1067</h2><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">string cipher;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;cipher&gt;&gt;n;</span><br><span class="line">    cin.<span class="built_in">ignore</span>();<span class="comment">//记得忽略掉最后面的换行，这里不忽略包完蛋的.</span></span><br><span class="line">    string try_cipher;</span><br><span class="line">    <span class="type">int</span> try_num=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (<span class="number">1</span>)&#123;</span><br><span class="line">        <span class="keyword">if</span> (try_num&gt;=n)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Account locked&quot;</span>&lt;&lt;endl;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">getline</span>(cin,try_cipher);<span class="comment">//输入可能有空格哦</span></span><br><span class="line">        <span class="keyword">if</span> (try_cipher==<span class="string">&quot;#&quot;</span>)&#123;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(try_cipher!=cipher)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Wrong password: &quot;</span>&lt;&lt;try_cipher&lt;&lt;endl;</span><br><span class="line">            try_num++;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(try_cipher==cipher)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Welcome in&quot;</span>;</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">    <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><h2 id="1068">1068</h2><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><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></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">int</span> m,n,tol;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;m&gt;&gt;n&gt;&gt;tol;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">image</span>(n<span class="number">+2</span>,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(m<span class="number">+2</span>));</span><br><span class="line">    set&lt;<span class="type">int</span>&gt; key1;</span><br><span class="line">    unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; h;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n<span class="number">+2</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;m<span class="number">+2</span>;j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (i==<span class="number">0</span>||i==n<span class="number">+1</span>)&#123;</span><br><span class="line">                image[i][j]=<span class="number">-1</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                <span class="keyword">if</span> (j==<span class="number">0</span>||j==m<span class="number">+1</span>)&#123;</span><br><span class="line">                    image[i][j]=<span class="number">-1</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    cin&gt;&gt;image[i][j];</span><br><span class="line">                    key<span class="number">1.</span><span class="built_in">insert</span>(image[i][j]);</span><br><span class="line">                    h[image[i][j]]++;</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">    set&lt;<span class="type">int</span>&gt; ans_key;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:key1)&#123;</span><br><span class="line">        <span class="keyword">if</span> (h[it]==<span class="number">1</span>)&#123;</span><br><span class="line">            ans_key.<span class="built_in">insert</span>(it);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (ans_key.<span class="built_in">size</span>()==<span class="number">0</span>)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;Not Exist&quot;</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 class="keyword">else</span>&#123;</span><br><span class="line">        <span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> x,y,ans;</span><br><span class="line">        <span class="type">int</span> dx[<span class="number">8</span>]=&#123;<span class="number">-1</span>,<span class="number">-1</span>,<span class="number">-1</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">1</span>,<span class="number">1</span>,<span class="number">1</span>&#125;;</span><br><span class="line">        <span class="type">int</span> dy[<span class="number">8</span>]=&#123;<span class="number">-1</span>,<span class="number">0</span>,<span class="number">1</span>,<span class="number">-1</span>,<span class="number">1</span>,<span class="number">-1</span>,<span class="number">0</span>,<span class="number">1</span>&#125;;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> it:ans_key)&#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="keyword">for</span> (<span class="type">int</span> j=<span class="number">1</span>;j&lt;=m;j++)&#123;</span><br><span class="line">                    <span class="keyword">if</span> (image[i][j]==it)&#123;</span><br><span class="line">                        <span class="type">bool</span> ok=<span class="literal">true</span>;</span><br><span class="line">                        <span class="keyword">for</span> (<span class="type">int</span> k=<span class="number">0</span>;k&lt;<span class="number">8</span>;k++)&#123;</span><br><span class="line">                            <span class="type">int</span> ni=i+dx[k],nj=j+dy[k];</span><br><span class="line">                            <span class="keyword">if</span> (<span class="built_in">abs</span>(image[ni][nj]-image[i][j])&lt;=tol)&#123;</span><br><span class="line">                                ok=<span class="literal">false</span>;</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">                        <span class="keyword">if</span> (ok)&#123;</span><br><span class="line">                            sum++;</span><br><span class="line">                            x=j;</span><br><span class="line">                            y=i;</span><br><span class="line">                            ans=image[i][j];</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">if</span> (sum==<span class="number">0</span>) cout&lt;&lt;<span class="string">&quot;Not Exist&quot;</span>&lt;&lt;endl;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span> (sum&gt;<span class="number">1</span>) cout&lt;&lt;<span class="string">&quot;Not Unique&quot;</span>&lt;&lt;endl;</span><br><span class="line">        <span class="keyword">else</span> cout&lt;&lt;<span class="string">&quot;(&quot;</span>&lt;&lt;x&lt;&lt;<span class="string">&quot;, &quot;</span>&lt;&lt;y&lt;&lt;<span class="string">&quot;): &quot;</span>&lt;&lt;ans&lt;&lt;endl;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>我的天啊这没超时，数据怎么能弱成这样……</p><p>简单来说就是按照题目要求模拟而已，我在外面加了一圈-1其实是为了防止数组越界。</p><p>更优的做法是存储ans_key的时候就把坐标一起存储了，这样就算加强数据了也不会有问题。</p><h2 id="1069">1069</h2><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">int</span> m,n,s;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;m&gt;&gt;n&gt;&gt;s;</span><br><span class="line">    <span class="function">vector&lt;string&gt; <span class="title">list_tran</span><span class="params">(m)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        cin&gt;&gt;list_tran[i];</span><br><span class="line">    &#125;</span><br><span class="line">    set&lt;string&gt; award;</span><br><span class="line">    <span class="type">int</span> cur=s;</span><br><span class="line">    <span class="keyword">if</span> (m&lt;cur)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;Keep going...&quot;</span>&lt;&lt;endl;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">while</span> (cur&lt;=m)&#123;</span><br><span class="line">            <span class="keyword">if</span> (award.<span class="built_in">find</span>(list_tran[cur<span class="number">-1</span>])==award.<span class="built_in">end</span>())&#123;</span><br><span class="line">                cout&lt;&lt;list_tran[cur<span class="number">-1</span>]&lt;&lt;endl;</span><br><span class="line">                award.<span class="built_in">insert</span>(list_tran[cur<span class="number">-1</span>]);</span><br><span class="line">                cur+=n;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;，</span><br><span class="line">                cur++;</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><blockquote><p>我第一遍这个代码挂了俩测试点，百思不得其解，后面改了半天才发现是我Keep going后面没写省略号，气笑了</p></blockquote><h2 id="1070">1070</h2><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></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">int</span> 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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">cord</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;cord[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(cord.<span class="built_in">begin</span>(),cord.<span class="built_in">end</span>());</span><br><span class="line">    <span class="type">int</span> ans=cord[<span class="number">0</span>];</span><br><span class="line">    <span class="type">int</span> sum=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">while</span> (sum&lt;n)&#123;</span><br><span class="line">        ans=(ans+cord[sum])/<span class="number">2</span>;</span><br><span class="line">        sum++;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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>我已经很久没有写过这么简单的贪心了，这个贪心策略也太傻瓜了，每次选取最短的就行。</p><h2 id="1071">1071</h2><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></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">int</span> t,k;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;t&gt;&gt;k;</span><br><span class="line">    <span class="keyword">while</span>(k--)&#123;</span><br><span class="line">        <span class="keyword">if</span> (t&lt;=<span class="number">0</span>)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Game Over.&quot;</span>&lt;&lt;endl;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="type">int</span> n1,b,t1,n2;</span><br><span class="line">            cin&gt;&gt;n1&gt;&gt;b&gt;&gt;t1&gt;&gt;n2;</span><br><span class="line">            <span class="keyword">if</span> (t1&gt;t)&#123;</span><br><span class="line">                cout&lt;&lt;<span class="string">&quot;Not enough tokens.  Total = &quot;</span>&lt;&lt;t&lt;&lt;<span class="string">&quot;.&quot;</span>&lt;&lt;endl;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                <span class="keyword">if</span> (n1&gt;n2&amp;&amp;b==<span class="number">0</span>)&#123;</span><br><span class="line">                    t+=t1;</span><br><span class="line">                    <span class="built_in">printf</span>(<span class="string">&quot;Win %d!  Total = %d.\n&quot;</span>,t1,t);</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">else</span> <span class="keyword">if</span> (n1&gt;n2&amp;&amp;b==<span class="number">1</span>)&#123;</span><br><span class="line">                    t-=t1;</span><br><span class="line">                    <span class="built_in">printf</span>(<span class="string">&quot;Lose %d.  Total = %d.\n&quot;</span>,t1,t);</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">else</span> <span class="keyword">if</span> (n1&lt;n2&amp;&amp;b==<span class="number">1</span>)&#123;</span><br><span class="line">                    t+=t1;</span><br><span class="line">                    <span class="built_in">printf</span>(<span class="string">&quot;Win %d!  Total = %d.\n&quot;</span>,t1,t);</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">else</span> <span class="keyword">if</span> (n1&lt;n2&amp;&amp;b==<span class="number">0</span>)&#123;</span><br><span class="line">                    t-=t1;</span><br><span class="line">                    <span class="built_in">printf</span>(<span class="string">&quot;Lose %d.  Total = %d.\n&quot;</span>,t1,t);</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">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="1072">1072</h2><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;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">int</span> n,m;</span><br><span class="line">string name;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    set&lt;<span class="type">int</span>&gt; ob;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        <span class="type">int</span> y;</span><br><span class="line">        cin&gt;&gt;y;</span><br><span class="line">        ob.<span class="built_in">insert</span>(y);</span><br><span class="line">    &#125;</span><br><span class="line">    unordered_map&lt;string,vector&lt;<span class="type">int</span>&gt;&gt; add;</span><br><span class="line">    vector&lt;string&gt; keyy;</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;name;</span><br><span class="line">        keyy.<span class="built_in">push_back</span>(name);</span><br><span class="line">        <span class="type">int</span> x;</span><br><span class="line">        cin&gt;&gt;x;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j=<span class="number">0</span>;j&lt;x;j++)&#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">            add[name].<span class="built_in">push_back</span>(t);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    unordered_map&lt;string,vector&lt;<span class="type">int</span>&gt;&gt; ans;</span><br><span class="line">    set&lt;string&gt; sum_stu;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; sum_ob;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;keyy.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        string it=keyy[i];</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j=<span class="number">0</span>;j&lt;add[it].<span class="built_in">size</span>();j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (ob.<span class="built_in">find</span>(add[it][j])!=ob.<span class="built_in">end</span>())&#123;</span><br><span class="line">                sum_stu.<span class="built_in">insert</span>(it);</span><br><span class="line">                sum_ob.<span class="built_in">push_back</span>(add[it][j]);</span><br><span class="line">                ans[it].<span class="built_in">push_back</span>(add[it][j]);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (ans[it].<span class="built_in">size</span>()!=<span class="number">0</span>)&#123;</span><br><span class="line">            cout&lt;&lt;it&lt;&lt;<span class="string">&quot;: &quot;</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> k=<span class="number">0</span>;k&lt;ans[it].<span class="built_in">size</span>();k++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (k==ans[it].<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">                    <span class="built_in">printf</span>(<span class="string">&quot;%04d&quot;</span>,ans[it][k]);</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    <span class="built_in">printf</span>(<span class="string">&quot;%04d &quot;</span>,ans[it][k]);</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            cout&lt;&lt;endl;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;sum_stu.<span class="built_in">size</span>()&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;sum_ob.<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>这题很类似于2024年机考的那题鱼和熊掌，都是在查找物品的所属关系，这一题我的做法相当大胆，在unordered_map里内嵌了一个动态数组用于存储每个人的物品，同时把每个key存起来用于最后遍历。</p><p>统计人数用了一个比较呆瓜的做法，就是把违规者和违禁品全部存入set和vector，然后输出他们的大小就行。</p><h2 id="1073">1073</h2><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><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><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</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">    ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> N, M;</span><br><span class="line">    <span class="keyword">if</span> (!(cin &gt;&gt; N &gt;&gt; M)) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">fullScore</span><span class="params">(M)</span></span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">optCnt</span><span class="params">(M)</span></span>;</span><br><span class="line">    vector&lt; vector&lt;<span class="type">bool</span>&gt; &gt; <span class="built_in">correct</span>(M); <span class="comment">// correct[q][i] for option i (0-based)</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; M; ++i) &#123;</span><br><span class="line">        <span class="type">int</span> score, opts, correctNum;</span><br><span class="line">        cin &gt;&gt; score &gt;&gt; opts &gt;&gt; correctNum;</span><br><span class="line">        fullScore[i] = score;</span><br><span class="line">        optCnt[i] = opts;</span><br><span class="line">        correct[i].<span class="built_in">assign</span>(opts, <span class="literal">false</span>);</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; correctNum; ++j) &#123;</span><br><span class="line">            <span class="type">char</span> c; cin &gt;&gt; c;</span><br><span class="line">            correct[i][c - <span class="string">&#x27;a&#x27;</span>] = <span class="literal">true</span>;</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">// wrongCount[q][opt]</span></span><br><span class="line">    vector&lt; vector&lt;<span class="type">int</span>&gt; &gt; <span class="built_in">wrongCount</span>(M);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; M; ++i) wrongCount[i].<span class="built_in">assign</span>(optCnt[i], <span class="number">0</span>);</span><br><span class="line"></span><br><span class="line">    <span class="function">vector&lt;<span class="type">double</span>&gt; <span class="title">scores</span><span class="params">(N, <span class="number">0.0</span>)</span></span>;</span><br><span class="line"></span><br><span class="line">    string line;</span><br><span class="line">    <span class="built_in">getline</span>(cin, line); <span class="comment">// consume endline after reading question data</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> stu = <span class="number">0</span>; stu &lt; N; ++stu) &#123;</span><br><span class="line">        <span class="built_in">getline</span>(cin, line);</span><br><span class="line">        <span class="comment">// parse line like: (2 a b) (1 c) ...</span></span><br><span class="line">        <span class="type">int</span> pos = <span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> qIndex = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (pos &lt; (<span class="type">int</span>)line.<span class="built_in">size</span>() &amp;&amp; qIndex &lt; M) &#123;</span><br><span class="line">            <span class="comment">// find &#x27;(&#x27;</span></span><br><span class="line">            <span class="keyword">while</span> (pos &lt; (<span class="type">int</span>)line.<span class="built_in">size</span>() &amp;&amp; line[pos] != <span class="string">&#x27;(&#x27;</span>) ++pos;</span><br><span class="line">            <span class="keyword">if</span> (pos &gt;= (<span class="type">int</span>)line.<span class="built_in">size</span>()) <span class="keyword">break</span>;</span><br><span class="line">            ++pos; <span class="comment">// skip &#x27;(&#x27;</span></span><br><span class="line">            <span class="comment">// read number k</span></span><br><span class="line">            <span class="keyword">while</span> (pos &lt; (<span class="type">int</span>)line.<span class="built_in">size</span>() &amp;&amp; <span class="built_in">isspace</span>(line[pos])) ++pos;</span><br><span class="line">            <span class="type">int</span> k = <span class="number">0</span>;</span><br><span class="line">            <span class="keyword">while</span> (pos &lt; (<span class="type">int</span>)line.<span class="built_in">size</span>() &amp;&amp; <span class="built_in">isdigit</span>(line[pos])) &#123;</span><br><span class="line">                k = k * <span class="number">10</span> + (line[pos] - <span class="string">&#x27;0&#x27;</span>);</span><br><span class="line">                ++pos;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="comment">// read k options (letters)</span></span><br><span class="line">            <span class="function">vector&lt;<span class="type">bool</span>&gt; <span class="title">sel</span><span class="params">(optCnt[qIndex], <span class="literal">false</span>)</span></span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> t = <span class="number">0</span>; t &lt; k; ++t) &#123;</span><br><span class="line">                <span class="comment">// skip spaces</span></span><br><span class="line">                <span class="keyword">while</span> (pos &lt; (<span class="type">int</span>)line.<span class="built_in">size</span>() &amp;&amp; <span class="built_in">isspace</span>(line[pos])) ++pos;</span><br><span class="line">                <span class="keyword">if</span> (pos &lt; (<span class="type">int</span>)line.<span class="built_in">size</span>() &amp;&amp; <span class="built_in">isalpha</span>(line[pos])) &#123;</span><br><span class="line">                    <span class="type">char</span> c = line[pos];</span><br><span class="line">                    sel[c - <span class="string">&#x27;a&#x27;</span>] = <span class="literal">true</span>;</span><br><span class="line">                    ++pos;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="comment">// move to &#x27;)&#x27; (skip until &#x27;)&#x27;)</span></span><br><span class="line">            <span class="keyword">while</span> (pos &lt; (<span class="type">int</span>)line.<span class="built_in">size</span>() &amp;&amp; line[pos] != <span class="string">&#x27;)&#x27;</span>) ++pos;</span><br><span class="line">            <span class="keyword">if</span> (pos &lt; (<span class="type">int</span>)line.<span class="built_in">size</span>() &amp;&amp; line[pos] == <span class="string">&#x27;)&#x27;</span>) ++pos;</span><br><span class="line"></span><br><span class="line">            <span class="comment">// update wrongCount for this question:</span></span><br><span class="line">            <span class="comment">// any option where sel differs from correct =&gt; wrongCount++</span></span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> opt = <span class="number">0</span>; opt &lt; optCnt[qIndex]; ++opt) &#123;</span><br><span class="line">                <span class="keyword">if</span> ( (opt &lt; (<span class="type">int</span>)correct[qIndex].<span class="built_in">size</span>() &amp;&amp; sel[opt] != correct[qIndex][opt]) ) &#123;</span><br><span class="line">                    wrongCount[qIndex][opt]++;</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">// compute score for this question</span></span><br><span class="line">            <span class="type">bool</span> anyWrongSelected = <span class="literal">false</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> opt = <span class="number">0</span>; opt &lt; optCnt[qIndex]; ++opt) &#123;</span><br><span class="line">                <span class="keyword">if</span> (sel[opt] &amp;&amp; (opt &gt;= (<span class="type">int</span>)correct[qIndex].<span class="built_in">size</span>() || !correct[qIndex][opt]) ) &#123;</span><br><span class="line">                    anyWrongSelected = <span class="literal">true</span>;</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">            <span class="keyword">if</span> (anyWrongSelected) &#123;</span><br><span class="line">                <span class="comment">// 0 point</span></span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                <span class="comment">// no wrong selected. Check if selected set equals correct set</span></span><br><span class="line">                <span class="type">bool</span> equal = <span class="literal">true</span>;</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">int</span> opt = <span class="number">0</span>; opt &lt; optCnt[qIndex]; ++opt) &#123;</span><br><span class="line">                    <span class="type">bool</span> corr = correct[qIndex][opt];</span><br><span class="line">                    <span class="type">bool</span> s = sel[opt];</span><br><span class="line">                    <span class="keyword">if</span> (corr != s) &#123; equal = <span class="literal">false</span>; <span class="keyword">break</span>; &#125;</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">if</span> (equal) &#123;</span><br><span class="line">                    scores[stu] += fullScore[qIndex];</span><br><span class="line">                &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                    scores[stu] += fullScore[qIndex] / <span class="number">2.0</span>;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            ++qIndex;</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">    cout.<span class="built_in">setf</span>(ios::fixed);</span><br><span class="line">    cout &lt;&lt; <span class="built_in">setprecision</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">0</span>; i &lt; N; ++i) &#123;</span><br><span class="line">        cout &lt;&lt; scores[i] &lt;&lt; <span class="string">&quot;\n&quot;</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="type">int</span> maxErr = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> q = <span class="number">0</span>; q &lt; M; ++q) &#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> opt = <span class="number">0</span>; opt &lt; optCnt[q]; ++opt) &#123;</span><br><span class="line">            maxErr = <span class="built_in">max</span>(maxErr, wrongCount[q][opt]);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> (maxErr == <span class="number">0</span>) &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Too simple\n&quot;</span>;</span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        <span class="comment">// 按题号(从1开始)递增，选项字母递增输出所有等于 maxErr 的项</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> q = <span class="number">0</span>; q &lt; M; ++q) &#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> opt = <span class="number">0</span>; opt &lt; optCnt[q]; ++opt) &#123;</span><br><span class="line">                <span class="keyword">if</span> (wrongCount[q][opt] == maxErr) &#123;</span><br><span class="line">                    cout &lt;&lt; maxErr &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; (q<span class="number">+1</span>) &lt;&lt; <span class="string">&quot;-&quot;</span> &lt;&lt; <span class="built_in">char</span>(<span class="string">&#x27;a&#x27;</span> + opt) &lt;&lt; <span class="string">&quot;\n&quot;</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"></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>其中要用到的不仅有STL容器，你还要知道字符串分割的方法，我是真写不下去了。</p><h2 id="1074">1074</h2><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">string n;</span><br><span class="line">string a,b;</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">    cin&gt;&gt;n&gt;&gt;a&gt;&gt;b;</span><br><span class="line">    <span class="keyword">while</span> (a.<span class="built_in">size</span>()&lt;b.<span class="built_in">size</span>())&#123;</span><br><span class="line">        a=<span class="string">&quot;0&quot;</span>+a;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (b.<span class="built_in">size</span>()&lt;a.<span class="built_in">size</span>())&#123;</span><br><span class="line">        b=<span class="string">&quot;0&quot;</span>+b;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> num=a.<span class="built_in">size</span>();</span><br><span class="line">    string ans1;</span><br><span class="line">    <span class="type">int</span> t=<span class="number">0</span>;</span><br><span class="line">    <span class="type">char</span> c;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=num<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        <span class="type">int</span> x=a[i]-<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="type">int</span> y=b[i]-<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="type">int</span> u=n[i]-<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="keyword">if</span> (u==<span class="number">0</span>)&#123;</span><br><span class="line">            u=<span class="number">10</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> s=(x+y+t)%u;</span><br><span class="line">        c=<span class="string">&#x27;0&#x27;</span>+s;</span><br><span class="line">        ans1=c+ans1;</span><br><span class="line">        t=(x+y+t)/u;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (t&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        ans1=<span class="built_in">char</span>(<span class="string">&#x27;0&#x27;</span>+t)+ans1;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">bool</span> flag=<span class="number">0</span>;</span><br><span class="line">    string ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans<span class="number">1.</span><span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (flag)&#123;</span><br><span class="line">            ans+=ans1[i];</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(!flag&amp;&amp;ans1[i]!=<span class="string">&#x27;0&#x27;</span>)&#123;</span><br><span class="line">            ans+=ans1[i];</span><br><span class="line">            flag=<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">if</span> (ans.<span class="built_in">empty</span>())&#123;</span><br><span class="line">        cout&lt;&lt;<span class="number">0</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><span class="line">    cout&lt;&lt;ans&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>首先这个题实际上很简单，就是普通的模拟加法，无非只是加了一个进制处理的问题，但没什么差别，如果你会高精度加法那你肯定这个也会了。</p><p>去除前导0，这个也应该都懂，就是要注意的是，如果ans是空串要输出0。</p><blockquote><p>我写代码要写出幻觉了——2025.9.20</p></blockquote><h2 id="1075">1075</h2><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></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="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> add,data,next;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> tbegin,n,k;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;tbegin&gt;&gt;n&gt;&gt;k;</span><br><span class="line">    vector&lt;node&gt; list_node;</span><br><span class="line">    unordered_map&lt;<span class="type">int</span>,node&gt; m;</span><br><span class="line">    node l;</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;l.add&gt;&gt;l.data&gt;&gt;l.next;</span><br><span class="line">        m[l.add]=l;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (tbegin!=<span class="number">-1</span>)&#123;</span><br><span class="line">        list_node.<span class="built_in">push_back</span>(m[tbegin]);</span><br><span class="line">        tbegin=m[tbegin].next;</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;node&gt; under_zero,upper_k,mid,ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;list_node.<span class="built_in">size</span>();i++)&#123;<span class="comment">//这里注意i小于什么，测试点里面有无用节点</span></span><br><span class="line">        <span class="keyword">if</span> (list_node[i].data&lt;<span class="number">0</span>)&#123;</span><br><span class="line">            under_zero.<span class="built_in">push_back</span>(list_node[i]);</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(list_node[i].data&gt;k)&#123;</span><br><span class="line">            upper_k.<span class="built_in">push_back</span>(list_node[i]);</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            mid.<span class="built_in">push_back</span>(list_node[i]);</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">0</span>;i&lt;under_zero.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(under_zero[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;mid.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(mid[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;upper_k.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(upper_k[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==ans.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">            ans[i].next=<span class="number">-1</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            ans[i].next=ans[i<span class="number">+1</span>].add;</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">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==ans.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%05d %d -1&quot;</span>,ans[i].add,ans[i].data);</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%05d %d %05d\n&quot;</span>,ans[i].add,ans[i].data,ans[i].next);</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>都写到这里了应该不可能不知道链表是什么了吧。</p><blockquote><p>这个题面真的是懒得喷啊。</p><p>我第一遍以为[0,K]是指的数组中链表元素下标，然后大脑都快给我整宕机了都没想出来这到底是个什么排序方法。</p><p>后来才想到这个该不会指的是链表元素的值吧……</p></blockquote><h2 id="1076">1076</h2><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></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">int</span> n;</span><br><span class="line">string ans,a;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <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;<span class="number">4</span>;j++)&#123;</span><br><span class="line">            cin&gt;&gt;a;</span><br><span class="line">            <span class="keyword">if</span> (a[<span class="number">2</span>]==<span class="string">&#x27;T&#x27;</span>)&#123;</span><br><span class="line">                ans+=<span class="string">&#x27;0&#x27;</span>+(a[<span class="number">0</span>]-<span class="string">&#x27;A&#x27;</span><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">    cout&lt;&lt;ans&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>简单字符串模拟</p><h2 id="1077">1077</h2><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">int</span> n,m;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</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="type">int</span> tch_score;</span><br><span class="line">        cin&gt;&gt;tch_score;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; stu_score;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j=<span class="number">0</span>;j&lt;n<span class="number">-1</span>;j++)&#123;</span><br><span class="line">            <span class="type">int</span> score;</span><br><span class="line">            cin&gt;&gt;score;</span><br><span class="line">            <span class="keyword">if</span> (score&lt;=m&amp;&amp;score&gt;=<span class="number">0</span>)&#123;</span><br><span class="line">                stu_score.<span class="built_in">push_back</span>(score);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">sort</span>(stu_score.<span class="built_in">begin</span>(),stu_score.<span class="built_in">end</span>());</span><br><span class="line">        <span class="type">double</span> ans=<span class="number">0</span>,sum=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> k=<span class="number">1</span>;k&lt;=stu_score.<span class="built_in">size</span>()<span class="number">-2</span>;k++)&#123;</span><br><span class="line">            sum+=stu_score[k];</span><br><span class="line">        &#125;</span><br><span class="line">        ans=((sum/(stu_score.<span class="built_in">size</span>()<span class="number">-2</span>))+tch_score)/<span class="number">2</span>;</span><br><span class="line">        cout&lt;&lt;(<span class="type">int</span>)(ans<span class="number">+0.5</span>)&lt;&lt;endl;<span class="comment">//注意这个四舍五入</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>如果你使用的是VScode作为IDE，那么你大概率会遇到在24行写printf时在本地运行和在PAT测评机运行不同的情况。</p><p>这个东西就涉及到了一些比较底层的东西，现在暂时不用了解，只需要知道以后四舍五入都按照24行那么写就行了</p><p>另外，笔者本人的IDE是VScode，不知道Dev C++是不是也会产生这种情况，如果不会可以向我反馈一下。</p><h2 id="1078">1078</h2><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><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></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> fun;</span><br><span class="line">string a,ans;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;fun;</span><br><span class="line">    cin.<span class="built_in">ignore</span>();</span><br><span class="line">    <span class="built_in">getline</span>(cin,a);</span><br><span class="line">    <span class="keyword">if</span>(fun==<span class="string">&#x27;C&#x27;</span>)&#123;</span><br><span class="line">        queue&lt;<span class="type">char</span>&gt; q;</span><br><span class="line">        string n;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">char</span> c:a)&#123;</span><br><span class="line">            <span class="keyword">if</span>(q.<span class="built_in">empty</span>())&#123;</span><br><span class="line">                q.<span class="built_in">push</span>(c);</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(c==q.<span class="built_in">front</span>())&#123;</span><br><span class="line">                q.<span class="built_in">push</span>(c);</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                <span class="keyword">if</span>(q.<span class="built_in">size</span>()==<span class="number">1</span>)&#123;</span><br><span class="line">                    ans+=q.<span class="built_in">front</span>();</span><br><span class="line">                    q.<span class="built_in">pop</span>();</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    n=<span class="built_in">to_string</span>(q.<span class="built_in">size</span>());</span><br><span class="line">                    ans+=n;</span><br><span class="line">                    ans+=q.<span class="built_in">front</span>();</span><br><span class="line">                    <span class="keyword">while</span>(!q.<span class="built_in">empty</span>())&#123;</span><br><span class="line">                        q.<span class="built_in">pop</span>();</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;</span><br><span class="line">                q.<span class="built_in">push</span>(c);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(!q.<span class="built_in">empty</span>())&#123;</span><br><span class="line">            <span class="keyword">if</span>(q.<span class="built_in">size</span>()==<span class="number">1</span>)&#123;</span><br><span class="line">                ans+=q.<span class="built_in">front</span>();</span><br><span class="line">                q.<span class="built_in">pop</span>();</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                n=<span class="built_in">to_string</span>(q.<span class="built_in">size</span>());</span><br><span class="line">                ans+=n;</span><br><span class="line">                ans+=q.<span class="built_in">front</span>();</span><br><span class="line">                <span class="keyword">while</span>(!q.<span class="built_in">empty</span>())&#123;</span><br><span class="line">                    q.<span class="built_in">pop</span>();</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;ans&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><span class="line">    <span class="keyword">if</span>(fun==<span class="string">&#x27;D&#x27;</span>)&#123;</span><br><span class="line">        <span class="type">int</span> i=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span>(i&lt;a.<span class="built_in">size</span>())&#123;</span><br><span class="line">            <span class="keyword">if</span>(<span class="built_in">isdigit</span>(a[i]))&#123;</span><br><span class="line">                string num;</span><br><span class="line">                <span class="keyword">while</span>(i&lt;a.<span class="built_in">size</span>()&amp;&amp;<span class="built_in">isdigit</span>(a[i]))&#123;</span><br><span class="line">                    num+=a[i];</span><br><span class="line">                    i++;</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">if</span>(i&lt;a.<span class="built_in">size</span>())&#123;</span><br><span class="line">                    <span class="type">char</span> c=a[i];</span><br><span class="line">                    <span class="type">int</span> count=<span class="built_in">stoi</span>(num);</span><br><span class="line">                    <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j&lt;count;j++)&#123;</span><br><span class="line">                        ans+=c;</span><br><span class="line">                    &#125;</span><br><span class="line">                    i++;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                ans+=a[i];</span><br><span class="line">                i++;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;ans&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><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>超级字符串大模拟，极致的磨性子，极致的享受。</p><p>思路很简单，压缩部分用队列存储相同元素，遇到不同的就立刻输出并且清空队列，而解压部分要读入数字然后再读入目标字符</p><p>我附带一个23年机考敲笨钟的答案，我趁热打铁写的。</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><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></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">int</span> n;</span><br><span class="line">string a;</span><br><span class="line">vector&lt;string&gt; word1,word2;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">yes</span><span class="params">(string a)</span></span>&#123;</span><br><span class="line">    <span class="type">int</span> b=a.<span class="built_in">size</span>();</span><br><span class="line">    <span class="keyword">if</span> (a[b<span class="number">-1</span>]==<span class="string">&#x27;g&#x27;</span>&amp;&amp;a[b<span class="number">-2</span>]==<span class="string">&#x27;n&#x27;</span>&amp;&amp;a[b<span class="number">-3</span>]==<span class="string">&#x27;o&#x27;</span>)&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <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="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    cin.<span class="built_in">ignore</span>();</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="built_in">getline</span>(cin,a);</span><br><span class="line">        string fir,sec;</span><br><span class="line">        <span class="type">int</span> m=<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;a.<span class="built_in">size</span>();j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (a[j]==<span class="string">&#x27;,&#x27;</span>)&#123;</span><br><span class="line">                m=j;</span><br><span class="line">                <span class="keyword">break</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                fir+=a[j];</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> j=m<span class="number">+2</span>;j&lt;a.<span class="built_in">size</span>();j++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (a[j]==<span class="string">&#x27;.&#x27;</span>)&#123;</span><br><span class="line">                <span class="keyword">break</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                sec+=a[j];</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="function">stringstream <span class="title">ss</span><span class="params">(fir)</span></span>;</span><br><span class="line">        string s;</span><br><span class="line">        <span class="keyword">while</span> (ss&gt;&gt;s)&#123;</span><br><span class="line">            word<span class="number">1.</span><span class="built_in">push_back</span>(s);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="function">stringstream <span class="title">sss</span><span class="params">(sec)</span></span>;</span><br><span class="line">        <span class="keyword">while</span> (sss&gt;&gt;s)&#123;</span><br><span class="line">            word<span class="number">2.</span><span class="built_in">push_back</span>(s);</span><br><span class="line">        &#125;</span><br><span class="line">        string r1=word1[word<span class="number">1.</span><span class="built_in">size</span>()<span class="number">-1</span>];</span><br><span class="line">        string r2=word2[word<span class="number">2.</span><span class="built_in">size</span>()<span class="number">-1</span>];</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">yes</span>(r1)&amp;&amp;<span class="built_in">yes</span>(r2))&#123;</span><br><span class="line">            word2[word<span class="number">2.</span><span class="built_in">size</span>()<span class="number">-1</span>]=<span class="string">&quot;zhong&quot;</span>;</span><br><span class="line">            word2[word<span class="number">2.</span><span class="built_in">size</span>()<span class="number">-2</span>]=<span class="string">&quot;ben&quot;</span>;</span><br><span class="line">            word2[word<span class="number">2.</span><span class="built_in">size</span>()<span class="number">-3</span>]=<span class="string">&quot;qiao&quot;</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;word<span class="number">1.</span><span class="built_in">size</span>();i++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (i==word<span class="number">1.</span><span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">                    cout&lt;&lt;word1[i]&lt;&lt;<span class="string">&quot;, &quot;</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    cout&lt;&lt;word1[i]&lt;&lt;<span class="string">&quot; &quot;</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">0</span>;i&lt;word<span class="number">2.</span><span class="built_in">size</span>();i++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (i==word<span class="number">2.</span><span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">                    cout&lt;&lt;word2[i]&lt;&lt;<span class="string">&quot;.&quot;</span>&lt;&lt;endl;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    cout&lt;&lt;word2[i]&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Skipped&quot;</span>&lt;&lt;endl;</span><br><span class="line">        &#125;</span><br><span class="line">        word<span class="number">1.</span><span class="built_in">clear</span>();</span><br><span class="line">        word<span class="number">2.</span><span class="built_in">clear</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="1079">1079</h2><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><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></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">string <span class="title">addition</span><span class="params">(string a,string b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">while</span>(a.<span class="built_in">size</span>()&lt;b.<span class="built_in">size</span>())&#123;</span><br><span class="line">        a=<span class="string">&#x27;0&#x27;</span>+a;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span>(b.<span class="built_in">size</span>()&lt;a.<span class="built_in">size</span>())&#123;</span><br><span class="line">        b=<span class="string">&#x27;0&#x27;</span>+b;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">    string ans1,ans;</span><br><span class="line">    <span class="type">int</span> t=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        <span class="type">int</span> x=a[i]-<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="type">int</span> y=b[i]-<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="type">char</span> c=(x+y+t)%<span class="number">10</span>+<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        t=(x+y+t)/<span class="number">10</span>;</span><br><span class="line">        ans1=c+ans1;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (t!=<span class="number">0</span>)&#123;</span><br><span class="line">        ans1=<span class="built_in">char</span>(<span class="string">&#x27;0&#x27;</span>+t)+ans1;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">bool</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">0</span>;i&lt;ans<span class="number">1.</span><span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (flag)&#123;</span><br><span class="line">            ans+=ans1[i];</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(!flag&amp;&amp;ans1[i]!=<span class="string">&#x27;0&#x27;</span>)&#123;</span><br><span class="line">            ans+=ans1[i];</span><br><span class="line">            flag=<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">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isback_num</span><span class="params">(string a)</span></span>&#123;</span><br><span class="line">    string b;</span><br><span class="line">    <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        b+=a[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (a==b)&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <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="function">string <span class="title">back_num</span><span class="params">(string a)</span></span>&#123;</span><br><span class="line">    string b,ans;</span><br><span class="line">    <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        b+=a[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> b;</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">    string x;</span><br><span class="line">    cin&gt;&gt;x;</span><br><span class="line">    <span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">isback_num</span>(x))&#123;</span><br><span class="line">        cout&lt;&lt;x&lt;&lt;<span class="string">&quot; is a palindromic number.&quot;</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><span class="line">    <span class="keyword">while</span> (<span class="number">1</span>)&#123;</span><br><span class="line">        <span class="keyword">if</span> (sum&gt;=<span class="number">10</span>)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Not found in 10 iterations.&quot;</span>&lt;&lt;endl;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        string a=<span class="built_in">back_num</span>(x);</span><br><span class="line">        string b=<span class="built_in">addition</span>(x,a);</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">isback_num</span>(b))&#123;</span><br><span class="line">            cout&lt;&lt;x&lt;&lt;<span class="string">&quot; + &quot;</span>&lt;&lt;a&lt;&lt;<span class="string">&quot; = &quot;</span>&lt;&lt;b&lt;&lt;endl;</span><br><span class="line">            cout&lt;&lt;b&lt;&lt;<span class="string">&quot; is a palindromic number.&quot;</span>&lt;&lt;endl;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;x&lt;&lt;<span class="string">&quot; + &quot;</span>&lt;&lt;a&lt;&lt;<span class="string">&quot; = &quot;</span>&lt;&lt;b&lt;&lt;endl;</span><br><span class="line">            x=b;</span><br><span class="line">            sum++;</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>这一题涉及的模板有，高精度计算，回文数判断，回文数输出，最鬼的其实是高精，但其实也还好。</p><p>你看我前面打板子打了54行。</p><p>还有这一题不用去除前导零，我第一次严格去了前导0，然后给我挂了几个测试点，后面一看样例，不用去。</p><p>那还说什么，算我小丑呗。这题就是典型的磨磨性子你总能写出来的类型。</p><p>记得提前判定一下你输入的数是不是一开始就是回文数。</p><p>题外话，有没有人试试看不打高精会不会爆</p><h2 id="1080">1080</h2><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><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></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">int</span> p,m,n;</span><br><span class="line">set&lt;string&gt; all_stu;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">okstu</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    string na;</span><br><span class="line">    <span class="type">int</span> pt,midt,fint,st;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(okstu a,okstu b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a.st!=b.st)&#123;</span><br><span class="line">        <span class="keyword">return</span> a.st&gt;b.st;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">return</span> a.na&lt;b.na;</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">    cin&gt;&gt;p&gt;&gt;m&gt;&gt;n;</span><br><span class="line">    string name;</span><br><span class="line">    <span class="type">int</span> score;</span><br><span class="line">    unordered_map&lt;string,<span class="type">int</span>&gt; stu_p;</span><br><span class="line">    set&lt;string&gt; key_p;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;p;i++)&#123;</span><br><span class="line">        cin&gt;&gt;name&gt;&gt;score;</span><br><span class="line">        stu_p[name]=score;</span><br><span class="line">        key_p.<span class="built_in">insert</span>(name);</span><br><span class="line">        all_stu.<span class="built_in">insert</span>(name);</span><br><span class="line">        </span><br><span class="line">    &#125;</span><br><span class="line">    unordered_map&lt;string,<span class="type">int</span>&gt; stu_mid;</span><br><span class="line">    set&lt;string&gt; key_mid;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        cin&gt;&gt;name&gt;&gt;score;</span><br><span class="line">        stu_mid[name]=score;</span><br><span class="line">        key_mid.<span class="built_in">insert</span>(name);</span><br><span class="line">        all_stu.<span class="built_in">insert</span>(name);</span><br><span class="line">    &#125;</span><br><span class="line">    unordered_map&lt;string,<span class="type">int</span>&gt; stu_fin;</span><br><span class="line">    set&lt;string&gt; key_fin;</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;name&gt;&gt;score;</span><br><span class="line">        stu_fin[name]=score;</span><br><span class="line">        key_fin.<span class="built_in">insert</span>(name);</span><br><span class="line">        all_stu.<span class="built_in">insert</span>(name);</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;okstu&gt; ok_stu;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:all_stu)&#123;</span><br><span class="line">        <span class="keyword">if</span> (key_p.<span class="built_in">find</span>(it)!=key_p.<span class="built_in">end</span>()&amp;&amp;stu_p[it]&gt;=<span class="number">200</span>)&#123;</span><br><span class="line">            <span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">            <span class="keyword">if</span> (key_mid.<span class="built_in">find</span>(it)!=key_mid.<span class="built_in">end</span>())&#123;</span><br><span class="line">                <span class="keyword">if</span> (key_fin.<span class="built_in">find</span>(it)!=key_fin.<span class="built_in">end</span>())&#123;</span><br><span class="line">                    <span class="keyword">if</span> (stu_mid[it]&gt;stu_fin[it])&#123;</span><br><span class="line">                        sum=(<span class="type">int</span>)(stu_mid[it]*<span class="number">0.4</span>+stu_fin[it]*<span class="number">0.6</span><span class="number">+0.5</span>);</span><br><span class="line">                        <span class="keyword">if</span> (sum&gt;=<span class="number">60</span>)&#123;</span><br><span class="line">                            ok_stu.<span class="built_in">push_back</span>((okstu)&#123;it,stu_p[it],stu_mid[it],stu_fin[it],sum&#125;);</span><br><span class="line">                        &#125;</span><br><span class="line">                    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                        sum=(<span class="type">int</span>)(stu_fin[it]<span class="number">+0.5</span>);</span><br><span class="line">                        <span class="keyword">if</span> (sum&gt;=<span class="number">60</span>)&#123;</span><br><span class="line">                            ok_stu.<span class="built_in">push_back</span>((okstu)&#123;it,stu_p[it],stu_mid[it],stu_fin[it],sum&#125;);</span><br><span class="line">                        &#125;</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    sum=(<span class="type">int</span>)(stu_mid[it]*<span class="number">0.4</span><span class="number">+0.5</span>);</span><br><span class="line">                    <span class="keyword">if</span> (sum&gt;=<span class="number">60</span>)&#123;</span><br><span class="line">                        ok_stu.<span class="built_in">push_back</span>((okstu)&#123;it,stu_p[it],stu_mid[it],<span class="number">-1</span>,sum&#125;);</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                sum=(<span class="type">int</span>)(stu_fin[it]<span class="number">+0.5</span>);</span><br><span class="line">                <span class="keyword">if</span> (sum&gt;=<span class="number">60</span>)&#123;</span><br><span class="line">                    ok_stu.<span class="built_in">push_back</span>((okstu)&#123;it,stu_p[it],<span class="number">-1</span>,stu_fin[it],sum&#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="built_in">sort</span>(ok_stu.<span class="built_in">begin</span>(),ok_stu.<span class="built_in">end</span>(),cmp);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ok_stu.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        cout&lt;&lt;ok_stu[i].na&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;ok_stu[i].pt&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;ok_stu[i].midt&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;ok_stu[i].fint&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;ok_stu[i].st&lt;&lt;endl;</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>首先我们读入数据的时候需要在一个大集合中存入每一个学生的数据，只要这个学生参加过一次学习活动你就要记录这个学生的名字。</p><p>在每次读入编程成绩，期中成绩，期末成绩，就要各开一个容器来记录每个参加的学生，后面有大用。</p><p>核心部分，我们去遍历全学生集合中的人数，然后按照题目的描述写一大堆选择语句就可以了，记得四舍五入的问题，上面有四舍五入的板子。</p><p>最后就排序，写一个自定义排序函数就好了</p><blockquote><p>这东西给我的感觉不像在写算法，更像在写项目。</p></blockquote><h2 id="1081">1081</h2><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></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">int</span> n;</span><br><span class="line">string password;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    cin.<span class="built_in">ignore</span>();</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">        <span class="built_in">getline</span>(cin,password);</span><br><span class="line">        <span class="keyword">if</span> (password.<span class="built_in">size</span>()&lt;<span class="number">6</span>)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Your password is tai duan le.&quot;</span>&lt;&lt;endl;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">bool</span> flag_num=<span class="number">0</span>,flag_letter=<span class="number">0</span>,flag_cant=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">char</span> c:password)&#123;</span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">isdigit</span>(c))&#123;</span><br><span class="line">                flag_num=<span class="number">1</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">isalpha</span>(c))&#123;</span><br><span class="line">                flag_letter=<span class="number">1</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (!<span class="built_in">isdigit</span>(c)&amp;&amp;!<span class="built_in">isalpha</span>(c)&amp;&amp;c!=<span class="string">&#x27;.&#x27;</span>)&#123;</span><br><span class="line">                flag_cant=<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">if</span> (flag_cant)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Your password is tai luan le.&quot;</span>&lt;&lt;endl;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(flag_num&amp;&amp;!flag_letter)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Your password needs zi mu.&quot;</span>&lt;&lt;endl;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(!flag_num&amp;&amp;flag_letter)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Your password needs shu zi.&quot;</span>&lt;&lt;endl;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Your password is wan mei.&quot;</span>&lt;&lt;endl;</span><br><span class="line">            <span class="keyword">continue</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="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="1082">1082</h2><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></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">double</span> <span class="title">dis</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="built_in">sqrt</span>(x*x+y*y);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">player</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    string id;</span><br><span class="line">    <span class="type">int</span> x,y;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(player a,player b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">dis</span>(a.x,a.y)&lt;<span class="built_in">dis</span>(b.x,b.y);</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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;player&gt; <span class="title">add</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;add[i].id&gt;&gt;add[i].x&gt;&gt;add[i].y;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(add.<span class="built_in">begin</span>(),add.<span class="built_in">end</span>(),cmp);</span><br><span class="line">    cout&lt;&lt;add[<span class="number">0</span>].id&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;add[n<span class="number">-1</span>].id&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><h2 id="1083">1083</h2><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">int</span> 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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">poker</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;poker[i];</span><br><span class="line">    &#125;</span><br><span class="line">    set&lt;<span class="type">int</span>&gt; nums;</span><br><span class="line">    unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; m;</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="type">int</span> dis;</span><br><span class="line">        dis=<span class="built_in">abs</span>((i<span class="number">+1</span>)-poker[i]);</span><br><span class="line">        nums.<span class="built_in">insert</span>(dis);</span><br><span class="line">        m[dis]++;</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:nums)&#123;</span><br><span class="line">        <span class="keyword">if</span>(m[it]&gt;<span class="number">1</span>) ans.<span class="built_in">push_back</span>(it);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=ans.<span class="built_in">size</span>()<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        cout&lt;&lt;ans[i]&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;m[ans[i]]&lt;&lt;endl;</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><h2 id="1084">1084</h2><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></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">char</span> d;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    string ans;</span><br><span class="line">    cin&gt;&gt;d&gt;&gt;n;</span><br><span class="line">    ans+=d;</span><br><span class="line">    <span class="keyword">if</span> (n==<span class="number">1</span>)&#123;</span><br><span class="line">        cout&lt;&lt;ans&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 class="keyword">else</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">            string next;</span><br><span class="line">            <span class="type">int</span> pos=<span class="number">0</span>;</span><br><span class="line">            <span class="keyword">while</span>(pos&lt;ans.<span class="built_in">size</span>())&#123;</span><br><span class="line">                <span class="type">char</span> c=ans[pos];</span><br><span class="line">                <span class="type">int</span> m=<span class="number">1</span>;</span><br><span class="line">                <span class="keyword">while</span> (pos<span class="number">+1</span>&lt;ans.<span class="built_in">size</span>()&amp;&amp;ans[pos<span class="number">+1</span>]==c)&#123;</span><br><span class="line">                    m++;</span><br><span class="line">                    pos++;</span><br><span class="line">                &#125;</span><br><span class="line">                next+=c;</span><br><span class="line">                next+=<span class="built_in">to_string</span>(m);</span><br><span class="line">                pos++;</span><br><span class="line">            &#125;</span><br><span class="line">            ans=next;</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;ans&lt;&lt;endl;</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>这个题面可能会让人误以为是统计原本字符串中所有的数字，实际上是要统计连续的数字。</p><h2 id="1085">1085</h2><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><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></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 class="keyword">class</span> <span class="title class_">school</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    string name;</span><br><span class="line">    <span class="type">int</span> s;</span><br><span class="line">    <span class="type">int</span> man;</span><br><span class="line">    <span class="type">int</span> p;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(school a,school b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a.s==b.s)&#123;</span><br><span class="line">        <span class="keyword">if</span> (a.man==b.man)&#123;</span><br><span class="line">            <span class="keyword">return</span> a.name&lt;b.name;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">return</span> a.man&lt;b.man;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">return</span> a.s&gt;b.s;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="type">double</span> score;</span><br><span class="line">string test,where;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    unordered_map&lt;string,<span class="type">double</span>&gt; sum;</span><br><span class="line">    unordered_map&lt;string,<span class="type">int</span>&gt; m1;</span><br><span class="line">    set&lt;string&gt; keyy;</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;test&gt;&gt;score&gt;&gt;where;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">char</span> &amp;c:where)&#123;</span><br><span class="line">            c=<span class="built_in">tolower</span>(c);</span><br><span class="line">        &#125;</span><br><span class="line">        m1[where]++;</span><br><span class="line">        <span class="keyword">if</span> (keyy.<span class="built_in">find</span>(where)==keyy.<span class="built_in">end</span>())&#123;</span><br><span class="line">            sum[where]=<span class="number">0</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        keyy.<span class="built_in">insert</span>(where);</span><br><span class="line">        <span class="type">char</span> m=test[<span class="number">0</span>];</span><br><span class="line">        <span class="keyword">if</span>(m==<span class="string">&#x27;A&#x27;</span>)&#123;</span><br><span class="line">            sum[where]+=score;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(m==<span class="string">&#x27;B&#x27;</span>)&#123;</span><br><span class="line">            score/=<span class="number">1.5</span>;</span><br><span class="line">            <span class="comment">//score=(int)(score+0.5);</span></span><br><span class="line">            sum[where]+=score;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(m==<span class="string">&#x27;T&#x27;</span>)&#123;</span><br><span class="line">            score*=<span class="number">1.5</span>;</span><br><span class="line">            <span class="comment">//score=(int)(score+0.5);</span></span><br><span class="line">            sum[where]+=score;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;school&gt; ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:keyy)&#123;</span><br><span class="line">        school r;</span><br><span class="line">        r.man=m1[it];</span><br><span class="line">        r.s=(<span class="type">int</span>)sum[it];</span><br><span class="line">        r.name=it;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(r);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(ans.<span class="built_in">begin</span>(),ans.<span class="built_in">end</span>(),cmp);</span><br><span class="line">    ans[<span class="number">0</span>].p=<span class="number">1</span>;</span><br><span class="line">    <span class="type">int</span> cur=<span class="number">2</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">1</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (ans[i].s==ans[i<span class="number">-1</span>].s)&#123;</span><br><span class="line">            ans[i].p=ans[i<span class="number">-1</span>].p;</span><br><span class="line">            cur++;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            ans[i].p=cur;</span><br><span class="line">            cur++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans.<span class="built_in">size</span>()&lt;&lt;endl;</span><br><span class="line">    <span class="keyword">if</span> (ans.<span class="built_in">size</span>()==<span class="number">0</span>)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="number">0</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><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        cout&lt;&lt;ans[i].p&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;ans[i].name&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>,ans[i].s);</span><br><span class="line">        cout&lt;&lt;ans[i].man&lt;&lt;endl;</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>这就是一个很纯粹的大模拟，难度尚且在B1080之下</p><p>我一个浮点误差处理了半节课之久。</p><h2 id="1086">1086</h2><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></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">back_num</span><span class="params">(<span class="type">int</span> x)</span></span>&#123;</span><br><span class="line">    <span class="type">int</span> res=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (x&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        <span class="type">int</span> t=x%<span class="number">10</span>;</span><br><span class="line">        res=res*<span class="number">10</span>+t;</span><br><span class="line">        x/=<span class="number">10</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res;</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> a,b;</span><br><span class="line">    cin&gt;&gt;a&gt;&gt;b;</span><br><span class="line">    <span class="type">int</span> ans=<span class="built_in">back_num</span>(a*b);</span><br><span class="line">    cout&lt;&lt;ans&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><h2 id="1087">1087</h2><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></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">int</span>&gt; num;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">1</span>;i&lt;=n;i++)&#123;</span><br><span class="line">        <span class="type">double</span> a=i/<span class="number">2.0</span>;</span><br><span class="line">        <span class="type">double</span> b=i/<span class="number">3.0</span>;</span><br><span class="line">        <span class="type">double</span> c=i/<span class="number">5.0</span>;</span><br><span class="line">        <span class="type">int</span> sum=(<span class="type">int</span>)a+(<span class="type">int</span>)b+(<span class="type">int</span>)c;</span><br><span class="line">        num.<span class="built_in">insert</span>(sum);</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;num.<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><h2 id="1088">1088</h2><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></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;cmath&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="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">reverse_num</span><span class="params">(<span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">return</span> (n % <span class="number">10</span>) * <span class="number">10</span> + (n / <span class="number">10</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="type">int</span> m, x, y;</span><br><span class="line">    cin &gt;&gt; m &gt;&gt; x &gt;&gt; y;</span><br><span class="line">    </span><br><span class="line">    <span class="type">int</span> best_a = <span class="number">0</span>;</span><br><span class="line">    <span class="type">double</span> best_b = <span class="number">0</span>, best_c = <span class="number">0</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> a = <span class="number">10</span>; a &lt; <span class="number">100</span>; a++) &#123;</span><br><span class="line">        <span class="type">int</span> b = <span class="built_in">reverse_num</span>(a);</span><br><span class="line">        <span class="type">double</span> diff = <span class="built_in">abs</span>(a - b) * <span class="number">1.0</span>;</span><br><span class="line">        </span><br><span class="line">        <span class="comment">// 关键修改：使用浮点数计算和比较</span></span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">fabs</span>(diff / x - b * <span class="number">1.0</span> / y) &lt; <span class="number">1e-5</span>) &#123;</span><br><span class="line">            <span class="type">double</span> c = diff / x;</span><br><span class="line">            <span class="keyword">if</span> (a &gt; best_a) &#123;</span><br><span class="line">                best_a = a;</span><br><span class="line">                best_b = b;</span><br><span class="line">                best_c = c;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span> (best_a == <span class="number">0</span>) &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;No Solution&quot;</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><span class="line">    </span><br><span class="line">    cout &lt;&lt; best_a &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 输出比较结果</span></span><br><span class="line">    vector&lt;<span class="type">double</span>&gt; values = &#123;best_a * <span class="number">1.0</span>, best_b, best_c&#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">3</span>; i++) &#123;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">fabs</span>(m - values[i]) &lt; <span class="number">1e-5</span>) &#123;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;Ping&quot;</span>;</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span> (m &gt; values[i]) &#123;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;Gai&quot;</span>;</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;Cong&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        </span><br><span class="line">        <span class="keyword">if</span> (i &lt; <span class="number">2</span>) cout &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    </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>你牛大了，4测试点塞了一个什么数据你心里有数</p><p>简单来说，a是整数，b是整数，但谁告诉你c也一定要是整数了？</p><p>如果是这个地方我只能说两分送你了，我改不出来了。</p><blockquote><p>这一题是个什么情况，我问遍了三四个ai都没有找出来错误点，可见这个恶意有多么明显。</p></blockquote><h2 id="1089">1089</h2><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></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;vector&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cmath&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">    cin &gt;&gt; n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">statements</span><span class="params">(n + <span class="number">1</span>)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; i++) &#123;</span><br><span class="line">        cin &gt;&gt; statements[i];</span><br><span class="line">    &#125;</span><br><span class="line">    </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 = i + <span class="number">1</span>; j &lt;= n; j++) &#123;</span><br><span class="line">            <span class="comment">// 假设i和j是狼人</span></span><br><span class="line">            <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">identity</span><span class="params">(n + <span class="number">1</span>, <span class="number">1</span>)</span></span>; <span class="comment">// 1表示平民，-1表示狼人</span></span><br><span class="line">            identity[i] = <span class="number">-1</span>;</span><br><span class="line">            identity[j] = <span class="number">-1</span>;</span><br><span class="line">            </span><br><span class="line">            vector&lt;<span class="type">int</span>&gt; liars; <span class="comment">// 存储说谎者的索引</span></span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> k = <span class="number">1</span>; k &lt;= n; k++) &#123;</span><br><span class="line">                <span class="type">int</span> said = statements[k];</span><br><span class="line">                <span class="type">int</span> target = <span class="built_in">abs</span>(said);</span><br><span class="line">                <span class="comment">// 判断说话内容与实际情况是否一致</span></span><br><span class="line">                <span class="keyword">if</span> ((said &gt; <span class="number">0</span> &amp;&amp; identity[target] == <span class="number">-1</span>) || (said &lt; <span class="number">0</span> &amp;&amp; identity[target] == <span class="number">1</span>)) &#123;</span><br><span class="line">                    liars.<span class="built_in">push_back</span>(k);</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">if</span> (liars.<span class="built_in">size</span>() == <span class="number">2</span>) &#123;</span><br><span class="line">                <span class="type">int</span> wolf_count = <span class="number">0</span>, human_count = <span class="number">0</span>;</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">int</span> liar : liars) &#123;</span><br><span class="line">                    <span class="keyword">if</span> (identity[liar] == <span class="number">-1</span>) wolf_count++;</span><br><span class="line">                    <span class="keyword">else</span> human_count++;</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">if</span> (wolf_count == <span class="number">1</span> &amp;&amp; human_count == <span class="number">1</span>) &#123;</span><br><span class="line">                    cout &lt;&lt; i &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; j &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><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;No Solution&quot;</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>遍历元素然后查找，目前想不出更优的解法。</p><h2 id="1090">1090</h2><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></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">int</span> n,m;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    unordered_map&lt;<span class="type">int</span>,set&lt;<span class="type">int</span>&gt;&gt; listing;</span><br><span class="line">    set&lt;<span class="type">int</span>&gt; keyy;</span><br><span class="line">    <span class="type">int</span> x,y;</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;x&gt;&gt;y;</span><br><span class="line">        listing[x].<span class="built_in">insert</span>(y);</span><br><span class="line">        listing[y].<span class="built_in">insert</span>(x);</span><br><span class="line">        keyy.<span class="built_in">insert</span>(x);</span><br><span class="line">        keyy.<span class="built_in">insert</span>(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">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        <span class="type">int</span> k;</span><br><span class="line">        cin&gt;&gt;k;</span><br><span class="line">        set&lt;<span class="type">int</span>&gt; g;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j=<span class="number">0</span>;j&lt;k;j++)&#123;</span><br><span class="line">            <span class="type">int</span> z;</span><br><span class="line">            cin&gt;&gt;z;</span><br><span class="line">            g.<span class="built_in">insert</span>(z);</span><br><span class="line">        &#125;</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="keyword">auto</span> it:g)&#123;</span><br><span class="line">            <span class="keyword">if</span> (keyy.<span class="built_in">find</span>(it)!=keyy.<span class="built_in">end</span>())&#123;</span><br><span class="line">                <span class="keyword">for</span> (<span class="keyword">auto</span> a:listing[it])&#123;</span><br><span class="line">                    <span class="keyword">if</span> (g.<span class="built_in">find</span>(a)!=g.<span class="built_in">end</span>())&#123;</span><br><span class="line">                        flag=<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">        <span class="keyword">if</span> (flag==<span class="number">0</span>)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Yes&quot;</span>&lt;&lt;endl;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;No&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="1091">1091</h2><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></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">int</span> m;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">num_size</span><span class="params">(<span class="type">int</span> a)</span></span>&#123;</span><br><span class="line">    <span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (a&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        sum++;</span><br><span class="line">        a/=<span class="number">10</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> sum;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">self_num</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b,<span class="type">int</span> c)</span></span>&#123;</span><br><span class="line">    <span class="type">int</span> d=a*c;</span><br><span class="line">    <span class="type">int</span> sum=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">while</span> (b--)&#123;</span><br><span class="line">        sum*=<span class="number">10</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> res=d%sum;</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;m;</span><br><span class="line">    <span class="type">int</span> x;</span><br><span class="line">    <span class="keyword">while</span> (m--)&#123;</span><br><span class="line">        cin&gt;&gt;x;</span><br><span class="line">        <span class="type">int</span> y=x*x;</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;<span class="number">10</span>;i++)&#123;</span><br><span class="line">            <span class="comment">//cout&lt;&lt;num_size(x)&lt;&lt;&quot; &quot;&lt;&lt;self_num(y,num_size(x),i)&lt;&lt;endl;</span></span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">self_num</span>(y,<span class="built_in">num_size</span>(x),i)==x)&#123;</span><br><span class="line">                cout&lt;&lt;i&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;y*i&lt;&lt;endl;</span><br><span class="line">                flag=<span class="number">1</span>;</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">        <span class="keyword">if</span> (flag==<span class="number">0</span>)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;No&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="1092">1092</h2><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></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">int</span> n,m;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">cookie</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> num;</span><br><span class="line">    <span class="type">int</span> sell;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(cookie a,cookie b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> a.sell&gt;b.sell;</span><br><span class="line">&#125; </span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    <span class="function">vector&lt;cookie&gt; <span class="title">a</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        a[i].num=i<span class="number">+1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (m--)&#123;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">b</span><span class="params">(n)</span></span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">            cin&gt;&gt;b[i];</span><br><span class="line">            a[i].sell+=b[i];</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(a.<span class="built_in">begin</span>(),a.<span class="built_in">end</span>(),cmp);</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">    <span class="type">int</span> maxx=a[<span class="number">0</span>].sell;</span><br><span class="line">    ans.<span class="built_in">push_back</span>(a[<span class="number">0</span>].num);</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> (a[i].sell==maxx)&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(a[i].num);</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(a[i].sell&lt;maxx)&#123;</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">    cout&lt;&lt;a[<span class="number">0</span>].sell&lt;&lt;endl;</span><br><span class="line">    <span class="keyword">if</span> (ans.<span class="built_in">size</span>()==<span class="number">1</span>)&#123;</span><br><span class="line">        cout&lt;&lt;ans[<span class="number">0</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><span class="line">    <span class="built_in">sort</span>(ans.<span class="built_in">begin</span>(),ans.<span class="built_in">end</span>());</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==ans.<span class="built_in">size</span>()<span class="number">-1</span>) cout&lt;&lt;ans[i];</span><br><span class="line">        <span class="keyword">else</span> cout&lt;&lt;ans[i]&lt;&lt;<span class="string">&quot; &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="1093">1093</h2><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></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">string a,b;</span><br><span class="line">set&lt;<span class="type">char</span>&gt; s;</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">getline</span>(cin,a);</span><br><span class="line">    <span class="comment">//cin.ignore();</span></span><br><span class="line">    <span class="built_in">getline</span>(cin,b);</span><br><span class="line">    string n=a+b;</span><br><span class="line">    string ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c:n)&#123;</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">find</span>(c)==s.<span class="built_in">end</span>())&#123;</span><br><span class="line">            ans+=c;</span><br><span class="line">            s.<span class="built_in">insert</span>(c);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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>set的模板题</p><h2 id="1094">1094</h2><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></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 class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isprime</span><span class="params">(<span class="type">int</span> a)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a==<span class="number">1</span>||a==<span class="number">0</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    <span class="keyword">if</span> (a==<span class="number">2</span>) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">2</span>;i*i&lt;=a;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (a%i==<span class="number">0</span>)&#123;</span><br><span class="line">            <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">int</span> <span class="title">turn_num</span><span class="params">(string a)</span></span>&#123;</span><br><span class="line">    <span class="type">int</span> res=<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;a.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="type">int</span> tem=a[i]-<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        res=res*<span class="number">10</span>+tem;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> n,k;</span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;k;</span><br><span class="line">    string num,s;</span><br><span class="line">    cin&gt;&gt;num;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;=n-k;i++)&#123;</span><br><span class="line">        s=num.<span class="built_in">substr</span>(i,k);</span><br><span class="line">        <span class="type">int</span> x=<span class="built_in">turn_num</span>(s);</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">isprime</span>(x))&#123;</span><br><span class="line">            cout&lt;&lt;s&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><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;<span class="string">&quot;404&quot;</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>很模板的一道题，没什么好说的，记住在判断素数的那一串里面要判断一下为0的情况。</p><h2 id="1095">1095</h2><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><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><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</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">int</span> n, m;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">stu</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="type">char</span> type;</span><br><span class="line">    string num;</span><br><span class="line">    string date;</span><br><span class="line">    string id;</span><br><span class="line">    <span class="type">int</span> score;</span><br><span class="line">    string test;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">stage</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    string nums;</span><br><span class="line">    <span class="type">int</span> man;</span><br><span class="line">    </span><br><span class="line">    <span class="built_in">stage</span>(string n, <span class="type">int</span> m) : <span class="built_in">nums</span>(n), <span class="built_in">man</span>(m) &#123;&#125;</span><br><span class="line">    </span><br><span class="line">    <span class="type">bool</span> <span class="keyword">operator</span>&lt;(<span class="type">const</span> stage&amp; other) <span class="type">const</span> &#123;</span><br><span class="line">        <span class="keyword">if</span> (man == other.man) &#123;</span><br><span class="line">            <span class="keyword">return</span> nums &lt; other.nums;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> man &gt; other.man;</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">(<span class="type">const</span> stu&amp; a, <span class="type">const</span> stu&amp; b)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a.score == b.score) &#123;</span><br><span class="line">        <span class="keyword">return</span> a.test &lt; b.test;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> a.score &gt; b.score;</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">    ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    cin.<span class="built_in">tie</span>(<span class="number">0</span>);</span><br><span class="line">    </span><br><span class="line">    cin &gt;&gt; n &gt;&gt; m;</span><br><span class="line">    <span class="function">vector&lt;stu&gt; <span class="title">add</span><span class="params">(n)</span></span>;</span><br><span class="line">    string s;</span><br><span class="line">    <span class="type">int</span> x;</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 预处理：按日期组织数据</span></span><br><span class="line">    unordered_map&lt;string, vector&lt;stu&gt;&gt; dateMap;</span><br><span class="line">    </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; s &gt;&gt; x;</span><br><span class="line">        add[i].test = s;</span><br><span class="line">        add[i].type = s[<span class="number">0</span>];</span><br><span class="line">        add[i].num = s.<span class="built_in">substr</span>(<span class="number">1</span>, <span class="number">3</span>);</span><br><span class="line">        add[i].date = s.<span class="built_in">substr</span>(<span class="number">4</span>, <span class="number">6</span>);</span><br><span class="line">        add[i].id = s.<span class="built_in">substr</span>(<span class="number">10</span>);</span><br><span class="line">        add[i].score = x;</span><br><span class="line">        </span><br><span class="line">        <span class="comment">// 添加到日期映射中</span></span><br><span class="line">        dateMap[add[i].date].<span class="built_in">push_back</span>(add[i]);</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">    unordered_map&lt;string, pair&lt;<span class="type">int</span>, <span class="type">int</span>&gt;&gt; siteMap; <span class="comment">// site -&gt; (count, total)</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">const</span> <span class="keyword">auto</span>&amp; student : add) &#123;</span><br><span class="line">        siteMap[student.num].first++;</span><br><span class="line">        siteMap[student.num].second += student.score;</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">    unordered_map&lt;<span class="type">char</span>, vector&lt;stu&gt;&gt; typeMap;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">const</span> <span class="keyword">auto</span>&amp; student : add) &#123;</span><br><span class="line">        typeMap[student.type].<span class="built_in">push_back</span>(student);</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">for</span> (<span class="keyword">auto</span>&amp; pair : typeMap) &#123;</span><br><span class="line">        <span class="built_in">sort</span>(pair.second.<span class="built_in">begin</span>(), pair.second.<span class="built_in">end</span>(), cmp);</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; m; i++) &#123;</span><br><span class="line">        <span class="type">int</span> a;</span><br><span class="line">        cin &gt;&gt; a;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Case &quot;</span> &lt;&lt; i + <span class="number">1</span> &lt;&lt; <span class="string">&quot;: &quot;</span> &lt;&lt; a &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">        </span><br><span class="line">        <span class="keyword">if</span> (a == <span class="number">1</span>) &#123;</span><br><span class="line">            <span class="type">char</span> c;</span><br><span class="line">            cin &gt;&gt; c;</span><br><span class="line">            cout &lt;&lt; c &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">            </span><br><span class="line">            <span class="keyword">if</span> (typeMap.<span class="built_in">find</span>(c) == typeMap.<span class="built_in">end</span>() || typeMap[c].<span class="built_in">empty</span>()) &#123;</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot;NA\n&quot;</span>;</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">const</span> <span class="keyword">auto</span>&amp; student : typeMap[c]) &#123;</span><br><span class="line">                    cout &lt;&lt; student.test &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; student.score &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span> (a == <span class="number">2</span>) &#123;</span><br><span class="line">            string h;</span><br><span class="line">            cin &gt;&gt; h;</span><br><span class="line">            cout &lt;&lt; h &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">            </span><br><span class="line">            <span class="keyword">if</span> (siteMap.<span class="built_in">find</span>(h) == siteMap.<span class="built_in">end</span>()) &#123;</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot;NA\n&quot;</span>;</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                cout &lt;&lt; siteMap[h].first &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; siteMap[h].second &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span> (a == <span class="number">3</span>) &#123;</span><br><span class="line">            string ymd;</span><br><span class="line">            cin &gt;&gt; ymd;</span><br><span class="line">            cout &lt;&lt; ymd &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">            </span><br><span class="line">            <span class="keyword">if</span> (dateMap.<span class="built_in">find</span>(ymd) == dateMap.<span class="built_in">end</span>() || dateMap[ymd].<span class="built_in">empty</span>()) &#123;</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot;NA\n&quot;</span>;</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                unordered_map&lt;string, <span class="type">int</span>&gt; siteCount;</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">const</span> <span class="keyword">auto</span>&amp; student : dateMap[ymd]) &#123;</span><br><span class="line">                    siteCount[student.num]++;</span><br><span class="line">                &#125;</span><br><span class="line">                </span><br><span class="line">                vector&lt;stage&gt; result;</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">const</span> <span class="keyword">auto</span>&amp; pair : siteCount) &#123;</span><br><span class="line">                    result.<span class="built_in">emplace_back</span>(pair.first, pair.second);</span><br><span class="line">                &#125;</span><br><span class="line">                </span><br><span class="line">                <span class="built_in">sort</span>(result.<span class="built_in">begin</span>(), result.<span class="built_in">end</span>());</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">const</span> <span class="keyword">auto</span>&amp; site : result) &#123;</span><br><span class="line">                    cout &lt;&lt; site.nums &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; site.man &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            string temp;</span><br><span class="line">            cin &gt;&gt; temp;</span><br><span class="line">            cout &lt;&lt; temp &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;NA\n&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    </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>超级麻烦，我写的代码太丑陋了，遂贴一下ai写的。</p><p>这种东西感觉意义不大，转专业考试不可能真考这种东西。</p><h2 id="1096">1096</h2><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="type">int</span> k,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">    cin&gt;&gt;k;</span><br><span class="line">    <span class="keyword">while</span> (k--)&#123;</span><br><span class="line">        cin&gt;&gt;n;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">        set&lt;<span class="type">int</span>&gt; 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="keyword">if</span> (n%i==<span class="number">0</span>&amp;&amp;s.<span class="built_in">find</span>(i)==s.<span class="built_in">end</span>())&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(i);</span><br><span class="line">                s.<span class="built_in">insert</span>(i);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (ans.<span class="built_in">size</span>()&lt;<span class="number">4</span>)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;No&quot;</span>&lt;&lt;endl;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">bool</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">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j=i<span class="number">+1</span>;j&lt;ans.<span class="built_in">size</span>();j++)&#123;</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">int</span> k=j<span class="number">+1</span>;k&lt;ans.<span class="built_in">size</span>();k++)&#123;</span><br><span class="line">                    <span class="type">int</span> a=ans[i];</span><br><span class="line">                    <span class="type">int</span> b=ans[j];</span><br><span class="line">                    <span class="type">int</span> c=ans[k];</span><br><span class="line">                    <span class="type">int</span> sum=a+b+c;</span><br><span class="line">                    <span class="type">int</span> res=sum%n;</span><br><span class="line">                    <span class="type">int</span> d=res==<span class="number">0</span>?n:n-res;</span><br><span class="line">                    <span class="keyword">if</span> (s.<span class="built_in">find</span>(d)!=s.<span class="built_in">end</span>()&amp;&amp;d!=a&amp;&amp;d!=b&amp;&amp;d!=c)&#123;</span><br><span class="line">                        flag=<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">        <span class="keyword">if</span> (flag==<span class="number">1</span>)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Yes&quot;</span>&lt;&lt;endl;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;No&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>这题其实挺难的，放在5k+1这个地方其实不太合理，至少的是5k+4的水平。</p><p>这题最难想的其实是如何去降低时间复杂度</p><p>我最开始想的是只枚举两个因子，剩下的两个因子用除法除出来，但是那样子其实怪麻烦的，因为我试了一下枚举三个也能过</p><p>枚举三个，然后计算出第四个，看第四个是不是满足条件的因子，如果是，那就重置flag为1，结束循环</p><h2 id="1097">1097</h2><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></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">int</span> n,k,x;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;k&gt;&gt;x;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">a</span>(n<span class="number">+1</span>,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(n<span class="number">+1</span>));</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j=<span class="number">0</span>;j&lt;n;j++)&#123;</span><br><span class="line">            cin&gt;&gt;a[i][j];</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> idx=<span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> cur=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">while</span> (idx&lt;=n)&#123;</span><br><span class="line">        deque&lt;<span class="type">int</span>&gt; d;</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">            d.<span class="built_in">push_back</span>(a[idx][i]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;cur;i++)&#123;</span><br><span class="line">            d.<span class="built_in">pop_back</span>();</span><br><span class="line">            d.<span class="built_in">push_front</span>(x);</span><br><span class="line">        &#125;</span><br><span class="line">        a[idx].<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++)&#123;</span><br><span class="line">            a[idx].<span class="built_in">push_back</span>(d.<span class="built_in">front</span>());</span><br><span class="line">            d.<span class="built_in">pop_front</span>();</span><br><span class="line">        &#125;</span><br><span class="line">        idx+=<span class="number">2</span>;</span><br><span class="line">        <span class="keyword">if</span> (cur==k)&#123;</span><br><span class="line">            cur=<span class="number">1</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cur++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</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="type">int</span> sum=<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;n;j++)&#123;</span><br><span class="line">            sum+=a[j][i];</span><br><span class="line">        &#125;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(sum);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==n<span class="number">-1</span>)&#123;</span><br><span class="line">            cout&lt;&lt;ans[i];</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;ans[i]&lt;&lt;<span class="string">&quot; &quot;</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="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>双端队列秒了</p><h2 id="1098">1098</h2><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></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">int</span> 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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">high</span><span class="params">(n<span class="number">+1</span>)</span></span>;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">loww</span><span class="params">(n<span class="number">+1</span>)</span></span>;</span><br><span class="line">    <span class="type">int</span> maxx=<span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> minn=<span class="number">1010</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;high[i];</span><br><span class="line">        minn=<span class="built_in">min</span>(high[i],minn);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;loww[i];</span><br><span class="line">        maxx=<span class="built_in">max</span>(loww[i],maxx);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (maxx&gt;=minn)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;No&quot;</span>&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;maxx-minn<span class="number">+1</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span> <span class="keyword">if</span>(minn&gt;maxx)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;Yes&quot;</span>&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;minn-maxx;</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>好题，比前面的百行大模拟好多了，更贴近于思维的培养而不是让你疯狂写代码，PAT史里淘金了这下。</p><p>观察就会发现，只要上界的最小值比下界的最大值大，那么就一定没办法修成管道，反之则一定可以，至于最大的和要削多少，一个是上下界差值，一个是上下界距离加一。</p><p>不懂的自己拿画图软件模拟一下就知道了。</p><h2 id="1099">1099</h2><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><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</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">bool</span> <span class="title">isprime</span><span class="params">(<span class="type">int</span> n)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (n&lt;<span class="number">2</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    <span class="keyword">if</span> (n==<span class="number">2</span>) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">2</span>;i*i&lt;=n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (n%i==<span class="number">0</span>) <span class="keyword">return</span> <span class="literal">false</span>;</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">bool</span> <span class="title">sexprime</span><span class="params">(<span class="type">int</span> n)</span></span>&#123;</span><br><span class="line">    <span class="type">int</span> a=n<span class="number">-6</span>;</span><br><span class="line">    <span class="type">int</span> b=n<span class="number">+6</span>;</span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">isprime</span>(a)||<span class="built_in">isprime</span>(b))&#123;</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="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">isprime</span>(n))&#123;</span><br><span class="line">        <span class="type">int</span> a=n<span class="number">+6</span>;</span><br><span class="line">        <span class="type">int</span> b=n<span class="number">-6</span>;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">isprime</span>(a)&amp;&amp;<span class="built_in">isprime</span>(b))&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Yes&quot;</span>&lt;&lt;endl;</span><br><span class="line">            cout&lt;&lt;b&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 class="keyword">else</span> <span class="keyword">if</span>(<span class="built_in">isprime</span>(a)&amp;&amp;!<span class="built_in">isprime</span>(b))&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Yes&quot;</span>&lt;&lt;endl;</span><br><span class="line">            cout&lt;&lt;a&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 class="keyword">else</span> <span class="keyword">if</span>(!<span class="built_in">isprime</span>(a)&amp;&amp;<span class="built_in">isprime</span>(b))&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Yes&quot;</span>&lt;&lt;endl;</span><br><span class="line">            cout&lt;&lt;b&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><span class="line">        <span class="type">int</span> ans;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">+1</span>;;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">isprime</span>(i)&amp;&amp;<span class="built_in">sexprime</span>(i))&#123;</span><br><span class="line">                ans=i;</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">        cout&lt;&lt;<span class="string">&quot;No&quot;</span>&lt;&lt;endl;</span><br><span class="line">        cout&lt;&lt;ans&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><span class="line">    <span class="keyword">if</span> (!<span class="built_in">isprime</span>(n))&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;No&quot;</span>&lt;&lt;endl;</span><br><span class="line">        <span class="type">int</span> ans;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">+1</span>;;i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">isprime</span>(i)&amp;&amp;<span class="built_in">sexprime</span>(i))&#123;</span><br><span class="line">                ans=i;</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">        cout&lt;&lt;ans&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><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="1100">1100</h2><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></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 class="type">int</span> n;</span><br><span class="line">string id;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">fri</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    string idcard;</span><br><span class="line">    <span class="type">int</span> year;</span><br><span class="line">    <span class="type">int</span> month;</span><br><span class="line">    <span class="type">int</span> day;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(fri a,fri b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a.year==b.year)&#123;</span><br><span class="line">        <span class="keyword">if</span> (a.month==a.month)&#123;</span><br><span class="line">            <span class="keyword">return</span> a.day&lt;b.day;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">return</span> a.month&lt;b.month;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">return</span> a.year&lt;b.year;</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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;fri&gt; <span class="title">a</span><span class="params">(n<span class="number">+1</span>)</span></span>;</span><br><span class="line">    set&lt;string&gt; s;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;a[i].idcard;</span><br><span class="line">        s.<span class="built_in">insert</span>(a[i].idcard);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> m;</span><br><span class="line">    cin&gt;&gt;m;</span><br><span class="line">    vector&lt;fri&gt; ans;</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">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        cin&gt;&gt;id;</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">find</span>(id)!=s.<span class="built_in">end</span>())&#123;</span><br><span class="line">            sum++;</span><br><span class="line">        &#125;</span><br><span class="line">        ans.<span class="built_in">push_back</span>((fri)&#123;id,<span class="built_in">stoi</span>(id.<span class="built_in">substr</span>(<span class="number">6</span>,<span class="number">4</span>)),<span class="built_in">stoi</span>(id.<span class="built_in">substr</span>(<span class="number">10</span>,<span class="number">2</span>)),<span class="built_in">stoi</span>(id.<span class="built_in">substr</span>(<span class="number">12</span>,<span class="number">2</span>))&#125;);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (sum==<span class="number">0</span>)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="number">0</span>&lt;&lt;endl;</span><br><span class="line">        <span class="built_in">sort</span>(ans.<span class="built_in">begin</span>(),ans.<span class="built_in">end</span>(),cmp);</span><br><span class="line">        cout&lt;&lt;ans[<span class="number">0</span>].idcard&lt;&lt;endl;</span><br><span class="line">    &#125;<span class="keyword">else</span> &#123;</span><br><span class="line">        vector&lt;fri&gt; sch;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (s.<span class="built_in">find</span>(ans[i].idcard)!=s.<span class="built_in">end</span>())&#123;</span><br><span class="line">                sch.<span class="built_in">push_back</span>(ans[i]);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">sort</span>(sch.<span class="built_in">begin</span>(),sch.<span class="built_in">end</span>(),cmp);</span><br><span class="line">        cout&lt;&lt;sum&lt;&lt;endl;</span><br><span class="line">        cout&lt;&lt;sch[<span class="number">0</span>].idcard&lt;&lt;endl;</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><h2 id="1101">1101</h2><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></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 class="comment">//#define int long long</span></span><br><span class="line"><span class="type">int</span> a,d;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">turn_num</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> d)</span></span>&#123;</span><br><span class="line">    deque&lt;<span class="type">int</span>&gt; de;</span><br><span class="line">    <span class="type">int</span> temp;</span><br><span class="line">    <span class="keyword">while</span> (a&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        temp=a%<span class="number">10</span>;</span><br><span class="line">        de.<span class="built_in">push_front</span>(temp);</span><br><span class="line">        a/=<span class="number">10</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (d--)&#123;</span><br><span class="line">        temp=de.<span class="built_in">back</span>();</span><br><span class="line">        de.<span class="built_in">pop_back</span>();</span><br><span class="line">        de.<span class="built_in">push_front</span>(temp);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> res=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:de)&#123;</span><br><span class="line">        res=res*<span class="number">10</span>+it;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;a&gt;&gt;d;</span><br><span class="line">    <span class="type">int</span> b=<span class="built_in">turn_num</span>(a,d);</span><br><span class="line">    <span class="type">double</span> ans=(<span class="type">double</span>)b/a;<span class="comment">//注意这里</span></span><br><span class="line">    <span class="comment">//cout&lt;&lt;b&lt;&lt;endl;</span></span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%.2f&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="1102">1102</h2><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 class="type">int</span> n;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">works</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    string id;</span><br><span class="line">    <span class="type">int</span> price;</span><br><span class="line">    <span class="type">int</span> sell;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp1</span><span class="params">(works a,works b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> a.sell&gt;b.sell;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp2</span><span class="params">(works a,works b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> a.sell*a.price&gt;b.sell*b.price;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;works&gt; <span class="title">ans</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;ans[i].id&gt;&gt;ans[i].price&gt;&gt;ans[i].sell;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(ans.<span class="built_in">begin</span>(),ans.<span class="built_in">end</span>(),cmp1);</span><br><span class="line">    cout&lt;&lt;ans[<span class="number">0</span>].id&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;ans[<span class="number">0</span>].sell&lt;&lt;endl;</span><br><span class="line">    <span class="built_in">sort</span>(ans.<span class="built_in">begin</span>(),ans.<span class="built_in">end</span>(),cmp2);</span><br><span class="line">    cout&lt;&lt;ans[<span class="number">0</span>].id&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;ans[<span class="number">0</span>].sell*ans[<span class="number">0</span>].price&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><h2 id="1103">1103</h2><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 class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isquare</span><span class="params">(<span class="type">int</span> n)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (n&lt;<span class="number">0</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    <span class="type">int</span> r=<span class="built_in">sqrt</span>(n);</span><br><span class="line">    <span class="keyword">return</span> r*r==n;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> m,n;</span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;m&gt;&gt;n;</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=m;i&lt;=n;i++)&#123;</span><br><span class="line">        <span class="type">int</span> a=i*i*i-(i<span class="number">-1</span>)*(i<span class="number">-1</span>)*(i<span class="number">-1</span>);</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">isquare</span>(a))&#123;</span><br><span class="line">            <span class="type">int</span> root=<span class="built_in">sqrt</span>(a);</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j=<span class="number">2</span>;j&lt;=root;j++)&#123;</span><br><span class="line">                <span class="type">int</span> b=j*j+(j<span class="number">-1</span>)*(j<span class="number">-1</span>);</span><br><span class="line">                <span class="keyword">if</span> (b==root)&#123;</span><br><span class="line">                    cout&lt;&lt;i&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;j&lt;&lt;endl;</span><br><span class="line">                    flag=<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">    <span class="keyword">if</span> (flag==<span class="number">0</span>)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;No Solution&quot;</span>&lt;&lt;endl;</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>其他的就是去枚举答案，符合条件的输出就行，因为数据范围很小。</p><h2 id="1104">1104</h2><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><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></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 class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"><span class="type">int</span> n,k,m;</span><br><span class="line">string num;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> w;</span><br><span class="line">    <span class="type">int</span> ansnum;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(node a,node b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a.w==b.w)&#123;</span><br><span class="line">        <span class="keyword">return</span> a.ansnum&lt;b.ansnum;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="keyword">return</span> a.w&lt;b.w;</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">gcd</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> b==<span class="number">0</span>?a:<span class="built_in">gcd</span>(b,a%b);</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">isprime</span><span class="params">(<span class="type">int</span> n)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (n&lt;<span class="number">2</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    <span class="keyword">if</span> (n==<span class="number">2</span>) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">2</span>;i*i&lt;=n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (n%i==<span class="number">0</span>)&#123;</span><br><span class="line">            <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">int</span> <span class="title">sum_num</span><span class="params">(<span class="type">int</span> a)</span></span>&#123;</span><br><span class="line">    <span class="type">int</span> res=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (a&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        <span class="type">int</span> temp=a%<span class="number">10</span>;</span><br><span class="line">        res+=temp;</span><br><span class="line">        a/=<span class="number">10</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;</span><br><span class="line">vector&lt;node&gt; ans;</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> step,<span class="type">int</span> sum)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (step==k<span class="number">-2</span>)&#123;</span><br><span class="line">        string s=num+<span class="string">&quot;99&quot;</span>;</span><br><span class="line">        <span class="type">int</span> a=<span class="built_in">stoll</span>(s);</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">sum_num</span>(a)!=m) <span class="keyword">return</span>;</span><br><span class="line">        <span class="type">int</span> b=a<span class="number">+1</span>;</span><br><span class="line">        <span class="type">int</span> sum_b=<span class="built_in">sum_num</span>(b);</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">gcd</span>(sum_b,m)&gt;<span class="number">2</span>&amp;&amp;<span class="built_in">isprime</span>(<span class="built_in">gcd</span>(sum_b,m)))&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>((node)&#123;sum_b,a&#125;);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> tbegin=(step==<span class="number">0</span>)?<span class="number">1</span>:<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=tbegin;i&lt;=<span class="number">9</span>;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (sum+i&gt;m<span class="number">-18</span>)&#123;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            num.<span class="built_in">push_back</span>(<span class="string">&#x27;0&#x27;</span>+i);</span><br><span class="line">            <span class="built_in">dfs</span>(step<span class="number">+1</span>,sum+i);</span><br><span class="line">            num.<span class="built_in">pop_back</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="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    <span class="type">int</span> cur=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">while</span> (n--)&#123;</span><br><span class="line">        cin&gt;&gt;k&gt;&gt;m;</span><br><span class="line">        <span class="type">int</span> flag=<span class="number">0</span>;</span><br><span class="line">        <span class="built_in">dfs</span>(<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;Case &quot;</span>&lt;&lt;cur&lt;&lt;endl;</span><br><span class="line">        cur++;</span><br><span class="line">        <span class="keyword">if</span> (ans.<span class="built_in">size</span>()==<span class="number">0</span>)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;No Solution&quot;</span>&lt;&lt;endl;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">sort</span>(ans.<span class="built_in">begin</span>(),ans.<span class="built_in">end</span>(),cmp);</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">                cout&lt;&lt;ans[i].w&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;ans[i].ansnum&lt;&lt;endl;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        ans.<span class="built_in">clear</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>PTA算法感最强的一题，涉及算法DFS，而且并非普通DFS。</p><p>目前来看，这一题的难度大于前面104题，等我做完我可以给个结论这题是不是最难的。</p><p>现在进入正文，如果你尚且对DFS/BFS没有一点了解，现在应该立刻去补修相关知识，这很重要。</p><p>并且这一题最基本的点是你要懂的gcd函数，素数判断函数，求各位和函数怎么写，这个都不会等着爆0。</p><p>在我的认知中，DFS一般是用来求解和图论相关的问题的，我在内心把图论和DFS绑在了一起，导致了我在面对这种题目时没有第一时间想到DFS。</p><p>DFS的大名叫做深度优先搜索，什么是搜索，搜是一个动词，而索这个字告诉了你，进行这个行为需要你提供索引。</p><p>我们发现这个数据范围给的非常大，已经达到了10的十次方级别了，就算是O(n)的复杂度也是一样会超时的（热知识，一般而言最差时间达到10的七次方，那大概率会有测试点爆TLE）因此常规的枚举是绝对不可能用的。在面对这种超大数据范围时，DFS是一个很优秀的选择，通过与其关联的剪枝和回溯两个算法可以很显著的降低时间复杂度。</p><p>我们观察发现，求数一定要以9结尾，否则不可能与原数有一个大于2的最大公约数，且至少需要2个末尾9（题目样例和实际验证表明，单个末尾9通常难以满足条件，或者解不完整）。</p><p>DFS主函数的内部算法是通过step记录现在数字字符串已经有几位了，通过sum来记录现在各位数字的和。在最开始，我们需要判断，当step==k-2时，即说明这个数字已经被填充好了，找到了第一个数字，可以进行判断，而判断的方法就和题面描述的一样，最后将满足条件的答案存入ans数组并且输出就可以了。</p><p>（这题用暴力枚举可以得到12分，也就是及格分，在这里陈越手下留情了，没有让暴力直接爆0）</p><p>下面我给出AI的一些补充</p><blockquote><p>非常好！这是一个很核心的问题。搜索算法（特别是DFS和BFS）是解决许多算法问题的“万能钥匙”，但不同题型使用搜索的意图和方式也不同。</p><p>以下是那些<strong>频繁且典型</strong>地使用搜索算法（DFS, BFS及其变种）的题型分类，并附上了它们的核心特征和经典例题：</p><hr><h3 id="1-路径与连通性问题">1. 路径与连通性问题</h3><p>这类问题通常在一个抽象的“图”结构（如网格、迷宫、关系网）中寻找路径或判断连通性。</p><ul><li><strong>题型特征</strong>：给定一个起点、一个或多个终点，以及一些障碍或规则，问能否到达、最短路径是什么、有多少种路径等。</li><li><strong>常用搜索</strong>：<strong>BFS</strong>（求最短、最小步数）、<strong>DFS</strong>（记录所有路径）。</li><li><strong>经典例题</strong>：<ul><li><strong>迷宫问题</strong>：从左上角到右下角，<code>1</code>代表墙，<code>0</code>代表路，求最短路径。</li><li><strong>岛屿数量</strong>（Leetcode 200）：网格中，<code>1</code>是陆地，<code>0</code>是水，计算岛屿的数量（连通块的个数，DFS/BFS均可用于标记和计数）。</li><li><strong>单词接龙</strong>（Leetcode 127）：给定单词列表，每次变一个字母，求从beginWord到endWord的最短转换序列长度。这是将单词抽象为节点，构建图模型后用BFS求解的经典案例。</li></ul></li></ul><h3 id="2-排列、组合、选择问题">2. 排列、组合、选择问题</h3><p>这类问题需要枚举所有可能的组合情况，是DFS最经典的应用场景。</p><ul><li><strong>题型特征</strong>：题目中经常出现“所有可能”、“所有组合”、“全部情况”等字眼。需要系统性地遍历所有候选答案。</li><li><strong>常用搜索</strong>：<strong>回溯法（Backtracking）</strong>，这是DFS的一种，其特点是在递归前后进行“选择”和“撤销选择”。</li><li><strong>经典例题</strong>：<ul><li><strong>全排列</strong>（Leetcode 46）：给定一个不含重复数字的数组，返回其所有可能的排列。</li><li><strong>组合总和</strong>（Leetcode 39）：给定一个无重复元素的数组和一个目标数，找出所有可以使数字和为目标数的组合（数字可重复使用）。</li><li><strong>子集</strong>（Leetcode 78）：给定一组不含重复元素的整数数组，返回其所有可能的子集。</li><li><strong>N皇后</strong>（Leetcode 51）：如何将n个皇后放置在n×n的棋盘上，并且使皇后彼此之间不能相互攻击。需要枚举所有可能的摆放位置。</li></ul></li></ul><h3 id="3-棋盘、网格类游戏与状态搜索">3. 棋盘、网格类游戏与状态搜索</h3><p>这类问题可以看作是<strong>路径问题</strong>和<strong>排列问题</strong>的更复杂结合，状态由整个棋盘或系统的多个因素共同定义。</p><ul><li><strong>题型特征</strong>：问题局面会随着你的操作而改变，每一步操作都会让局面从一个“状态”转移到另一个“状态”。目标是找到从初始状态到目标状态的操作序列。</li><li><strong>常用搜索</strong>：<strong>BFS</strong>（求最少步数）、<strong>双向BFS</strong>（优化）、<strong>A*</strong>（启发式搜索）。</li><li><strong>经典例题</strong>：<ul><li><strong>滑动谜题</strong>（Leetcode 773）：在一个2x3的棋盘上，有5个块和一个空位，通过滑动块到空位来解开谜题，求最少步数。需要将整个棋盘的局面编码为一个“状态”进行BFS。</li><li><strong>华容道</strong>：类似滑动谜题，但更复杂。</li><li><strong>翻转游戏</strong>或<strong>点亮所有的灯</strong>：每次操作一个格子会影响其周围格子的状态。</li></ul></li></ul><h3 id="4-树形结构相关问题">4. 树形结构相关问题</h3><p>树是一种特殊的图，遍历树本身就是一种搜索。</p><ul><li><strong>题型特征</strong>：直接给出树结构（二叉树、N叉树），或者问题可以抽象为一棵树（如决策树）。</li><li><strong>常用搜索</strong>：<strong>DFS</strong>（前序、中序、后序遍历）、<strong>BFS</strong>（层序遍历）。</li><li><strong>经典例题</strong>：<ul><li><strong>二叉树的所有路径</strong>（Leetcode 257）：用DFS记录从根节点到叶子节点的所有路径。</li><li><strong>二叉树的最大深度</strong>（Leetcode 104）：可用DFS递归或BFS层序计数求解。</li><li><strong>二叉树的序列化与反序列化</strong>：利用DFS或BFS遍历来编码和解码树的结构。</li></ul></li></ul><h3 id="5-约束满足问题">5. 约束满足问题</h3><p>这类问题是搜索的高阶应用，需要满足多重约束条件。</p><ul><li><strong>题型特征</strong>：在尝试填充或安排事物时，必须满足一系列复杂的条件（约束）。</li><li><strong>常用搜索</strong>：<strong>回溯法</strong>，并通常会结合<strong>剪枝</strong>和<strong>启发式</strong>来极大优化效率。</li><li><strong>经典例题</strong>：<ul><li><strong>数独求解</strong>（Leetcode 37）：填充空格，使得每行、每列、每一个3x3子宫格都包含1-9且不重复。是回溯+剪枝的完美例子。</li><li><strong>N皇后问题</strong>（也属于此类）：约束是同一行、列、对角线上不能有两个皇后。</li></ul></li></ul><hr><h3 id="总结与思维模式">总结与思维模式</h3><p>当你遇到一个新问题时，可以通过问自己以下问题来判断是否适用搜索算法：</p><ol><li><strong>是否可以建模为“图”？</strong> 问题是否有“节点”（状态、位置）和“边”（操作、转换方式）的概念？</li><li><strong>是否需要枚举？</strong> 问题是否要求找出所有可能的方案，而不是一个数学公式解？</li><li><strong>是否有明显的操作步骤？</strong> 每一步是否都有几种选择，从而形成一棵巨大的“选择树”？</li></ol><p>如果答案是肯定的，那么搜索算法很大概率就是解决问题的正确方向。<strong>DFS</strong> 更适合深入探索所有分支（如所有排列），而 <strong>BFS</strong> 更适合寻找最短路径或最近目标。<strong>回溯</strong> 是DFS在可撤销选择场景下的特化，而 <strong>剪枝</strong> 是优化任何搜索过程、避免无效探索的关键技术。</p><p>希望这个分类能帮助你建立清晰的解题思路！</p></blockquote><blockquote><p>好的，我们来深入探讨一下搜索算法（特别是<strong>回溯法 Backtracking</strong>）在<strong>排列、组合、选择</strong>类问题中的核心应用。这是深度优先搜索（DFS）最经典和强大的应用场景之一。</p><h3 id="核心思想：决策树与系统性枚举">核心思想：决策树与系统性枚举</h3><p>解决这类问题的关键，在于将问题抽象为一棵<strong>决策树（或状态树）</strong>。</p><ul><li><strong>节点</strong>：代表你在解决问题过程中所处的<strong>状态</strong>（例如，已经选择了哪些数字）。</li><li><strong>分支</strong>：代表你可做的<strong>选择</strong>（例如，下一个数字可以选哪个）。</li><li><strong>叶子节点</strong>：代表一个<strong>完整解</strong>（例如，一个完整的排列或组合）。</li></ul><p>搜索算法（回溯法）的任务，就是<strong>从根节点开始，系统地、不重复也不遗漏地遍历这棵决策树的所有分支，以找到所有满足条件的叶子节点</strong>。</p><hr><h3 id="两大经典问题与模板">两大经典问题与模板</h3><p>我们通过两个最基础的问题来理解回溯法的应用。</p><h4 id="1-排列问题-“顺序有关”">1. 排列问题 - “顺序有关”</h4><p><strong>问题</strong>：给定一个不含重复数字的数组 <code>[1, 2, 3]</code>，返回其所有可能的排列。顺序不同，即为不同的解。</p><p><strong>解</strong>：<code>[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,3]</code></p><p><strong>回溯思路</strong>：</p><ul><li><strong>选择</strong>：每一步，你都可以从<strong>所有未被使用的元素</strong>中选择一个。</li><li><strong>路径</strong>：记录当前已经做出了哪些选择（即当前排列）。</li><li><strong>状态</strong>：除了记录路径，还需要记录哪些元素已经被使用过了（通常用一个 <code>used</code>数组标记）。</li><li><strong>回溯</strong>：当探索到叶子节点（一个完整排列）后，需要<strong>撤销最后一步的选择</strong>，回到上一层状态，以进行下一个选择。</li></ul><p><strong>核心代码模板（C++）</strong>：</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><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">vector&lt;vector&lt;int&gt;&gt; permute(vector&lt;int&gt;&amp; nums) &#123;</span><br><span class="line">    vector&lt;vector&lt;int&gt;&gt; result;</span><br><span class="line">    vector&lt;int&gt; path; // 当前路径（当前构造的排列）</span><br><span class="line">    vector&lt;bool&gt; used(nums.size(), false); // 标记元素是否被使用过</span><br><span class="line">    backtrack(nums, path, used, result);</span><br><span class="line">    return result;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">void backtrack(vector&lt;int&gt;&amp; nums, vector&lt;int&gt;&amp; path, vector&lt;bool&gt;&amp; used, vector&lt;vector&lt;int&gt;&gt;&amp; result) &#123;</span><br><span class="line">    // 终止条件：路径长度等于原数组长度，说明得到一个完整排列</span><br><span class="line">    if (path.size() == nums.size()) &#123;</span><br><span class="line">        result.push_back(path);</span><br><span class="line">        return;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    // 遍历所有选择</span><br><span class="line">    for (int i = 0; i &lt; nums.size(); i++) &#123;</span><br><span class="line">        if (used[i]) continue; // 如果这个数字已经用过，跳过</span><br><span class="line">        // 做选择</span><br><span class="line">        used[i] = true;</span><br><span class="line">        path.push_back(nums[i]);</span><br><span class="line">        // 进入下一层决策树</span><br><span class="line">        backtrack(nums, path, used, result);</span><br><span class="line">        // 撤销选择（回溯的核心）</span><br><span class="line">        used[i] = false;</span><br><span class="line">        path.pop_back();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="2-组合问题-“顺序无关”">2. 组合问题 - “顺序无关”</h4><p><strong>问题</strong>：给定两个整数 <code>n = 4, k = 2</code>，返回 <code>1...n</code>中所有可能的 <code>k</code>个数的组合。</p><p><strong>解</strong>：<code>[1,2], [1,3], [1,4], [2,3], [2,4], [3,4]</code>(注意 <code>[2,1]</code>和 <code>[1,2]</code>是同一个组合)</p><p><strong>回溯思路</strong>：</p><ul><li><strong>选择</strong>：为了避免重复（<code>[1,2]</code>和 <code>[2,1]</code>），我们规定一种“顺序”。每一步，只能从<strong>上一个被选择元素之后</strong>的元素开始选择。这引入了 <code>startIndex</code>的概念。</li><li><strong>路径</strong>：记录当前已经选择了哪些数字。</li><li><strong>回溯</strong>：同样，在递归返回后需要撤销选择。</li></ul><p><strong>核心代码模板（C++）</strong>：</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><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></pre></td><td class="code"><pre><span class="line">vector&lt;vector&lt;int&gt;&gt; combine(int n, int k) &#123;</span><br><span class="line">    vector&lt;vector&lt;int&gt;&gt; result;</span><br><span class="line">    vector&lt;int&gt; path; // 当前路径（当前构造的组合）</span><br><span class="line">    backtrack(n, k, 1, path, result); // 从数字1开始</span><br><span class="line">    return result;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">void backtrack(int n, int k, int startIndex, vector&lt;int&gt;&amp; path, vector&lt;vector&lt;int&gt;&gt;&amp; result) &#123;</span><br><span class="line">    // 终止条件：路径长度等于k</span><br><span class="line">    if (path.size() == k) &#123;</span><br><span class="line">        result.push_back(path);</span><br><span class="line">        return;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    // 遍历选择列表：从startIndex开始，到n结束</span><br><span class="line">    for (int i = startIndex; i &lt;= n; i++) &#123;</span><br><span class="line">        // 做选择</span><br><span class="line">        path.push_back(i);</span><br><span class="line">        // 进入下一层决策树，下一个数字要从i+1开始选，避免重复</span><br><span class="line">        backtrack(n, k, i + 1, path, result);</span><br><span class="line">        // 撤销选择</span><br><span class="line">        path.pop_back();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><hr><h3 id="关键技巧与变种">关键技巧与变种</h3><p>掌握了上述两个模板，你就解决了80%的此类问题。剩下的20%在于如何处理<strong>重复元素</strong>和进行<strong>剪枝优化</strong>。</p><h4 id="1-处理重复元素（去重）">1. 处理重复元素（去重）</h4><p>如果输入集合中有重复元素（如 <code>[1,2,2]</code>），直接套用模板会产生重复的解（如两个 <code>[1,2]</code>）。</p><ul><li><p><strong>方法</strong>：先对数组<strong>排序</strong>，让相同的元素紧挨在一起。然后在回溯的循环中增加一个判断：</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></pre></td><td class="code"><pre><span class="line">for (int i = startIndex; i &lt; nums.size(); i++) &#123;</span><br><span class="line">    // 跳过同一树层上使用过的相同元素</span><br><span class="line">    if (i &gt; startIndex &amp;&amp; nums[i] == nums[i-1]) &#123;</span><br><span class="line">        continue;</span><br><span class="line">    &#125;</span><br><span class="line">    // ... 做选择、递归、撤销选择</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ul><li><strong>理解</strong>：<code>i &gt; startIndex</code>意味着当前不是第一个可选的元素。<code>nums[i] == nums[i-1]</code>意味着当前元素和上一个相同。如果上一个相同的元素<strong>没有被使用</strong>（因为递归返回后已经被撤销了），说明在同一层已经尝试过这个数字了，必须跳过，否则就会产生重复组合。</li></ul></li></ul><h4 id="2-剪枝优化">2. 剪枝优化</h4><p>这是提升回溯算法效率的关键。如果已经能确定从当前节点走下去不可能得到解，就应该提前终止搜索。</p><ul><li><p><strong>组合问题剪枝</strong>：在循环条件上做文章。</p><p>例如在组合问题中，如果 <code>n=5, k=3</code>，当前路径 <code>path.size() = 1</code>（已选1个），<code>startIndex=4</code>。</p><p>那么即使把 <code>4</code>和 <code>5</code>都选上，总数也才 <code>1 + 2 = 3</code>，刚好满足。但如果 <code>startIndex=5</code>，那么即使把 <code>5</code>选上，总数也才 <code>1 + 1 = 2 &lt; 3</code>，不可能凑够k个数，这条分支就没必要走了。</p><ul><li><strong>修改循环条件</strong>：将 <code>for (int i = startIndex; i &lt;= n; i++)</code>改为 <code>for (int i = startIndex; i &lt;= n - (k - path.size()) + 1; i++)</code>。这个计算确保了后续至少还有 <code>(k - path.size())</code>个数字可供选择。</li></ul></li></ul><h3 id="总结：一个通用的回溯模板">总结：一个通用的回溯模板</h3><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></pre></td><td class="code"><pre><span class="line">void backtrack(参数) &#123;</span><br><span class="line">    if (终止条件) &#123;</span><br><span class="line">        存放结果;</span><br><span class="line">        return;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    for (选择：本层集合中的元素) &#123; // 注意可能伴随剪枝操作 (i &lt;= n - ...)</span><br><span class="line">        if (一些合法性判断，比如去重、是否已使用等) &#123;</span><br><span class="line">            continue;</span><br><span class="line">        &#125;</span><br><span class="line">        处理节点;</span><br><span class="line">        backtrack(路径，选择列表); // 递归</span><br><span class="line">        回溯，撤销处理结果;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>核心四步曲</strong>：</p><ol><li><strong>确认递归参数与终止条件</strong>：什么时候算得到一个解？</li><li><strong>遍历本层的所有选择</strong>：for循环。</li><li><strong>处理节点</strong>：做出一个选择，更新状态。</li><li><strong>递归</strong>：进入下一层决策树。</li><li><strong>回溯</strong>：撤销第3步的操作，这是最关键的一步，让状态恢复到进行下一个选择之前。</li></ol><p>N皇后、子集、分割回文串等问题，都是这个框架的变形。多练习几道题，你就能深刻体会到这个“模板”的强大之处。</p></blockquote><h2 id="1105">1105</h2><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></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;vector&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="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> MAXN = <span class="number">100000</span>; <span class="comment">// 地址最大范围</span></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> data, next;</span><br><span class="line">&#125; nodes[MAXN]; <span class="comment">// 静态链表，索引代表地址</span></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> head1, head2, n;</span><br><span class="line">    cin &gt;&gt; head1 &gt;&gt; head2 &gt;&gt; n;</span><br><span class="line">    </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">0</span>; i &lt; n; i++) &#123;</span><br><span class="line">        <span class="type">int</span> addr, data, next;</span><br><span class="line">        cin &gt;&gt; addr &gt;&gt; data &gt;&gt; next;</span><br><span class="line">        nodes[addr] = &#123;data, next&#125;;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 构建链表L1和L2的地址序列</span></span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; L1, L2;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> p = head1; p != <span class="number">-1</span>; p = nodes[p].next) </span><br><span class="line">        L<span class="number">1.</span><span class="built_in">push_back</span>(p);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> p = head2; p != <span class="number">-1</span>; p = nodes[p].next) </span><br><span class="line">        L<span class="number">2.</span><span class="built_in">push_back</span>(p);</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 确保L1是长链表</span></span><br><span class="line">    <span class="keyword">if</span> (L<span class="number">1.</span><span class="built_in">size</span>() &lt; L<span class="number">2.</span><span class="built_in">size</span>()) </span><br><span class="line">        <span class="built_in">swap</span>(L1, L2);</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 逆序短链表L2</span></span><br><span class="line">    <span class="built_in">reverse</span>(L<span class="number">2.</span><span class="built_in">begin</span>(), L<span class="number">2.</span><span class="built_in">end</span>());</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 合并：每两个L1结点插入一个L2结点</span></span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">    <span class="type">int</span> j = <span class="number">0</span>; <span class="comment">// L2的索引</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; L<span class="number">1.</span><span class="built_in">size</span>(); i++) &#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(L1[i]);</span><br><span class="line">        <span class="comment">// 当已插入L1的结点数为奇数（i从0开始，i=1代表第二个结点）且L2还有结点</span></span><br><span class="line">        <span class="keyword">if</span> ((i + <span class="number">1</span>) % <span class="number">2</span> == <span class="number">0</span> &amp;&amp; j &lt; L<span class="number">2.</span><span class="built_in">size</span>()) &#123; </span><br><span class="line">            ans.<span class="built_in">push_back</span>(L2[j++]);</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">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; ans.<span class="built_in">size</span>(); i++) &#123;</span><br><span class="line">        <span class="keyword">if</span> (i == ans.<span class="built_in">size</span>() - <span class="number">1</span>) </span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%05d %d -1\n&quot;</span>, ans[i], nodes[ans[i]].data);</span><br><span class="line">        <span class="keyword">else</span> </span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%05d %d %05d\n&quot;</span>, ans[i], nodes[ans[i]].data, ans[i + <span class="number">1</span>]);</span><br><span class="line">    &#125;</span><br><span class="line">    </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>（有人被样例误导了看反两条链表结果找bug快一个小时没找出来，这样例属实太过神人了）</p><p>（看反两条链表你知道能过多少个测试点吗，能过4个拿到22分，这就是我找bug没往这里找的原因，我一直以为是我链表的插入逻辑写错了，气笑了）</p><h2 id="1106">1106</h2><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></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">int</span> 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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">ans</span><span class="params">(n<span class="number">+2</span>)</span></span>;</span><br><span class="line">    ans[<span class="number">0</span>]=<span class="number">2</span>,ans[<span class="number">1</span>]=<span class="number">0</span>,ans[<span class="number">2</span>]=<span class="number">1</span>,ans[<span class="number">3</span>]=<span class="number">9</span>;</span><br><span class="line">    <span class="type">int</span> pos=<span class="number">4</span>;</span><br><span class="line">    <span class="keyword">while</span> (pos&lt;=n)&#123;</span><br><span class="line">        ans[pos]=(ans[pos<span class="number">-1</span>]+ans[pos<span class="number">-2</span>]+ans[pos<span class="number">-3</span>]+ans[pos<span class="number">-4</span>])%<span class="number">10</span>;</span><br><span class="line">        pos++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cout&lt;&lt;ans[i];</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="1107">1107</h2><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 class="type">int</span> n,m;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(<span class="type">int</span> a,<span class="type">int</span> b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">return</span> a&gt;b;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</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="function">vector&lt;<span class="type">int</span>&gt; <span class="title">b</span><span class="params">(m)</span></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">            cin&gt;&gt;b[j];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">sort</span>(b.<span class="built_in">begin</span>(),b.<span class="built_in">end</span>(),cmp);</span><br><span class="line">        ans.<span class="built_in">push_back</span>(b[<span class="number">0</span>]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==ans.<span class="built_in">size</span>()<span class="number">-1</span>) cout&lt;&lt;ans[i]&lt;&lt;endl;</span><br><span class="line">        <span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;ans[i]&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(ans.<span class="built_in">begin</span>(),ans.<span class="built_in">end</span>(),cmp);</span><br><span class="line">    cout&lt;&lt;ans[<span class="number">0</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><h2 id="1108">1108</h2><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">string s;</span><br><span class="line">string ans=<span class="string">&quot;String&quot;</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="built_in">getline</span>(cin,s);</span><br><span class="line">    unordered_map&lt;<span class="type">char</span>,<span class="type">int</span>&gt; 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">char</span> c:s)&#123;</span><br><span class="line">        <span class="keyword">if</span> (c==<span class="string">&#x27;S&#x27;</span>||c==<span class="string">&#x27;t&#x27;</span>||c==<span class="string">&#x27;r&#x27;</span>||c==<span class="string">&#x27;i&#x27;</span>||c==<span class="string">&#x27;n&#x27;</span>||c==<span class="string">&#x27;g&#x27;</span>)&#123;</span><br><span class="line">            m[c]++;</span><br><span class="line">            sum++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    string res;</span><br><span class="line">    <span class="keyword">while</span> (sum&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">char</span> c:ans)&#123;</span><br><span class="line">            <span class="keyword">if</span> (m[c]&gt;<span class="number">0</span>)&#123;</span><br><span class="line">                res+=c;</span><br><span class="line">                m[c]--;</span><br><span class="line">                sum--;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                <span class="keyword">continue</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;res&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>这题和1043完全一样啊，做法是完全相同的。</p><h2 id="1109">1109</h2><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></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">string ans;</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">    unordered_map&lt;<span class="type">char</span>,vector&lt;vector&lt;<span class="type">char</span>&gt;&gt;&gt; image;</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">26</span>;i++)&#123;</span><br><span class="line">        <span class="type">char</span> c=<span class="string">&#x27;A&#x27;</span>+i;</span><br><span class="line">        image[c]=vector&lt;vector&lt;<span class="type">char</span>&gt;&gt;(<span class="number">7</span>,<span class="built_in">vector</span>&lt;<span class="type">char</span>&gt;(<span class="number">5</span>));</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">7</span>;j++)&#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> k=<span class="number">0</span>;k&lt;<span class="number">5</span>;k++)&#123;</span><br><span class="line">                cin&gt;&gt;image[c][j][k];</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cin.<span class="built_in">ignore</span>();</span><br><span class="line">    <span class="built_in">getline</span>(cin,ans);</span><br><span class="line">    string word;</span><br><span class="line">    vector&lt;string&gt; words;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (ans[i]&gt;=<span class="string">&#x27;A&#x27;</span>&amp;&amp;ans[i]&lt;=<span class="string">&#x27;Z&#x27;</span>)&#123;</span><br><span class="line">            word+=ans[i];</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="keyword">if</span> (!word.<span class="built_in">empty</span>())&#123;</span><br><span class="line">                words.<span class="built_in">push_back</span>(word);</span><br><span class="line">                word.<span class="built_in">clear</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="keyword">if</span> (!word.<span class="built_in">empty</span>())&#123;</span><br><span class="line">        words.<span class="built_in">push_back</span>(word);</span><br><span class="line">        word.<span class="built_in">clear</span>();</span><br><span class="line">    &#125;<span class="comment">//模板，分割字符串用的。</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;words.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> r=<span class="number">0</span>;r&lt;<span class="number">7</span>;r++)&#123;<span class="comment">//这两个循环顺序不能换</span></span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j=<span class="number">0</span>;j&lt;words[i].<span class="built_in">size</span>();j++)&#123;</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">int</span> c=<span class="number">0</span>;c&lt;<span class="number">5</span>;c++)&#123;</span><br><span class="line">                    cout&lt;&lt;image[words[i][j]][r][c];</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">if</span> (j!=words[i].<span class="built_in">size</span>()<span class="number">-1</span>) cout&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            cout&lt;&lt;endl;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (i!=words.<span class="built_in">size</span>()<span class="number">-1</span>) cout&lt;&lt;endl; </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>大胆尝试在unordered_map里面内嵌一个二维数组吧</p><h2 id="1110">1110</h2><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><span class="line">60</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 class="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> add;</span><br><span class="line">    <span class="type">int</span> data;</span><br><span class="line">    <span class="type">int</span> next;</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">    vector&lt;node&gt; listnode;</span><br><span class="line">    unordered_map&lt;<span class="type">int</span>,node&gt; m;</span><br><span class="line">    <span class="type">int</span> tbegin,n,k;</span><br><span class="line">    cin&gt;&gt;tbegin&gt;&gt;n&gt;&gt;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++)&#123;</span><br><span class="line">        node l;</span><br><span class="line">        cin&gt;&gt;l.add&gt;&gt;l.data&gt;&gt;l.next;</span><br><span class="line">        m[l.add]=l;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (tbegin!=<span class="number">-1</span>)&#123;</span><br><span class="line">        listnode.<span class="built_in">push_back</span>(m[tbegin]);</span><br><span class="line">        tbegin=m[tbegin].next;</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;node&gt; ans;</span><br><span class="line">    <span class="type">int</span> pos=listnode.<span class="built_in">size</span>();</span><br><span class="line">    <span class="type">int</span> last=pos%k;</span><br><span class="line">    stack&lt;node&gt; s;</span><br><span class="line">    pos--;</span><br><span class="line">    <span class="keyword">if</span> (last!=<span class="number">0</span>)&#123;</span><br><span class="line">        <span class="keyword">while</span> (last--)&#123;</span><br><span class="line">            s.<span class="built_in">push</span>(listnode[pos]);</span><br><span class="line">            pos--;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">while</span> (!s.<span class="built_in">empty</span>())&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(s.<span class="built_in">top</span>());</span><br><span class="line">            s.<span class="built_in">pop</span>();</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (pos&gt;=<span class="number">0</span>)&#123;</span><br><span class="line">        s.<span class="built_in">push</span>(listnode[pos]);</span><br><span class="line">        pos--;</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">size</span>()==k)&#123;</span><br><span class="line">            <span class="keyword">while</span> (!s.<span class="built_in">empty</span>())&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(s.<span class="built_in">top</span>());</span><br><span class="line">                s.<span class="built_in">pop</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="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==ans.<span class="built_in">size</span>()<span class="number">-1</span>) ans[i].next=<span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">else</span> ans[i].next=ans[i<span class="number">+1</span>].add;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==ans.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%05d %d %d\n&quot;</span>,ans[i].add,ans[i].data,ans[i].next);</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%05d %d %05d\n&quot;</span>,ans[i].add,ans[i].data,ans[i].next);</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><h2 id="1111">1111</h2><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></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">    string month,day,year;</span><br><span class="line">    cin&gt;&gt;n;</span><br><span class="line">    unordered_map&lt;string,string&gt; m;</span><br><span class="line">    m.<span class="built_in">emplace</span>(<span class="string">&quot;Jan&quot;</span>,<span class="string">&quot;01&quot;</span>);</span><br><span class="line">    m.<span class="built_in">emplace</span>(<span class="string">&quot;Feb&quot;</span>,<span class="string">&quot;02&quot;</span>);</span><br><span class="line">    m.<span class="built_in">emplace</span>(<span class="string">&quot;Mar&quot;</span>,<span class="string">&quot;03&quot;</span>);</span><br><span class="line">    m.<span class="built_in">emplace</span>(<span class="string">&quot;Apr&quot;</span>,<span class="string">&quot;04&quot;</span>);</span><br><span class="line">    m.<span class="built_in">emplace</span>(<span class="string">&quot;May&quot;</span>,<span class="string">&quot;05&quot;</span>);</span><br><span class="line">    m.<span class="built_in">emplace</span>(<span class="string">&quot;Jun&quot;</span>,<span class="string">&quot;06&quot;</span>);</span><br><span class="line">    m.<span class="built_in">emplace</span>(<span class="string">&quot;Jul&quot;</span>,<span class="string">&quot;07&quot;</span>);</span><br><span class="line">    m.<span class="built_in">emplace</span>(<span class="string">&quot;Aug&quot;</span>,<span class="string">&quot;08&quot;</span>);</span><br><span class="line">    m.<span class="built_in">emplace</span>(<span class="string">&quot;Sep&quot;</span>,<span class="string">&quot;09&quot;</span>);</span><br><span class="line">    m.<span class="built_in">emplace</span>(<span class="string">&quot;Oct&quot;</span>,<span class="string">&quot;10&quot;</span>);</span><br><span class="line">    m.<span class="built_in">emplace</span>(<span class="string">&quot;Nov&quot;</span>,<span class="string">&quot;11&quot;</span>);</span><br><span class="line">    m.<span class="built_in">emplace</span>(<span class="string">&quot;Dec&quot;</span>,<span class="string">&quot;12&quot;</span>);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;month&gt;&gt;day&gt;&gt;year;</span><br><span class="line">        <span class="keyword">if</span> (!day.<span class="built_in">empty</span>()&amp;&amp;day.<span class="built_in">back</span>()==<span class="string">&#x27;,&#x27;</span>)&#123;</span><br><span class="line">            day.<span class="built_in">pop_back</span>();</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">while</span> (day.<span class="built_in">size</span>()&lt;<span class="number">2</span>)&#123;</span><br><span class="line">            day=<span class="string">&quot;0&quot;</span>+day;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">while</span> (year.<span class="built_in">size</span>()&lt;<span class="number">4</span>)&#123;</span><br><span class="line">            year=<span class="string">&quot;0&quot;</span>+year;</span><br><span class="line">        &#125;</span><br><span class="line">        string s;</span><br><span class="line">        s+=year;</span><br><span class="line">        s+=m[month];</span><br><span class="line">        s+=day;</span><br><span class="line">        string temp=s;</span><br><span class="line">        <span class="built_in">reverse</span>(temp.<span class="built_in">begin</span>(),temp.<span class="built_in">end</span>());</span><br><span class="line">        <span class="keyword">if</span> (temp==s)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Y&quot;</span>&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;s&lt;&lt;endl;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;N&quot;</span>&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;s&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><h2 id="1112">1112</h2><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></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">int</span> n,t;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">node</span>&#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> tbegin,tend;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;t;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">num</span><span class="params">(n<span class="number">+2</span>)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;num[i];</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;node&gt; ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;)&#123;</span><br><span class="line">        <span class="keyword">if</span> (num[i]&gt;t)&#123;</span><br><span class="line">            node a;</span><br><span class="line">            a.tbegin=i;</span><br><span class="line">            <span class="keyword">while</span> (i&lt;n)&#123;</span><br><span class="line">                <span class="keyword">if</span> (num[i]&lt;=t)&#123;</span><br><span class="line">                    <span class="keyword">break</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    i++;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            a.tend=i<span class="number">-1</span>;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(a);</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            i++;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (ans.<span class="built_in">size</span>()!=<span class="number">0</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;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;[%d, %d]\n&quot;</span>,ans[i].tbegin,ans[i].tend);</span><br><span class="line">    &#125;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="type">int</span> maxx=<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;n;i++)&#123;</span><br><span class="line">            maxx=<span class="built_in">max</span>(maxx,num[i]);</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;maxx&lt;&lt;endl;</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="1113">1113</h2><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></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">string chuan=<span class="string">&quot;0123456789abcdefghijklmnopqrst&quot;</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">char_to_val</span><span class="params">(<span class="type">char</span> c)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (c&gt;=<span class="string">&#x27;0&#x27;</span> &amp;&amp; c&lt;=<span class="string">&#x27;9&#x27;</span>) <span class="keyword">return</span> c-<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">    <span class="keyword">return</span> c-<span class="string">&#x27;a&#x27;</span><span class="number">+10</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function">string <span class="title">addition</span><span class="params">(string a,string b)</span></span>&#123;</span><br><span class="line">    string res;</span><br><span class="line">    <span class="keyword">while</span> (a.<span class="built_in">size</span>()&lt;b.<span class="built_in">size</span>()) a=<span class="string">&#x27;0&#x27;</span>+a;</span><br><span class="line">    <span class="keyword">while</span> (b.<span class="built_in">size</span>()&lt;a.<span class="built_in">size</span>()) b=<span class="string">&#x27;0&#x27;</span>+b;</span><br><span class="line">    <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">    <span class="type">int</span> p=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        <span class="type">int</span> x=<span class="built_in">char_to_val</span>(a[i]);</span><br><span class="line">        <span class="type">int</span> y=<span class="built_in">char_to_val</span>(b[i]);</span><br><span class="line">        <span class="type">int</span> temp=(x+y+p)%<span class="number">30</span>;</span><br><span class="line">        p=(x+y+p)/<span class="number">30</span>;</span><br><span class="line">        res=chuan[temp]+res;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (p!=<span class="number">0</span>) res=chuan[p]+res;</span><br><span class="line">    <span class="type">int</span> pos=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (pos&lt;res.<span class="built_in">size</span>() &amp;&amp; res[pos]==<span class="string">&#x27;0&#x27;</span>) pos++;</span><br><span class="line">    <span class="keyword">if</span> (pos==res.<span class="built_in">size</span>()) <span class="keyword">return</span> <span class="string">&quot;0&quot;</span>;</span><br><span class="line">    <span class="keyword">return</span> res.<span class="built_in">substr</span>(pos);</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">    string n1,n2;</span><br><span class="line">    cin&gt;&gt;n1&gt;&gt;n2;</span><br><span class="line">    cout&lt;&lt;<span class="built_in">addition</span>(n1,n2)&lt;&lt;endl;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>你要知道，在非10进制的加减法，可能使用高精度计算远远比你进制转化了再转化回去简单，因为高精度计算的进制是可以通过直接修改参数来实现。</p><p>上面已经写过那么多题高精度了，这下应该得会吧。</p><h2 id="1114">1114</h2><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></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">bool</span> <span class="title">isprime</span><span class="params">(<span class="type">int</span> n)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (n&lt;<span class="number">2</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    <span class="keyword">if</span> (n==<span class="number">2</span>) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">2</span>;i*i&lt;=n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (n%i==<span class="number">0</span>)&#123;</span><br><span class="line">            <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">string s;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;s;</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">0</span>;i&lt;s.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        string num;</span><br><span class="line">        num=s.<span class="built_in">substr</span>(i);</span><br><span class="line">        <span class="type">int</span> x=<span class="built_in">stoi</span>(num);</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">isprime</span>(x))&#123;</span><br><span class="line">            cout&lt;&lt;num&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;<span class="string">&quot;Yes&quot;</span>&lt;&lt;endl;</span><br><span class="line">            sum++;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;num&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;<span class="string">&quot;No&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">if</span> (sum==s.<span class="built_in">size</span>())&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;All Prime!&quot;</span>&lt;&lt;endl;</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="1115">1115</h2><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><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></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> MAX_SIZE=<span class="number">200001</span>;</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> x,y;</span><br><span class="line">    cin&gt;&gt;x&gt;&gt;y;</span><br><span class="line">    <span class="type">int</span> n,m;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    vector&lt;vector&lt;<span class="type">int</span>&gt;&gt;<span class="built_in">g</span>(n,<span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(m));</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;m;j++)&#123;</span><br><span class="line">            cin&gt;&gt;g[i][j];</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> used[MAX_SIZE]=&#123;<span class="number">0</span>&#125;;</span><br><span class="line">    <span class="type">int</span> loser[<span class="number">11</span>]=&#123;<span class="number">0</span>&#125;;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt;existed;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt;winner;</span><br><span class="line"></span><br><span class="line">    used[x]=<span class="number">1</span>;</span><br><span class="line">    used[y]=<span class="number">1</span>;</span><br><span class="line">    existed.<span class="built_in">push_back</span>(x);</span><br><span class="line">    existed.<span class="built_in">push_back</span>(y);</span><br><span class="line">    <span class="type">int</span> life=n;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt;round_outs;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j&lt;n;j++)&#123;</span><br><span class="line">            <span class="type">int</span> id=j<span class="number">+1</span>;</span><br><span class="line">            <span class="keyword">if</span>(loser[id]==<span class="number">1</span>)&#123;</span><br><span class="line">                <span class="keyword">continue</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="type">int</span> num=g[j][i];</span><br><span class="line">            <span class="keyword">if</span>(used[num]==<span class="number">1</span>)&#123;</span><br><span class="line">                round_outs.<span class="built_in">push_back</span>(id);</span><br><span class="line">                loser[id]=<span class="number">1</span>;</span><br><span class="line">                life--;</span><br><span class="line">                <span class="keyword">continue</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="type">bool</span> flag=<span class="literal">false</span>;</span><br><span class="line">            <span class="keyword">for</span>(<span class="keyword">auto</span> a:existed)&#123;</span><br><span class="line">                <span class="keyword">if</span>(a+num&lt;MAX_SIZE&amp;&amp;used[a+num]==<span class="number">1</span>)&#123;</span><br><span class="line">                    flag=<span class="literal">true</span>;</span><br><span class="line">                    <span class="keyword">break</span>;</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">if</span>(a&gt;num&amp;&amp;used[a-num]==<span class="number">1</span>)&#123;</span><br><span class="line">                    flag=<span class="literal">true</span>;</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">            <span class="keyword">if</span>(flag)&#123;</span><br><span class="line">                used[num]=<span class="number">1</span>;</span><br><span class="line">                existed.<span class="built_in">push_back</span>(num);</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                round_outs.<span class="built_in">push_back</span>(id);</span><br><span class="line">                loser[id]=<span class="number">1</span>;</span><br><span class="line">                life--;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(!round_outs.<span class="built_in">empty</span>())&#123;</span><br><span class="line">            <span class="built_in">sort</span>(round_outs.<span class="built_in">begin</span>(),round_outs.<span class="built_in">end</span>());</span><br><span class="line">            <span class="keyword">for</span>(<span class="keyword">auto</span> id:round_outs)&#123;</span><br><span class="line">                cout&lt;&lt;<span class="string">&quot;Round #&quot;</span>&lt;&lt;i<span class="number">+1</span>&lt;&lt;<span class="string">&quot;: &quot;</span>&lt;&lt;id&lt;&lt;<span class="string">&quot; is out.&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">if</span>(life==<span class="number">0</span>)&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;No winner.&quot;</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><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span>(life&gt;<span class="number">0</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="keyword">if</span>(loser[i]==<span class="number">0</span>)&#123;</span><br><span class="line">                winner.<span class="built_in">push_back</span>(i);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;Winner(s): &quot;</span>;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">size_t</span> i=<span class="number">0</span>;i&lt;winner.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            <span class="keyword">if</span>(i==winner.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">                cout&lt;&lt;winner[i];</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                cout&lt;&lt;winner[i]&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        cout&lt;&lt;endl;</span><br><span class="line">    &#125;</span><br><span class="line"></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="1116">1116</h2><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><span class="line">60</span><br><span class="line">61</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 class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(string a,string b)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a.<span class="built_in">size</span>()!=b.<span class="built_in">size</span>()) <span class="keyword">return</span> a.<span class="built_in">size</span>()&gt;b.<span class="built_in">size</span>();</span><br><span class="line">    <span class="keyword">return</span> a&gt;=b;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function">string <span class="title">subtraction</span><span class="params">(string a,string b)</span></span>&#123;</span><br><span class="line">    string res,ans;</span><br><span class="line">    <span class="type">bool</span> flag=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">if</span> (!<span class="built_in">cmp</span>(a,b))&#123;</span><br><span class="line">        <span class="built_in">swap</span>(a,b);</span><br><span class="line">        flag=<span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (b.<span class="built_in">size</span>()&lt;a.<span class="built_in">size</span>())&#123;</span><br><span class="line">        b=<span class="string">&#x27;0&#x27;</span>+b;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> n=a.<span class="built_in">size</span>();</span><br><span class="line">    <span class="type">int</span> p=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=n<span class="number">-1</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        <span class="type">int</span> x=(a[i]-<span class="string">&#x27;0&#x27;</span>)-p;</span><br><span class="line">        <span class="type">int</span> y=(b[i]-<span class="string">&#x27;0&#x27;</span>);</span><br><span class="line">        <span class="keyword">if</span> (x&gt;=y)&#123;</span><br><span class="line">            <span class="type">int</span> temp=(x-y);</span><br><span class="line">            res+=(<span class="type">char</span>)(<span class="string">&#x27;0&#x27;</span>+temp);</span><br><span class="line">            p=<span class="number">0</span>;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            <span class="type">int</span> temp=(<span class="number">10</span>+x-y);</span><br><span class="line">            res+=(<span class="type">char</span>)(<span class="string">&#x27;0&#x27;</span>+temp);</span><br><span class="line">            p=<span class="number">1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">reverse</span>(res.<span class="built_in">begin</span>(),res.<span class="built_in">end</span>());</span><br><span class="line">    <span class="type">int</span> pos=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (pos&lt;res.<span class="built_in">size</span>()&amp;&amp;res[pos]==<span class="string">&#x27;0&#x27;</span>)&#123;</span><br><span class="line">        pos++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (pos==res.<span class="built_in">size</span>()) <span class="keyword">return</span> <span class="string">&quot;0&quot;</span>;</span><br><span class="line">    <span class="keyword">else</span>&#123;</span><br><span class="line">        ans=res.<span class="built_in">substr</span>(pos);</span><br><span class="line">        <span class="keyword">if</span> (flag) ans=<span class="string">&#x27;-&#x27;</span>+ans;</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><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">    string s;</span><br><span class="line">    cin&gt;&gt;s;</span><br><span class="line">    <span class="type">int</span> n=s.<span class="built_in">size</span>();</span><br><span class="line">    <span class="keyword">if</span> (n%<span class="number">2</span>==<span class="number">1</span>)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;Error: &quot;</span>&lt;&lt;n&lt;&lt;<span class="string">&quot; digit(s)&quot;</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><span class="line">    string a=s.<span class="built_in">substr</span>(<span class="number">0</span>,n/<span class="number">2</span>);</span><br><span class="line">    string b=s.<span class="built_in">substr</span>(n/<span class="number">2</span>);</span><br><span class="line">    <span class="keyword">if</span> (<span class="built_in">subtraction</span>(b,a)==<span class="string">&quot;2&quot;</span>)&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;Yes: &quot;</span>&lt;&lt;b&lt;&lt;<span class="string">&quot; - &quot;</span>&lt;&lt;a&lt;&lt;<span class="string">&quot; = 2&quot;</span>&lt;&lt;endl;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        cout&lt;&lt;<span class="string">&quot;No: &quot;</span>&lt;&lt;b&lt;&lt;<span class="string">&quot; - &quot;</span>&lt;&lt;a&lt;&lt;<span class="string">&quot; != 2&quot;</span>&lt;&lt;endl;</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>其实这一题用不着这么麻烦，因为这题陈越手下留情了，尾数不会比7大。</p><p>但是这依然是一题练习高精度减法的好题。如果你对高精度减法不是很熟悉，那可以正好趁这一题练习一下，思路和前面的高精度加法其实大差不差。</p><p>多学一点总不坏不是吗，如果考出来了你不就比别人多AC一题？</p><h2 id="1117">1117</h2><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><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></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 class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">sumnum</span><span class="params">(<span class="type">int</span> a)</span></span>&#123;</span><br><span class="line">    <span class="type">int</span> res=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (a&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        <span class="type">int</span> temp=a%<span class="number">10</span>;</span><br><span class="line">        res+=temp;</span><br><span class="line">        a/=<span class="number">10</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">sq</span><span class="params">(<span class="type">int</span> a)</span></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a==<span class="number">0</span>)&#123;</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> res=<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">while</span> (a&gt;<span class="number">0</span>)&#123;</span><br><span class="line">        <span class="type">int</span> t=a%<span class="number">10</span>;</span><br><span class="line">        res=res*(t*t*t);</span><br><span class="line">        a/=<span class="number">10</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> n1,n2;</span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n1&gt;&gt;n2;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=n1;i&lt;=n2;i++)&#123;</span><br><span class="line">        ans.<span class="built_in">push_back</span>(i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (<span class="number">1</span>)&#123;</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">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (ans[i]&lt;<span class="number">10</span>&amp;&amp;ans[i]&gt;=<span class="number">0</span>)&#123;</span><br><span class="line">                sum++;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (sum==ans.<span class="built_in">size</span>())&#123;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;<span class="keyword">else</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;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">                <span class="type">int</span> x=<span class="built_in">sq</span>(ans[i]);</span><br><span class="line">                ans[i]=<span class="built_in">sumnum</span>(x);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; s;</span><br><span class="line">    set&lt;<span class="type">int</span>&gt; keyy;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        s[ans[i]]++;</span><br><span class="line">        keyy.<span class="built_in">insert</span>(ans[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; king;</span><br><span class="line">    <span class="type">int</span> maxx=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:keyy)&#123;</span><br><span class="line">        maxx=<span class="built_in">max</span>(maxx,s[it]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it:keyy)&#123;</span><br><span class="line">        <span class="keyword">if</span> (s[it]==maxx)&#123;</span><br><span class="line">            king.<span class="built_in">push_back</span>(it);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">sort</span>(king.<span class="built_in">begin</span>(),king.<span class="built_in">end</span>());</span><br><span class="line">    cout&lt;&lt;maxx&lt;&lt;endl;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;king.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (i==king.<span class="built_in">size</span>()<span class="number">-1</span>)&#123;</span><br><span class="line">            cout&lt;&lt;king[i];</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;king[i]&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    </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="1118">1118</h2><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><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></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">string s;</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">    unordered_map&lt;string,<span class="type">int</span>&gt; n;</span><br><span class="line">    n.<span class="built_in">emplace</span>(<span class="string">&quot;yi&quot;</span>,<span class="number">1</span>),n.<span class="built_in">emplace</span>(<span class="string">&quot;er&quot;</span>,<span class="number">2</span>),n.<span class="built_in">emplace</span>(<span class="string">&quot;san&quot;</span>,<span class="number">3</span>),</span><br><span class="line">    n.<span class="built_in">emplace</span>(<span class="string">&quot;si&quot;</span>,<span class="number">4</span>),n.<span class="built_in">emplace</span>(<span class="string">&quot;wu&quot;</span>,<span class="number">5</span>),n.<span class="built_in">emplace</span>(<span class="string">&quot;liu&quot;</span>,<span class="number">6</span>),</span><br><span class="line">    n.<span class="built_in">emplace</span>(<span class="string">&quot;qi&quot;</span>,<span class="number">7</span>),n.<span class="built_in">emplace</span>(<span class="string">&quot;ba&quot;</span>,<span class="number">8</span>),n.<span class="built_in">emplace</span>(<span class="string">&quot;jiu&quot;</span>,<span class="number">9</span>),</span><br><span class="line">    n.<span class="built_in">emplace</span>(<span class="string">&quot;ling&quot;</span>,<span class="number">0</span>);</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; ans;</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">11</span>;i++)&#123;</span><br><span class="line">        <span class="built_in">getline</span>(cin,s);</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">size</span>()==<span class="number">1</span>&amp;&amp;<span class="built_in">isdigit</span>(s[<span class="number">0</span>]))&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(<span class="built_in">stoi</span>(s));</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span> (s.<span class="built_in">size</span>()&gt;=<span class="number">4</span>&amp;&amp;<span class="built_in">isalpha</span>(s[<span class="number">0</span>]))&#123;</span><br><span class="line">            string t=s.<span class="built_in">substr</span>(<span class="number">0</span>,<span class="number">4</span>);</span><br><span class="line">            <span class="keyword">if</span> (t==<span class="string">&quot;sqrt&quot;</span>)&#123;</span><br><span class="line">                <span class="type">int</span> x=<span class="built_in">sqrt</span>(<span class="built_in">stoi</span>(s.<span class="built_in">substr</span>(<span class="number">4</span>)));</span><br><span class="line">                ans.<span class="built_in">push_back</span>(x);</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(t==<span class="string">&quot;ling&quot;</span>)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(n[s]);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(s.<span class="built_in">size</span>()==<span class="number">2</span>&amp;&amp;<span class="built_in">isalpha</span>(s[<span class="number">0</span>]))&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(n[s]);</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(s.<span class="built_in">size</span>()==<span class="number">3</span>&amp;&amp;<span class="built_in">isalpha</span>(s[<span class="number">0</span>]))&#123;</span><br><span class="line">            ans.<span class="built_in">push_back</span>(n[s]);</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(<span class="built_in">isdigit</span>(s[<span class="number">0</span>]))&#123;</span><br><span class="line">            vector&lt;<span class="type">int</span>&gt; nums;</span><br><span class="line">            string m;</span><br><span class="line">            string f;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;s.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">                <span class="keyword">if</span> (s[i]==<span class="string">&#x27;+&#x27;</span>||s[i]==<span class="string">&#x27;-&#x27;</span>||s[i]==<span class="string">&#x27;*&#x27;</span>||s[i]==<span class="string">&#x27;/&#x27;</span>||s[i]==<span class="string">&#x27;%&#x27;</span>||s[i]==<span class="string">&#x27;^&#x27;</span>)&#123;</span><br><span class="line">                    f=s[i];</span><br><span class="line">                    <span class="type">int</span> y=<span class="built_in">stoi</span>(m);</span><br><span class="line">                    nums.<span class="built_in">push_back</span>(y);</span><br><span class="line">                    m.<span class="built_in">clear</span>();</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    m+=s[i];</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (!m.<span class="built_in">empty</span>())&#123;</span><br><span class="line">                <span class="type">int</span> t=<span class="built_in">stoi</span>(m);</span><br><span class="line">                nums.<span class="built_in">push_back</span>(t);</span><br><span class="line">                m.<span class="built_in">clear</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (f==<span class="string">&quot;+&quot;</span>)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(nums[<span class="number">0</span>]+nums[<span class="number">1</span>]);</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (f==<span class="string">&quot;-&quot;</span>)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(nums[<span class="number">0</span>]-nums[<span class="number">1</span>]);</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (f==<span class="string">&quot;*&quot;</span>)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(nums[<span class="number">0</span>]*nums[<span class="number">1</span>]);</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (f==<span class="string">&quot;/&quot;</span>)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(nums[<span class="number">0</span>]/nums[<span class="number">1</span>]);</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (f==<span class="string">&quot;%&quot;</span>)&#123;</span><br><span class="line">                <span class="keyword">if</span> (nums[<span class="number">1</span>]==<span class="number">0</span>) ans.<span class="built_in">push_back</span>(<span class="number">0</span>); </span><br><span class="line">                <span class="keyword">else</span> ans.<span class="built_in">push_back</span>(nums[<span class="number">0</span>] % nums[<span class="number">1</span>]);</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (f==<span class="string">&quot;^&quot;</span>)&#123;</span><br><span class="line">                ans.<span class="built_in">push_back</span>(<span class="built_in">pow</span>(nums[<span class="number">0</span>],nums[<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">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;ans.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        cout&lt;&lt;ans[i];</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="1119">1119</h2><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">int</span> 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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">panda</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;panda[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">ans</span><span class="params">(n,<span class="number">200</span>)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">1</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (panda[i]&gt;panda[i<span class="number">-1</span>])&#123;</span><br><span class="line">            ans[i]=ans[i<span class="number">-1</span>]<span class="number">+100</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(panda[i]==panda[i<span class="number">-1</span>])&#123;</span><br><span class="line">            ans[i]=ans[i<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=n<span class="number">-2</span>;i&gt;=<span class="number">0</span>;i--)&#123;</span><br><span class="line">        <span class="keyword">if</span> (panda[i]&gt;panda[i<span class="number">+1</span>])&#123;</span><br><span class="line">            ans[i]=<span class="built_in">max</span>(ans[i],ans[i<span class="number">+1</span>]<span class="number">+100</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(panda[i]==panda[i<span class="number">+1</span>])&#123;</span><br><span class="line">            ans[i]=<span class="built_in">max</span>(ans[i],ans[i<span class="number">+1</span>]);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</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">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        sum+=ans[i];</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;sum&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>贪心，建议和lc135一起做。</p><h2 id="1120">1120</h2><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></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 class="type">int</span> n,m;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">a</span><span class="params">(n<span class="number">+1</span>)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">1</span>;i&lt;=n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;a[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">sum</span><span class="params">(n<span class="number">+1</span>)</span></span>;</span><br><span class="line">    sum[<span class="number">0</span>]=<span class="number">0</span>;</span><br><span class="line">    <span class="built_in">partial_sum</span>(a.<span class="built_in">begin</span>()<span class="number">+1</span>,a.<span class="built_in">end</span>(),sum.<span class="built_in">begin</span>()<span class="number">+1</span>);</span><br><span class="line">    <span class="type">int</span> ans=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="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=i<span class="number">+1</span>;j&lt;=n;j++)&#123;</span><br><span class="line">            <span class="type">int</span> x=sum[j]-sum[i];</span><br><span class="line">            <span class="keyword">if</span> (x&lt;=m)&#123;</span><br><span class="line">                ans++;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout&lt;&lt;ans&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>非常公式的前缀和模板题</p><h2 id="1121">1121</h2><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></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 class="function"><span class="type">bool</span> <span class="title">can</span><span class="params">(string a)</span></span>&#123;</span><br><span class="line">    <span class="type">int</span> n=a.<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">1</span>;i&lt;=a.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">        string x=a.<span class="built_in">substr</span>(<span class="number">0</span>,i);</span><br><span class="line">        <span class="type">int</span> y=<span class="built_in">stoi</span>(x);</span><br><span class="line">        <span class="keyword">if</span> (y%i!=<span class="number">0</span>)&#123;</span><br><span class="line">            <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="type">int</span> k;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    cin&gt;&gt;k;</span><br><span class="line">    <span class="function">vector&lt;string&gt; <span class="title">a</span><span class="params">(k)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;k;i++)&#123;</span><br><span class="line">        cin&gt;&gt;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">0</span>;i&lt;k;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">can</span>(a[i]))&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;Yes&quot;</span>&lt;&lt;endl;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cout&lt;&lt;<span class="string">&quot;No&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="1122">1122</h2><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 class="type">int</span> 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">    cin&gt;&gt;n;</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">a</span><span class="params">(n)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        cin&gt;&gt;a[i];</span><br><span class="line">    &#125;</span><br><span class="line">    unordered_map&lt;<span class="type">int</span>,<span class="type">int</span>&gt; hash1;</span><br><span class="line">    set&lt;<span class="type">int</span>&gt; keyy;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (a[i]%<span class="number">2</span>==<span class="number">1</span>)&#123;</span><br><span class="line">            keyy.<span class="built_in">insert</span>(a[i]);</span><br><span class="line">            hash1[a[i]]++;</span><br><span class="line">        &#125;</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">for</span> (<span class="keyword">auto</span> it:keyy)&#123;</span><br><span class="line">        <span class="keyword">if</span> (hash1[it]%<span class="number">2</span>==<span class="number">1</span>)&#123;</span><br><span class="line">            ans=it;</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">    cout&lt;&lt;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="1123">1123</h2><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><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><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</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;string&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="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 处理进位：s为数字字符串（已去除负号），n为保留的最后一位下标，c为进位标志</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">processCarry</span><span class="params">(string &amp;s, <span class="type">int</span> n, <span class="type">bool</span> needCarry)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (!needCarry) &#123;</span><br><span class="line">        s = s.<span class="built_in">substr</span>(<span class="number">0</span>, n + <span class="number">1</span>);</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="type">int</span> pos = n;</span><br><span class="line">    <span class="keyword">while</span> (pos &gt;= <span class="number">0</span> &amp;&amp; needCarry) &#123;</span><br><span class="line">        <span class="keyword">if</span> (s[pos] == <span class="string">&#x27;.&#x27;</span>) &#123;</span><br><span class="line">            pos--;</span><br><span class="line">            <span class="keyword">continue</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        </span><br><span class="line">        <span class="keyword">if</span> (s[pos] == <span class="string">&#x27;9&#x27;</span>) &#123;</span><br><span class="line">            s[pos] = <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">            needCarry = <span class="literal">true</span>;</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            s[pos]++;</span><br><span class="line">            needCarry = <span class="literal">false</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        pos--;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span> (needCarry) &#123;</span><br><span class="line">        s = <span class="string">&quot;1&quot;</span> + s;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    s = s.<span class="built_in">substr</span>(<span class="number">0</span>, n + <span class="number">1</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="function"><span class="type">bool</span> <span class="title">isActualZero</span><span class="params">(<span class="type">const</span> string &amp;s)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">char</span> c : s) &#123;</span><br><span class="line">        <span class="keyword">if</span> (c != <span class="string">&#x27;.&#x27;</span> &amp;&amp; c != <span class="string">&#x27;0&#x27;</span>) &#123;</span><br><span class="line">            <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><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, D;</span><br><span class="line">    cin &gt;&gt; N &gt;&gt; D;</span><br><span class="line">    </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="type">int</span> command;</span><br><span class="line">        string numStr;</span><br><span class="line">        cin &gt;&gt; command &gt;&gt; numStr;</span><br><span class="line">        </span><br><span class="line">        <span class="comment">// 处理负号</span></span><br><span class="line">        <span class="type">bool</span> isNegative = (numStr[<span class="number">0</span>] == <span class="string">&#x27;-&#x27;</span>);</span><br><span class="line">        <span class="keyword">if</span> (isNegative) &#123;</span><br><span class="line">            numStr = numStr.<span class="built_in">substr</span>(<span class="number">1</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="type">size_t</span> dotPos = numStr.<span class="built_in">find</span>(<span class="string">&#x27;.&#x27;</span>);</span><br><span class="line">        <span class="keyword">if</span> (dotPos == string::npos) &#123;</span><br><span class="line">            dotPos = numStr.<span class="built_in">length</span>();</span><br><span class="line">            numStr += <span class="string">&quot;.&quot;</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="type">int</span> requiredLength = dotPos + D + <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">if</span> (numStr.<span class="built_in">length</span>() &lt; requiredLength) &#123;</span><br><span class="line">            numStr.<span class="built_in">append</span>(requiredLength - numStr.<span class="built_in">length</span>(), <span class="string">&#x27;0&#x27;</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="type">int</span> checkPos = dotPos + D + <span class="number">1</span>;</span><br><span class="line">        </span><br><span class="line">        <span class="comment">// 根据指令处理</span></span><br><span class="line">        <span class="type">bool</span> needCarry = <span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">if</span> (command == <span class="number">1</span>) &#123;</span><br><span class="line">            <span class="comment">// 四舍五入</span></span><br><span class="line">            needCarry = (numStr[checkPos] &gt;= <span class="string">&#x27;5&#x27;</span>);</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span> (command == <span class="number">2</span>) &#123;</span><br><span class="line">            <span class="comment">// 截断</span></span><br><span class="line">            needCarry = <span class="literal">false</span>;</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span> (command == <span class="number">3</span>) &#123;</span><br><span class="line">            <span class="comment">// 四舍六入五成双</span></span><br><span class="line">            <span class="keyword">if</span> (numStr[checkPos] &gt; <span class="string">&#x27;5&#x27;</span>) &#123;</span><br><span class="line">                needCarry = <span class="literal">true</span>;</span><br><span class="line">            &#125; <span class="keyword">else</span> <span class="keyword">if</span> (numStr[checkPos] == <span class="string">&#x27;5&#x27;</span>) &#123;</span><br><span class="line">                <span class="comment">// 检查5后面是否有非零数字</span></span><br><span class="line">                <span class="type">bool</span> hasNonZeroAfter = <span class="literal">false</span>;</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">int</span> j = checkPos + <span class="number">1</span>; j &lt; numStr.<span class="built_in">length</span>(); j++) &#123;</span><br><span class="line">                    <span class="keyword">if</span> (numStr[j] != <span class="string">&#x27;0&#x27;</span>) &#123;</span><br><span class="line">                        hasNonZeroAfter = <span class="literal">true</span>;</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">                </span><br><span class="line">                <span class="keyword">if</span> (hasNonZeroAfter) &#123;</span><br><span class="line">                    needCarry = <span class="literal">true</span>;</span><br><span class="line">                &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                    <span class="comment">// 5后全为0，根据保留位最后一位决定</span></span><br><span class="line">                    needCarry = ((numStr[dotPos + D] - <span class="string">&#x27;0&#x27;</span>) % <span class="number">2</span> != <span class="number">0</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><br><span class="line">        <span class="comment">// 处理进位</span></span><br><span class="line">        <span class="built_in">processCarry</span>(numStr, dotPos + D, needCarry);</span><br><span class="line">        </span><br><span class="line">        <span class="comment">// 处理输出</span></span><br><span class="line">        <span class="keyword">if</span> (isNegative &amp;&amp; !<span class="built_in">isActualZero</span>(numStr)) &#123;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;-&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        </span><br><span class="line">        <span class="comment">// 确保输出D位小数</span></span><br><span class="line">        <span class="type">size_t</span> currentDotPos = numStr.<span class="built_in">find</span>(<span class="string">&#x27;.&#x27;</span>);</span><br><span class="line">        <span class="keyword">if</span> (currentDotPos == string::npos) &#123;</span><br><span class="line">            cout &lt;&lt; numStr;</span><br><span class="line">            <span class="keyword">if</span> (D &gt; <span class="number">0</span>) &#123;</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot;.&quot;</span>;</span><br><span class="line">                cout &lt;&lt; <span class="built_in">string</span>(D, <span class="string">&#x27;0&#x27;</span>);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            string integerPart = numStr.<span class="built_in">substr</span>(<span class="number">0</span>, currentDotPos);</span><br><span class="line">            string decimalPart = numStr.<span class="built_in">substr</span>(currentDotPos + <span class="number">1</span>);</span><br><span class="line">            </span><br><span class="line">            <span class="keyword">if</span> (decimalPart.<span class="built_in">length</span>() &lt; D) &#123;</span><br><span class="line">                decimalPart.<span class="built_in">append</span>(D - decimalPart.<span class="built_in">length</span>(), <span class="string">&#x27;0&#x27;</span>);</span><br><span class="line">            &#125; <span class="keyword">else</span> <span class="keyword">if</span> (decimalPart.<span class="built_in">length</span>() &gt; D) &#123;</span><br><span class="line">                decimalPart = decimalPart.<span class="built_in">substr</span>(<span class="number">0</span>, D);</span><br><span class="line">            &#125;</span><br><span class="line">            </span><br><span class="line">            cout &lt;&lt; integerPart &lt;&lt; <span class="string">&quot;.&quot;</span> &lt;&lt; decimalPart;</span><br><span class="line">        &#125;</span><br><span class="line">        cout &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;<span class="comment">//这样的题目是毫无意义的，已经脱离了算法竞赛想要考察的初衷</span></span><br></pre></td></tr></table></figure><p>看我最后一行吧，我感觉这种题可以跳了。</p><h2 id="1124">1124</h2><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 class="type">int</span> 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">    cin&gt;&gt;n;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; a;</span><br><span class="line">    a.<span class="built_in">push_back</span>(<span class="number">0</span>);</span><br><span class="line">    a.<span class="built_in">push_back</span>(<span class="number">1</span>);</span><br><span class="line">    <span class="type">int</span> x;</span><br><span class="line">    <span class="type">int</span> pos=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (x&lt;=<span class="number">1e8</span>)&#123;</span><br><span class="line">        x=a[pos]+a[pos<span class="number">+1</span>];</span><br><span class="line">        a.<span class="built_in">push_back</span>(x);</span><br><span class="line">        pos++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (n&lt;=<span class="number">0</span>) cout&lt;&lt;<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(n==<span class="number">1</span>) cout&lt;&lt;<span class="number">1</span>;</span><br><span class="line">    <span class="keyword">else</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;a.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            <span class="keyword">if</span> (n==a[i])&#123;</span><br><span class="line">                cout&lt;&lt;a[i]&lt;&lt;endl;</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(n&gt;a[i<span class="number">-1</span>]&amp;&amp;n&lt;a[i])&#123;</span><br><span class="line">                <span class="keyword">if</span> (<span class="built_in">abs</span>(n-a[i<span class="number">-1</span>])&gt;<span class="built_in">abs</span>(n-a[i])) cout&lt;&lt;a[i];</span><br><span class="line">                <span class="keyword">else</span> <span class="keyword">if</span>(<span class="built_in">abs</span>(n-a[i<span class="number">-1</span>])&lt;<span class="built_in">abs</span>(n-a[i])) cout&lt;&lt;a[i<span class="number">-1</span>];</span><br><span class="line">                <span class="keyword">else</span> <span class="keyword">if</span>(<span class="built_in">abs</span>(n-a[i<span class="number">-1</span>])==<span class="built_in">abs</span>(n-a[i])) cout&lt;&lt;a[i<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">    <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="1125">1125</h2><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></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">string a,b;</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">    ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span>(!(cin&gt;&gt;a)) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    cin&gt;&gt;b;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> n = (<span class="type">int</span>)a.<span class="built_in">size</span>();</span><br><span class="line">    <span class="type">int</span> m = (<span class="type">int</span>)b.<span class="built_in">size</span>();</span><br><span class="line">    <span class="type">int</span> bestLen = INT_MAX;</span><br><span class="line">    <span class="type">int</span> bestL = <span class="number">-1</span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 遍历 S 中每个可能作为 P 第一个字符匹配起点的位置</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; ++i)&#123;</span><br><span class="line">        <span class="keyword">if</span> (a[i] != b[<span class="number">0</span>]) <span class="keyword">continue</span>;</span><br><span class="line">        <span class="type">int</span> p = i;</span><br><span class="line">        <span class="type">int</span> k = <span class="number">0</span>;</span><br><span class="line">        <span class="comment">// 向右扫描，找到一个可以匹配完整 P 的结束位置</span></span><br><span class="line">        <span class="keyword">while</span> (p &lt; n &amp;&amp; k &lt; m)&#123;</span><br><span class="line">            <span class="keyword">if</span> (a[p] == b[k]) ++k;</span><br><span class="line">            ++p;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (k &lt; m) <span class="keyword">break</span>; <span class="comment">// 从此 i 开始向右都找不到完整的 P，后续 i 更大也不可能（可选的微优化）</span></span><br><span class="line"></span><br><span class="line">        <span class="type">int</span> end = p - <span class="number">1</span>;       <span class="comment">// 最后匹配到的字符索引</span></span><br><span class="line">        <span class="type">int</span> q = end;</span><br><span class="line">        <span class="type">int</span> t = m - <span class="number">1</span>;</span><br><span class="line">        <span class="comment">// 从 end 向左收缩，找到包含 P 的最短起点</span></span><br><span class="line">        <span class="keyword">while</span> (q &gt;= i)&#123;</span><br><span class="line">            <span class="keyword">if</span> (a[q] == b[t]) --t;</span><br><span class="line">            <span class="keyword">if</span> (t &lt; <span class="number">0</span>) <span class="keyword">break</span>;</span><br><span class="line">            --q;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> start = q; <span class="comment">// q 指向匹配到 b[0] 的位置</span></span><br><span class="line">        <span class="type">int</span> len = end - start + <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">if</span> (len &lt; bestLen || (len == bestLen &amp;&amp; start &lt; bestL))&#123;</span><br><span class="line">            bestLen = len;</span><br><span class="line">            bestL = start;</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">// 按题意 P 保证是 S 的一个非空子列，所以必有解</span></span><br><span class="line">    <span class="keyword">if</span> (bestL != <span class="number">-1</span>) cout &lt;&lt; a.<span class="built_in">substr</span>(bestL, bestLen) &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">    <span class="keyword">else</span> cout &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line"></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>125题里最难的那一题，这一题的难度目测在洛谷可以标到绿，也就是这可能是转专业考试最难的那一题了，这也不是一般的双指针，我直接坠机于此。</p><blockquote><p>好的，我帮你整理一份完整的题解思路，按照洛谷/题解的风格写，便于直接放到题解区使用：</p><hr><h2 id="题意理解">题意理解</h2><p>给定字符串 <strong>S</strong> 和字符串 <strong>P</strong>，保证 <strong>P</strong> 是 <strong>S</strong> 的一个<strong>子列</strong>（即可以通过删除 S 中某些字符得到 P）。<br>要求在 S 中找出 <strong>最短的子串</strong>，使得该子串包含 P 作为子列；若有多个最短子串，输出起始位置最靠左的那个。</p><hr><h2 id="思路分析">思路分析</h2><p>这道题和常见的“最小覆盖子串”不同，<strong>要求的是子列而不是字符频次</strong>。<br>直观做法是：</p><ol><li><strong>枚举子串起点</strong>，然后向右找到第一个能完整匹配 P 的子串末尾。</li><li><strong>从右端回溯收缩左端</strong>，使子串长度尽量短。</li><li>记录最短的答案，最后输出。</li></ol><p>这样可以保证我们得到的子串长度最短，且如果有多个最短子串，取起点最小的。</p><hr><h2 id="算法步骤">算法步骤</h2><p>假设字符串 <code>S</code> 长度为 <code>n</code>，字符串 <code>P</code> 长度为 <code>m</code>：</p><h3 id="Step-1-遍历可能的起点">Step 1: 遍历可能的起点</h3><p>从 <code>S</code> 的每个下标 <code>i</code> 开始，只有当 <code>S[i] == P[0]</code> 时才有可能成为起点，继续执行后续步骤。</p><h3 id="Step-2-正向匹配找到右端">Step 2: 正向匹配找到右端</h3><p>从 <code>i</code> 向右扫，依次匹配 <code>P</code> 的字符，当全部匹配完成时记录此时的下标 <code>end</code>，此时 <code>S[i..end]</code> 是一个<strong>包含 P 的子串</strong>。</p><blockquote><p>如果扫到结尾都没能匹配完整 P，说明以 <code>i</code> 开始无解，可以结束循环（后面的起点更靠右，也不可能匹配到更短的子串）。</p></blockquote><h3 id="Step-3-逆向收缩左端">Step 3: 逆向收缩左端</h3><p>从 <code>end</code> 开始，向左扫并倒序匹配 P 的字符，直到匹配到 <code>P[0]</code>，此时的下标 <code>start</code> 即是这个右端对应的<strong>最优左端</strong>。<br>这样得到的 <code>S[start..end]</code> 就是以该右端为终点的最短子串。</p><h3 id="Step-4-更新答案">Step 4: 更新答案</h3><p>比较当前子串长度是否比之前更短，如果更短，或者长度相同但起点更靠左，就更新答案。</p><hr><h2 id="复杂度分析">复杂度分析</h2><ul><li>每次外层循环正向匹配 O(n)，逆向收缩 O(n)，最坏情况是 O(n*m)。</li><li>对于本题数据规模（一般 n, m ≤ 10^4），完全可以接受。</li></ul><hr><h2 id="示例推演">示例推演</h2><p>以 <code>S = &quot;abcdebdde&quot;, P = &quot;bde&quot;</code> 为例：</p><table><thead><tr><th>起点 i</th><th>正向匹配得到 end</th><th>匹配到的子串</th><th>逆向收缩后 start</th><th>最短子串</th></tr></thead><tbody><tr><td>i=1 (S[1]=‘b’)</td><td>end=8</td><td><code>bcdebdde</code></td><td>start=4</td><td><code>bdde</code></td></tr><tr><td>i=4 (S[4]=‘b’)</td><td>end=8</td><td><code>bdde</code></td><td>start=4</td><td><code>bdde</code></td></tr></tbody></table><p>最终答案为 <strong>“bdde”</strong>，长度最短且起点最左。</p><hr><h2 id="代码实现">代码实现</h2><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">string a,b;</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">    ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line"></span><br><span class="line">    cin&gt;&gt;a&gt;&gt;b;</span><br><span class="line">    <span class="type">int</span> n = a.<span class="built_in">size</span>(), m = b.<span class="built_in">size</span>();</span><br><span class="line">    <span class="type">int</span> bestLen = INT_MAX, bestL = <span class="number">-1</span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">        <span class="keyword">if</span> (a[i] != b[<span class="number">0</span>]) <span class="keyword">continue</span>;</span><br><span class="line">        <span class="type">int</span> p = i, k = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (p&lt;n &amp;&amp; k&lt;m)&#123;</span><br><span class="line">            <span class="keyword">if</span> (a[p] == b[k]) k++;</span><br><span class="line">            p++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (k &lt; m) <span class="keyword">break</span>; <span class="comment">// 从此 i 往后也匹配不到完整 P 了</span></span><br><span class="line">        <span class="type">int</span> end = p<span class="number">-1</span>;</span><br><span class="line">        <span class="type">int</span> q = end, t = m<span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">while</span> (q&gt;=i)&#123;</span><br><span class="line">            <span class="keyword">if</span> (a[q] == b[t]) t--;</span><br><span class="line">            <span class="keyword">if</span> (t&lt;<span class="number">0</span>) <span class="keyword">break</span>;</span><br><span class="line">            q--;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> start = q;</span><br><span class="line">        <span class="type">int</span> len = end - start + <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">if</span> (len &lt; bestLen || (len==bestLen &amp;&amp; start&lt;bestL))&#123;</span><br><span class="line">            bestLen = len;</span><br><span class="line">            bestL = start;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout &lt;&lt; a.<span class="built_in">substr</span>(bestL, bestLen) &lt;&lt; <span class="string">&quot;\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></pre></td></tr></table></figure><hr><h2 id="总结">总结</h2><ul><li><strong>核心思路：</strong> 正向扩展保证包含 P，逆向收缩保证最短。</li><li><strong>关键细节：</strong><ol><li>每次只枚举可能的起点（匹配 <code>P[0]</code>）。</li><li>找到一个满足条件的右端后，要逆向收缩得到最短子串。</li><li>保留最短且起点最小的答案。</li></ol></li></ul><p>这种做法简单易写，不需要复杂的数据结构，也能轻松通过测试。</p><hr><p>要不要我帮你画一张<strong>双指针正反扫描的图解</strong>（标出 i, p, q, start, end 的移动过程）？这样题解会更直观，很多人看一眼就懂。</p></blockquote><h2 id="赛后总结：">赛后总结：</h2><p>到此为止，PAT 乙级就正式结束，这一套题目我写了三周，在2025.9.30日正式完结。</p><p>你会发现，里面很多题目我使用了AI写的代码，有些时候是我写不出来求助AI了，有些时候是我写的代码实在太过丑陋，没法见人，就让AI改了改</p><p>这套题目并没有往届学长学姐说的那么神乎其神，相反，这套题目的无效题非常多，例如那种百行大模拟，我这里要点名批评B1123，简直是有点毛病。</p><p>缺点说完了，现在来说说优点，首先这一套题目属于是那种模拟大集训，只有少部分算法，而模拟依旧在考试中占大头（24年机考达到了5/10的比例，23年5/8……）这套题如果真的花时间去写了，并且一题一题订正到AC是可以很好的锻炼代码能力的，并且里面有很多坑可以踩（但是不是所有坑都是好坑，有些坑有点不明所以），很多模板可以训练，写完是绝对赚到的，当然前提是你一题一题订正了。</p><p>当然，如果你要求稳，只刷这个是肯定不够的，24年开始，算法的比例在上升了。</p><p>对于我个人而言，我在暑假看完了深入浅出，并且写了里面的练习题，但暑假的最后我开摆了两个礼拜，导致有点手生，这一套就帮我找回手感了，接下来肯定就是进行算法冲刺了。</p><p>​                                                                                                                                                                                                     ——by Schariac125</p><p>​                                                                                                                                   2025年9月30日写于福州大学旗山校区</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1&gt;PTA乙级各题答案&lt;/h1&gt;
&lt;h2 id=&quot;前言：&quot;&gt;前言：&lt;/h2&gt;
&lt;p&gt;这份答案是笔者在2025年备考期间自行整理的答案，绝大部分为笔者亲自书写代码， 部分可能会借鉴AI思路。&lt;/p&gt;
&lt;p&gt;不排除PAT官方后续修改测试数据而导致答案出现错误的情况，如有发现可向我</summary>
      
    
    
    
    <category term="程序设计" scheme="http://example.com/categories/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/"/>
    
    
    <category term="C++,算法" scheme="http://example.com/tags/C-%E7%AE%97%E6%B3%95/"/>
    
  </entry>
  
  <entry>
    <title>从《吹响！上低音号！》到当代学生社团治理的简要讨论</title>
    <link href="http://example.com/2024/06/19/%E4%BB%8E%E3%80%8A%E5%90%B9%E5%93%8D%EF%BC%81%E4%B8%8A%E4%BD%8E%E9%9F%B3%E5%8F%B7%EF%BC%81%E3%80%8B%E5%88%B0%E5%BD%93%E4%BB%A3%E5%AD%A6%E7%94%9F%E7%A4%BE%E5%9B%A2%E6%B2%BB%E7%90%86%E7%9A%84%E7%AE%80%E8%A6%81%E8%AE%A8%E8%AE%BA/"/>
    <id>http://example.com/2024/06/19/%E4%BB%8E%E3%80%8A%E5%90%B9%E5%93%8D%EF%BC%81%E4%B8%8A%E4%BD%8E%E9%9F%B3%E5%8F%B7%EF%BC%81%E3%80%8B%E5%88%B0%E5%BD%93%E4%BB%A3%E5%AD%A6%E7%94%9F%E7%A4%BE%E5%9B%A2%E6%B2%BB%E7%90%86%E7%9A%84%E7%AE%80%E8%A6%81%E8%AE%A8%E8%AE%BA/</id>
    <published>2024-06-19T08:30:00.000Z</published>
    <updated>2025-10-20T13:30:20.233Z</updated>
    
    <content type="html"><![CDATA[<h1>从《吹响！上低音号！》到当代学生社团治理的简要讨论</h1><h2 id="目录：">目录：</h2><p>一：历史为什么选择黄前久美子——学生社团最高领导者的理想类型的简要讨论</p><p>二：高坂丽奈到底是不是“高压锅”——关于学生社团强权领导者的利弊讨论</p><p>三：田中明日香是否是一个绝对优秀的领导者——关于学生社团领导者在社团中作用的再讨论</p><p>四：承前启后的吉川优子——关于社团持续发展问题的简要讨论</p><p>五：泷升的指导理念转换问题——关于学生社团顾问老师对于社团的影响的简要讨论</p><h2 id="正文部分：">正文部分：</h2><h4 id="一：历史为什么选择黄前久美子——学生社团最高领导者的理想类型的简要讨论">一：历史为什么选择黄前久美子——学生社团最高领导者的理想类型的简要讨论</h4><p>事先声明，在这篇文章将要讨论的《吹响！上低音号！》内容不止局限于武田绫乃小姐创作的原著或者是京都动画公司在此之上加以艺术改编所制作的TV版动画及剧场版动画《吹响！上低音号！》，作者会根据所论内容选择相关剧情。</p><p>黄前久美子，作为整部作品的第一女主角，在剧情的推动中具有不可忽视的决定性作用，甚至可以说作品就是以她的视角进行展开的。在这种情况下，观众（或读者）对其人物形象必然有一个较为深刻的认知，因此作者将其相关内容作为第一点进行讨论。</p><p>在久美子三年级（下面简称久三年），她很顺理成章地成为了新一任北宇治高校吹奏乐部部长，在上一任部长吉川优子打下的基础上继续发展（吉川优子相关内容我们将在后面进行讨论）。在讨论相关剧情内容之前，我更想先来看看前两届吹奏乐部领导者给她留下的究竟是一个什么样的场面——久一年，三香领导下的北宇治高校吹奏乐部励精图治，执行了顾问的一系列改革手段，将原本一团散沙的吹奏乐部一步步打造成了具有全国赛参赛资格的吹奏乐强校，是为奠基。久二年在原本久一年时的三年级中坚力量毕业退场的情况下，第二代领导核心完成了比较优秀的过渡，为第三年拿下全国金奖起到了难以忽视的作用。因此我们可以说，在久美子接手北宇治高校吹奏乐部时，吹奏乐部就已经具备了拿下全国金奖的任何决定性条件，只差临门一脚。</p><p>但以上的论述并非否定了久三年久美子的努力，相反，这临门一脚反而踢得并不轻松，而久美子在其中的作用绝对是要被重点强调的。先后完成新一年级学生的招生，并且接纳转学生黑江真由融入吹奏乐部（最终成果暂且不论），调和一年级生与丽奈的强权领导的关系，维系住了社团接下来发展的根基等等。这一系列成果我们可以很明显的发现，在久三年久美子处在部长这个位置，做的事情更多的是调和人际关系，维系社团发展的基础，避免了内讧的发生，而领导成员们努力练习，夺得吹奏乐大赛金奖这件事更多的时候是交给了丽奈。</p><p>从艺术作品到现实的讨论。我曾经在某个场合将学生社团的运作比喻为一个公司的运作，但实际上这种说法是有偏差的，因为这种说法忽略了非常重要的一点——学生社团的组织基础和商业运作的公司并不相同，运行基础和有所差别。必须认识到一点：学生社团的组成基础是学生，而运行基础更多时候是靠着一股热情与信念（其实就和通俗所说的为爱发电大差不差），并不是如同商业公司一样更多时候是物质利益关系与合同雇佣关系。在这种组织基础和运行基础上，成员之间的人际关系好坏以及对于社团的认可度是非常重要的，缺失其中的任意一点都有可能会将导致整个学生社团分崩离析。而维持良好的人际关系，很多时候靠的是成员们之间自己的交流，但对于社团的认可度，这就涉及非常多方面，而且基本上每一环都要社团的最高领导者参与。</p><p>我将在以下列举几点：</p><p>\1.  社团所取得的成就将和成员们对社团的认可度直接相关，而这一环需要最高领导者的领导</p><p>\2.  社团的氛围也是影响成员认可度的一个决定性因素，这一环很多时候需要最高领导者维持</p><p>\3.  最高领导者的个人魅力也将影响成员对社团的总体认可度</p><p>从以上几点看，我认为一个社团的最高领导者不一定是要具有最为优秀的才能（当然这绝对不是在说这一点不重要，因为这一点会影响领导者的个人魅力）但一定要具有足够的情商与共情能力，同时还要求一定要有敏锐的观察力，及时察觉社团中的一系列问题，并且号召力也是必不可少的。</p><p>从上面几点看，久美子的确是一个合格的最高领导者，而这确实是我所认为的一个学生社团最高领导者的理想形态。在这同时不得不提一下丽奈，在我的观点里，丽奈纵使有着极为高超的小号吹奏水平，令人折服，但苦于丽奈太过以自己的观念为中心，不够考虑别人的感受，在久三年的sunfes之前的相关事件便可体现出绝对不可以把丽奈推上学生社团最高领导者之位，相关论述我会在第二部分展开。</p><p>当然，一个理想的学生社团最高领导者必须具有上面几点，但同样是被允许具有自己的个性的，并不是刻板的，因此我同时认为无论是明日香，优子，还是久美子，她们都是比较理想的学生社团最高领导者。</p><h4 id="二：高坂丽奈到底是不是“高压锅”——关于学生社团强权领导者的利弊讨论">二：高坂丽奈到底是不是“高压锅”——关于学生社团强权领导者的利弊讨论</h4><p>在久一年与久二年，由于丽奈只是一个普通的部员，因此尚且没有过度显示出她强权的一面，而在久三年，在成为了吹奏乐部的领队之后，其强权的一面逐步展现出来，并且逐渐加强，具体就体现在sunfes前的训练以及久三年关西赛前的部长失格事件上。从人物的形象上看，丽奈是一个极度的实力至上主义者，并且由于家庭条件的优越，使其变得相当的自我中心，只认可自己认定对的事情，就例如“你吹不好就是你的问题，别拿新手当借口”这一类想法的出现。但毋庸置疑的是，丽奈本人具有极高的实力，能够在久一年就抢下香织的小号独奏位置早已说明了这一点，并且久三年的sunfes取得优秀成果，她的指导同样功不可没。从客观上看，她的强权领导的确促进了整个吹奏乐部水平的进步，为最后久三年夺金立下了汗马功劳。但任何事物往往具有两面性，她的强权领导导致了一年级新成员的集体不满，甚至使他们产生了集体退部的念头，并且还有那“臭名昭著”的部长失格事件，同样是由于她的强权以及个人中心，从这一点上看，她对于整个北宇治高校吹奏乐部的消极影响同样不可忽略。在这之后，我将会讨论一个学生社团中强权领导者对于这个学生社团的利与弊。</p><p>首先我们要讨论强权领导形成的基础。强权领导者往往具有较高的实力，足以让成员折服，这是他们能够占据话语权的重要基础。在这之后，他们会将自己的观念融入到指导社团发展的指导理念中，这样强权领导便成功形成。强权领导者会要求被领导者努力练习以实现整个社团实力的进步，而这样的做法牺牲了被领导者的个人感受，换取的是社团硬实力的迅速提升。从以整个社团的硬实力发展上看，这自然是好的，但从整个社团的长期发展上看，这是需要辩证性进行讨论的。首先我在第一部分就已经提到过，讨论学生社团的相关问题必然不能离开学生二字，相关论述不在赘述。在现实的社团环境下，这种严重损害社团成员感受的做法是难以被容忍的，就算在短时间内取得了重要成果，也是很难继续下去的，因为这严重违背了“以人为本”的观念，是一种竭泽而渔的做法，因此这就是强权领导在社团治理中的弊。</p><p>强权领导者决不能推上一个社团的最高领导者位置，因为他们是一把双刃剑，如果使用过度，会损伤一个社团的发展。强权领导者的权力必须要受到严格限制与监管，并且需要有人对其进行牵制，缓解其带来的消极影响，扩大其积极影响。而至于题目提到的丽奈是不是“高压锅”其实已经很明显了。</p><h4 id="三：田中明日香是否是一个绝对优秀的领导者——关于学生社团领导者在社团中作用的再讨论">三：田中明日香是否是一个绝对优秀的领导者——关于学生社团领导者在社团中作用的再讨论</h4><p>明日香学姐作为一整部《吹响！上低音号！》的重点塑造角色。在整部故事剧情的发展中具有举足轻重的作用。在这里，我将着重讨论她是否是一个绝对优秀的领导者。</p><p>讨论这个之前，首先必须复盘明日香学姐在北宇治高校吹奏乐部三年以来所做的事情，久零年时尝试挽留退部的伞木希美，久一年时从中调解南中诸位之间的问题，稳定军心……明日香是久一年三香中对整个吹奏乐部贡献最大的那一个，可以说久一年吹奏乐部没有明日香，不仅仅是失去了一个优秀的上低音号吹奏者那么简单的事情。久一年吹奏乐部的有些成员很大程度上是依靠着明日香的个人魅力团结在一起。作为吹奏乐部的主心骨，她的作用绝对是难以衡量的。</p><p>但她是否是一名绝对优秀的领导者，先说结论——并不是。从整部作品来看，明日香学姐对于整个社团成员之间的人际关系存在着一些误解，并且在前期，她在北宇治的目的非常简单，就是想要让北宇治进入全国赛，让她的父亲听到她吹奏的上低音号。这点和丽奈其实有几分相似，但并不完全相同。明日香不属于强权领导，相反，她事实上并不是非常关心于整个社团整体怎样，她最开始的目的只有利用北宇治实力的提升，带她进入到全国大赛的赛场，只要能进入全国大赛，其实一切都无所谓，因此，她对于南中几人退部时的态度也仅仅只是局限于“试图挽留”，并且知道伞木希美不会留下时，果断选择放弃。而在后来再一次拒绝希美回到社团，理由也仅仅是希美的存在会影响到全社团唯一一个双簧管乐手，与希美有一段孽缘的霙的发挥。但是，在遭遇母亲的反对时，她选择了自己退出社团，自认为这样就不会影响到整个社团的训练，选择认命。她是一个非常现实主义并且成熟的人。她的成熟或许并不同于久美子所说的是装出来的，更可能是她的家庭长期以来将她塑造成这样的。她的所做所谓的确从客观意义上对社团有利，以及她的个人魅力也从客观上促进了久一年整个社团的团结。但她始终认识不到自己在社团中的作用，导致她不喜欢主动去作为，将一切随波逐流，更认同在现状之上缝缝补补，而不是去阻止更坏的情况的发生。从这一点上看，她并不是一个绝对优秀的领导者。</p><p>围绕着明日香学姐的关键词只有两个，一是个人魅力，二是顺从现实。领导者往往可以通过个人魅力，以让社团成员追随着自己的方式趋于团结一致。而个人魅力的培养则需要领导者各方面优秀，足以折服社团成员。但顺从现实对于一个社团领导者来讲并不是什么好的品质，因为这样子做会丧失掉主动作为的机会，对一些明明可以挽回的事情却不去挽回，最后越积越多，对社团的损伤也是难以估计的。一个优秀的领导者不但需要有足够的个人魅力以团结成员，更需要有主动入局的意识去及时处理社团中出现的各类问题，这样才能算是一个优秀的领导者。</p><h4 id="四：承前启后的吉川优子——关于社团持续发展问题的简要讨论">四：承前启后的吉川优子——关于社团持续发展问题的简要讨论</h4><p>吉川优子，久二年吹奏乐部部长，核心人物，在整个吹奏乐部发展中作出了不可磨灭的贡献，是一个名副其实的承前启后的优秀领导者。本部分将从她出发，分析其人物形象以及主要贡献，进而讨论社团持续发展问题。</p><p>大多数人对优子的初印象估计是源自久一年的丽奈与香织争夺小号独奏权事件上，作为整个事件的导火索，优子在最开始给很多观众留下的印象并不好，被认为是一个很情感用事的人，事实的确也是如此。然而，如果优子真的只是一个情感用事的人，为什么在久二年小笠原晴香会选择优子成为部长呢？原因其实也不复杂，她们看到了优子在情感用事背后的可贵品质——她具有一股冲劲，并且对成员非常关心，是一个真正把吹奏乐部放在心上的人。正是因为这一点，吉川优子非常适合在久二年这个原三年级中坚力量毕业，一年级新生大量涌入的这个过渡时期担任最高领导者，因为她有那个能力度过这个过渡时期，培养起久三年的中坚力量，为久三年拿下全国金奠定基础。虽然吉川优子领导下的久二年团队最终只是拿到了关西大赛金奖便铩羽而归，但考虑到久二年那个极度特殊的情况，那时候拿下关西大赛金奖的含金量和久一年进入全国赛的含金量并无差别，甚至可能更高。可以说，优子在久二年的承前启后工作上做的非常到位，足以让她称得上是一名足够优秀的最高领导者。</p><p>一个社团的持续发展往往需要一个在过渡时期足够优秀的承前启后者出现。这样的一个承前启后者不需要非常卓越的才能，能够领导社团在过渡时期依然可以取得和鼎盛时期相同的成绩，而且这其实也非常困难。过渡时期社团会出现整体实力可能有所下滑的态势，这时候就需要一个人来稳定军心，带领其他成员接着向前，防止类似于大规模成员退社事件的发生。</p><p>很多时候当一个社团进入过渡时期，社团领导者并没有察觉，或者察觉了但并不想承认，仍然继续贯彻鼎盛时期的方针。实际上这是错误的做法，过渡时期的社团总体水平是无法与鼎盛时期的社团相比的，这个时候就已经失去了实施旧方针的先决性条件。正确的做法应当是实行要求相对较低的方针，先保证社团核心力量，再进一步加以巩固基础。一味的追求高战绩反而会损伤社团成员对于社团的认可度，从而对整个社团造成伤害。</p><h4 id="五：泷升的指导理念转换问题——关于学生社团顾问老师对于社团的影响的简要讨论">五：泷升的指导理念转换问题——关于学生社团顾问老师对于社团的影响的简要讨论</h4><p>泷升（以下简称泷），从久一年开始担任北宇治高校吹奏乐部的顾问老师，在他的一手改革下，北宇治高校吹奏乐部一洗久零年时的摆烂作风，开始大步迈进，在第一年便斩下了全国赛铜奖，泷功不可没。久二年，泷自认为只拿下关西金奖与自己的选曲以及队伍编制有关系，于是选择在久三年改革选拔制度，选拔标准以及指导理念，由实力至上主义逐渐转向了“金奖至上主义”，这也导致了久三年部内成员对于选拔结果的不满以及军心不稳。从最开始看，泷进入北宇治高校吹奏乐部的原因本就是妻子去世后经过父亲推荐而已，他的目的其实也很简单，就是实现他亡妻的梦想，带出一队能够拿下全国赛金奖的队伍。因此他在久三年转变为“金奖至上主义”是非常好理解的，但由于他的刻意隐瞒，导致了吹奏乐部在关西大赛之前的那场大变故。这几件事情以及可以很充分地体现出来学生社团的指导老师对于一整个学生社团的影响究竟有多大，下面我将就此展开讨论。</p><p>学生社团是一个依附于学校存在的社团个体，因此它的所作所为必须受到学校方的管辖与指导，因此指导老师这种职位就应运而生。指导老师很多时候代表的是学校的观念，以及校方的立场，他们的存在可以很好的约束学生社团活动在一个不违背学校观念和指导的范围内。指导老师往往在社团中具有最高的权力，这种权力是学校方赋予的，即便是学生社团的学生最高领导者也难以违背，因此，指导老师的指导观念转化，以及指导手段对于一个学生社团而言的影响是相当巨大的。具体为以下几点</p><p>1． 通过强制性的命令从而直接影响到社团的前进方向</p><p>2． 通过融入指导观念的手段影响社团发展</p><p>3． 通过人事任免的相关手段来保证学生社团的合理运行</p><p>需要强调的是，很多时候学生社团的指导老师代表的是学校，自己或者是大多数社团成员之间的观念，正因为这一点，导致了学生社团的指导老师往往非常难真正去融入学生社团这一个大整体，很难去真正察觉社团的矛盾。而身份的特殊性使得他们必须做出相对“平和”的评价，因此也丧失了去真正参与社团矛盾讨论的机会。他们负责的往往只局限于指导学生参与社团活动，以及防止违背学校意愿和学生身份的行为出现。他们的影响虽然巨大，但范围终究还是有限的。</p><h4 id></h4><h4 id="-2"></h4><h4 id="-3"></h4>]]></content>
    
    
      
      
    <summary type="html">&lt;h1&gt;从《吹响！上低音号！》到当代学生社团治理的简要讨论&lt;/h1&gt;
&lt;h2 id=&quot;目录：&quot;&gt;目录：&lt;/h2&gt;
&lt;p&gt;一：历史为什么选择黄前久美子——学生社团最高领导者的理想类型的简要讨论&lt;/p&gt;
&lt;p&gt;二：高坂丽奈到底是不是“高压锅”——关于学生社团强权领导者的利弊讨论&lt;/p</summary>
      
    
    
    
    <category term="碎碎念" scheme="http://example.com/categories/%E7%A2%8E%E7%A2%8E%E5%BF%B5/"/>
    
    
    <category term="杂谈" scheme="http://example.com/tags/%E6%9D%82%E8%B0%88/"/>
    
  </entry>
  
</feed>
