<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Shaw的博客</title>
    <link>https://blog.shawgarcia.cn/</link>
    
    <atom:link href="https://blog.shawgarcia.cn/rss2.xml" rel="self" type="application/rss+xml"/>
    
    <description>这是我的博客网站</description>
    <pubDate>Mon, 05 Oct 2026 12:04:13 GMT</pubDate>
    <generator>http://hexo.io/</generator>
    
    <item>
      <title>堆积木</title>
      <link>https://blog.shawgarcia.cn/posts/30609.html</link>
      <guid>https://blog.shawgarcia.cn/posts/30609.html</guid>
      <pubDate>Thu, 02 Nov 2023 16:00:00 GMT</pubDate>
      
      <description>广义表的应用——积木堆叠移动模拟。</description>
      
      
      
      <content:encoded><![CDATA[<h2 id="堆积木"><a href="#堆积木" class="headerlink" title="堆积木"></a>堆积木</h2><p>蒜头君有 n 块积木，编号分别为 1 到 n。一开始，蒜头把第 i 块积木放在位置 i。蒜头君进行 m 次操作，每次操作，蒜头把位置 b 上的积木整体移动到位置 a 上面。比如 1 位置的积木是 1，2 位置的积木是 2，那么把位置 2 的积木移动到位置 1 后，位置 1 上的积木从下到上依次为 1,2。</p><h3 id="输入格式"><a href="#输入格式" class="headerlink" title="输入格式"></a>输入格式</h3><p>第一行输入 2 个整数 n,m (1≤n≤10000,0≤m≤10000)。</p><p>接下来 m 行，每行输入 2 个整数 a,b (1≤a,b≤n)，如果a，b 相等则本次不需要移动。</p><h3 id="输出格式"><a href="#输出格式" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出 n 行，第 i 行输出位置 i 从下到上的积木编号，如果该行没有积木输出一行空行。</p><h3 id="实现代码"><a href="#实现代码" class="headerlink" title="实现代码"></a>实现代码</h3><p><em>这道题是我第一次用广义表，应该还是能优化不少的，bug改着改着就解决了，没什么实感（？）</em></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><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></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;stdlib.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">typedef</span> <span class="keyword">struct</span> <span class="title class_">node</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="type">int</span> data;</span><br><span class="line"><span class="type">int</span> top; </span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">node</span>* link;</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">node</span>* next;</span><br><span class="line">&#125;lsnode,*lslink;</span><br><span class="line"><span class="function">lslink <span class="title">listscreat</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">lslink H,p,r,q;</span><br><span class="line">H=(lslink)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(lsnode));</span><br><span class="line">H-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">r=H;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=n;++i)</span><br><span class="line">&#123;</span><br><span class="line">p=(lslink)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(lsnode));</span><br><span class="line">q=(lslink)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(lsnode));</span><br><span class="line">q-&gt;data=i;</span><br><span class="line">p-&gt;data=i;</span><br><span class="line">r-&gt;next=p;</span><br><span class="line">p-&gt;link=q;</span><br><span class="line">q-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">p-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">p-&gt;top=<span class="number">1</span>;</span><br><span class="line">r=p;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> H;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function">lslink <span class="title">findit</span><span class="params">(lslink H,<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></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)</span><br><span class="line">H=H-&gt;next;</span><br><span class="line"><span class="comment">//cout&lt;&lt;&quot;成功进入findit函数，且这个返回值是&quot;&lt;&lt;H-&gt;data&lt;&lt;endl;</span></span><br><span class="line"><span class="keyword">return</span> H;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function">lslink <span class="title">finaone</span><span class="params">(lslink H)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="comment">//cout&lt;&lt;&quot;成功进入fi函数&quot;&lt;&lt;endl;</span></span><br><span class="line">lslink p=H;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;H-&gt;top;++i)</span><br><span class="line">p=p-&gt;link;</span><br><span class="line"><span class="comment">//cout&lt;&lt;&quot;这个函数的link链表最后一个是&quot;&lt;&lt;p-&gt;data;</span></span><br><span class="line"><span class="keyword">return</span> p;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="type">int</span> n,m,a,b;</span><br><span class="line">cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line">lslink H=<span class="built_in">listscreat</span>(n);</span><br><span class="line">lslink r,s,p=H-&gt;next;</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)</span><br><span class="line">&#123;</span><br><span class="line">cin&gt;&gt;a&gt;&gt;b;</span><br><span class="line"><span class="keyword">if</span>(a==b) <span class="keyword">continue</span>;<span class="comment">//a与b相同时不移动 </span></span><br><span class="line">r=<span class="built_in">findit</span>(H,a);</span><br><span class="line">s=<span class="built_in">findit</span>(H,b);</span><br><span class="line"><span class="keyword">if</span>(s-&gt;top==<span class="number">0</span>) <span class="keyword">continue</span>;</span><br><span class="line">lslink r1;</span><br><span class="line">r1=<span class="built_in">finaone</span>(r);</span><br><span class="line">r1-&gt;link=s-&gt;link;</span><br><span class="line">r-&gt;top+=s-&gt;top;</span><br><span class="line">s-&gt;top=<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)</span><br><span class="line">&#123;</span><br><span class="line">lslink qwq=p-&gt;link;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">1</span>;j&lt;=p-&gt;top;++j)</span><br><span class="line">&#123;</span><br><span class="line">cout&lt;&lt;qwq-&gt;data&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">qwq=qwq-&gt;link;</span><br><span class="line">&#125;</span><br><span class="line">cout&lt;&lt;endl;</span><br><span class="line">p=p-&gt;next; </span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content:encoded>
      
      
      <category domain="https://blog.shawgarcia.cn/categories/%E7%BC%96%E7%A8%8B%E9%A2%98/">编程题</category>
      
      
      <category domain="https://blog.shawgarcia.cn/tags/%E5%B9%BF%E4%B9%89%E8%A1%A8/">广义表</category>
      
      
      <comments>https://blog.shawgarcia.cn/posts/30609.html#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>幻方矩阵&amp;话题焦点人物</title>
      <link>https://blog.shawgarcia.cn/posts/42025.html</link>
      <guid>https://blog.shawgarcia.cn/posts/42025.html</guid>
      <pubDate>Thu, 02 Nov 2023 16:00:00 GMT</pubDate>
      
      <description>数组与矩阵行列交换，以及微博话题焦点人物统计。</description>
      
      
      
      <content:encoded><![CDATA[<h2 id="幻方矩阵"><a href="#幻方矩阵" class="headerlink" title="幻方矩阵"></a>幻方矩阵</h2><p>一天蒜头君买了一个幻方矩阵，这个矩阵每次可以交换任意两行或者任意两列。花椰妹看到说这么简单的东西，我自己就可以编程实现了。蒜头君要强地说这么简单我肯定也会，但是蒜头君并不会，只好求助你来编程实现。</p><h3 id="输入格式"><a href="#输入格式" class="headerlink" title="输入格式"></a>输入格式</h3><p>第一行输入两个整数 n,m，表示这个幻方矩阵大小为 n×m。</p><p>接下来是一个 n×m 的矩阵。</p><p>接下来一行有一个整数 op，表示有 op 次操作。</p><p>接下来 op 行，每行有三个整数 x，y，z。</p><p>当 x&#x3D;0 的时候表示交换第 y 行和第 z 行。</p><p>当 x&#x3D;1 的时候表示交换第 y 列和第 z 列。</p><h3 id="输出格式"><a href="#输出格式" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出交换后的矩阵。</p><h3 id="数据范围"><a href="#数据范围" class="headerlink" title="数据范围"></a>数据范围</h3><p>对于 30% 的数据，1≤n,m,op≤100。</p><p>对于 60% 的数据，1≤n,m,n×m≤10的5次方，1≤op≤100。</p><p>对于 100% 的数据，1≤n,m,n×m,op≤10的5次方，1≤ 矩阵中每个数字的大小 ≤10的6次方。</p><h3 id="实现代码"><a href="#实现代码" class="headerlink" title="实现代码"></a>实现代码</h3><p><em>比较简单的一道题，在使用动态数组之前是过不了测试点的。</em></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><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;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 class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></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"><span class="type">int</span> **a=<span class="keyword">new</span> <span class="type">int</span>*[n];</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;++i)</span><br><span class="line">a[i]=<span class="keyword">new</span> <span class="type">int</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;n;++i)</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j&lt;m;++j)</span><br><span class="line">cin&gt;&gt;a[i][j];</span><br><span class="line"><span class="type">int</span> op;</span><br><span class="line">cin&gt;&gt;op;</span><br><span class="line"><span class="type">int</span> x,y,z;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;op;++i)</span><br><span class="line">&#123;</span><br><span class="line">cin&gt;&gt;x&gt;&gt;y&gt;&gt;z;</span><br><span class="line"><span class="keyword">if</span>(!x)<span class="comment">//x==0</span></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j&lt;m;++j)</span><br><span class="line"><span class="built_in">swap</span>(a[y<span class="number">-1</span>][j],a[z<span class="number">-1</span>][j]);</span><br><span class="line"><span class="keyword">else</span><span class="comment">//x==1</span></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j&lt;n;++j)</span><br><span class="line"><span class="built_in">swap</span>(a[j][y<span class="number">-1</span>],a[j][z<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;n;++i)</span><br><span class="line">&#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">-1</span>;++j)</span><br><span class="line">cout&lt;&lt;a[i][j]&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">cout&lt;&lt;a[i][m<span class="number">-1</span>];</span><br><span class="line"><span class="keyword">if</span>(i!=n<span class="number">-1</span>) cout&lt;&lt;endl;</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)</span><br><span class="line">  <span class="keyword">delete</span> []a[i];</span><br><span class="line"><span class="keyword">delete</span> []a;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="话题焦点人物"><a href="#话题焦点人物" class="headerlink" title="话题焦点人物"></a>话题焦点人物</h2><p>微博提供了一种便捷的交流平台。一条微博中，可以提及其它用户。例如你发出一条微博为：“期末考试顺利 @蒜头君 @花椰菜”，则你提及了蒜头君和花椰菜两位用户。</p><p>我们收集了 N(1&lt;N&lt;10000) 条微博，并已将其中的用户名提取出来，用小于等于100 的正整数表示。</p><p>通过分析这些数据，我们希望发现大家的话题焦点人物，即被提及最多的人（如果有多个，找到编号最小的），并找出那些提及它的人。</p><h4 id="输入格式-1"><a href="#输入格式-1" class="headerlink" title="输入格式"></a>输入格式</h4><p>输入共两部分：</p><p>第一部分是微博数量 N，1&lt;N&lt;10000。</p><p>第二部分是 N 条微博，每条微博占一行，表示为：</p><p>发送者序号 a，提及人数 k(0≤k≤20)，然后是 k 个被提及者序号 1,2…b1​,b2​…bk​；其中 a 和 1,2…b1​,b2​…bk​ 均为大于 0 小于等于 100 的整数。相邻两个整数之间用单个空格分隔。</p><h4 id="输出格式-1"><a href="#输出格式-1" class="headerlink" title="输出格式"></a>输出格式</h4><p>输出分两行：</p><p>第一行是被提及最多的人的序号；</p><p>第二行是提及它的人的序号，从小到大输出，相邻两个数之间用单个空格分隔。同一个序号只输出一次。</p><h3 id="实现代码-1"><a href="#实现代码-1" class="headerlink" title="实现代码"></a>实现代码</h3><p><em>在这之前，我需要说明的是，我自己的代码仅仅通过了一个测试点，代码里依旧有问题没有解决，不过我认识到<del>自己的代码过于垃圾</del>我的数据结构构建有大问题，然后在网上找到了一份参考答案，和我的思路一致，但在数据结构的规划上比我的好得多，各位可以看原文-&gt;</em></p><blockquote><p><a href="https://blog.csdn.net/Hyx1273724818/article/details/120888735"> 题目 - 话题焦点</a></p></blockquote><p>然后呢，这是我在看了Grausam的博客后修改的代码（：</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><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;iostream&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 class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">int</span> N,a[<span class="number">101</span>][<span class="number">101</span>],m,mm;</span><br><span class="line">    cin&gt;&gt;N;</span><br><span class="line">    <span class="type">int</span> qwq=<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">101</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;<span class="number">101</span>;++j)</span><br><span class="line">    a[i][j]=<span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> awa=<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)</span><br><span class="line">    &#123;</span><br><span class="line">        cin&gt;&gt;mm&gt;&gt;m;</span><br><span class="line">        <span class="type">int</span> l;</span><br><span class="line">        <span class="comment">//cout&lt;&lt;&quot;l输入成功&quot;&lt;&lt;endl;</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)</span><br><span class="line">        &#123;</span><br><span class="line">            cin&gt;&gt;l;</span><br><span class="line">            a[mm][l]++;</span><br><span class="line">            <span class="comment">//cout&lt;&lt;l&lt;&lt;&quot;出现了&quot;&lt;&lt;k[l]&lt;&lt;&quot;次了,&quot;&lt;&lt;l&lt;&lt;&quot;的输入者是&quot;&lt;&lt;mm&lt;&lt;endl; </span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> max = <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">100</span>; i++) </span><br><span class="line">&#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">1</span>; j &lt;= <span class="number">100</span>; j++) </span><br><span class="line">a[<span class="number">0</span>][i] += a[j][i];</span><br><span class="line"><span class="keyword">if</span> (a[<span class="number">0</span>][i] &gt; a[<span class="number">0</span>][max])</span><br><span class="line">max = i;</span><br><span class="line">&#125;</span><br><span class="line">cout&lt;&lt;max&lt;&lt;endl;</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">100</span>;++i)</span><br><span class="line">    <span class="keyword">if</span>(a[i][max]) cout&lt;&lt;i&lt;&lt;<span class="string">&quot; &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>我原本的10分代码里有好几个数组，我对自己的垃圾代码的评价是：纯粹的模拟是行不通的。</p>]]></content:encoded>
      
      
      <category domain="https://blog.shawgarcia.cn/categories/%E7%BC%96%E7%A8%8B%E9%A2%98/">编程题</category>
      
      
      <category domain="https://blog.shawgarcia.cn/tags/%E6%95%B0%E7%BB%84/">数组</category>
      
      
      <comments>https://blog.shawgarcia.cn/posts/42025.html#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>回文判断&amp;逆波兰式</title>
      <link>https://blog.shawgarcia.cn/posts/50961.html</link>
      <guid>https://blog.shawgarcia.cn/posts/50961.html</guid>
      <pubDate>Wed, 01 Nov 2023 16:00:00 GMT</pubDate>
      
      <description>栈的应用——回文判断与逆波兰式求值。</description>
      
      
      
      <content:encoded><![CDATA[<h2 id="回文判断"><a href="#回文判断" class="headerlink" title="回文判断"></a>回文判断</h2><p>我们把正读和反读都相同的字符序列称为“回文”，例如<code>abba</code>和<code>abcba</code>是回文，<code>abcde</code>不是回文。尝试写一个算法判别读入的一个以<code>@</code>为结束符的字符是否是回文。</p><h3 id="输入格式"><a href="#输入格式" class="headerlink" title="输入格式"></a>输入格式</h3><p>输入为一行，为待判断的字符串，以<code>@</code>结尾。字符串长度不超过 30，除最后一个字符外，其余字符均由小写字母组成。</p><h3 id="输出格式"><a href="#输出格式" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出一行，如果输入的字符串是回文，则输出<code>true</code>；如果输入的字符串不是回文，则输出<code>false</code>。</p><hr><h3 id="实现代码"><a href="#实现代码" class="headerlink" title="实现代码"></a>实现代码</h3><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><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;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdlib.h&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="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">struct</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="type">char</span> data[<span class="number">31</span>];</span><br><span class="line"><span class="type">int</span> top;</span><br><span class="line">&#125;sqstack,*sqslink;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">push</span><span class="params">(sqslink &amp;s,<span class="type">char</span> x)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="keyword">if</span>(s-&gt;top &gt;=<span class="number">30</span>) <span class="keyword">return</span> <span class="number">0</span>;<span class="comment">//栈满溢出</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">&#123;</span><br><span class="line">s-&gt;top++;</span><br><span class="line">s-&gt;data[s-&gt;top]=x;</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"><span class="function"><span class="type">bool</span> <span class="title">emptystack</span><span class="params">(sqslink s)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="keyword">if</span>(s-&gt;top &lt;<span class="number">0</span>) <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">char</span> <span class="title">pop</span><span class="params">(sqslink &amp;s)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="keyword">if</span>(<span class="built_in">emptystack</span>(s)) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">&#123;</span><br><span class="line">s-&gt;top--;</span><br><span class="line"><span class="keyword">return</span>(s-&gt;data[s-&gt;top]);</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></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">string ch;</span><br><span class="line">sqslink s1,s2;</span><br><span class="line">s1=(sqslink)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(sqstack));</span><br><span class="line">s2=(sqslink)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(sqstack));</span><br><span class="line">s1-&gt;top =<span class="number">0</span>;</span><br><span class="line">s2-&gt;top =<span class="number">0</span>;</span><br><span class="line">cin&gt;&gt;ch;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;ch.<span class="built_in">length</span>()<span class="number">-1</span>;++i)</span><br><span class="line"><span class="built_in">push</span>(s1,ch[i]);</span><br><span class="line"><span class="comment">//cout&lt;&lt;&quot;S1真的正常吗&quot;&lt;&lt;endl;</span></span><br><span class="line"><span class="comment">//for(int i=1;i&lt;ch.length();++i)</span></span><br><span class="line"><span class="comment">//cout&lt;&lt;s1-&gt;data[i]&lt;&lt;&quot; &quot;;</span></span><br><span class="line"><span class="comment">//cout&lt;&lt;endl; </span></span><br><span class="line">s1-&gt;top+=<span class="number">1</span>;</span><br><span class="line"><span class="comment">//cout&lt;&lt;&quot;S2逐渐入栈&quot;&lt;&lt;endl;</span></span><br><span class="line"><span class="keyword">while</span>(s1-&gt;top&gt;<span class="number">1</span>)</span><br><span class="line">&#123;</span><br><span class="line"><span class="built_in">push</span>(s2,<span class="built_in">pop</span>(s1));</span><br><span class="line"><span class="comment">//cout&lt;&lt;s2-&gt;data[s2-&gt;top]&lt;&lt;&quot; &quot;;</span></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="type">int</span> n=s2-&gt;top;</span><br><span class="line">s2-&gt;top=n+<span class="number">1</span>;</span><br><span class="line">s1-&gt;top=n+<span class="number">1</span>;</span><br><span class="line"><span class="comment">//cout&lt;&lt;&quot;字符串长度&quot;&lt;&lt;n&lt;&lt;endl;</span></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=n;++i)</span><br><span class="line">&#123;</span><br><span class="line"><span class="comment">//cout&lt;&lt;pop(s1)&lt;&lt;&quot;和&quot;&lt;&lt;pop(s2)&lt;&lt;endl;</span></span><br><span class="line"><span class="keyword">if</span>(<span class="built_in">pop</span>(s1)!=<span class="built_in">pop</span>(s2))</span><br><span class="line">&#123;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;false&quot;</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;true&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>啊，调试用的输出语句就不删了。</p><h2 id="逆波兰式"><a href="#逆波兰式" class="headerlink" title="逆波兰式"></a>逆波兰式</h2><p>假设表达式由数字和双目四则运算符<code>+</code>，<code>-</code>，<code>*</code>，<code>/</code>构成。试利用栈实现一个算法，将一个通常书写形式且书写正确的表达式转换为逆波兰式（后缀表达式），同时将转换后的逆波兰式求值，最后仅需输出求值结果。</p><h3 id="输入格式-1"><a href="#输入格式-1" class="headerlink" title="输入格式"></a>输入格式</h3><p>输入共有一行，为待求值的表达式，以换行结束。表达式保证是合法的，表达式中的整数在 [0,9] 以内，表达式长度不超过 20。表达式中仅包含<code>+</code>，<code>-</code>，<code>*</code>，<code>/</code>以及数字，不会出现其他字符。</p><h3 id="输出格式-1"><a href="#输出格式-1" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出仅有一行，为输入表达式的正确计算结果。</p><h3 id="实现代码-1"><a href="#实现代码-1" class="headerlink" title="实现代码"></a>实现代码</h3><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><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;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;stdlib.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">typedef</span> <span class="keyword">struct</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="type">int</span> data[<span class="number">21</span>];</span><br><span class="line"><span class="type">int</span> top;</span><br><span class="line">&#125;sqstack,*sqslink;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">pop</span><span class="params">(sqslink &amp;s)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">s-&gt;top--;</span><br><span class="line"><span class="keyword">return</span> s-&gt;data[s-&gt;top+<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">push</span><span class="params">(sqslink &amp;s,<span class="type">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">s-&gt;top++;</span><br><span class="line">s-&gt;data[s-&gt;top]=x;</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></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">string str;</span><br><span class="line">cin&gt;&gt;str;</span><br><span class="line">sqslink s;</span><br><span class="line">s=(sqslink)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(sqstack));</span><br><span class="line">s-&gt;top=<span class="number">0</span>;</span><br><span class="line"><span class="type">int</span> len=str.<span class="built_in">length</span>();</span><br><span class="line"><span class="type">bool</span> l=<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;len;++i)</span><br><span class="line">&#123;</span><br><span class="line"><span class="keyword">if</span>(l)</span><br><span class="line">&#123;</span><br><span class="line"><span class="built_in">push</span>(s,<span class="number">0</span>-((<span class="type">int</span>)str[i]<span class="number">-48</span>));</span><br><span class="line">l=<span class="number">0</span>;</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>(str[i]&gt;=<span class="number">48</span>&amp;&amp;str[i]&lt;=<span class="number">57</span>)</span><br><span class="line"><span class="built_in">push</span>(s,(<span class="type">int</span>)str[i]<span class="number">-48</span>);</span><br><span class="line"><span class="keyword">else</span> </span><br><span class="line"><span class="keyword">if</span>(str[i]==<span class="string">&#x27;-&#x27;</span>)</span><br><span class="line">&#123;</span><br><span class="line">l=<span class="number">1</span>;</span><br><span class="line"><span class="keyword">continue</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line"><span class="keyword">if</span>(str[i]==<span class="string">&#x27;*&#x27;</span>)</span><br><span class="line">&#123;</span><br><span class="line"><span class="built_in">push</span>(s,(<span class="type">int</span>)<span class="built_in">pop</span>(s)*((<span class="type">int</span>)str[i+<span class="number">1</span>]<span class="number">-48</span>));</span><br><span class="line">i++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> </span><br><span class="line"><span class="keyword">if</span>(str[i]==<span class="string">&#x27;/&#x27;</span>)</span><br><span class="line">&#123;</span><br><span class="line"><span class="built_in">push</span>(s,(<span class="type">int</span>)<span class="built_in">pop</span>(s)/((<span class="type">int</span>)str[i+<span class="number">1</span>]<span class="number">-48</span>));</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">while</span>(<span class="number">1</span>)</span><br><span class="line">&#123;</span><br><span class="line"><span class="keyword">if</span>(s-&gt;top&lt;=<span class="number">1</span>) <span class="keyword">break</span>;</span><br><span class="line"><span class="built_in">push</span>(s,<span class="built_in">pop</span>(s)+<span class="built_in">pop</span>(s));</span><br><span class="line">&#125;</span><br><span class="line">cout&lt;&lt;<span class="built_in">pop</span>(s);</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>]]></content:encoded>
      
      
      <category domain="https://blog.shawgarcia.cn/categories/%E7%BC%96%E7%A8%8B%E9%A2%98/">编程题</category>
      
      
      <category domain="https://blog.shawgarcia.cn/tags/%E6%A0%88/">栈</category>
      
      
      <comments>https://blog.shawgarcia.cn/posts/50961.html#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>蒜头君的魔法机</title>
      <link>https://blog.shawgarcia.cn/posts/44813.html</link>
      <guid>https://blog.shawgarcia.cn/posts/44813.html</guid>
      <pubDate>Tue, 24 Oct 2023 16:00:00 GMT</pubDate>
      
      <description>栈模拟——判断目标出栈序列是否合法。</description>
      
      
      
      <content:encoded><![CDATA[<h2 id="蒜头君的魔法机"><a href="#蒜头君的魔法机" class="headerlink" title="蒜头君的魔法机"></a>蒜头君的魔法机</h2><p>蒜头君有一台神奇的魔法机，它能将输入的序列进行一系列复杂的变换，输出原序列的另一种排列方式。蒜头君十分好奇魔法机的工作原理，终于有一天他尝试着把魔法机拆开研究了。</p><p>通过一系列复杂的演算，蒜头君终于发现了魔法机的工作原理：其实魔法机就是一个栈，根据栈先进后出的性质，每次一个数字进栈或将栈顶元素弹出，由此可以产生不同的出栈序列，出栈序列就是原序列的另一种排列了。</p><p>在研究完原理后，蒜头君凭借记忆很快就把魔法机组装好了。现在蒜头君想测试下魔法机在组装完成后是否出现问题。</p><p>首先他将 1 到 N 这 N 个数字依次输入魔法机里，然后随机写下一组序列<code>a</code>，现在他想知道能否通过魔法机得到序列<code>a</code>，聪明的你能帮蒜头君算一算吗？</p><h3 id="输入格式"><a href="#输入格式" class="headerlink" title="输入格式"></a>输入格式</h3><p>输入有两行，第一行是一个正整数 N(1≤N≤100)，表示输入魔法机序列的长度，第二行是序列<code>a</code>，共有 N 个整数，表示要得到的目标序列。</p><p>序列为 1 到 N 的排列，即序列<code>a</code>长度为 N，保证序列中的整数都不相同，且整数在区间 [1, N] 内。</p><h3 id="输出格式"><a href="#输出格式" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出一行，如果能通过魔法机得到序列<code>a</code>，则输出<code>YES</code>，否则输出<code>NO</code>。</p><hr><h2 id="实现代码"><a href="#实现代码" class="headerlink" title="实现代码"></a>实现代码</h2><p>思路：模拟魔法机的实现，其中a数组是期望的出栈顺序；栈r是存的是n到1的数据，栈顶在1的位置，按从大到小排；栈s是魔法机本体；遍历a数组，如果s栈的栈顶元素和a[i]不一样（还不到出栈的时候），就把r栈的栈顶元素给s栈（试试下一个元素是否可以按照期望出栈），如果遇到s栈的栈顶元素大于a[i]的情况，表示这个期望的出栈顺序无法实现。</p><p>可能表述不到位，以下是实现代码。</p><hr><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><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></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;stdlib.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">typedef</span> <span class="keyword">struct</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="type">int</span> data[<span class="number">101</span>];</span><br><span class="line"><span class="type">int</span> top;</span><br><span class="line">&#125;sqstack,*sqslink;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">push</span><span class="params">(sqslink &amp;s,<span class="type">int</span> x)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="keyword">if</span>(s-&gt;top &gt;=<span class="number">100</span>) <span class="keyword">return</span> <span class="number">0</span>;<span class="comment">//栈满溢出</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">&#123;</span><br><span class="line">s-&gt;top++;</span><br><span class="line">s-&gt;data[s-&gt;top]=x;</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"><span class="function"><span class="type">bool</span> <span class="title">emptystack</span><span class="params">(sqslink s)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="keyword">if</span>(s-&gt;top &lt;<span class="number">0</span>) <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">pop</span><span class="params">(sqslink &amp;s)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="keyword">if</span>(<span class="built_in">emptystack</span>(s)) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">&#123;</span><br><span class="line">s-&gt;top--;</span><br><span class="line"><span class="keyword">return</span>(s-&gt;data[s-&gt;top]);</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></span><br><span class="line"><span class="function"></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> a[<span class="number">101</span>];</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;++i)</span><br><span class="line">cin&gt;&gt;a[i];</span><br><span class="line">sqslink s,r;</span><br><span class="line">s=(sqslink)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(sqstack));</span><br><span class="line">s-&gt;top=<span class="number">0</span>;</span><br><span class="line">r=(sqslink)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(sqstack));;</span><br><span class="line">r-&gt;top=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=n;i&gt;=<span class="number">1</span>;--i)</span><br><span class="line"><span class="built_in">push</span>(r,i);</span><br><span class="line"><span class="type">int</span> i=<span class="number">0</span>;</span><br><span class="line">s-&gt;data[s-&gt;top]=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(<span class="number">1</span>)</span><br><span class="line">&#123;</span><br><span class="line"><span class="keyword">if</span>(i==n) <span class="keyword">break</span>;</span><br><span class="line"><span class="keyword">if</span>(s-&gt;data[s-&gt;top]==a[i])</span><br><span class="line">&#123;</span><br><span class="line"><span class="built_in">pop</span>(s);</span><br><span class="line">i++;</span><br><span class="line"><span class="keyword">continue</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span>(s-&gt;data[s-&gt;top]&gt;a[i])</span><br><span class="line">&#123;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;NO&quot;</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">push</span>(s,r-&gt;data[r-&gt;top]);</span><br><span class="line">r-&gt;top-=<span class="number">1</span>;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;YES&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>收藏Shaw的博客谢谢喵~</p>]]></content:encoded>
      
      
      <category domain="https://blog.shawgarcia.cn/categories/%E7%BC%96%E7%A8%8B%E9%A2%98/">编程题</category>
      
      
      <category domain="https://blog.shawgarcia.cn/tags/%E6%A0%88/">栈</category>
      
      
      <comments>https://blog.shawgarcia.cn/posts/44813.html#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>队列：通话记录</title>
      <link>https://blog.shawgarcia.cn/posts/44812.html</link>
      <guid>https://blog.shawgarcia.cn/posts/44812.html</guid>
      <pubDate>Mon, 23 Oct 2023 16:00:00 GMT</pubDate>
      
      <description>队列的应用——三类通话记录的归类与输出。</description>
      
      
      
      <content:encoded><![CDATA[<h2 id="通话记录（队列）"><a href="#通话记录（队列）" class="headerlink" title="通话记录（队列）"></a>通话记录（队列）</h2><p>已知不超过 50条通话记录，通话记录有三种类型：0代表未接来电，1 代表已接来电，2 代表已拨电话。要求分别将三种类型前 10 条通话记录以三列的形式输出。</p><h3 id="输入格式"><a href="#输入格式" class="headerlink" title="输入格式"></a>输入格式</h3><p>输入不超过 50条通话记录，每条通话记录都占一行。每一行的第一个数字代表通话记录的类型，第二个数字代表电话号码，电话号码均由 11个数字组成。他们之间用一个空格隔开。</p><h3 id="输出格式"><a href="#输出格式" class="headerlink" title="输出格式"></a>输出格式</h3><p>分三列输出未接来电、已接电话和已拨电话。</p><p>每列之间用一个空格分割，最后一列后没有空格。每种类型输出前十个电话，先出现的通话记录先输出，不足十个的用 0 占位。</p><hr><h2 id="实现代码"><a href="#实现代码" class="headerlink" title="实现代码"></a>实现代码</h2><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><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;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;stdlib.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">typedef</span> <span class="keyword">struct</span><span class="comment">//队列</span></span><br><span class="line">&#123;</span><br><span class="line">string data[<span class="number">51</span>];</span><br><span class="line"><span class="type">int</span> front,rear;</span><br><span class="line">&#125;squeue,*squlink;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">enqueue</span><span class="params">(squlink &amp;Q,string s)</span><span class="comment">//入队</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">Q-&gt;rear+=<span class="number">1</span>;</span><br><span class="line">Q-&gt;data[Q-&gt;rear]=s;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">Emptyqueue</span><span class="params">(squlink Q)</span><span class="comment">//判断队列是否为空</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="keyword">if</span>(Q-&gt;front==Q-&gt;rear ) <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">string <span class="title">dequeue</span><span class="params">(squlink Q)</span><span class="comment">//出队</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="keyword">if</span>(<span class="built_in">Emptyqueue</span>(Q)) <span class="keyword">return</span> <span class="string">&quot;0&quot;</span>;</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">&#123;</span><br><span class="line">Q-&gt;front =Q-&gt;front+<span class="number">1</span>;</span><br><span class="line"><span class="keyword">return</span> Q-&gt;data[Q-&gt;front];</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></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">squlink Q1,Q2,Q3;<span class="comment">//三个队列，分别存三种电话</span></span><br><span class="line">Q1=(squlink)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(squeue));</span><br><span class="line">Q1-&gt;front=<span class="number">0</span>;</span><br><span class="line">Q1-&gt;rear =<span class="number">0</span>;</span><br><span class="line">Q2=(squlink)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(squeue));</span><br><span class="line">Q2-&gt;front=<span class="number">0</span>;</span><br><span class="line">Q2-&gt;rear =<span class="number">0</span>;</span><br><span class="line">Q3=(squlink)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(squeue));</span><br><span class="line">Q3-&gt;front=<span class="number">0</span>;</span><br><span class="line">Q3-&gt;rear =<span class="number">0</span>;</span><br><span class="line">string str;</span><br><span class="line"><span class="keyword">while</span>(<span class="built_in">getline</span>(cin,str))<span class="comment">//循环直到不输入为止</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="keyword">if</span>(str[<span class="number">0</span>]==<span class="string">&#x27;0&#x27;</span>)</span><br><span class="line">&#123;</span><br><span class="line"><span class="built_in">enqueue</span>(Q1,str.<span class="built_in">substr</span>(<span class="number">2</span>,<span class="number">11</span>) );<span class="comment">//将输入的数据的电话号码部分入队</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">if</span>(str[<span class="number">0</span>]==<span class="string">&#x27;1&#x27;</span>)</span><br><span class="line">&#123;</span><br><span class="line"><span class="built_in">enqueue</span>(Q2,str.<span class="built_in">substr</span>(<span class="number">2</span>,<span class="number">11</span>));</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">if</span>(str[<span class="number">0</span>]==<span class="string">&#x27;2&#x27;</span>)</span><br><span class="line">&#123;</span><br><span class="line"><span class="built_in">enqueue</span>(Q3,str.<span class="built_in">substr</span>(<span class="number">2</span>,<span class="number">11</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;<span class="number">10</span>;++i)</span><br><span class="line">cout&lt;&lt;<span class="built_in">dequeue</span>(Q1)&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;<span class="built_in">dequeue</span>(Q2)&lt;&lt;<span class="string">&quot; &quot;</span>&lt;&lt;<span class="built_in">dequeue</span>(Q3)&lt;&lt;endl;<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>挺简单一道题，大概熟悉一下队列的操作</p><p>收藏Shaw的博客谢谢喵~</p>]]></content:encoded>
      
      
      <category domain="https://blog.shawgarcia.cn/categories/%E7%BC%96%E7%A8%8B%E9%A2%98/">编程题</category>
      
      
      <category domain="https://blog.shawgarcia.cn/tags/%E9%98%9F%E5%88%97/">队列</category>
      
      
      <comments>https://blog.shawgarcia.cn/posts/44812.html#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>链表初学整理</title>
      <link>https://blog.shawgarcia.cn/posts/30047.html</link>
      <guid>https://blog.shawgarcia.cn/posts/30047.html</guid>
      <pubDate>Sat, 21 Oct 2023 16:00:00 GMT</pubDate>
      
      <description>链表入门与基础操作整理（有序集合交集、节点增删、单向转双向等）。</description>
      
      
      
      <content:encoded><![CDATA[<h2 id="链表"><a href="#链表" class="headerlink" title="链表"></a>链表</h2><p>首先是对链表的介绍（由chatgpt3.5生成）</p><blockquote><p>链表是一种常见的数据结构，它由一系列节点组成，每个节点包含一个数据元素和一个指向下一个节点的指针。链表中的节点可以在内存中的任何位置，它们通过指针连接在一起，形成一个链式结构。</p><p>链表可以分为单向链表和双向链表两种类型。在单向链表中，每个节点只有一个指针，指向下一个节点；而在双向链表中，每个节点有两个指针，分别指向前一个节点和后一个节点。</p><p>链表相对于数组的优势在于插入和删除操作的效率较高。由于链表中的节点可以在内存中的任何位置，因此在插入和删除节点时，只需要修改相邻节点的指针，而不需要移动其他节点。这使得链表在需要频繁插入和删除操作的场景中更加高效。</p><p>然而，链表的缺点是访问节点的效率较低。由于链表中的节点不是连续存储的，因此无法通过下标直接访问节点，而是需要从头节点开始遍历链表，直到找到目标节点。这使得链表在需要频繁访问节点的场景中效率较低。</p><p>总结起来，链表是一种常见的数据结构，适用于需要频繁插入和删除操作的场景。它的优势在于插入和删除操作的效率较高，但访问节点的效率较低。</p></blockquote><p>啊，gpt老师说得好（鼓掌）</p><p>那么就从实际体验中来体会链表吧！</p><p>首先是作业里的第一道题</p><hr><h2 id="有序集合的交运算"><a href="#有序集合的交运算" class="headerlink" title="有序集合的交运算"></a>有序集合的交运算</h2><p>假设以两个元素依次递增有序排序排列的线性表 A 和 B 分别表示两个集合（即同一表中的元素值各不相同），现要求另辟空间构成一个线性表 C，其元素为 A 和 B 中的元素的交集，且表 C 中的元素也依值递增有序排列。试对顺序表编写求 C 的算法。</p><h4 id="输入格式"><a href="#输入格式" class="headerlink" title="输入格式"></a>输入格式</h4><p>输入一共有 4 行，每两行描述一个线性表。</p><p>第一行为线性表长度 n（0≤ni​&lt;50）。</p><p>第二行为线性表的 n 个元素 ai​（0≤ai​&lt;200）。</p><h4 id="输出格式"><a href="#输出格式" class="headerlink" title="输出格式"></a>输出格式</h4><p>输出一共有两行，第一行为线性表 C 的元素个数。</p><p>第二行为线性表 C 的元素顺序输出的结果，按从小到大的顺序输出，每两个整数之间一个空格，最后一个整数后面没有空格。</p><hr><p><em>以下是实现所用的代码</em></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><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></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;stdlib.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">typedef</span> <span class="keyword">struct</span> <span class="title class_">node</span><span class="comment">//链表的节点</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="type">int</span> data;</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">node</span>* next;</span><br><span class="line">&#125;Node,*link;<span class="comment">//方便后续直接使用link来定义用于指向节点的指针</span></span><br><span class="line"><span class="function">link <span class="title">Crealist</span><span class="params">(<span class="type">int</span> n)</span><span class="comment">//创建链表的函数，链表节点数为n</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="type">int</span> num[<span class="number">201</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;n;++i)</span><br><span class="line">cin&gt;&gt;num[i];</span><br><span class="line">link H,P,r;</span><br><span class="line">H=(link)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(Node));<span class="comment">//开辟地址，使头指针指向一个地址。</span></span><br><span class="line">H-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">r=H;<span class="comment">//总是指向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)<span class="comment">//每一次循环加一个节点</span></span><br><span class="line">&#123;</span><br><span class="line">P=(link)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(Node));<span class="comment">//新的节点</span></span><br><span class="line">P-&gt;data=num[i];<span class="comment">//新节点里存的数据</span></span><br><span class="line">r-&gt;next=P;<span class="comment">//新节点的前一个节点的next指向新节点，使节点之间被连起来。</span></span><br><span class="line">r=P;<span class="comment">//更新r指针</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> H;<span class="comment">//返回头节点</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="function">link <span class="title">Creaemptylist</span><span class="params">()</span><span class="comment">//创建一个空链表</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">link H;</span><br><span class="line">H=(link)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(Node));</span><br><span class="line">H-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line"><span class="keyword">return</span> H;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">findit</span><span class="params">(<span class="type">int</span> a,link h,<span class="type">int</span> m)</span><span class="comment">//检测能够在链表的前m个节点中找到data为a的节点，如果有，返回true。</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">link p=h-&gt;next;</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><br><span class="line">&#123;</span><br><span class="line"><span class="keyword">if</span>(p-&gt;data==a) <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">p=p-&gt;next;</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">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="type">int</span> n,m,nc=<span class="number">0</span>;</span><br><span class="line">cin&gt;&gt;n; <span class="comment">//线性表长度</span></span><br><span class="line">link ha=<span class="built_in">Crealist</span>(n);</span><br><span class="line">cin&gt;&gt;m;<span class="comment">//第二个线性表的长度</span></span><br><span class="line">link hb=<span class="built_in">Crealist</span>(m);</span><br><span class="line">link hc=<span class="built_in">Creaemptylist</span>();<span class="comment">//合并后的线性表</span></span><br><span class="line">link pa,pb,pc,r;<span class="comment">//可移动的指针，确保头节点始终能够访问</span></span><br><span class="line">pa=ha-&gt;next;</span><br><span class="line">pb=hb-&gt;next;</span><br><span class="line">r=hc;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;++i)</span><br><span class="line">&#123;</span><br><span class="line"><span class="keyword">if</span>(<span class="built_in">findit</span>(pa-&gt;data,hb,m))<span class="comment">//如果在第二个链表中能够找到和第一个链表第i+1个数相等的数</span></span><br><span class="line">&#123;</span><br><span class="line">nc++;<span class="comment">//链表长度+1</span></span><br><span class="line">pc=(link)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(Node));<span class="comment">//增加节点</span></span><br><span class="line">pc-&gt;data=pa-&gt;data;</span><br><span class="line">r-&gt;next=pc;</span><br><span class="line">r=pc;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">if</span>(i!=n<span class="number">-1</span>) pa=pa-&gt;next;<span class="comment">//如果没有遍历到最后一个元素</span></span><br><span class="line">&#125;</span><br><span class="line">cout&lt;&lt;nc&lt;&lt;endl;</span><br><span class="line">link pk=hc-&gt;next;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;nc;++i)<span class="comment">//输出新链表</span></span><br><span class="line">&#123;</span><br><span class="line">cout&lt;&lt;pk-&gt;data;</span><br><span class="line">pk=pk-&gt;next;</span><br><span class="line"><span class="keyword">if</span>(i&lt;nc<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"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125; </span><br></pre></td></tr></table></figure><hr><p>最直接的算法，做完这道题后算是理解了链表是怎么运行的了。<br>接下来是后面三道题</p><hr><h2 id="哪位同学最优秀"><a href="#哪位同学最优秀" class="headerlink" title="哪位同学最优秀"></a>哪位同学最优秀</h2><p>蒜头君想把计算机专业相关的课程都写一遍，放到计蒜客上面帮助同学们学习。但是蒜头君意识到要写的课程有很多很多，蒜头君实在忙不过来，于是他想招几位实习生帮助一块写课程。招聘广告一发，吸引了好多大牛前来应聘，于是蒜头君每天都要安排面试。</p><p>有一天，结束了一天面试后，boss 跑来问蒜头君：“小蒜，你觉得今天面试的同学里面，谁最优秀呀，谁最适合写课程呀？”蒜头君递给 boss 一沓简历，回答到：“这里有 N 份简历，boss 你猜猜哪位同学最优秀。”</p><p>每份简历都有一个对应的 id，编号从 11 开始，依次从第一份简历到最后一份简历。boss 会从简历里抽掉 M 份简历，每次他随机念一个数字 numi​，然后从第一份简历开始数，数到第 numi​ 份时，就会把对应的简历抽掉，接着念下一个数字。抽掉 M 份简历后，boss 从剩余的简历中，取出最中间的一份简历，然后点点头念道：“我相信这位同学一定最优秀，哈哈”。</p><p>现在蒜头君想知道这份简历的 id 是多少，聪明的你能帮他算出来吗？</p><h3 id="输入格式-1"><a href="#输入格式-1" class="headerlink" title="输入格式"></a>输入格式</h3><p>第一行输入两个正整数 N 和 M（1≤M&lt;N≤1000）。</p><p>第二行输入 M 个整数 numi​（1≤numi​≤1000），表示 boss 依次念出来的数字。</p><p>保证 N−M 是奇数，输入的 numi​ 小于等于当前剩余简历数量。</p><h3 id="输出格式-1"><a href="#输出格式-1" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出为一行，输出 boss 认为最优秀的同学的 id 是多少。</p><hr><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><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;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdlib.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">typedef</span> <span class="keyword">struct</span> <span class="title class_">Node</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> id;</span><br><span class="line">    Node* next;</span><br><span class="line">&#125;node,*link;</span><br><span class="line"><span class="function">link <span class="title">crealist</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    link H,p,r;</span><br><span class="line">    H=(link)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(node));</span><br><span class="line">    H-&gt;next =<span class="literal">NULL</span>;</span><br><span class="line">    r=H;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=n;++i)</span><br><span class="line">    &#123;</span><br><span class="line">    p=(link)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(node));</span><br><span class="line">    p-&gt;id =i;</span><br><span class="line">    r-&gt;next =p;</span><br><span class="line">    r=p;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> H; </span><br><span class="line">&#125;</span><br><span class="line"><span class="function">link <span class="title">getelem</span><span class="params">(link H,<span class="type">int</span> i)</span><span class="comment">//找第i个元素</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="type">int</span> j=<span class="number">0</span>;</span><br><span class="line">link p=H;</span><br><span class="line"><span class="keyword">if</span>(i&lt;<span class="number">0</span>) <span class="keyword">return</span> <span class="literal">NULL</span>;</span><br><span class="line"><span class="keyword">while</span>(p-&gt;next&amp;&amp;j&lt;i)</span><br><span class="line">&#123;</span><br><span class="line">p=p-&gt;next ;</span><br><span class="line">j++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">if</span>(i==j) <span class="keyword">return</span> p;</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">return</span> <span class="literal">NULL</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">delnum</span><span class="params">(link H,<span class="type">int</span> i)</span><span class="comment">//删掉第i个元素</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">link p,q;</span><br><span class="line"><span class="keyword">if</span>(i==<span class="number">1</span>) p=H;</span><br><span class="line"><span class="keyword">else</span> p=<span class="built_in">getelem</span>(H,i<span class="number">-1</span>);<span class="comment">//取第i-1个元素，方便后续操作</span></span><br><span class="line"><span class="keyword">if</span>(p&amp;&amp;p-&gt;next)</span><br><span class="line">&#123;</span><br><span class="line">q=p-&gt;next ;</span><br><span class="line">p-&gt;next =q-&gt;next ;<span class="comment">//第i-1个节点的next直接指向第i+1个节点，“孤立”第i个元素</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">free</span>(q); <span class="comment">//释放已经被孤立的节点，完成删除</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="type">int</span> N,M,num;</span><br><span class="line">cin&gt;&gt;N&gt;&gt;M;</span><br><span class="line">link h=<span class="built_in">crealist</span>(N);</span><br><span class="line">link p;</span><br><span class="line">p=h;</span><br><span class="line"><span class="type">int</span> n[<span class="number">1001</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)</span><br><span class="line">&#123;</span><br><span class="line">cin&gt;&gt;n[i];</span><br><span class="line"><span class="built_in">delnum</span>(p,n[i]);<span class="comment">//删掉被叫到的那个人</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> great=(N-M+<span class="number">1</span>)/<span class="number">2</span>;<span class="comment">//优秀的那个人是第great个人</span></span><br><span class="line">cout&lt;&lt;<span class="built_in">getelem</span>(p,great)-&gt;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><p>以上代码有“寻找第i个元素”和“删掉第i个元素”的函数</p><hr><p>接下来是第三道题</p><h2 id="单向链表变双向"><a href="#单向链表变双向" class="headerlink" title="单向链表变双向"></a>单向链表变双向</h2><p>已知有一个单向循环链表，其每个结点中含三个域：prior，data 和 next，其中 data 域为数据域，next 为指向后继结点的指针域，prior 也为指针域，但它的值为空 (<code>NULL</code>) ，试编写算法将此单向循环链表改为双向循环链表，即使prior 成为指向前驱结点的指针域。</p><h3 id="输入格式-2"><a href="#输入格式-2" class="headerlink" title="输入格式"></a>输入格式</h3><p>输入共有三行，第一行为该单向循环链表的长度 n（1≤n≤60）。</p><p>第二行为该单向循环链表的各个元素 ai​（1≤ai​≤2000），它们各不相同且都为数字。</p><p>第三行为一个数字 m，表示链表中的一个元素值，要求输出时以该元素为起点反向输出整个双向链表。</p><h3 id="输出格式-2"><a href="#输出格式-2" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出为一行，即完成双向链表后以反向顺序输出该链表，每两个整数之间一个空格，最后一个整数后面没有空格。</p><hr><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><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></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;stdlib.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">typedef</span> <span class="keyword">struct</span> <span class="title class_">dualnode</span><span class="comment">//节点多了一个指向上一个元素的指针 </span></span><br><span class="line">&#123;</span><br><span class="line"><span class="type">int</span> data;</span><br><span class="line">dualnode* prior;</span><br><span class="line">dualnode* next;</span><br><span class="line">&#125;node,*link; </span><br><span class="line"><span class="function">link <span class="title">crealist</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">link H,p,r;</span><br><span class="line">H=(link)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(node));</span><br><span class="line">H-&gt;next =<span class="literal">NULL</span>;</span><br><span class="line">r=H;</span><br><span class="line"><span class="type">int</span> num[<span class="number">2001</span>];</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;++i)</span><br><span class="line">cin&gt;&gt;num[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)</span><br><span class="line">&#123;</span><br><span class="line">p=(link)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(node));</span><br><span class="line">p-&gt;data =num[i];</span><br><span class="line">p-&gt;prior=<span class="literal">NULL</span>;</span><br><span class="line">r-&gt;next =p;</span><br><span class="line">r=p;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> H;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">turndual</span><span class="params">(link H,<span class="type">int</span> n)</span><span class="comment">//对prior指针进行填充 </span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">link p=H-&gt;next ;</span><br><span class="line">link r=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">-1</span>&amp;&amp;p!=<span class="literal">NULL</span>;++i)</span><br><span class="line">&#123;</span><br><span class="line">p-&gt;prior=r;</span><br><span class="line">r=r-&gt;next;</span><br><span class="line">p=p-&gt;next;</span><br><span class="line">&#125;</span><br><span class="line">p-&gt;prior=r;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function">link <span class="title">otherside</span><span class="params">(link H,<span class="type">int</span> n)</span><span class="comment">//搜寻链表最后一个节点并返回 </span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">link p;</span><br><span class="line">p=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)</span><br><span class="line">p=p-&gt;next;</span><br><span class="line"><span class="keyword">return</span> p;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function">link <span class="title">gachat</span><span class="params">(link H,<span class="type">int</span> a)</span><span class="comment">//元素a在哪个位置 </span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">link p=H;</span><br><span class="line"><span class="keyword">while</span>(p-&gt;next&amp;&amp;p-&gt;next-&gt;data !=a)</span><br><span class="line">p=p-&gt;next;</span><br><span class="line"><span class="keyword">if</span>(p-&gt;next-&gt;data==a) <span class="keyword">return</span> p-&gt;next;</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">return</span> <span class="literal">NULL</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></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="type">int</span> n,m;</span><br><span class="line">cin&gt;&gt;n;</span><br><span class="line">link H=<span class="built_in">crealist</span>(n);</span><br><span class="line"><span class="built_in">turndual</span>(H,n);  <span class="comment">//变双向！ </span></span><br><span class="line">link E=<span class="built_in">otherside</span>(H,n);    <span class="comment">//E是链表最后一个元素 </span></span><br><span class="line">cin&gt;&gt;m;    <span class="comment">//以哪个元素为起点 </span></span><br><span class="line">link changnum=<span class="built_in">gachat</span>(H,m);  <span class="comment">//元素m在第几个位置         </span></span><br><span class="line">link p=changnum;</span><br><span class="line"><span class="keyword">while</span>(p!=H)<span class="comment">//按照要求进行输出 </span></span><br><span class="line">&#123;</span><br><span class="line">cout&lt;&lt;p-&gt;data &lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">p=p-&gt;prior ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">while</span>(E!=changnum)</span><br><span class="line">&#123;</span><br><span class="line">cout&lt;&lt;E-&gt;data&lt;&lt;<span class="string">&quot; &quot;</span>;</span><br><span class="line">E=E-&gt;prior;</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><hr><p>接下来是最后一道题</p><h2 id="蜗牛旅行"><a href="#蜗牛旅行" class="headerlink" title="蜗牛旅行"></a>蜗牛旅行</h2><p>蜗牛在制定今天的旅游计划，有 n 个景点可选，它已经把这些景点按照顺路游览的顺序排成一排了，每个地方有相应的景观，这里用一个整数表示。</p><p>蜗牛希望选取连续的一段景点，还要选出来的每一个景点的景观都不同，问它最多能选出多少个景点进行旅游。</p><h3 id="输入格式-3"><a href="#输入格式-3" class="headerlink" title="输入格式"></a>输入格式</h3><p>第一行，一个正整数 n(1≤n≤10的5次方)。</p><p>第二行，包含 n 个正整数 ai​(1≤ai​≤10的6次方) ，第 i 个整数表示第 i 个景点的景观。</p><h3 id="输出格式-3"><a href="#输出格式-3" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出一行，包含一个整数，表示蜗牛最多能选出的景点数。</p><h3 id="数据范围"><a href="#数据范围" class="headerlink" title="数据范围"></a>数据范围</h3><p>对于 60% 的数据，1≤n≤10的3次方</p><p>对于 100% 的数据，1≤n≤10的5次方,1≤ai​≤10的6次方</p><hr><p>以下是实现代码</p><hr><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><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;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdlib.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">typedef</span> <span class="keyword">struct</span> <span class="title class_">Node</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="type">int</span> data;</span><br><span class="line">Node* next;</span><br><span class="line">&#125;node,*link;</span><br><span class="line"><span class="function">link <span class="title">crealist</span><span class="params">(<span class="type">int</span> n)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">link p,H,r;</span><br><span class="line">H=(link)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(node));</span><br><span class="line">H-&gt;next =<span class="literal">NULL</span>;</span><br><span class="line">r=H;</span><br><span class="line"><span class="type">int</span> *num=<span class="keyword">new</span> <span class="type">int</span>[n];</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;++i)</span><br><span class="line">&#123;</span><br><span class="line">cin&gt;&gt;num[i];</span><br><span class="line">p=(link)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(node));</span><br><span class="line">p-&gt;data=num[i];</span><br><span class="line">r-&gt;next =p;</span><br><span class="line">r=p;</span><br><span class="line">&#125;</span><br><span class="line">r-&gt;next =<span class="literal">NULL</span>;</span><br><span class="line"><span class="keyword">delete</span> []num;</span><br><span class="line"><span class="keyword">return</span> H;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function">link <span class="title">getit</span><span class="params">(link s,link e)</span><span class="comment">//查找从s到e两个指针之间有没有和e指向的数据相同的数据 </span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="keyword">while</span>(s!=e)</span><br><span class="line">&#123;</span><br><span class="line"><span class="keyword">if</span>(s-&gt;data ==e-&gt;data ) <span class="keyword">return</span> s;</span><br><span class="line"><span class="keyword">else</span> s=s-&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"><span class="function"><span class="type">int</span> <span class="title">hm</span><span class="params">(link s,link it)</span><span class="comment">//s指针和it指针之间有几个节点 </span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="type">int</span> l=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(s!=it)</span><br><span class="line">&#123;</span><br><span class="line">l++;</span><br><span class="line">s=s-&gt;next;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> l;</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></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="type">int</span> n,m[<span class="number">1001</span>]=&#123;<span class="number">1</span>&#125;,i=<span class="number">0</span>;</span><br><span class="line">cin&gt;&gt;n;</span><br><span class="line">link H=<span class="built_in">crealist</span>(n);</span><br><span class="line">link s=H-&gt;next ;</span><br><span class="line">link e=H-&gt;next ;</span><br><span class="line"><span class="keyword">while</span>(<span class="literal">true</span>)</span><br><span class="line">&#123;</span><br><span class="line"><span class="keyword">if</span>(e-&gt;next ==<span class="literal">NULL</span>) <span class="keyword">break</span>;<span class="comment">//e遍历到最后时及时退出循环 </span></span><br><span class="line">e=e-&gt;next;</span><br><span class="line">link it;</span><br><span class="line">it=<span class="built_in">getit</span>(s,e);</span><br><span class="line"><span class="keyword">if</span>(it!=<span class="literal">NULL</span>) <span class="comment">//如果说有重复的景点…… </span></span><br><span class="line">&#123;</span><br><span class="line">i++;<span class="comment">//连续不重复的选择个数+1 </span></span><br><span class="line">m[i]=m[i<span class="number">-1</span>]-<span class="built_in">hm</span>(s,it);<span class="comment">//开始数下一个可能的选择有多少景点 </span></span><br><span class="line">s=it-&gt;next;<span class="comment">//重置起点 </span></span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> m[i]++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> f=<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;=i;++j)</span><br><span class="line"><span class="keyword">if</span>(m[j]&gt;=f) f=m[j];</span><br><span class="line">cout&lt;&lt;f;</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><p>啊，这篇博客到此就结束了，只是记录一下自己的学习。</p><p>收藏Shaw的博客谢谢喵~</p>]]></content:encoded>
      
      
      <category domain="https://blog.shawgarcia.cn/categories/%E7%BC%96%E7%A8%8B%E9%A2%98/">编程题</category>
      
      
      <category domain="https://blog.shawgarcia.cn/tags/%E9%93%BE%E8%A1%A8/">链表</category>
      
      
      <comments>https://blog.shawgarcia.cn/posts/30047.html#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>Markdown语法总览</title>
      <link>https://blog.shawgarcia.cn/posts/60386.html</link>
      <guid>https://blog.shawgarcia.cn/posts/60386.html</guid>
      <pubDate>Thu, 17 Aug 2023 16:00:00 GMT</pubDate>
      
      <description>Markdown 常用语法速查与示例。</description>
      
      
      
      <content:encoded><![CDATA[<p>其实本来就有语法总览的网站：<a href="https://markdown.com.cn/cheat-sheet.html#%E6%80%BB%E8%A7%88">Markdown语法总览</a></p><p>虽然已经有官网了，但我想着反正自己要试用，干脆写成一个博客罢（</p><h2 id="基本语法"><a href="#基本语法" class="headerlink" title="基本语法"></a>基本语法</h2><ul><li><p>标题(Heading)：在标题之前加“#”，#越多标题越小。(一共六级)</p></li><li><p>粗体(Bold)：在要加粗的字两边分别加两个星号，比如<strong>这个</strong>，两个星号–&gt;**。</p></li><li><p>斜体(Italic)：在斜体的字两边分别加一个星号，比如<em>这个</em>。</p></li><li><p>引用块(Blockquote)：在要引用的部分之前加“&gt;”，如下：</p><blockquote><p>明日的夜空哨戒班</p></blockquote></li><li><p>有序列表(Ordered List)：阿拉伯数字+小数点就行了，如下：</p><ol><li>塞尔达传说：时之笛</li><li>塞尔达传说：王国之泪</li><li>塞尔达传说：旷野之息</li></ol></li><li><p>无序列表(Unordered List)：前面每一个语法前的点其实是“-”，用的就是无序列表</p></li><li><p>代码(Code)：用键盘左上角的反引号括起来&#96;&#96;，比如<code>cout&lt;&lt;&quot;一键三连&quot;&lt;&lt;endl;</code></p></li><li><p>分隔线(Horizontal Rule)：在单独一行使用“—”、“***”、“___”，如下</p></li></ul><hr><hr><hr><ul><li>链接(Link)：[title]，在这之后加(具体链接)，如下<ul><li>传送到我的B站：<a href="https://space.bilibili.com/291635881?spm_id_from=333.1007.0.0">Shaw的bilibili主页</a></li></ul></li><li>图片(Image)：不知道能不能显示出来，总之先试试：使用!,后跟[alt text]，再之后是(“图片路径”)，如下：<ul><li><img src="https://img1.imgtp.com/2023/08/18/JL8ulpYD.png" alt="梅祖拉假面"></li></ul></li></ul><h2 id="拓展语法"><a href="#拓展语法" class="headerlink" title="拓展语法"></a>拓展语法</h2><ul><li>表格(Table)：用|和-画就好了（<a href="https://markdown.com.cn/extended-syntax/tables.html">具体点这里</a>，如下：</li></ul><table><thead><tr><th align="center">序号</th><th align="center">名称</th><th align="center">职业</th></tr></thead><tbody><tr><td align="center">1</td><td align="center">塞尔达</td><td align="center">公主</td></tr><tr><td align="center">2</td><td align="center">林克</td><td align="center">勇者</td></tr></tbody></table><ul><li>代码块(Fenced Code Block)：在代码块之前和之后的行上使用三个反引号（(&#96;&#96;&#96;）或三个波浪号（~~~），可以在第一次反引号之后加语言的名字实现语法高亮，如下<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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;emm&quot;</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li><li>脚注(Footnote)：用[]里加^和阿拉伯数字来实现，[^2]这样的，这里需要一个注释。<a href="%E8%BF%99%E6%98%AF%E6%B3%A8%E9%87%8A">^1</a>，啊，好像点进去后能在网址栏看到注释，我还不是很清楚这个怎么用。</li><li>标题编号(Heading ID)：要添加自定义标题ID，请在与标题相同的行上用大括号括起该自定义ID。(<a href="https://markdown.com.cn/extended-syntax/heading-ids.html">具体参考</a>)</li><li>定义列表(Definition list)：用于定义一些术语，第一行写术语的名字，第二行先输冒号，然后解释。</li></ul><dl><dt>Shaw</dt><dd>写这个博客的人</dd></dl><ul><li>删除线，前后分别用两个~括起来就好了，<del>像这样</del></li><li>任务列表(Task List)用[ ]在列表前进行标记：<ul><li><input checked="" disabled="" type="checkbox"> 吃饭</li><li><input disabled="" type="checkbox"> 睡觉</li><li><input checked="" disabled="" type="checkbox"> 打豆豆</li></ul></li></ul>]]></content:encoded>
      
      
      <category domain="https://blog.shawgarcia.cn/categories/%E7%AC%94%E8%AE%B0/">笔记</category>
      
      
      <category domain="https://blog.shawgarcia.cn/tags/Markdown/">Markdown</category>
      
      
      <comments>https://blog.shawgarcia.cn/posts/60386.html#disqus_thread</comments>
      
    </item>
    
    <item>
      <title>我的第一个博客</title>
      <link>https://blog.shawgarcia.cn/posts/57728.html</link>
      <guid>https://blog.shawgarcia.cn/posts/57728.html</guid>
      <pubDate>Tue, 15 Aug 2023 16:00:00 GMT</pubDate>
      
      <description>博客开通公告。</description>
      
      
      
      <content:encoded><![CDATA[<p>早中晚上好Hello（？）<br>我的博客网站正式开通啦！（好像暂时算是搞定了）</p><h2 id="网站用途"><a href="#网站用途" class="headerlink" title="网站用途"></a>网站用途</h2><p>大概用来写一些自己的学习心得、笔记之类的地方吧。</p>]]></content:encoded>
      
      
      <category domain="https://blog.shawgarcia.cn/categories/%E9%9A%8F%E7%AC%94/">随笔</category>
      
      
      
      <comments>https://blog.shawgarcia.cn/posts/57728.html#disqus_thread</comments>
      
    </item>
    
  </channel>
</rss>
