阅读视图

发现新文章,点击刷新页面。
🔲 ☆

2025-2026 赛季 游记 && 退役记

<div class="note note-info"> <p><a href="https://blog.makerlife.top/post/S25-record-private">私密版</a></p> </div><h2 id="Day-70-CSP-S-初赛">Day -70 CSP-S 初赛</h2><p>2025/9/20</p><p>进场的时候在门口堵了 20 分钟。今年好像比较简单,但怎么 ccf 码风这么好看了。</p><h2 id="Day-33">Day -33</h2><p>2025/10/27</p><p>怎么已经有三个人停课了,这么急。</p><p>不知道为什么今天状态很差,whk 也不想学,oi 也不敢停课。</p><h2 id="Day-30">Day -30</h2><p>2025/10/30</p><p>找班主任请假在机房待了一上午,对着 noi 大纲复健板子。顺便把没打完的游戏打了。</p><p>先天 ub 圣体,前有关同步后混用 <code>read()</code> 和 <code>cin</code>,后有动态开点线段树用 <code>std::vector</code> 的 <code>emplace_back()</code> 之后迭代器失效。很害怕考场写 ub。</p><p>我怎么下午还要去体测?</p><p>怎么体测的地方跳远垫子这么滑?</p><p>诶我怎么腿直接亲地上了?</p><p>rp--</p><p>然后成功一瘸一拐的去了日照。</p><h2 id="Day-29">Day -29</h2><p>2025/10/31</p><p>去日照的高速好像已经走了五六年了,甚至那几个隧道和大桥名字都快背过了。</p><p>去试机,刚进机房就发现有个电脑蓝屏了,还在想谁这么倒霉。结果过去一看是我电脑。然后就被安排到了对面备用机器。</p><p><img src="https://img.makerlife.top/data/202511021931246.jpeg" alt="蓝屏的电脑"></p><p>本机 1s <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4</mn><mo>×</mo><msup><mn>10</mn><mn>8</mn></msup></mrow><annotation encoding="application/x-tex">4\times 10^8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">8</span></span></span></span></span></span></span></span></span></span></span> 次取模,还没有虚拟机,那我 ub 怎么办。</p><h2 id="Day-28-CSP-S-复赛">Day -28 CSP-S 复赛</h2><p>2025/11/01</p><p>CSP 比赛日。做梦好像梦到四个文件全没加文件读写,吓醒了。7 点多直接去吃早饭,然后对着电脑看到 11 点。</p><p>解压密码好像是 人杰地灵,膜 <code>Ren5Jie4Di4Ling5%</code>。</p><p>开 T1,一看诶这不是个 dp 吗?开写!诶?我 dp 怎么是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>3</mn></msup><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(n^3\log{n})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">n</span></span><span class="mclose">)</span></span></span></span> 的。哦是不是可以优化。并不是。</p><p>哦观察样例发现好像最多的一列一定选 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mstyle displaystyle="true" scriptlevel="0"><mfrac><mi>n</mi><mn>2</mn></mfrac></mstyle></mrow><annotation encoding="application/x-tex">\dfrac{n}{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>?这玩意显然不对啊。哦还真不对。</p><p>算了去看 T2。上了个厕所然后一眼会了 40pts 暴力加边然后 kruskal,飞速打完。坏了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mo mathvariant="normal">≠</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">c\neq 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 咋做,不懂。直到考完也没想到那玩意是用来 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mn>2</mn><mi>k</mi></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(2^k)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span> 的。</p><p>考完发现当时被降智了,本来对于一个被选的乡村 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span></span></span></span>,直接加 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 条边 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mo>↔</mo><mi>e</mi><mo separator="true">,</mo><mi>e</mi><mo>∈</mo><mo stretchy="false">{</mo><mn>1</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mi>n</mi><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">c\leftrightarrow e, e\in\{1,\dots, n\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">↔</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">e</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">e</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">}</span></span></span></span> 即可。但是为啥我考场对节点两两连边,加了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mstyle displaystyle="true" scriptlevel="0"><mfrac><mrow><mi>n</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><mn>2</mn></mfrac></mstyle></mrow><annotation encoding="application/x-tex">\dfrac{n(n+1)}{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.113em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.427em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 条边啊?????</p><p>读了一遍 T3 发现没看懂,语言学还是太厉害了!直接去 T4,写了个 8 分跑路。</p><p>哦 T3 是不是就是 AC 自动机上随便搞点东西,但我已经不会 acam 了,有空现推,先把暴力哈希写了。</p><p>坏了哈希写了 3k 还没过,红温。</p><p>好像已经 <code>5:30</code> 多了,我要去推 T1。</p><p>又去读了一遍题,突然发现是不是直接选每个最大的,如果最终有一列超过 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mstyle displaystyle="true" scriptlevel="0"><mfrac><mi>n</mi><mn>2</mn></mfrac></mstyle></mrow><annotation encoding="application/x-tex">\dfrac{n}{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 就去调整对答案贡献少的人的选择,也许是对的?</p><p>此时 <code>5:50</code> 多,感觉要写至少 3k 啊,不敢写了,写了如下注释遂跑路:</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-comment">// maybe greedy is right? choose the largest col for all, change the illegal</span><br><span class="hljs-comment">// wrong?</span><br></code></pre></td></tr></table></figure><p>然后就开始想 T2 的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mo mathvariant="normal">≠</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">c\neq 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>,希望对正解有启发意义。结果啥也没想出来。</p><p>最后 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mo fence="true">[</mo><mn>60</mn><mo separator="true">,</mo><mn>70</mn><mo fence="true">]</mo></mrow><mo>+</mo><mn>40</mn><mo>+</mo><mrow><mo fence="true">[</mo><mn>0</mn><mo separator="true">,</mo><mo stretchy="false">?</mo><mo fence="true">]</mo></mrow><mo>+</mo><mn>8</mn><mo>=</mo><mrow><mo fence="true">[</mo><mn>108</mn><mo separator="true">,</mo><mn>118</mn><mo fence="true">]</mo></mrow></mrow><annotation encoding="application/x-tex">\left[60,70\right]+40+\left[0,?\right]+8=\left[108,118\right]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">[</span><span class="mord">60</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">70</span><span class="mclose delimcenter" style="top:0em;">]</span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">40</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">[</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mclose">?</span><span class="mclose delimcenter" style="top:0em;">]</span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">[</span><span class="mord">108</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">118</span><span class="mclose delimcenter" style="top:0em;">]</span></span></span></span></span> 遗憾离场。</p><p>我是不是要停课了。</p><h2 id="Day-27">Day -27</h2><p>2025/11/02</p><p>北斗已经有 SD 代码了,一看为啥 T1 挂 10pts,T2 还 MLE。</p><p>为啥我感觉 T1 不简单于编辑字符串啊。为啥说这玩意比廊桥分配简单。</p><p>这下真要停课了。</p><h2 id="Day-26">Day -26</h2><p>2025/11/03</p><p>凌晨 <code>00:50</code>。</p><p>躺床上没睡着想 T2,然后突然发现我好像会了。梦中惊坐起,去问 MrPython 做法,发现差不多对了。就在床上深度思考更睡不着了。</p><h2 id="Day-23-停课">Day -23 停课</h2><p>2025/11/06</p><p>停课。</p><h2 id="Day-19-Day-5-集训">Day -19 ~ Day -5 集训</h2><p>2025/11/10 ~ 2025/11/24</p><p>云斗集训,今年感觉还挺好的。</p><p>打了前四场模拟赛,发现我怎么好多不会的。开始自己做题。</p><h2 id="Day-4-Day-2">Day -4 ~ Day -2</h2><p>2025/11/25 ~ 2025/11/27</p><p>在机房打板子。机房甲流爆发,全天和 cpp xixisuper 苟在讨论室戴口罩。吓人。</p><h2 id="Day-1">Day -1</h2><p>2025/11/28</p><p>出发去淄博,下午到北京路亚朵,在酒店启动打板子模式。打了 tarjan*2+hash*2+sgt*2,顺便把各种 log 数据结构和 lca 打了一遍。</p><p>楼下吃的 熙临居 博山菜,感觉很好吃啊。</p><p>去试机发现还是去年的同一个机房,windows 和虚拟机都有装好插件的 vscode,但是不知道为啥 <code>launch.json</code> 死活配不对,而且还莫名其妙死机一分钟,决定还是用 devcpp 写代码。</p><p>取模 1s 5.5e8。</p><p>晚上回到房间开始用 devcpp 随机写东西,结果发现完全不适应,自动补全完全没有,发现 xixisuper 有???这还有版本差异。</p><p>在 22:20 成功清空任务列表,十点半多一点睡觉。</p><h2 id="Day-0-NOIP">Day 0 NOIP</h2><p>2025/11/29</p><p>今年好像没有什么太大的反应了,面对距离退役还有 5 个多小时的事实已经释然了。心态从 06:50 到 12:00 左右都一直非常平静。</p><p>从酒店一路堵到山理工,罪魁祸首是淄博实验。看人家学校校园还大,门还多,周六 8 点才到校,某学校学学人家。</p><p>08:07 进场,先把缺省源和目录建好,然后就发压缩包密码了。</p><p>开 T1,读一遍题发现这不是显然吗?于是乎马上码代码,大概 08:15-20 左右写完,思路大概是尽量多的选 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span></span></span></span> 最大的,如果实在选不了了就按 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 排序去选 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 小的,对于一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 检查撤销上一步 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span></span></span></span> 那个对的选择是否不劣。大样例 6 没过,输出 81 比答案少 2。不懂为什么,尝试换了个思路写了个暴力错的更离谱了。</p><p>然后整理了一下发现前半部分选 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span></span></span></span> 最大的肯定是对的,问题是后面。直接去按 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 从小到大排序,看如果把一部分 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span></span></span></span> 的选择换成一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 前缀是否会更优即可。</p><p>从原来代码删删改改,使用 <code>res</code>, <code>cnt</code>, <code>cntdiff</code>, <code>last</code> 等意义不明的整型变量。大样例过了,开 T2。</p><p>瞪了一眼觉得仍然是简单题啊,手模样例感觉就是总数减除以二之后产生的逆序对数量。上个厕所冷静一下然后 5min 简单实现发现错完了。决定打暴力,直接 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mn>2</mn><mi>n</mi></msup><mo>×</mo><mi>n</mi><mi>m</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(2^n\times nm)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">nm</span><span class="mclose">)</span></span></span></span>,20pts 到手。开始思考特殊性质,对 A 性质闪过了一个答案为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">2^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span>,但是因为不会证并且没大样例放弃了。</p><p>开写 T2 之前看了 T3,一直没想到什么思路。写完 T2 暴力想了两个贪心策略但是一眼假,暴力实现难度略高。看 T4 的简单题意感觉暴力可做。</p><p>然后就不知道怎么打出来了忘了是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>3</mn></msup><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(n^3\log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> 还是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(n^2\log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> 复杂度的暴力了,总之期望得分 5pts。甚至取模都没想到是 <code>unsigned long long</code> 直接用的 <code>__int128</code>。</p><p>回到 T2,突然发现有贡献当且仅当两个 1 合并起来比 2 要小,然后就不会做了。</p><p>最后 20-30min 比较辗转反侧,再多打一个 T3 暴力显然来不及,想任何一个题正解也想不完。在 T4 的文件末尾写下了:</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-comment">// AFOed on 20251129</span><br></code></pre></td></tr></table></figure><p>13:00 出场。</p><p>下楼看见 xixisuper,直接问 T2 做出来了吗,T3 做出来了吗,T4 做出来了吗。他一脸懵逼说不会啊,不会啊,不会啊。于是去机房群里激情开喷。</p><p>山理工路上碰到 cpp,问她 T2 会做吗,得到了一样的答案。群里伪人和 MrPython 自称全都不会。大家全都开始在群里激情开喷。</p><p><img src="https://img.makerlife.top/data/202511292229517.png" alt="激情开喷"></p><p>但是某文化课了两个周的哥们会???直接场切紫题?折磨牛。</p><p>结果在群里对 T1 大家思路全都不一样。对 T2 发现少拿 4pts。对 T4 发现暴力打丑了。自认为 T1 思路很对。</p><p>洛谷是黄黑黑黑?黄嘿嘿嘿。</p><p>下午直接回家,想测洛谷的 T1 民间数据。此时看到群里发了一个大样例全过洛谷得 80pts 的截图。</p><p>打了一会 T1 打不动了,大脑停止工作。但是发现我考场代码好像按 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span></span></span></span> 排序的时候没有考虑有多组 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x+y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span></span></span></span> 相同处理 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 的情况。这下要随机挂分了。</p><p>算了一下期望 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mo>+</mo><mn>20</mn><mo>+</mo><mn>0</mn><mo>+</mo><mn>5</mn><mo>=</mo><mn>125</mn></mrow><annotation encoding="application/x-tex">100+20+0+5=125</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">100</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">20</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">125</span></span></span></span>,就看 T1 挂不挂了。</p><p>AFO 还是很平静的。甚至以为第二天就要上学了,过单休过习惯了。我还是舍不得我的 oi 啊。</p>
☑️ ⭐

NOIP 2024 游记

<div class="note note-info"> <p><a href="https://blog.makerlife.top/post/noip2024-record-private">私密版</a></p> </div><h2 id="Day-n">Day -n</h2><p>在跟着各种金牌爷集训,感觉后面题目难度有点高啊。而且强度很可以,到后面还挺累的,休息的也不算很好,rp--。</p><p>集训的时候到考场机房去了两次,发现机子有火绒会导致神奇问题。</p><h2 id="Day-0">Day 0</h2><p>白天复健了一遍之前记的 DP 的笔记和各种 tricks,打了几个板子。</p><p>晚上试机,考场机子可以无常数 1s 8e8,取模也很快啊。但是 Windows 下用不了 gdb,而且键盘放的位置很奇怪。</p><p>晚上大概 10:30 睡的觉。</p><h2 id="Day-1">Day 1</h2><p>考场安检非常的慢,非常早的进去以后突然发现没去上厕所,结果出去上了个厕所回来排安检的队硬是排到了快发压缩包密码,rp--。</p><p>赶紧解压看样例,没来得及瞪出来什么特别算法,感觉有一个是树上查询类似的。</p><p>开题,发现题面都很长,看了眼 t1 好像还是可做的,t2 题面描述过于复杂,t3 t4 神秘题。</p><p>开干 t1,草稿纸上手摸了一遍样例发现贪心的找非常正确,然后就开写。写了第一份发现细节处理写的非常史,小样例调过了,但被自己 hack 了。急急急,重构第二版,小样例过了,大样例过了 6/10 个点,急急急,此时已经过去了快 2hrs。</p><p>突然发现读错题了,没有注意到题面里甚至加粗加点的只能交换相邻两个。直接慌掉了,决定先把后面题能打的暴力打完再回来想 t1。</p><p>t2 又读了一遍发现暴力很可做啊,写了个 dfs 发现有一个多测过不去。感觉调这种不算特别小的数据会浪费很多时间,并且就错了一个点,决定静态查错,查不出来也先看后面的。确实没查出来。</p><p>t3 感觉特殊性质都是可做的,但是想第二个特殊性质的时候突然发现没看懂输入里边的编号是怎么定义的,到考试结束也没想明白是输入的边的顺序。输入理解不了只能打 4pts 跑路。</p><p>看时间不算很富裕,写 t4 暴力性价比也不算很高,先回去干 t1。手摸样例发现按 0 分段,每段能匹配则匹配,匹配不了的分到分界点上好像很正确,但是不会证。不管了先写,写+调了一会成功过掉了 8/10 个大样例。然后发现不管怎么 hack 都没 hack 掉,慌。</p><p>看 t4,暴力期望 8pts,开始实现,小样例过了,大样例全是 60 多,急急急。发现题没读错但是实现的时候,想成了一道机房出的类似题。赶紧改实现,改完以后测大样例,然而在 500 次询问中好像会有十位数次答案差一点,而且越靠后差的越多。仍然发现写的很对啊,急急急。</p><p>到现在基本不剩多长时间了。最后的几分钟大概就是 t1 t2 t4 切换着看希望能看出来一点问题。但最终还是没看出来。</p><hr><p>出考场前,甚至出考场后的很长一段时间里,都始终认为 t1 是个橙题,不应该做不出来,所以把大量的时间花在了 t1 上,而不是甚至稍微想一下 t2 的正解。这次比赛算是比 CSP 有一定的改进,至少能先打出来每个题的暴力。</p><p>时间分配和读题方面还是有很大的问题,也没有想过 NOIP 会把一道简单乘法原理放到 t2 的位置。</p><hr><p>中午吃饭时候看到洛谷难度是蓝绿紫紫,突然发现了考试的时候安排是多么的唐。看到 u 群和洛谷群里在说的 t1 的解法好像和我的差不多,但为什么过不去大样例。</p><p>这下真的随机得分了,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mo>∼</mo><mn>80</mn><mo stretchy="false">)</mo><mo>+</mo><mo stretchy="false">(</mo><mo>∼</mo><mn>10</mn><mo stretchy="false">)</mo><mo>+</mo><mn>4</mn><mo>+</mo><mo stretchy="false">(</mo><mo>∼</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(\sim80)+(\sim 10)+4+(\sim 0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">80</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">10</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span>,希望 t1 数据多测能给的不那么强。</p><hr><p>出成绩了,这下这下了。</p>
☑️ ⭐

集训记录

<h2 id="P4823">P4823</h2><p>贪心按 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a+b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span> 从小到大排序,小的先走,正确性反证得到:</p><ul><li>设有两个人 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span>,且 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub><mo>+</mo><msub><mi>b</mi><mi>i</mi></msub><mo>&gt;</mo><msub><mi>a</mi><mi>j</mi></msub><mo>+</mo><msub><mi>b</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">a_i+b_i&gt;a_j+b_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8694em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>,且两人出去的顺序为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>→</mo><mi>j</mi></mrow><annotation encoding="application/x-tex">i\to j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span>,也就是高的在上面。</li><li>那么,现在交换两个人,按照反证的假设如果原来 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 都能出去,那么现在只有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 能出去,且根据题意,其一定能出去;</li><li>若 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 现在都出不去,那么由于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 比 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 高,那么在不交换前,两人基准位置相同,更矮的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 一定出不去。矛盾,得证。</li></ul><p>转化为选 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 踮脚或逃的背包。<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个人总高度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 最多逃多少人。注意到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 可能很大,考虑把结果和状态换一下,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个人,逃 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 个能搭起来的最大高度。</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mn>0</mn></msub><mo><mi mathvariant="normal">≔</mi></mo><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><msub><mi>a</mi><mi>i</mi></msub><mspace linebreak="newline"></mspace><msub><mi>f</mi><mi>j</mi></msub><mo>=</mo><msub><mi>f</mi><mrow><mi>j</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>−</mo><msub><mi>a</mi><mi>i</mi></msub><mtext> </mtext><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>j</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>b</mi><mi>i</mi></msub><mo>≥</mo><mi>h</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f_0\coloneqq \sum_{i=1}^{n}a_i\\f_{j}=f_{j-1}-a_i\ (f_{j-1}+b_i\geq h)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mop" style="position:relative;top:-0.0347em;">:</span></span><span class="mrel"><span class="mspace" style="margin-right:-0.0667em;"></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.9291em;vertical-align:-1.2777em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6514em;"><span style="top:-1.8723em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2777em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace"> </span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">h</span><span class="mclose">)</span></span></span></span></span></p><h2 id="模拟赛-T2">模拟赛 T2</h2><blockquote><p>给定一棵树,求一个删边的构造,使得任意删除新的图中的一条边图仍然联通。</p></blockquote><p>[证明]</p><p>设叶子 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span> 个,则答案数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">⌈</mo><mstyle displaystyle="true" scriptlevel="0"><mfrac><mi>m</mi><mn>2</mn></mfrac></mstyle><mo stretchy="false">⌉</mo></mrow><annotation encoding="application/x-tex">\lceil \dfrac{m}{2}\rceil</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mopen">⌈</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">m</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌉</span></span></span></span>。</p><p>按 dfn 对叶子节点编号,则每次删的边构造可以为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>→</mo><mi>i</mi><mo>+</mo><mo stretchy="false">⌊</mo><mstyle displaystyle="true" scriptlevel="0"><mfrac><mi>m</mi><mn>2</mn></mfrac></mstyle><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">i\to i+\lfloor\dfrac{m}{2}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">m</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span>。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><code class="hljs cpp">bitset&lt;N&gt; leaf;<br>vector&lt;<span class="hljs-type">int</span>&gt; dfn;<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> fa)</span> </span>&#123;<br> <span class="hljs-keyword">if</span> (leaf[u]) dfn.<span class="hljs-built_in">push_back</span>(u);<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : e[u]) &#123;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-built_in">dfs</span>(v, u);<br> &#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> n = <span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt; n; i++) &#123;<br> <span class="hljs-type">int</span> u = <span class="hljs-built_in">read</span>(), v = <span class="hljs-built_in">read</span>();<br> e[u].<span class="hljs-built_in">push_back</span>(v);<br> e[v].<span class="hljs-built_in">push_back</span>(u);<br> &#125;<br> <span class="hljs-type">int</span> m = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">if</span> (e[i].<span class="hljs-built_in">size</span>() == <span class="hljs-number">1</span>) &#123;<br> leaf[i] = <span class="hljs-number">1</span>;<br> m++;<br> &#125;<br> &#125;<br> <span class="hljs-built_in">dfs</span>(<span class="hljs-number">1</span>, <span class="hljs-number">0</span>);<br> cout &lt;&lt; ((m + <span class="hljs-number">1</span>) &gt;&gt; <span class="hljs-number">1</span>) &lt;&lt; <span class="hljs-string">&#x27;\n&#x27;</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>; i &lt;= (m &gt;&gt; <span class="hljs-number">1</span>) - <span class="hljs-number">1</span>; i++) &#123;<br> cout &lt;&lt; dfn[i] &lt;&lt; <span class="hljs-string">&quot; &quot;</span> &lt;&lt; dfn[i + (m &gt;&gt; <span class="hljs-number">1</span>)] &lt;&lt; <span class="hljs-string">&#x27;\n&#x27;</span>;<br> &#125;<br> <span class="hljs-keyword">if</span> (m &amp; <span class="hljs-number">1</span>) &#123;<br> cout &lt;&lt; dfn.<span class="hljs-built_in">front</span>() &lt;&lt; <span class="hljs-string">&quot; &quot;</span> &lt;&lt; dfn.<span class="hljs-built_in">back</span>() &lt;&lt; <span class="hljs-string">&#x27;\n&#x27;</span>;<br> &#125;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="CF1251D">CF1251D</h2><p>二分枚举中位数,考虑贪心地 check。将要求转化为一段段区间,对于一个区间 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>,有三种情况:中位数大于/小于区间或在区间内。</p><ul><li>对于前两种情况,一定不会产生中位数,为了省钱选下界;</li><li>对于第三种情况,因为此时剩余数量已经确定,故对于一半的数选中位数,另外全选下界。选下界的这一半为了省钱,在下界相对小的区间选。</li></ul><p>check 过程中判一下如果前两种情况的数量大于中位数一定不合法即可。</p>
🔲 ☆

CSP2024 游记

<h3 id="Day-INF">Day -INF</h3><p>初赛。过了。</p><h3 id="Day-0">Day 0</h3><p>下午到日照,在酒店把之前 Blog 上记的东西口胡了一遍。</p><p>晚上去考场试机,怎么还要模拟考试流程不让带包还要查身份证准考证。</p><p>屏幕太刺眼换了个显示器,试的时候发现没有 Linux 虚拟机测不了编译,不过倒是有 Excel 方便打草稿。</p><p>机子还可以一秒 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>6</mn><mo>×</mo><msup><mn>10</mn><mn>8</mn></msup></mrow><annotation encoding="application/x-tex">6\times 10^8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">6</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">8</span></span></span></span></span></span></span></span></span></span></span>。</p><h3 id="Day-1">Day 1</h3><p>上午继续复健。</p><p>下午到考场,发了压缩包密码先看样例,似乎没发现字符串和大模拟,看文件名也没看出来什么算法。</p><p>开题,先扫了一遍,t1 很可做,t2 好像可以数据结构?t3 一眼 DP,t4 题面过长神秘题。</p><p>t1 看小样例直接写了个判定当前数能否被下一个数干掉的东西,发现大样例过不去。手模一下发现还可以被更多的后面的数干掉,瞪了几分钟瞪出来了大概是求众数出现次数。感觉证明比较显然没仔细证,大样例过了。</p><p>t2 显然对于每一个车可以处理出区间,就变成了区间和点的问题。想的时候不知道为什么按照一开始的想法直接按数据结构想的,发现第一问可以线段树维护,第二问好像数据结构搞不了。直接上手搞区间和第一问,因为担心精度问题直接手写的整型取整,写完后发现测样例的区间不对,才注意到是开区间并且有不能整除的情况要分加速减速特判,写完后已经过了近 1hr。想到第二问似乎可以贪心的去搞,但是害怕后面打不完先开 t3。</p><p>t3 直接大力 DP 用 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mn>0</mn><mi mathvariant="normal">/</mi><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,0/1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0496em;vertical-align:-0.3552em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.5198em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mtight">0/1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3552em;"><span></span></span></span></span></span></span></span></span></span> 表示前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个数最后一个是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mi mathvariant="normal">/</mi><mn>1</mn></mrow><annotation encoding="application/x-tex">0/1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0/1</span></span></span></span> 的最大得分,实现了一下样例答案对了但过程和样例解释不一样,对着样例解释调了至少 10min,才注意到样例解释里 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span> 全写反了。测大样例发现过不去,推了一会以为式子写假了,赶紧写个 dfs 跑路回去看 t2。</p><p>t2 贪心实现了第二问,还是过不去大样例,瞪了一会发现多测没清空。改之后只能过匀速的特殊性质。此时剩的时间已经不是很充裕了,开始慌。后来改了一些东西,仍然过不去还剩半小时左右。</p><p>尝试打 t4 暴力,仔细读题并不是很好实现,特殊性质 A 是可做的。大概写了十几行看到剩的时间不多了,又听到监考一直在说要每个人检查文件,感觉写不完了。把文件整了一遍,听到说最后五分钟在关闭所有窗口并且手离开键盘鼠标的情况下打开 D 盘。文件没问题就照做了。</p><p>出考场越发感觉 t2 很典的东西没有写出来比较抽象,放掉 t3 的暴力 DP 也并不是一个很好的选择。时间主要就浪费在 t2 和 t3 互相调不出来的左右横跳上,这次比赛甚至是正式比赛中唯一一次没有去厕所缓一下的。越到后面心态越炸反而越写不出来。晚上连夜回济南,在车上看 u 群发现想的基本都是正解,就是实现太差。并且貌似人均 300。期望只有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mo>+</mo><mo stretchy="false">[</mo><mn>10</mn><mo separator="true">,</mo><mn>20</mn><mo stretchy="false">]</mo><mo>+</mo><mn>20</mn><mo>+</mo><mn>0</mn><mo>=</mo><mo stretchy="false">[</mo><mn>130</mn><mo separator="true">,</mo><mn>140</mn><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">100+[10,20]+20+0=[130,140]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">100</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord">10</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">20</span><span class="mclose">]</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">20</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord">130</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">140</span><span class="mclose">]</span></span></span></span> 了。</p><h3 id="Day-2">Day 2</h3><p>重写了一遍 t2 非常快的过掉了,并且发现死因是计算区间的时候开区间的向下取整,当正好可以整除时没有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">1</span></span></span></span>。</p><p>另外好像 t2 考场代码时间复杂度比较炸。</p>
🔲 ☆

板子库

<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="抱歉, 这个密码看着不太对, 请再试试." data-whm="抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容."> <script id="hbeData" type="hbeData" data-hmacdigest="b8a0ca95b44cedb6b199fa7c261d08d9eb5fc98457c8e0f9330dbad8b7f9ee3b">8f6e41efd10e38201e5f3cb1134eb7d263cc668d7c4b8ebb6fbf2e0a5dc26ce89592486ef0b6ca16537d7e68f08822ceb9b539394d5295d84ff980c1895ced35e3c2c8174feb12b185044540d18c18b9104907cdb003b9d2ab9dd0abd558d86d6e8cff3dc7c1dbf1b177f8fa8b1dca3e40b9135f9ba6aa6b738faff1ce5df742c21707789890e537d90f7b7ad0b6c91f67f4f4c70009c9290b9612799399dbc8282498a8ec3c1134bfd4ab4a1808bef9f7d18f35e1074199c167bb68232790c62eb3e5a0043eadfe905a066ab56c44a591d0934dd349265316dac64020f536fb876e34fd9c935ab9e548e9538cfe1ab2d103d64b475bd8b1edb01722965e6fec6b9bb028e507f1f25403ec6343c4a10fad6eb76c21bf4067aadc77dae85aec7055d9378aab337c518707ba76771178587bbc8ca6d14ce4197a3f14741e9a1fa0fccbb3431a6a0d355091ddb512cda144f2adbed95f60e2280c2b236ebf16e47bb57557d7ec187ada7f68c90769cfc02e4d396c5870d54c59174d0713814756c913a27d9e15c8bb7bf5550b9af9474f278aab82e40bc4b43df9aa6b6ac563a377bd59483153cf9ef1fb9cd07acce1b15088abf3ca78d8954c7e94f19f2382a704bcc5c7d5136a30732d0f4e69ded3cb8320f930698027721710e32b7ccd108ec3fa1d7d79a58e06404417d9852ba419a11fe69b38b020883c3e3f11eaacb3b1db707bda63c94e73d592ec049e5b583a372569888d7aa58c039fe69ef2b5959a0ace9a5279a1315b693be930186ff9e6ef6f9a48619af620087204aa19b4f9aa833155da721fac24304749b908da67769dd9201d195e549902f8abc42b358ee692d9dda2328d27c949c022751633abb4a427a833c4755d62ac63c085cbc91aff00776978b5a1c37a931f9b3d87be0e2c1585f1973b8f087b216ac7cdc99b86325c811ffd2713b4372f87dd3a76665d08af9ee5355666adfe0cda573d5a0ade2caff2679fd2ca4611e4cdfbea190972051944b64e010de5c30cd534febaaab91be16076101641da2feac0204bda65cae0fd87b60a79d162e9f3ef2fa967d2cd658cf87a95804849201930636be0c97fc1b01d3fbfa4dccb5f6e3d1c0611c1953960a4324277c9fb6b8f60aa86d9157fb9f75517a913f3950175a1514c5a8e2403a26c3b4e15a9c406435018031b96bb3f1e53c27565866afdd30333b16085ab13fe1d4216b8cbf78773c80311311befd4cfb66ab95a1d0f901fd4645ab0699170dbc84ca21dbd87d8f3c9c930d0e4027558a09311bd355b1f47a02ad13812fb7ec997f93fc94d394d2ad5af7d73ce2a69ba5e89e5f174179d7950c8b1cd7e502b660191cef670a2d997c81d8696374407ce3e7dfd8278ece9f13b416d9959cb3e11ee59a73fd42baf03affb9bae13c6a4e1482be7d614f77a8ae50ce3e93a5ae3cf3e7bb49af94399f0da8fb0bd112a2cf5942994a9f2973f88b9c5b6369b53d5441da5b301ac62fe72d5dee9d905bfbfca33d5a5e058c60d21ea5836649e60e843990aae18e35e48e06f4bebe1f5310835bf2b3538135b7886df6a04c9779d2839b684b0d10f7dbc97b556164cb282b1a87c540e5d6b466f19b07f4616cad761b0b45a3a2391da7ca5ae9d23d0bf99e61cd00de17e1dd252b38cb0d395423dd0e1eec827f3cf784ebf1bdfbe7c1ad905060513aabbef024cb95875495f764c60f5c5860c26e80c65ad6d48f0de8e2be66cc92b19c2c326e195c3bc1b30b4a87aa273039e208ee4f669352311e0635d8c894bec71603961e7a38900785707508c47a3e4733dda3bb7bb1336c4cf0a57a5fe479801fb0a218c260170585731c2237c586d0ca5ee17590c5aefb02ffd2885f93c8316d077a5f7b10b2e34886c9dd3b2e613aff81a0d0809bb419249ee7136ca82d86b938847a0e64942ffcec061ef75ef6e39e2d3cc101d76522e7559c3de95fbc363a4a16041d96bc267b6848b88a46426fe40e6e4a195d9b672ceaeb7bc919c8b7ab2856830e56fbefccf5f8a22b3833b3a73c70e4873d86a50562346b81355b935a80b466f1102cd12ec2e5ad0356168efa01ded72043b305fc5b7a54561dab3d5af5b597b0bacac1fedb64b05cb7a5ebe1c900414acf623f693b13497e05805d746999e6449fcb735ea1ff868602f964970b733a65aa82388b2f90958f0ea84c9eb15394a3e7a7c953364080c3f913af8c8de38e0d7709a4467977c2e4e98d57c24be4284317969d36df4401c0adf44257bc453a6f83f2e318081d758234d124ca6dd3a8f3058aa166fb8d2a7557b5669c34381a28ac779094e8ef137ce94bb403fe5b6df2f47093a91ac9f998a4ab8251a78f86c3dd6137b5c523c7c57a3fcad8b3e302f782dc5ac426dbf6c0d5c4981ecb1730cbb1da5072103b5ff37f0f9589bb07963fd68c629a8f4769cac81bfa2e7c16e35077c630d0d0be6ea6749a7d9c1e56b0a36395d6f40bb68132bdc3d950cfcefe995cf5e26f73b06a5135a77c68a059cfb914e671278134a6ee20e30cd12a343f6f04fac9d48a5fcd7e69861ecbd31c8cb66759f850ad0d2d677d8a5eeb159ab9dbf9a94112e07a4f0227fb2454c96b4b741b925a60968ec86024d79905b8b20b15f989e19277950078f69ff75eb95f5047bfff53df53faf021655e939d912b382e9272fff5434bb4e9c0cbdf57f2d72a003ba31bf27b30be967ea7f34b8aff9b5e890483e3c3599d7bc121f9de724c30eb42cdb0fcbaca47c6fafc16d5d6374e3cd60b722100febd54b25134a75cb501815ec4aff4922b6d4dcbcb531dd0fb5f19bddac50b9fc39d029f859e1b74479cf1c94d23a8ae10ab23b72adafb922fd156ff4fd3912bf6f2b86399be0fde2bc83b1c930935569fa55972bd4cd1c3be98a3e76869d816ed3da9211f97f5832735bf85487b1916061a3505d6dbb48921f5f0da2d22ee69f76365a75b6954791ef2a196eba8635390898475fd94a6a2ebf621c781de47a80643efabf92806e957619abdd4dc98ae1adbab2f065b8447d37f7e75bc9041160923d94c5dadefd4221d2bfa012edc880f924538df3619ebe5a949a7ae97545b748773dbd49513adba3dbd1291960ed1732f9a6dc88f1e050d58265bf834d67ef8c9beecf4bab1c8eb5e567a313fd73fea966a568d425460f6eba2ad6add2af736918cff67eb5757ebe26e2b3690215653468487f0f7bff26a418fb8ce3fa366cd25a5de157076d575a67fb07df9ebc4fafa9cb6662715be61a3c1bfdbb84e90c8d3a09748f7c7fcdb4c478a57294ebe62d0f9813c75c6992476ff3bcc7a231f6912b14b862589a3f3b2224dbfec78982555c0d2bc9a7b142844a0fe54d99eada083b54dae7df01bf3f02710873958f424563d5c6d21c61f59fda2012400cc0babd12a6f88bdaef632385bf2b930125cd91875bd45c6614422000997b6d980d0f6b9582311be8e0a487f5249f2a9fd4bef2511195e6c11915b3565007766d6a9132c61ea9bf6c05ea61dd3024c2c9a7eed7143ab8e648f2688bd5e4b6f27a6bb9f68fe052f972728b8e171358a1b69e983c724834281def930a404fc0d1bca3ee11ab2b670b022940bbb75c6a7de24e4b17f899c81b549b5c3884a4f1d7a0514fb65bcc040e995aa2c6006480ae5bf1166c36d6caf52db3f695bc515fc0db4be7d626b2990d0b8e18d8a72b1acdc0ca9ed9195d51b42e3d8b496128675956b3b0feca6ea5a4c43fe123cf440c270f34ad1f264ad4f1ebc176f29e5f29dcca33d34a919117e6955e66b66b1020f998890d449e7499ea0e9991a842482b10507d2a1cce45e2bc93fc0707df6cd805fcf70d849c550f86d29b01170a5901615922b775d26e8b0cba0b793ab12b09206e766513818d8602b305a003148a8a822cfd634b9b55d087425d9e4f4e1bbfd177e13f342c8718e3cdb22187cd6ee46d9ab539a93370fadf19121e2735551a02abc33509aa489c53f9333db78429fcecdcc32bd572f63742821df2eea0b16c9362c492840772887a1a950dd21b3d8b60255a3177d21e1de21d306bb7bc70132bdbc73e1e0efc62ecb259e23edfc4664093e8dcfcec26141c859934311f432b8a187ec810b3bf2fc2469799693fece16db9c40018f7f7c7d1a95ceb72cddad9bbe0e2b4a04170aee4f9f315c41c414429d0290da9f90686374ba5fca22907c8e16f99652c8b874d412f041f2ff9e04b92e0ff7be28bb11c009e1ca02f63f51e23cd89eef1236b80621b5db324f4a2754d2aba096fe29c2b9e8e4f73c4ec3ed404e1b5fcbd853ca71001ebc5aa9e0749860751bddc797fc3d109fc6359554e6898718827a20eb5deaa9b062bccc5bac230ed5b74b77aac59c631ed07844cadd072d96633d6f4e3bbb4d8e70b899a3d35c338b6bdb346efef61713676a0bdff750e0c5bc146f299ddcd87733fdd4eb908ce860caf48e248c14cbbfa794b5ba17da4752e998413a8be841d43e8ae220fb5dade9e6626a13a4a0f51f8d778acc114b34391f76327f776bc159b8d9ee64c85c651aa0d5f1bdc7bb9d5fc90cc18b5435d950a0ab75cc7f292a1dc903683de2d7bf11b264212bf94270444374f29171685c6c8bf0c4471ac922268b046c7f44c44627313c95035dbcd334ec995e0528b4fe82b620e276c3636fc2ac5da9b78b8cea182a68154ce4cbfa688d27a5cb69b854b800ba69d779c5d82599172533f8d79f028948e7e55f88618cdd38ce56a674e3468c7270c8615f2b85de2e2fb250f7883e78c799d06e5c36d352d6ca4608dbf37dcf469d41933b2883c43e21b96838d37b9634a7cba9540a7a72801a59fb009a4fde886782180295b21121f2395b931ec94bee989a4641a5c8c627f31fb2b6b55063dced439da192c36ba9a5766690da9682ae37c10679dcc6d293e2851c5c97d6c1efd7fdf00ca2a9e9a92a0b9ffede1d4dd5dec4c219db76c992769a787ddc9c9a826cb707a655d1369e5904d5d225ca4a0c115af9efc99101b7f3f82c2c2d6e7513aedfc21bffe32b75a36086198dd6560bcd92ac2504664f3bb73a600fbe9a7e06b063bfb811000169603d83b0dec6099a333112260ac0eea926e909e2c55c22ef67bc864ab5bbff80abd34480a739645786253366a35863021e40f92cdaef3142f51319a7fdf016618529714dabfaeee7b72c53714b71471b550d86bb42303f2e53980323a7908864a45aec566008b474ee5789070df4631d3973243bd01c5687e770036c69d04b54e4ee3d75b76b3139df73e4b580fc0a8e92c406eec80c33960dda5715dd394f1ad2cb1aac6ef681bc44890aed6c3ed82dab25df3175450e31f4f364cb145dc14e5ae6753b9b20b6caf9a32f98facc01834360e7069f5288acb06e47473f3af986eb64d7bbad2b0ce753008d6bada64283b466860e30b9ac1ec265737a545bfb50a16e4669eb7f3a64f80dc023bb7f5a371935dda08270c8c5bb1d8d892b49f0b0bd54ca84c664596c629513cd9397983fa4384dd540eeca42d1b748e53da45689080f43f8a3527406391723241c14f4b55fbd8ead98d9227e77a925ac992b7af3c67b7b7f9035f09aa164e336c06df1500b94e7e4e482b74259b55eceb4e930b4ed98b1be498786d88caa7de82d9d2d2e6a52484c364b7fb0c70e2378e76958958badd49fe4b385b8766f7081141d27618657d4eb65259ef50b35d11e284652e8beb2da52b2ebc4b13f698f3f06beddea15177044f722c2677dffaad5ab309f00b306774bdf668592caf31af409d782b2650fc01de6fb0599c2bcdb2d92177d0633100a7168909f2a90eaa4e373b5911b50572050d0e487dcb4d159e7205942e50e521469a89ee3285c121e5aef986c7017c28ad346bce550d7bc5ed8c3a2647eaa07e66733f0df078270a2983044e41dbc46216ce2f7d99a36d9682657f2852780594ec33af354c0febbae64ee62662defb33a2f13c9f5118b357154a2b9e53a25b5a4d644f96ea4707e5a8783f3c503ad929eca19e06793e215178673972e587a399e45ed159e3085305cec1849bb48e1a2606a89a9be372dd4efafd3195a970b4c5d09df8386ca47b771fa7ab2067d68225c83a3586b3b7d0f54629413f5bc54f63cce314a68cc8dbb48fe51efc75e69543fbc5967325695af8ff93ceb8e5594477f1d6c6f9ea625bc61f77e1f37369ded7f2668fdf87cda6735c285963e6e344f8d7b3bb5a5ffba0df216e87778cb7ac1e3d70196f34abc0277dd1e708e4804b36a4512a16eb33eee5ec18b6a31af1630df9d724d13f322700743ed98c1a412e6a0f340546cbe1f859b62140d5998f43c78caf95b8e6b6d9511792c4ebf23c497b00171d50071a500eb630e415389ec5986c0f305279a80839f12fecb1c49d5953b3c1f3ea91ad5f3594e6e01ae5c98b4142bcdd8e6b5632ba7e8f201139bb8d6bb834bf1391b38c71d2f04145665154caa3cc12f6753d8bfe7f153e917ab991fb590918c9102316f1d8a3b0a525e6c5cde3e728c3f26f28f2337b7fbfeafff1bb83dfdee153b7421a310b3d0ab4de224c508b917ea6643b9913d5e4d2d364e77caa686622b339096fee0be206702226cbef09ced62933af8e326325a13d2d6f9424a36366166bd1bb0e887e104cf9bc23b3d368cdb314d1f2c23b81ab1e3da7ea8e51e3c6fa6e8830af4fc95be12c7eecb48205d9f40f4b904520ab23b3958c5cbd34602e9107ad2b44668f64ce3f4398197afec22a324654b0c7ec5f4fb8676631fe8f31ea9d1bd3794dbe3a19b6f27438d9874d850e3127722479bce7bd2e8eae307f99c7ece547b9a84a7dc0c157a55a38de38b3aa3154f915c2134ab5663ae160b8956613478b87042af9523764c2c7d8e5a06c592f9ad77abe1151ab9abdb670e33e000a0c09049c8316763186346d050dbaa0dd69ab972245fb2b5694360d02fe95cf2ecddb95d52eba4f3c11d5b4cd585747b0b301762387850c3f89a4dc3f88364da471f254e360bfb8fe5da598e3456348fe00fdc97f0be0f146be302ad7a423bac24233b1e4eab4f41d61e7096c5b4c03b4f269822cf84e3e7ee2e0907478ff661165d6de46e2cdcb4973b63b82e55dbcfe69a25b17f02b3ccaf09ce6047f36e05fe3fe47941f573554daddd59cdd9148a597e01d17818fc248859556d850a72a9794d14950a48a4597118e4b5a152c74d6e685c6eec7addf0bb8933b7141c28676a6f6763751f09c6603bca4d13ad5582f9740847298c00868f677e089e56dc1efb895e53a7451059c66c1ae66c4a4ef89cc1b3c91f697d542c5223aa1e7e67946be07c5ddda84184c71bfce2e09a5b70ae9acdc811a4214e0c906890768a1c3781028bf8f5d6ec50f1d6dc054eb6c6e34b92fc7224057e97f96a3a14d00d7b8b455d70e94f33a4f8852efb1c30fa4e6dbaf9566882f1485dda7e4153c7f099db43495c7d50ebebddde51ed8897a1ec417e4642a4255d7ffa912509a77ee1a10ebff97605aeded84dc37ec11b6adc017b46de4fd608c6d7ea700f7e3ce7264f698df9c4660076a719498c462574e1685c955e277717a4294bbfa285fe529fb6b92f4d958ba854e3dfabd074cf6d5b27dd8eb0a12b413bc75de5756d1aaf7627fba96e8b5b2a3ecba98a432135cb22abf93bdcd7866645de11e4301fe20b3e2ab4fa057d81ad811e06753084c88d2157d66b834d080fd5b64b25aa17645910be11e836d2bab0c2f7feaa7212a9813cf9b75f0544cca88823c92a9fe957afcec338d04322544584ba973e1105b03dda35168ffc87faa31dea48178121a5536f731ed99dd4274481f9fb673f194429698915a9562454b552098118b18141fcc086ca9122129dc07caae54e9b2f33a41fb34449f522f7cc57da4f7b5e8655d2b6b60d671321816e158594ac4478a7b58248fcae95bfbea3b60c6fe517c5ad5a4d1fb0cc23065da2da68c302f05dd810aa290362f24113d387c8d5dd397d73222f0411b954b9c69b019c875da03ee1e661095ab42c75d660463432ed03959d417dab476282f79411656fc606e193fe21a363dfcd7ddbcc2813d765ef2ae1ca1cbb5d8f76eb836aa47db69a183077aad11eb97e9b878bcb22bf110a1cc6be29a2eecce9c6164cd281a893e91786c71663332d5ecc9b53ee2bdaf76a75803bf29010f85a47f592d2035e01df35cf2a24abefe8db95f6d1efacd867d851baee7e55995b0f247fab82632b61eed78e43efcd90c4d23ec0c89fdf26e0e49943b6abf896b000641d59b4e73d7119a6e3482c83c1f1c87bcbfc3414dde2eef46842050eac5a8041e0441208be2d04d49e3364d72b6f9e007555876d4e1b0a67144051675bfbbc4397bfe14ba9d255a6e3f7e43e3092069d299734a5c9051172e098357ec552aaeedca55b7bc73947d3c7d2863bf5aaac6be279e3e9653fdf68fb4757de44f246f8a6227f226a7b4803a6e38f0bc778dc1cd72832f2eebafe34649912830492dd17056d8014ea7c099c21e3bebc413b973af5418d4ae12d3ac33bff412f773b8346281a838990c7e6b3b6e557e639ee59f5c6494fda12212536eebd16f85b71208b875d2f19c5e63262286ec912b1f6ea60b3eb7bf90f6c5cf2f3560e4c0464502260090f23efbc5f70543254ede350eef45807d514845ac5c3750658305e130ad49ca590767472b384b0141a417edcb1acbbec3c3420b6914bcad9504c2ed95d73220ccec4e8a336c34035515199cfb8dd20b2daafcba304d764ae25704e11c998d22a51188508a2855d8832f25946566d9c81be0dbd7956cb537a01cedfa6a78735b6aabff3055693793a5f2f99fee464f2e41ad38b0aebf1c971d35e871b9c85d0985e5d4d46a1a1e6cf9be8a179599ee156cef670bfca9b3d20d843c3479a077f12c287ff0565542acaa331507ca42c4e73e7fd7bfcfc65ef90ea7b0fc570a15fcb42f2605dc104b2517039c58c9faaaff426558bf8039b0846cdca836939d32bd5d00539f9b7f515c18165c4a5fc1ed0dfa75c277360e7d468d8451ab1c61c081a28e42d75c585d25d6eba1d1b40db804aab392895addb62ff73ebd8dc673e21d0e11bf39885284543e0577e4c52ed4c769c495bc223ee29002d8071987606f049c2f7b8108ee6a822804da7f4b6439e4fb456f50f764fbbaed77d581222778826dbc54c05cfda7537f3bb525875ba622ba0443401b5c57e0e37c1507dceab7a8b1094bab689be4ee95c80d16008c50a5f26483f655277ffe8409391d2b7d329dbe420a97b4084e543841eb281d0bfc595f7a762236864315c2068950d526e0d5f408105891704eedd783f617b1a4a421e921123200f1e81044a96bb4f13b2a8b379f30355f5412e876f7b50837022fae6da1c8f478fb82e1b926ec48adfa41da48a1f56989c0c77fb4d5433ae38f680ce792c7fe698f7f64cb1bfe47791d7b8261cac33faeb24115748869e9af75aeea987795737718f77b0fd6467792c281c917c8f0e9a8ef4101172457bdbaa2641c8e4f0fd1c350867c882634f542a1678f9f9c755793e664949d5f67ca0534da8ac3507ad370e106eb03e5cfbffba23fc8e2249921cd834b95b22463c3c839bc2ab3e2ce5f26fd05bd3dc3c48398228fb771c9274fa36282f0f16e8f15cc76be37b081aafcae9c234455ae13a3d83438e5b3ac4ef59c3b340b5fb1cb5c3686583e4f96e8b9f01e4ac15c2c999f2ef2a7a89bcbf2fef37973b0770a31a3c74e9a5f9035dd64b3b0ce45e7fa87b3e6119d5533f94ebaff202ad82f6701200946e8fbd7c3e8bf1549a9c8c691ad1c7251c03cfcf64b5283ece66cb8f299e03e0fddce599ec98a42d878cefaadb4bad3eeafb95635d4fb026f575f5b805bbec89be16736c9b8d4a648d4c8a678fe68508b618398662fcf28ae74dce190301ae918fc367fa9c7d88a2b1cb18a735b4acf9c040a8fb9e276d2bd6bbcb9708376006d6c70b206bb08fc54b55f4f14dab36ff3d01806d6c60f5c7bf5290602aefccc8b71b7d9f365b84f74f9b89f7ddf7cfd9793f1b6ffe9d8b9b722d596ceb21ac1094ddf2b90d0fa629544bc1a95956a4d93ee13e7a130c52a895a70723664f7a5d4ff00dae4c5c83807259a9d751cdc3bf050721e9c1555e8a59c02a4d583b2acc134a259d2ce259c09436efcd9e2f8965f3cffa1abfbf42848b807b0ba7d384fe7b90014ddd6d0cb2b441292aa2d5063be7e561dd2fa8152ad69c03c87c8aa7ff6182bee0174a694a5c83c916ff804ee9e776eea45a57d72da211158218e048d093cbb4dfba96193ecf3ef14b42260d018f3c2ee41f5af8575e684e2212c7990af892cf3429b3ba6b87e812bb0fecce0c0bd38771a83e043310b0e4376ad99d70f38999e094e0e0c95f0885b1538cd48593a7c3eede622e7745c6ce066c11fbd2574377840ce70eb4992decd1207c682d787668a4ef8e5233f5546b8c170aee33ccd536b2b298e1285476d573c636c09e75c9358e56b179de6b8c29cee41ac546c0bcdf589077a1372d353904aead483a21c8702c42e36cd400abae2a073c6a8c499af60f3063c056352811945c164220a49951652f97026afe0f6e8453bdb5286f123cd8e043a8b07cba35f7bb6f1f6c237bba734af3fb60d26f39297a2c5ae001971f4484900cd6fb699badbf3677058785956cd058cbdda9cacf31b3bc7f63fcb058ec0e91a5bde0644d3c7bdbbd07389bd7dd6024e1883e44763523c974cb224e2def8a587dd001a7c8f96adbcf93ef5adaf1e9b4de101aaa3c9d431e1ab7d91174788ba0fd5632c0d6fd3e9fade24fe68ed235fd7fa29f742bebd94780aa1eedf5350e2fdec5a00f23cabf86f994607c4b6cf3e92a7e318d9fd75c39919b955b2c832f7662b79134471100bdcbb1e9c9d53ce08fcc723ab00c9e148ca4dbd32909b63adb5d254c1778c9a7f8959282907f1016de726d059b2457c07bac1c45b44b6a9132a98f8add877ea49c5e612462262def9d02b65723f38ba5ac6236d59ed099a9c255560d9f8b90c97f2599d5a5bcf8182d162e14d05121085db2d13acfd50fb89638c6d00584a0b4161e419be350ef851ddce440655490ff79530b0236c258e1e6d51e3006b6bcefdea1aef6e6d9eeb440eaead44623a6792f305151a3d5dcb97a48248b46d175ab2fd5ad16954fe76a061a836b6f89c0956dc8f8eb8e8eb57f5a2a36fb2c966c96d64b97e4f748f6591b8fdc71d1c09a0ae128d6747eb000db63a36effc5d3bf3149b48b7b6dfcfb66d74fc45b9b996fa19701988f6f8f790e050e03315596f8ab0a994d5191e6a6fca7c1b8c997c6fdadeadb4f509eff7df04ce03762c4ea7528eb330f45ac579dbc411c1388fc9ec1fec6a403110c900c1ee395c10b33f589fd8505cf641033c738ee2a31e5ff76a52ead0a91e2464fa539b883286fe189502304a5339034721c79d9a55112c61451156e03a3ec5abed1aa1534ad631b431137d54fdf67db805bec2d6149cc54afbee5ab2a9eab074b5897150372b285ce647e29ef773cc2719b8a4cbb2cd326c0a4c83d142c587cbda7bb5571b994c939e915a0b7db68e4fb3c6e0d625991cef7f5cd365baac02bbbb8ee5be8bc4eda56c6c76aad3888b98455b471851bdd58a03ac7cd2dcad3d8bf91174fc6ff1642c89e4dcab520a86c2126fda7531cfb6e38cc20c8bc41625becacaedb0942c39db332e965e1df95e4862416b149c6915ebaedcda853b7351e2b2826b8e6e477285022e1179e1adeb326a0929de968dc069f137ac9958ece7b9d12d4dc6bead1aa0b8d874e0c5ecf8794c21a0d73b214ca3bc3228d7f03898f11f1a586ce6837add3fdd8f34e3936627bbed4371017967a486367f443d06e8d728dc5e6246dd12860f954e21bb472e58e637c276f2e0a977a7a1af9f4cca15a387ffcb09929657c102752812ba8581d43a84c30e1989375856273658fbc932b34e8fdb09f77ca51b49215d57eba1b3733a72ba98671d35b6181cf11663413fdce5165e2d7e63d2337c0ef11652c74c13b5d02cf396c36c12fc2380c6cef85f56b1f4a6681d5b624ec0d7db0f3e0ee3d5e443a82ac83f2eb24273ad89a39dfb9baca69bc947c41bd00276de42e9057575acf5fd084aeb4545cecf405aa33e8200e36915960688b29bd2d31798a1ca75bdc5bf9568cba07374b32019139581499cde7a506d48d581bbfeb565091a80c2236b1af7dbcbe20fe9c9fd8e1de1c5c43ebb2e2f50e701d7c13dde7ef02916a07ead16538d29b6918d75540e243dd77d693fb09f596e5ef635470cfe58c3e82ff888fee85bc2263aa8de71ae4c6dba032d4f8259c653ef5522bf6d28004beddfe227910bdc98fcff93d2b2dba54901c349aa57b74f0a8c1d609df12d28317c7c0797ef969248537e48ea5a96e6eacc96f63c9f277bc60bb05d0e9ff5ff37b15199f9f774658716a49f814fc56306d70eb912a96d0d901c2069848c4686e8da8aa62965889c49a6bc6d969fb8b47d6ba042549bbfeda4fe4de01189838a288e53bc02e6c066bcddb419638aa0daad944554279a136f86837dde9bec6499cbccd59ae79591061d89a17457ef923b2f562a8cfca69e1c6081b99ab3a609a24cc3f80e5ee5330c263eeab0a872369e938a3c0d3065815582ce93ccc98015649653eb6a89c2116f7462d2ca216953b9e2a43df131c970046f66a204e34429c1819e0ffccfed6542d1198a3b8a80e3e2bf52faadcf31576f79b278fdbe0a6b3866ac261ddc21713b2e5ccd1eae0d5a6919995986880cf6c0506d3b783b47afc2a9c45cf73112d5617ff528d794738357414a98935fec52ad1a66f55e4aedeed4477240100ce3fa1dbdf4fe9027e96dbc93a9d67115dfe79419c1bc871f7488aa23549f88c013dbf4dea0fd2fde2c50212e8ab3f0dda91160a7df86b28504a42eb5b0eb632bbf7a39fd45c778e9edc44e2f977ee915ec353276677105e37069e638b5db14c80d5fbf58786bfb14a40b8890a0eb2e412732da6641e5d9d8aff9671bea2805e3f146c95bb3fa071ee8ef1a422dc55dcf288199fd2d4c290756298b6faa9220c0e7284a6f0bc3060cc4f18c20b853cf3f7ab5e1f994a529e2fc6d999b4a254118beb9d7dc0b63e9be3d7f9f1a6d5e2a69f628d0a07b85af87e9338d2f85a91daac3ddee968e74588dbe040e132d4d15860fb8bf061c123010e0449453ac2c48aa32191a71f03a06a0802fc2c878918ec12ad5c5643520e2ff6999c1677263b163651c1c4f171d8477b40443d1f0c8e35f15d28aa3fffc2ddcb3166b67fd20d9cc9889f683411edc9372d64611e3151bd7afa62190a36be0a6627c76618d75f74c00f72ea1b0a3f8e1e2dfb79d416826bc9bb902907fa1de8643474b7b98cbe64f9f977e2d8dd5d8b4529198550feb81eea838d6b57f9ffe64bdcbf4b557fbf411b4c4c4bab42a624fb5cade3685625c76e228d8f630a9b79f481ac3bd41b215d8b52f4915f3a1aac931635bafa5e4c9700ae79799c93cb71b215f9896dea7665e0624a991ec1400ade79277d007ec4c902939cc0728e8aab85fd69cbdf37785e8ba5b6fd89dfb270ecbbf9641b05aa6167a0c505658913b7cae0222cdc3653385da380559c02a7f217bebc6ed6c5346ca2dfbefa0978b71e5f9d92ac4cabfb9d7140a3ec80fce336e319c8ba2a89463dc50ee0668d240ee9af2f148700afffbacee149523ae82e810d4c3d3f4f57ee2d91bfe2d83a6fb4bdd408bef25cfeb7049f6d18606ae14207ace7f3ef11c0d529c82dc09ab2e9db390ee56ecce82f736f3478b12ed3689d13653a431c5415498bb4370bf15498175bf977073c4a388733b36a009bbdc7a6dec0e60fe3de4bc8896d801e94d936a5f15e36a6b998283bab6af273c14cbe37369bf886f315a5d7cd3e825d806e05f5ceb9d1917a97945097bc16696fe4a12fae274feb79e977804915c6e089c87b128535406ca4c5cf272b29f22a0738873f8bbc32605777c9a3d660bce670a9444d438153a6a16e77c853c2f317f434e3687e7082d2495d2e8f45be860a0a13e6bc100605391ffd8c1c37d8c4aadbcf6159119937b066db7bb367700cb5dcb3fe3735fc7f0d24242bb06b9ca6d28a9964d591f025e9a3b7b24caeb22c2608322e3b36950a4d29bff35f4c4408b61781aee9a055c77ed75d1277affee2996433f065ad6ec86e921153dce70e017fe1d4fd989e9e21c533b40aa23a6ae43bb2adf4b2e2d384661ed79aa16821f80e9e16336d15160b57116ecf9207f083b4de137b6b3efbf9e00ecd05cac06b0b3ace6444d63b3d691dfa45e4a16062d3af41bb4fd4a44ea03c05a3233e9476ea30ef9b246a6e9827e25bd3f27e7f94088cfd51b9b7332f0c343d6bcf291fe8243a6c61a8298ce56ae195a06070db26cf54a457a67238eb5cb64dfb60aafbbbeb50ff2db5f2282d4e78600a57b951ce299caefa43ecc1b72a18b474ed61f3eb8053375eaf553b214eb384619917145bd7e4501d4bd8f5ffb623c4793fb1e943aa813002613ee579eb9fddc27198af84b172f8597228c00315f20fa8ca250b7be5451ec942e01b7606165493540b0505dabe400b22ea989873145e18fefb37f5e2bc879e377b0c369bca4b24c872cf7f5e0d5c10653daa77137f442da8920d7ee8eda759e372be9894d6e642a4270a2e7ba27690f898a32ad30662028c50cea3b39edd4c3709251b036b52f7f842ec3dde1a96f3f13e38903b4f254ec4c75543bc2256afc6fad1b4c9b41b7739c94ecbd57634f259a3e11a7ef0bafb64954b3151078245a303c1f75541d7461708f53bd6077e2c63b03593f97824924af8dc07f988151443878ecc3ae71718a3e009cf986e8361fe0ee8d7d60a69696eeb4e24336036a90ed54859b2974bcce4e4c9b2c2328762cf2ed94d168745bde271e6f4fd2f2ab081181bec832b935296d35ca97e919cdce9ab2b7c1dbd778a60d21af37f5b53bbcd1ad363405ecbd273e46e1bf6f2307701198ee9ba227d3c0a80777b12421872dbab6b6fb827a9266feb3e9f8af498b22a70207d9b60be9420afb3e543461dec3563a4e7193c4bed673b4008f97cd143cd0c81a2037d21ba1c63c97dd38dfb27c8cdf18477bf20d0c3ce9c43b7e12f2dea85d43564010f3bae429a4e461c513a9ac823c837c5319a963941ad3d98eafd6467177c8049a9f8acf0e3f9aae6358e658a2a830280331f912a2f6d235ca71e900778e8fcea2d1387489714bfc15895555f031251650b9f26f2ba4b6c5f2b2ff56c225acc632d60709f93dfbe46821c3c53ec9965efe808f27395ba550acfda8586fb933aaf676d5e13ab2b1f39ddfc971e6c40112d4fb09c5351f6e8bdb70e4234f77cda9b1a3d477478f882dff66f54c986edeea93871421baa0c7873167117b8528da5748a95aaca280fe71a3a2fb1af966eec40d54cd12665b1fffc41da66d025de09831494f61f626f2d2f207c0497a58f1bf59912df6f7cf80378985f305a91aace30173a8148d0ed7bae89fbbd07107d5261c16680d1ea20e9aad309a62db7b37fabc7672e437889d3aa993d280f7c979694c352fdd04551eeb6ca8f959ffc83bcde662e2e31c6680af7df0f3e4961c738e4dbf193662eee5d51cfdb04fe9622f99583d6b36e749d69b17b3c2c52d46deb7c6c1d1cab18358d16e739153fbb27235d55193ac23c20651d3494bc8eccb53e97aa10894284937c04cd20b2f4a9abff27be27e21803daafe14d0240ff433dec940b24e41e389bdefff05fc0cd24b8570766496e9d9e9ea1e6523a54d7e4abfc7b226a3b4c4e057834063bddb7553b3480a6bf6264c568e30e572b7a9e691e2cfd62ef2406b26e9e83d686d08aae0ace9bc017f544024c97efcc857ff509aade5edd12e55c1a7588d2510c896658df8398f6171bf24760e07b93a3eb94bdd38e43769b9f879971aeb2375ebe60b3697ee4c0e514e8b82ea92fb1024ff09b5211e96c38413ec8c3be57af123667f88bfbdc1d23a3a8f0ab12e39b74dec3cb6241fea0b1a3ce53a99f4529c5e51b5ebf8150a14ee00ed3cc3b0464e722b28a65e94077d04b21b9ad25972b430e2d2098f62c99eb03f810cf0e62aa9ff621456d6261c15c0eea49f06af64cd463ebfa5ceeca8cfb6b66817cb5c6407900b3ebb278f7a67281fe25a89d3fc059684b1bbaeab0d8e023e610b4c71e7fd81200ce6d8ded92e93473bb81809330013754f7dbf7554453b0f8331213e442d203bebbc4fa365f4888b34a656166be86f1e6e91772d2584e2d614be0e066e5d2cb63b4f5cdfdf528aedc50b5efa04894285372d16065db4e0e502f783bbc83475bcbcb1cff83e10ee501e832c22e5251680406e054ab3da107fad72fe4284c16fa063a0baab55429a762c689499e9cebba3a2c24e6be095f8b63a3dbc16e041103d636e49ea004099d6e9791e459920e1846e788777f41c89fff212378da70357de51bcdf5c500013668dd214e4c0c4402e822c04857bfabaeb6b4a3604cd8f42bd13c0de04043510beddc693101187e655b94d9d07da31d23954bbdfcc69ae598067d0bb0388729ef195a44402f474ffda0e144fd014d5a0e53139bcf0c224ed6a541d1bef129b81a9dca11dff0edf5c3f3c413fcf020f41ec3a7714e2856577f07f1edf82691c7e01d98bb09c10e4c70086d2f8ad33eb6a50784c2cebf99d36b71a13cf95dde37138082ed7007568fafe3a49dead38d38b3ddae3bca7c1a59577ff32f798d99ff22da84bd1d6a65377555f7a80ca04f51cdcf155128882f3874ce7fa6efd5fc2244c709ab67585498dc1ec362e14ea3ea8dd484f108f2a23651a170256582cccbc18905718a7008ea6e784c5db0cee0d4e94bcf0900a35acdb5013dcae5cbdc26a8c1405bb0ad98699249067659723b041f7f9b5bb9443f1d7c5181eb764edbcd8f97d2006f29135f147aa55fed5bec8a4ca3643596921fc09fa05b4720fe98c1bc69ec41270b6a4b734916db703063c712aed61ee8dd822dc07986b152370ebd5be86054e744c12c0d39814aea7ee56617dd23fb783e4d0a51fb34bd95624fa11030c3f1052299c669e343c5ed58bef0d3cbe8edda228b60a34e74c0a7b085666feb47c8c54d3a3e233c0bab8275fb1ab605e3f59575e276e8cc2bc9bc84b0e5e30dc9d9a56e93f441587c51ae0406c478781878d68bf305d32d6fe241672bf9e457a8d67300878ecbc8a5946bb713b72c0487e73d2796154850b2495f37204cd8c8ec403a00bf5711f63c0e31499f2c5a240a9316c5d71e0c0ffc1fcb812035dbb45f4f585f2bbf87c67621e71ba625cccb8dd3d98f1953d2e22365d5715348d883799af0a38acb7334b3682d9379c6847eacdacd67a538881f4ed3bc67131bbe2480a9fa18e69fbdfe34dbd3265ee2437a046d43dfee1f24553b8610b1a4bd865e2c686370f6f161f87bf19a02bf2aaab024550cbbb5f153b01d3bcfd08a1835d674a815de331d3cc2b18968cec662ae2406d7e410939d41db8cc518bb634a5403394064069bd96367c5d74daa67f4a5e29719fa8c0b0aee8c162f950bece1be2ac93cd43fbb67f3eef4b35ed2aba0fe41510505cbcbe948b37e0e2e8eeb20527bfb7b77d9f5c709c738ea139616fbbf42ac79000da0e3613a931d99e677b87cac47bdbaf5c32973197f12bd77b541e0ac77122fea7e576b52352bea8ccdc7fb6ef03c61ef9427d0d6785669f8509d3ebb5fa2d8f950876b9e73efe706d30a0bf0234fdb618978699eb07796ee5133a630cff770f124554ee77e85485b265072a3ddff47e82bb540afa8506c10fd38ac317843277cfbeb0cfd048955b24555fc7ec7669c8e9141042fe050261391982bf7c8e761ebd058d1652fd1ec09175c18f8866db62793c4da32a72123ecbb22d1c1d90bd3749c421c6fe23a35896bbeeed88a4dcf901204c8910d95eb5dc6dcf15d54cf71ed925dd55cca98cece2115ac0870cb05e362c42bd8728eda0fcf9f6dec41dcff7e128ccaeda6e82204bf3f142a78a573abecfbfb6456013d3e55e7f56dbdba4ef3c30cb1c1ade20f9b4e99b08d755b0efa3e3a3367c195aabdaecc81bf7db56489eb9c9494da6e0cb2f2f14f36745f51a6f05e6100d810d1a8dd53cb36ad943ce48a2e4678e797f987006037a27824e36a62d26d4701e837a9524cd2c6f7236042e3a6c97e35ad7bd6d952302f482e4170e36b4ce223902336b5f284b19421afb7123efb17507d7d526ee5b8c36350577cbf66ecf8fbd47d1d60bb64eb2289c38467c53df765dafb690a4fada67044534ab9e0820003c05f549a41cade97459edaa78f0b1b3eefc7ce9f1086c02dd13df9c978c4f3bdffd561337dbf7fde5904b97d35016ea4a9261aa51939c5dc7d2271da5f759c2020863a10508f719ff51af071171424b21d60f8194d985596d458f839ce44cda3c9654de94791029037b89c31db41890607bf720c7559c6b349e44b13e7b363a65f19f2608db994bd16aee263f9dd48dc8362db4ea6e0e9771b05f6150db91c1d85120b8d406989ef39894361289981d2ef22de8ea04a1c11b659023f5bcbc663cc0db85eba431d676d50b1ad4d6a2d441cfa9a250635d24805749dbbfea99e413c66dbfc7ee54cf382f1bb7ff343c4e3d3d72293318d6babd54ad844a6822efc36163fd2421755b7b28583f63b9906b13cf41a18bca3f55771b777836dd5aa3dffa371a7c3b02e94221dbde32634668f67f5bbc420d7b73f5c8d2826b2422b7d30ab61def3e17dd56753c1e0abaca17a000d747c40eeaf4d5aef66e44e95ca6501b5b6b7d497ca54450e8323774cdff3975642d71efd6d164115b5a52061a851d4f1fe273941597bd5ce9abe2a855726156c8e291665da249c533bfad6d31816cbc4b4f199226aa92ee0d88ae4316e50b73a35f0f11280fb423204c004366e112dc02d18eeef76ff8fbb0c002582b4ae571d8cb5bcf4c1d71b054f95198d9941fc8c6f90143230546a365a59150a53b101a5302298a8e425751bc5b4378c7ae019e9f5f5f6b91fceb2bb2534d7a23fcc3442bb8f45bf8bdceca101bac27a5c6335e9cfa031de0bc1f52944cabc608db67e01d7d5db0699efafa7245365ebece712d382e886aab3323ca2b72c8a208c04ea1356b591ed0d586e341f5eba60fe45fa7d873f335b38ef459ade32ee7277115fec892d660e440d954d4b1fbdbb6de35ede8822207030b5dbe52b16b4f47050a625f6d4e8d6d1cf7f6896a465ae573339f00553bda2672b097dea0ac4dd0cbee137a873b9aa711c185270479996293818cf97a4228759193292360155513bcfc642f679bf30a9a39fdbfb8137eb8ec3fff706e436b7033948cdd22f9ab047e6a7bfd8815440c70fddd2711ae319c5fa2fef6365abbdc9e56e2cebfc34c9abf24113e827501e3457e4bacdff4e5a964789c70792c8f15cfb910644000f5584d454a1400659d3ed6b1b65b495bedeec0c632f0b5e52861d2eeeffa68a1e3b42630ca0e98fec9f770d0d6fdedf876c50ca32558f1598e0bce54bdfb3762653e66629e4cd2ec961367eb8c2bcdf5422f3d96eac1b11a75baff4918cfff9a9a1d0e2e1d89eef9740155f834e721b8e8d06e362c101325f6520fd5fa51a96140f103c76a3b7d821bd28fded56894209c95c30765398aaa6b7b9f84a0678d29d1bf6f38149a66eca798bf223c6bafadaf1401ad175d61537117d3dbf13fc7ec90a1e5007fa31f243e764657dc62b144fcaa22bb143ab3011a36004d241ba1842dbfac633b436b307f1a7eb2eb90e7c368da31d954e9869e9c5b3c03e8bc3fd93446f52586b7eb54c95aceaadd0d8155be917237525a3e685c748960c4d3bcf437397aebe0aa77b0c0677fa7dd686b98f41738886c34e77210ca936360b3cc1cb8018ff1a5027d300c2b4a3dd5ac00ead3b0861da8a81ce07607026eac31886148abd52e523b63908b345ca782d6ac6aebeccc88e862ccd93eb9dc66832b3c313a43f4f0efa80001a924a6cce6a2a42d80b2837c12093e26c66642544ab69e6248a99ec819e3e51d35102c3fbb51818333300f9a7ddc8d82d71b4f3dbcdbfabb7c890f4a11b461647caffce65dbf90bee87178e9d3a70e7e565f33964421a7e2ca059d9292ef1f0d1d7e2cdc7895bc994d9bd3908ba0ded5749e0365afe7d5af8c8fe54424cf6dd31913699df6d3e0f112e87576b61c737224cc9c302e2edf2c96ccf4deb75acf1ac71384a811753b33bc3f18feb019019e1606407065c7cd72ad10ddd92659b8bc35ec224e93e929697f6597838ebfbb2c0d55d2ff8b6649271e952676e1f9fb82e34ce253cb0fa817361528157d6a5198715972b35bbf7faaaa3c3f616c2620e1dce9bf7b1ead958cce34d6b6ed81769bf452890218f2bbac0dc1eaca05f4694dc1dc3c4d75d3caccde43b02b5eb9a367a069f1e76c0a44716554aade6cf0ceb4dbce133afd9454e7ec17a010995d8749482db935bd41c45a4cbe8fd22014cb74b2697e62d208dcb4c5af4ce48c477ddefec838403739a3e3f51034c5d3d6c146d20b0d836b28285eb3e5b9aa8ed6234cf52d15760b694f6520627ad88c3f1b5237c7233209950745ff42ce773578bba07253c96c558e3fa433d0c8d40c46a3959823117067b876d0a70dde7b05d715693bd85caa211264fca8b4fabac14d1859592c86c826a42de5d847ce460580de9cd767fb9c265a676860fefff7263560243805944098bfe26dbae4fec40978cc0e7a34c87d990515705904465e74a04e1adf801843d180dbc2850df42527f2df547704cf2c7ac76c8554d0ec485bbfcc708c09cd4b9c31bd952abb256ff6f67c50f481aaa1644191b55c101697ba1fac20b9bab7fd4ef51c916004d38a2044b44641cd924f040b82baba41a1dc1d09f0ade063608e731221d1bb0de7337b4bd47fefec3cb1ed4b3138c14f08ea69ab3302c1a77d75211ff616bb1faa7e2dd1f72ebc5300e9a34552aef6219f9079826dea26d5e7429b67a18291b0c0ed9376bd4cd701b04c8e264bf9e2efad096ce3339002acd236c9d97a49d7c2dd1172d3fc5626cbac2d9c0d6ad570ced023cd5f60fee44e265126d7cd784e76789640a14becd7d3059c97deaf11e488814f8b46749130710b6c7e0ded89189e8113f8f5b37b629d53bc5a19428125da70f8d881b3c1ddc2fdb960b015ff27d183aef51ad906d1a17f615362a13d4ca141ef9aba7949f767316e59e09da102db6260f77813ae12a75c1a834de3f27458b19726860884b5fc3f642d5f72b5df03ea2a225a07b94e020bfd2fa00afbb6202928de3aa6c7d08d49ab24ddfb90aa21c94fd3e06128b041608b18c0f2f3a92b9bf0ddac142e110a7ed7b81b53a03442e0abce95358641be5a867988de9784001d6900c6de0d3e39c61e129d3378952b72a7b81f95ed5d4812492c0fa54b45a2a1b6d806275942096a0b2f261a1388fc2ce5f812d036310a6c87f59d2e1b609d1099dbd5e7bb463ea3ad461538ba7931f9cf1939309e69b2d61e1d5bd5a9c684edcc4d2977401776db5b2fb421b537a7aab171cdad96a59d1a15326d640b2641b74bedf90ba9494a05c1ec25fa728b57478e75fa653173b69a3d384f754816a50346fe02d52fa176af12f2fde3df86e0e82220d5e836e1f6bbbd706bc8d7732af2f259f0c7794b2625a1f31e95e391a3fd221f60bd3088a6c522ef4a597e5ae43a3387de89c2bdd03c366754a4322ff306e93f442d548b5d87fcc95af7cd2309cb44a47b985d6c862b6b308391afccc6680f51762207b62b0897d716c5623e92c8253627b3af11383d7d39abf8d077863f711ad434a5c114af74381cbfd4ad66bf2dffd1ae7d3bbb369c479db3d38f945b5cca600836a593070d32b72eec7c104f679b86a44ff80cb3fa2a6b5370a6281e76a6b87a7ad070b075e3277bb2a44d323ddc41d67da2509176ab1262ed0795b0a5385ff65edd7a429a9e0d521fb39d74c322f97824705fd7677e72461a0be86598a90aa75871a3e3fbc2987eecdd4eabaa1a29c336dc4c2370f747057b5941916fb87b8b19785002ea16b4f5e24fbe030212bf1a7a63f24c3695c6ba246a22eed335a8a1da2f1561f9050072bb6c9d4afff1ddbd126a1f6dfc1f8aec49ac7cd1388178a823000d2cd9b645d5a4ae02d07d492c7bd66a4ec1bedb8bdabb4cefe5824aa11b05ddd099f01900376b26bb01f2097d6c5a5fa4d7ee02c66e779d81676e3093fd0b3a86879ba2453725ef0631e06e4c3f7b835caf9b4bd49150907a45341d3dfd1ea52034cf11b1f38e8418c33b0aad80cb0da51d4c8e4e993605017e4b6a4a20c25d2816c1437a57e1cd78e5452f64eabc6ef2cd58cd9f1436f895cc27d9e78724fb9af046fb386a005157fb5c56bc4bc9ad13a417d2d0da3b3c674c4fd2d71f252e98d2f9ea1ee536b96f1a81d841fbe82e31981f4df4d24b3d4e5d66d6c95974f43b842e19a50e66d2846ff588379c49b81cb5308a1f873a87ddd9682deb9eb4e51cf9c790c417ac4a2f43d38287384d5533dc6a1640753be4f0ce1d88bda7a9f1db85cc2747b7f0daebfa7f9e5030c6b33c11ce495298643c5965265c4a89af7be83b141707033c1fa87af3e95ea1022326557d660944502fea331f657fc9b04dd70d4c9fa2aaff5a9b7fa00c0e170012bebcbbb822656cf6c718777149c6ed4d8d54786cb8b3c742e26daaf655548dbebcf3c2640f76a8a0d3426b2d83c965d08845988264eb0bcd67f60a6756d999927453cb71cb0ff26caadd2f31b3729a72d8698c48938515d5713f92bffe3a4dfcd2be81cc5f58487b5510a12fbca25cbb5b9cd5b7c26ecf4de1b936b1b74cf2de3501e1bc3abea74911b8521d93685c0d4b70cadc07a53157fefbadc77f9b9358d55ce67dc36e524dedb23c1a8c8068447f550b9ee75eb2e93ab1b71b677163f03ef9487ab3dd4dadf9f5cbeb11fa3c5d6139d9c7b98e8e858e9d17944c9e1be17d5e5e1931e3344e5ef882dc06c74c58a7f95b40635971dd848c5e715f950efdb0745008bd3e381907732db98923eb20038aa2e693b75b3071919b0d37ad5eb56d4d71df701863d01a58205a91c69f9ca0d9dde748841e8a9a26a902e6d5bb6d7da1b09b4c9ab64d3b9778c5519927b536c2cd60cf521b8d543ac9a8bff3ecf69c74823c7628e6d548d74e08e7c9ed31d3ba637262fdbb60f59ad5cd6295b013e7e5f998601a28a35f1305b4e508e3f5c76e6056f7fdad68452bf444e1e93fcf440247b1945d143d745cd209626900f372f23c19d5081b53ac9977e4ae33dd4ef7dcc658c8adc17d9bc92e99d4cdeb561e2665c48d2edc15843ce39a6ae5949f905d4ac17c73d059a27eb9cbede72d7be20c0d58f8499f916544a8e183cf295ac335200717def73b6e1eb512080f420198f50844dd505f87a31b4423a3e99866ef0618fa4b3fd2c3c0ad9f770825f1c5e8d5d6b37b343983314a171212fb5baf8300fdabaa2b199fae00a99b46f9f4c101e1e5ebf16c22de53e6865f29601bcfbfcb9ac9db31770f0f6175e96bc8c720ebb61cbaeecd2abecf44ddbf65356af2a5de30f5aeed0e129a12401ed97b648f68d9ca08643bac806ef5c0dfb6dc1496c91b4b1e41106255f6f47577939bdaae270e66a3233d86a00b7dd0de61960ae072819cab41356d69a32b7571fe2c977469b96c9b52fceebdb49601a57912be63ece03aaab7aabd2ac5eedd2895e2713edfb528de18f900cfb05e42604d124825b12bce5e55869e2dd84084d1b79bc48738c39d42280b44b48cf9c85138407fce70d20bb2cec5050c0e0a263ee09a59dc5e12e820048023e754ef95bba13c475838cf5e451e16c1ac77ad33262a096cc0ee6e7cb76e67f6fd5ed95402d2b205a54505769f0f307f2bb04d267ca01ca516223ed97dba7a7c8023f6d66743aeefde5f2bf23c7eb10efc80f04d056dcf3e831ed930b0f83b56b53c42e8098c10002d4c1ce8008cd4d3e692f7df9f9407c01ccbacaa2eb4df1c50ac87cdf1b3389b65fed477c86f0b9d6aecf8dbe9fab27c19c9a69ac2787c68a91d7ced9652fb3986217bcf8969c1af1cd94a82a055b620b86e3f4b5ca432764c6bbc8c5909cefff3d0a5ba76485654460c2ffe5b67bcda8a3681051edd259bada3c47ad16cba387f4613509efce53a7ab6e6b8e57f8bb705a1c3e2b6be8b13ab67637a153b9d3c23dea50049745fbf4291c5cf70777050f4fc61ddc4c12bfa395b637aa01cb8a91a6d8b5b49f3010e13aacdd39fb4800347d80f32fa20b4a2e4a8fa25cda3eef146e66973f7984c8f4ddff2e66e256a2f1109fed819fad68ea2e0575d9c5d892cc9f61d97f4b67a48319ae818bcb6dbb1c6a20e3f320a924d6a45eb03fc835172957edd9725d3d73db450bfee74dcfdfba9ad8ae161389c99a73dbc821a498ff537ebebe0848747bd1504d2a07e3aa02ceeef11ddc1fc33561f4e63cfc259a4514d5de3bbf4a8b453c8e5bc9442c3d31c03a6e34338e827abe71312b7f89544afb24c3d7c2b6c08961856c85121d3c71d7a5241f5e3256c3d1be5e9d5b063e8839f4dd82d52e2b13973842196e96023b2da1eba120b55986d036505a618236f03d7a3750b09f520e936d5f65816f9cbc3fd342e05b2358d60af43b7310e099c62e4bc031eb9b165788f105cdee77bd3d6b0f7cc11e938e2c6c7869fc19ca6ba19c148b901884b2549bd657e9250951333f90461fef9607763cbe39d105a0243bd0958781b94b2404c5ea087e792dd5ebabf8a571b10ed8a20d3b21ecd02e3b500ea6c784414016ca348d8a36431cc40c0d561ef79546f70d2be96ee5e1c86eae7e42f23f4d1c458bf08e2c7c69daed8613dff2a7851c786d9f23c42b65de276f46825a6a89a16603b58a57a2ad8c10e909492f1cedac5daccff016f8777457a70e2b3acbd65f7182ce75668f78b19dd8dd661b4809dbc92edab984e5446b9ff8a028389486b87982933e86024275ff248dcb3381561b417623c48495fc236a69429b6df9cfafa7a1d9c46b8c8e0323d674a505a468fae782c82ba1cc32a4d3e806dc09341241b3f21b7856b29bce3c2263fa5d777b2ae3c8cb528b75cfc0dc9d4144fb8f66c86e3c266b470b18578665c89fd9fcc44b7f119de7029fcad58404a68c9e0653d3a50f84f8269e5d225e700d6f7c99d0c5c7b0b293e9f77282462e7f9055ab85313e1d672a957a99682b37d100cc59fe6a080e907bfda9a9497bbe6cc6e813de97f8008a95b6b7bede3252b38c6464d966d904eecbbb73ed3b944f9ed06ac32ec3e54305b8e10b606d1e9a5e8ff558b3521dece2623da27e833c9bf2659fc64c856a89a912b9e00b07c75d5f5e0483d97b35946a93fc9cd20a58deb27d7c7ae26722012be83e3a997296fcaa6c1f8bdb73896c29e158a742acf2e3f339ef4c6269339cee6d73c37bdd9ed7d54d85818015790a4c920e46706a17b050cc776bbdba1c56ad8db1104f6e51a976a31226ebebbea0458249f0511b0f2b9c35ba86281dec94b74acd5fb971f2ec9d36e7644520675c58c4857b0f1be363a1eddacbf88b266c2a29b1f3e29966042fd26139124ad1b811916512c23a057474d50a1ea535f21d24cd0ffe3e49bc9600a4f0d4dac3759f1617d02187381e047f44827b51d8ba4911c3928040d0844b373398bcc894e68dda8d03ba75eb1ee562ce3519c565f91fa9569629da6bde1e9cb67911b2250a0f47990d86e4cb24a8def0d0baf5bd6671fc54d7b95dfe622788cab0606908006af4e84b1129ca21c6e384d6dec9cc024779769d7df0f6b9915ed608663d3e6ca3c092e5c6e23b8dc3454bbe2bee7209c45d3a133c5b343d4e31f35782e89a496f9f47d33a09012b9cc43881af103e1bac0702d8a01ff0ab2378dd55c685ff9500d2bdca58a19c1e047fd71b187c610554aad11bb534a988f2ad739d59ffec63033838c86e99e0039f078a67380e01829fc12cab216437cce7df6159b21a59419face20ac482dba8e79d90d2bef3c3d66e9a327d538fe570649333cfc9777add2c88411892d1eb7fd9fe1585cf73fa041ae92ea07607f4ba35779af7d871a74aaea85fed62594615d4f2fd373f7e8ec57e112cc117397e451e04e274abc102c2c9e0370e1eafb461ef50d8a8c241f8fd3cd2397273d8d9872a93708afde59e0d7dac7b83616736fba3ea4803f4499c6d228d88bc29a226afc617a72bb7a34f05a6fdc06e46fa8384a7ed41f92dd16363a3b455b7f0669424310287b943cbec4f96cb3aa14bcc3beb7223900b73568aa8a7309568ef39424ff2edc4b8b6be34cfd42a8e2d4b96ddf4d7d14f71f82e35203df122783f5a6c9a1ca5064434acaf160c2e2170946495cb47bfaa4a8efe2976700d07a41c634975bba136809c2a9775e688abe245bfb9e24e501484197e9da7b402bb49267c8cb89f664466cfc1ffb7fa4a62c3506c94f8654053ef878ad7549ed62c7369ed4c646ea2372094d86949421cbeb15de3732b51932c675d4340c9715476d74fdc67a07d691eeaea6bc59f3b8ec5ca384f2249ba2f22eb08530864316c2a6a9a1234cf7e0474997ae1bcf31084d942b3c39c434a632bc8a3504edc6c9cc1fff150646274d3d0999e4fdce2b65abb1a181db2106d22eae70e27e6e8a4f5ffc50d9edc27c2f19953cbbae2ed265b8a254e35e1f93a749a23880f935034573ccddfa0f49004b596995c9e9e9964beec6a75bd4381d8c16c547f448d954e0552e806e4ec1e4816c4ae70324aa230905bb69a39c5bc3edb3e7ad8ee58398883d88e931e9a1343201915bc6bba6a251fe5314fb2847ebbd1654f9b7a3ee98dff2bbc41985d156aadac95734c3c69004afaae7ca734f21479f94bd6559ba58b5a7133dfe137908cb5199d06e2680c86d663a18bca1a23cef7d0fa65f91ea7c401ee674a1a4aa0cbbc010178a6f0bbe70c7058e09450ceaf8884f59b9efdfce1aad2d01c60ca9f040420027e2e92c782060977c0885cba31f91b0534d605ecbc335f165e748148a3426a73c57ca25fe5cdbb2e3b190a726aca1d5d5baadf96d6f2c6933e168117f184361890fb1d7f3b0fb6881abcf296af050b333375cb780a79d3284ba53807f97a7fad4d3230e10de11f606dea54fef4d045658b1a84cacb5afbe71284ad47c2f8e323f9f790ff14952bce78200c06983944ff10ac292b4e1f75094b1b9db710e7e871ccd5c27f685eecee0bf6ad462462ccc35a4d45422356e9d14e48c5fe65523388a28c7ecb4a2501bf3563dfa2dbfd1a2dba46aa0ca67a11a287d06d53daf4d10f018432fc0e500d66201364d0048c00a1a75f3cc474c5d1ea26f28c2a31fa032002b8586a095ffab03fea92e2f490ea4bddce6792890baebb52b2feab0eb88b02db298b7705fbcb723f158b28dfc02979a2985c50da97a5b6f6be445ebc88dcc2142deace1fc83fb6f7773cad51a1404b0bbe9655dc9aefbc307b1b6d2a78d3499a4b4c413094b9f79c58ec75deca38adbb6b55df48b2c8331e145ae7f129880c0bdb08d5d563e4c5bd841b1cbb0712aa1bf7c9332a7c775705676ed8a0db994c9aa32ebfa4f35f4c97fcecca6dd49aea773fb24ad08d1341131f260767604d1114a5bb04d72b49fe03895361c63705e38d4e0fb338d74b299ff3b672ff1d80fcf0dd09468a586cae6ae08524b23e76cd73376a931ad695162695481beaecdf668664c8ae73d8b814fec948e3379ad89dadc592b1c192a11bd9b299144d183e74bf63292907369c689a0ac162f60df96075a8313b5eaac1fdb78985acd8007aea8ee900e201c868d3cae9be6a4864d92d227a53a276ac08095378dc2aec2e8b1521eb3ac05656524c16abcc623e6067d2cd297a311d0772798c688815b108bbda0dbd139db1cba4ed015d1c55831c5deda7885cd40a5bcf23078dd04ec9a71c3964ba8b4b5bd71d7efea5b841e46d8fa25538429ceaee1d01baf4b5f066bf905a6db5486f5d37f117d92522dca35a72e964ea6eb9b10d2332e5987d3f467ec16e67e5c86b1eaf3d862f87a84bf45161589ff75665a764624c422bcae47b96b7284d439d76f8aca629ed4f52c61ffd904b70762884f7cf6c319edcd2eb808a388c0f551f35bd9025316af1b601894e82fa718c06876e06b5747ed789aedc82c7db2b5b671f389da534039ef3a8b18c14c45dd19ea2114f810aae33b977e60bea0ba90b89122ecd9d3b431a7eec05ef94d9d3891f39936174a8675d14ef74c2c0f04100bef941142bf55e8ca7abdf5fb7f03d9f436c0b603b2658ecb5d5e31a5852c8d0cfef8da74c2c46b7c7332cd3452d3e17d57c7c6d273c9a68eb7826f528d8b5fd08433c10f168f6033651417807b8d8b0def806b12374effa0e7599a55b82aef70764ef0d962334593d331cdf30246b6a1cf36b78c2a17dfc78120924dafc65c8a782c177119d9739f98ccfca64705b5509fc7a1094c1b901ed3afa75da6505b2843c73564ce49d1c7ad4e307d082ec06d00157c7a8e5576b90c0396f96fb128fd528fd6314da37a91218937dedef87896d11ab4acab3e402baccbd23318b0b154e7d99013cecdd896ecb5e17809e7c7381c0d16d1fff9b37a7f518919f1398eacdcd8625a700e619790419ca71df2906894d73ff45adf2522b953327fe8d6489e5a1a5508db9d6a7b89e215b4f307be89319693482dc98b532c645ee6108f4513f4bbbeba69a0ab07f8d41e747ced67840a6a8d2175974fb5b6b277976df0ae73211fd10bb2d089a13807a05766497a20aab5849e241f1cc888f897cd49e2dd976b8a92b5409aa53d7bd30caf87a98501a7c99006c5930e193dc36cd4c152c09a33d039a648e5ec21091e317b3300703f796e7052e957d03403b8bcbf71904dcd3aaa58fc41b5c044ea516229be8e886ff5527b5b244b075692377364869951756817d8a2e41bb8d6de8ddc6d83d487cf6ee59bf2aa924477cdea0c8139d523277f0a7fb160b07eed91c7ef0ee3290460475953415ae41b1e649f93f3d46c27638879d932c63ca81d205ed8f32e49130417ac65444561e3b041ca99b11bb18536a36d26b2f88e207b3341ac54b63f72088a62e98675540445762a20eb13571cdc110a6822e249f4ade8740624a3471d9f39fe76b58e4172e6f1bbd9c1fa324dd773480723fef28e847d77f1a879c683e2466c53f8bdf1e8d53f7399dd2c9851b5b51c1142e6942ab90365d15ce3becab6cb7564c1abe8d89d51cd33c50c64e389b8605cdc60eb237ca704ae37131a9b315b7e2d177ea7802c133ec2f704d1f1bbf8dbcdbcf40457753d9bbe83313e78abf6b28c6be10a7594943d136e2482c8105d9a6bc737c922543459989fee7d62a9a237d268f065336e2dc36581911c03c8c869c03b86977da65efd22b9a6b5a67f1c6ea6a332fa7590a4bb39eb9672cb0279b8ef8cfb6f4356acc90c52fb2fecea0f2950925c6b17869ac09a1e1897435d79d14d0e35928764cdb4f2de68609bf27b802e2a6993f739a3a93209659838676271abbb549e6966fcc2d620e0f333b94eab736576fcbed9c90764090d403b5e0ad574db3397a7446cf3ed5a972102d2a57d87ee349c493472819b62d3ac1db34f997d5b3c277e8d08972ee30158f84b42711d583d6c5f865998f5f503bb716c4333ac5bc5113f797f7cb9d241dbd390e16c528adfaabf7a8e189a44183d8256f9237e9ca29d9b69a8531c3d2e8dc41a1ec32460c24fa7042872f26799fd411f75c8eb64239cba4860dce474ae8b761877ca4647a15d4406428ddd38ef48e7ee807b1f018ddb3350055bb185a8f06bae0d26db898036c55b46ebdf5673103f4468048623dc8af1871bd595569aa72e35c244a7bf85980739232ec34fbbd88b804bbe7fc1a5131710e6b996767f0209d635d486824a3cd53fd5cb4f41fccbe8586825e8033a86c2de3dab65319aab8ad23cb7b55951a6816afc2d65ec0d8fa8c9680cf46331517f06f8d2dd8b4b23da4ed7d521e5714fd300b60cc48926614a5c021755eb43d2fc3d6ab802b9624265abab8c8770fc4128ea17cdd2bcbe26ff21706d202d5f683be536705fab17230dfe3e203a8cc9d36ecaa498b1507f980d933ef68c43b7cabb5e3d33021f89e378a2c4d29488b1a317c17e6343d28495aecd8bb15e8b5da10596a38d06f68977291154b99dbc6c8900e247bb981ba94b953c4bc6bbf65666d6f279c0d305b5261617f6e8771f4a218674628aa5b11f011f31949386efddd24dc88228a6cacd5806bfec646c0af76ba8ffb47aa3e648e108c96dd23adcc091c0f8dea5171d78435e8be660201b2a288259ccb1115cbc668eb730925d814171d37ba25cf3d4a5a7fe6f822b6a4a8e040a7fd3338107e4c4f07b5e17c2d60eee6e3755aa94de3691742c91f8440fb625beb77826c6125fbb1b23362599ccd7271b354ba782a91ba5c80d27323f1125bfb7624110f41bc9e7053aee8aec5dab432d9e9f920ba7a9fee8631f35f9b46828ff3e37eb4cf2a342305581a28fd909ece0aa037bf8d968bf9c236d556bb471180febc0f47141b37fb50db00f1fc318695424d9ebb0dc8844053ccb7bdd132828dc01941d18b1c8c35c87a3e140e4f2d48f9b8457fc7010eefbc32955311aa1e567836c86778e7c0a46f5d8a1f1d5cf42e001664a34cdfceafed2118cc44eb3032ca53bc562ed1e27304ded8b6111b295fb0f8636f517f0cc818f19839f2a92d701827945af6bbad661b07400762754d64b0bad306ad01cd09b89a9ff46dafef8a1bd3e55e6b21a909b67475899fc13e69b00ceed701cf8f17f5e74e80f9d153124e58084bb140c302aa31c2b47aafd819f01a25e283eef5498b510412a8221d4849aa78586acbe0971c71be7392885ee25b8914c23eec29f6eb6d647ea35582fb64a282a48f3a83145cb242f16282ca71a446f74309fe91edaf08f94240579f83d694b40f9a2a2d071d0cf67c5ed2f231ce4c8384ef28c63452f22365d44be0b59be33afe92a04b7ecd9807c5f7304eea7d3e22449e5091e65c3274735d494acaaff338af2d32711298cb22d3ca00f49fc3c07a421a7004b7aab5d3a3ac987f1d4de16f16e2028deb7a31ca73657899b08c3771742ba55d765b56b35c72edfc0312077e856c25c81d8e3ce8360da1deab397aec51517ff0337a86c66e6a59c5d100a9c52131279c596d64601fbf8e0c1f0d5c045f955feb9e6b38c7dd71efe96b4e4a6e6b75c781d41b01e11f59541ca9e2932edc3c6bfcddb16ebf180747f092b5ae96fafc600d0263d7d5c4796ba1aa1d96a170af88c8ad606b1482a0c61163d9775a5bc79e9d8e750a78a778fc65d84f4e85f0ade514bf3ef1807189b3950fb19156571797358f7fd30c02e8637c7c559e091e47b45814eced18807aa4dbcde81eeecbf9d9d7dc7f4a6277539211827c87e23647a04e52e76657a189bfedce9091fbfa608b24c9561d86c4767674d62d2422b629c28936e7fba6366fec49132173c007b0ebcdf2788fa3d2c4fb485ed81c6f082bcbc86bfd2d87d9286d252568ebd6c6f3aa99b24c5d8edd1201921229899127e7ed227a7eb78907b94d0523689056881286ebc62b863bb2fa33fa422d81d5cb81139641bc20b7867e6bd7f86e520e64a6a07c198fc671a63f2ac9264ecc3a27a6491aa0b7677fea236960fa33c438c31132737c570093af0f8fa252c4b0ea3f6119e02b353283701095da40da25aa43bd90f10fc8ae190097df948c146e5b16e7a67a61a1d9d62716ba7671e920203ce5797c0b166e62bbbf26e4c64dc87f8cc86733fc5cfe95af0734a028e29bad024e0a557651e5643f698abf0b0e0bd00d31237dfdb399c309f811b670764873ebb8415b730ebf0bc5ead49b63e8cc599ccdc844722168f11cd1566546955a1572c7f8ab191073a9fcf18883b2100397f279a72bf9a7691589de2d352243ab6150b466d1be4edaa245934de8b4492397d060cfac6dc9c635362fa4deaf267b23021518579ab26b0ab58688f282d5d63c646ecac187447e8aec6cd21bd4310801fe120706d7d1be05806d6f65c464cad8af4951ebfacb893442d3a9d6503abc4883e4a5800d890010fcc656665dcecf43551eb1e9b874304b5b2b33429d694bf45a5bfa4d64c39b290773ac08c77cb65fa36e3c7d6ea5ff242259fe13a4c945ee6d90168b1d345312dcb4b5c049091780eb46a6351021c2279a97ec4eeed0cfc38937a4cfc3bb3832b8af65ce2d9432ae9a446f57aa8d3809a81de72ea5963ba5f905cee0b50706964d318d192bc2e2de34e5b190c37f6ce48992bdea43ee937f262b5eea9213dd81c938b4cf0b18c6877e20b26750b9645177fbc3e7b3152ba38b380edd92578f756484c217bbcf48608bd26e33a23a882abf191192841a697a50510269c94b4a54924dfa7baad52f6bc1e04aafdbc12308195e794edecf979370544b5073e899f201b784302414c4d41364ebf647b18678322b8c1ccc45a9bd468eb9b973e594ceb376b32d3a1fc6234352ada830f2e4c72d87a9d4e7c62e4a0cfa23b6c9340a0cb14926d56c9dee25132c657f0e1252621517f938b942d25c9e545091776e03f1f81a2a87b8842150e3c62655b102d5081a724f81ecd3e0138f50ef5f8c4c15cfcbacdd37396084001c8426c0c818ce7ec5b6c32fcdd725e09b211d4bea26c89905747a5547ac1f930209e67735dc9293d4687bb62f0271fc13d47ae1aca4d878f60ead9d51dea1c864526c80693fcfdc64bf6f16476af0ddeae8f5cbb8997072636983e60d97785f5b4d34100a4fbe56bb55bc1db998fc72eb5c604c410bd366ec2882f4a63d30e3f96ab8a7b95c2ade681fdae2493e5835ab46c73a268afb1a24670507774ddf6a1a1ab3bea1a19154346b1c73c7949c08b56acf54bdd162a3e57c8ec850c891f084f938866027297fec13fca0f8bfbf1e24f84fadea3e4c73e72f597f6bd149d0061f3a87cd5bd1185edd3c02188303a8346d486230206b3f2e490cfd4451f80df91a1b0b8a32e21d740e3c92b736d6fee1c0877969d00bdf7a3438f94f0c58e84b5c219e72139a1809bd856e14a30d7e0be92e725cf9174693fc8c7b0f61d96bd11ee68ff6705012601d1649ff2a8e39986d0cc66346317b4372536be080cd00279857751175a3321a617cf6a92002eb2f8369a5d0588bb6e29b48368006353c71940293a0865a850d31aea7ebab365908cdeff98675248d5ec5348e9ff635e8aa70fc96781ca6911b1a867f7bbc37274e726ef8c61b9b477cd7c8b67e93ec1eb550332b2754942ec0b62bcbeabb4f63d50c1761482bd256a48d84f995328d097ffe7c5ed78b3e665ec04e473f0b2c89e70f356a6c17b34a751a3c0f21b3050e39b83508203f0e4bd9b0bf81fae94d2a4dfc03a213565ded5ece55e15ef1b4e969f37303cdc3182a3b12fee42ac55ae48d50eb17a7469f59d6a044aad9afc8191dc6b0cc44cc6896d9a93325c88fa5ec85d1946ad84614bce226edaa1a0cf7b465dcfcbbb40e197090bc7e3374807598e7ff383652951d761a3f5d3a8616aa8c9719cdef2f5b97ea50a2a32812a0b41fb28732e64ee9d642bfadb558c7ca62da85874070adf8a20cc28c24a547814d757e5089aaebdd21c34fc4bfd19e8ee089df02ddf30a45aeed10db0df743f1fcb21b6f0158a22c8ed7bd5ba78c72ae6b929cc0b60b3606afd960ea80300f6659784b5299103a07864094939722631bbbc854af061c69896e2a868501f81efdea8d6d9ff74f2ea2d1fc26bbf29b048a9fe73ec3798ba8cbb62b1e8901d9ee7463a5e73d302554aabc1f458a0e4ca6b3d079be9a4988657fcf9255400a4e0a18b2bfcb8b52018e02fbe60429e67f66b9f329126d9fb66ab2ae00a901a93548b8c161c900f5d3c2fcc57077b58478b4eba095e2256a61220fba90ab12c38348000490accccca51dee057134763b9c805916ad11118a8bf16f8095469b86571e11434b9063313f9752e6598f9dba4a5ea29b8e43be97ad8fb80d1df0f7dcdaa2312d74f9cf85c139ea3b573d9db6645edc290a538a4c3b2ff4a5e850fc872f3eb1b7985983b8d7d464bfcbcab2da87aef8688f412fd52d6908db140ebb82a20cc99e15bf7b54adccba1096a9940e560b1c1bcea92da88410ca408fda680f3314d054cb970c49ba61669f469f7090f36e13861626fabb88bfb880a0df877fd72a02739baa33a0d08ea5bc3111348a51ca586f1bb28b3b7e3ad7f28886ce19b33ff7814e48d3790ca5a1fca639a3be4a7a0c097991c92481987473153bb53357f0a6bdf4e42706d41de3507c7c19e2b8a006002813d3bf1c476bbfd4b8f60ab89efce119f40af237f71d74d4fdd7f82f3fcaeff45ac55faad615e28c98156b279f538aac8c6fd6d41868982c667f271c63472ee3b1e749d6bd42ea42a978a533050d2d0d053d4a26142a47b40cb9b875368743a268ab207b634efd4528330916e48ecf0deb55aa5dc2c74371d542edbe9420ada59e44356d9a587f08051b3c6be788cde6380d927d9af3257949ae01ddbc529855835680f3554c2812bd99e0828064871a6efeb5c2c379f3bca147f9806d22eadd28c47f95cbe440f6dafd6d36e3bc194300bc5653cd9f17c07805c6ab7865260517a0c7ccc143d92c9e9cffba49f5657052b6e2848f0a951be6b663bd120ef9a8772260df36900b5f31338f9f2bbb29caa69309f8510c05f7587ba6715113cfd71c9714e9562c46eab3fd58a59a3e459949cefc6376c2d4a3492e3a9e99130ea3784cd06bb81027572b99ba7bb96a037f983a017e422c305391ed4a63ec3061b4b32142890d23564bec727162ae368e7f72d40819df1d3b29e6ab6742f76c54e7c78fde52e58edd262ffdc71b7a6aad5b09ba1edcbafeebe3d6757f8334bbaaff5284c16b772c2fab0c9101da00a974f8f4a5c7b1b576d868190c56da5ab65607757bc272eecfed54b54e4bb5cc9b82e002d343c812a103d9496c86e5d0beebdeb4afa045dfe962a79c227fa2ac32b15cde81893db58a2f40147753998e6bf23ec789590139949e6443e14106f1bf7f52675d0b4f59736204b9045f5cbb23ad8e29dceefe6d097e27064ad0dbff5184982d7753ce2950773e525f2de4e40cc313206424d3483f4b64a843306aff03620ebbb13bd23a0ddb4c64fd4f1cb796e1a7076beaf8b3c47cbdb7f8622edd0456aedc131af86737b920200564046f466dcf662e13b6714ba2b5db7de021247e39102fc0b4b804cf922195565a4f4320808bb192ddfc6a5fcc6a4fd4ccafe1d1e928157fa897ec0597e41a14bb24c8bb203b33ea13ae8fed73c7a7d7de270dd8646e2cd8095e29741102ec97baa6d67f94faa5066c899a47173928827da12aa920dbe2aa1258b817425715dd6c657440bd0e0561ea6c1cd3aa7b269bec9c59e1d7417ec13672b717109ceba413b140e1778ac49a7081899bb6d41cb1769361038443d7fa42d4ffaf536673fd36295a770e026564e43aaebaddb25e31d8ec6128fd837301a7354abb86f2dfbbe39672e143afbde25e30ab38575cbab51d2719ff1b903c50ab3455c46ff647121b19fb14159c204a430c871ff973ac6f0a30998cdb3c313b4c69bb067bd97e8e28cdb81ec2336da226ff304c11921ecbebc1cc49e96ebbdce4992bffc58229fd02ef5aabc28ea62b490a0c10d9ad858cead2c8eb68517414ec035e67c4c113c6ad00365af80af781d44ef58504e9c12d0942cd25e7b2550a1f12cabc79cd1977661feb02d0a5a73c90b8fd9f2ecd80e92e058141a6a66268a6f5445d046425643cbaafb4dc8e713779719901ef08fda0c2a5c6086b9e759f0b1b81b3a77963c6a4a2184d57f71b8f136f0509747f8afb4269924bcf821f6c28f5a0b0582551643286c9cce381eaf772a6add69bbb9fe3d23f5306585f84f06a19d1e4dcdc10f0b3642bd86d7c1e745c039d760760eec4290bf597de060b64e23fe5543c9a0d82dc3759a71804c491930e908332f64404378e3f67df8b4aa428f5a3a358fab360bf5957710c0bd50c5fa534ae894b30e8f14c803017778ea1e27e9ea4a2a263af551c07f38dcfbec2a0efd3db8d584ccc15b9409c94070c0d3ba4f0f1d9ac44cd3af504d95a1d7933a01d496c7fcc172b45cbda14442aaf8fbea2b34179101f8f98a1a7a98ebd6565e316782f96b8cbf42d7dfc2a48ad3acbfbf2f5e48cf8246af8d25f87bf2819ede0a1582046607e9995ff6198821e37e915b5a0049c97ce67fc2dd67c489e6fabb2243394893526ddf520c319031b367ddbf23a51a6c3b0212c49317a585bf8049374b461d056494d069fe27d796f6d88865bbe4c017206bf9a54cb9ba40ff87058e418c8aed422e82ad7a51b0d0f59c7973522102e256ffc502850d16b5a6e0d17b221212d7f9910b0d577220214accdf2b65e1e6fa4d5b1fa77caf8477aaf11747485338dd573f67c181ff2f83d225d3d63f9f53b865891f3c267e9b0e8303f48c2f4695f82df05e7f94475fb29a803f0e1598089048136d48c605f06a712d98dad23120cc3a699b51b605f9068393955ae32f689ddd0026bb7563ae0d3a6173899827b9219f7ce9666add0463027d80e4c22adfb65d2a16af6addd9c1800dde33029be19e1ef4e8113f100a75c434a0936b0d76a6fb70adb8c79704b156fa288bfb5de98bf1a35fe74a6248cdf1a88f21975aeb8b63c2f7cbfe6b4b0c48ec1671365ebe7d7c7355edd854042781f2935d6c64ee81653c2b6df6c2c44ecea4611da107e931a6a0ff02374cd8fc334235bb6daf3932ff803faaa488134021ce857a8531b5a79038991cc02ed48747646f6fba99f47fb1148e06fc5c8d9f565743068967f9c79caca21ec2d158ca2864926af695fec5a4a8d59cf16c211a5806919bcd4022c6a58ae858b6d2345d734f70525a66109f51447b27117e37c0de7150e5203d7120847449e262a20e7489513f189e4d2dc6ac54d9e3aab59598e5adf61a0e7b5207c5b90b33d566fe7c6d499585a918dfea4cb04b4802a0a231340f22f4752bcc69955080d0c23cea893bb682377cccdb6f55ec97b863231d5024f532727a5bdba50888e7e109bfacd7410a7bf290dd8601479212a352011e69bea80ac8c35a66bad0df8018411425baea6c97afc1a3201f9e6ecd4b32d712e842eddf6905d50b98cbe3defc87d73fc797eaa1bb00b56f587a111370cc4b99cf17ee0cf144da4e4a7aedfff8cf5ed73b0d6353f4b3cc27db8811d87084b5eb15a97fd8f425550af37f6f4b986fc2057bceeef8812ed0647e43296de8793a1a484a4c3ae1d216b9076d5f94449a8785c02bb822993d26f166ae85a47aedc6d50f65e23dcbfd1987abb22ba3222fd1ffecdc3bb8ebcc104a0d5719ecaa85c1aee6b081e7c18e3b0c6c34a6f5d45396c8887b54957f8b96286b1bbc5b07625e71165c56f73ca6006d3beb4f375ede9c962782ddeb4ff4b5337d2df2158587e16dc263b4f446542397d08e49f4ca27e002966ff1ae187f639625ebc2f2dc3b82ca44df355bba5925837483014bd31650b1053ffaea45b319953684f9198d8c6a247ad269b02ff33504b8d4c155278fa15c374622605ef5ab1abfb4df142f1e79d13d7c6f5861bd2dd5a86304f075e962e20f28ae40769ced005716c8dd5308e3eea8840101cdc469ecdbc4eb853f28cb3af7221763f616f9b90ef2ec2b812c258cedf4f3807a37904fa4bfcea58e50008fce20a2b6c2b09dacc76b6bfe95f53a66aabdbc92cc90ed1b74274b8fa57f3afe1e28dd23ec875b3f7ab7dd4fe293d5ada7210a5113e244966cd5548081e79aaeb377862d884ad5c353cc68356b6e34db18aa9c6038d43ec2be466c63d3faca15073a009d356702d7fa6c1df273e54452f0670f0f41837549c12fbd2864e26f1811297565cf0820bc3daebeb6b3aa2983ba6f7f9957c6c7f8e53323aa96f20b746931189873759a3f91fbfa674791ee6e926e6a924f3cabf30797a59a1f3b6b707697c5df6fbcbaab847599aa73bd7e45cd7b4e4bdac7cb23de838033d69c7de54897d6453a2feca9298d0b901ae20f0c0602b0cb5a0161a9035bb5f532ba70be16bb958cb0e52316c3e0113faa8b942f7f8e090defaff2f1639abf8c564891d381666a42ba34d80f6db8ea54c51c8ce84b5e24c53294cde85bf1fdd767a0e49d508bcdca3956d7815311ab5d226bf71eff960b60ad2f8895d5954496520e54337e5899aaae9b00beb0037388e5185a4c97ba7ff10d699143a9c5f2330391a47928730bd779d524eeafd2de83e03d34ac2073013b19ad9f47c543489e5d930d37717b217cf91e4879b6d311b62aa6176ab04d59b57d51426d1ba7f3fe156a8e21907908ae4cebfd91aefbcc198042e538d77fa8d5d063f387e6c1337ac1046a6b3e9650a424a2dacd522485ef65e940d1ea74e1aae3a2ebef884d21d43b90a97d79e78aaf71c4b0b4e7a26099902ae4234b84d34cc7b6d1c102da6ddc700e4dc679a9d41f150683dde3f6eac623f1f9b71442fad8e65abee178ddfb688c3344f95edb8e21e2ff34236e438a33c80aef9f5dc8799f22fb92bfbe72c98b2834d008c3923b2b6e8b50f2717097dd1b1ef38d11daef1b123734973ea72d23ea2a35a6fffef1f75f4caba47b5a065825755c7f4570a97d056fdbe8a11e574a378f4288b7dc783fd0bdb70005c830b6a52162dcc7fcb35dc2d316c5877c38c5f8a092c5abde59986519947f207366a47bffa5989a5c374342ecbf6630bd580cc1eb42bbdea74ebf7f69c2d9aa30755b9500747b42829b184dd84a0b2d9e26f86dd98b68cff0897fae5aa4e25cede874f262680cc41dfa9d1adc354a185ac84f4422ced3ed7ba43bd9d943d94c883170742cc08bda4075a03242fe601a75ad0ed65ce54848dc4c5251b3277bd9fec3e3019229a60255d3b650bc2c766551380f1830b9c90642cb8a3b3b78dc64e0d3b10c4197ee23afb22014b6a2f470758253216ac9290f9b5074fafd5ae4a770875d5c29bb72374db653bc03e6c2462bb490603ec6fc7ef1d38f1b86572a8b25fef3496694edaf0368bc83d6bdd6c1b3fdb411a1653de7d006163996af73cda1273316bf6015405f1733116d6232fdf630466fddbff488bf97ec84bc565c7147ccac22f7c7c10396d5664268846127e55641b8fa7b7c7106691eb3a43ef19d52fb3a1dba5db715421255001c9253fdee6782cca26705c67c7248ca1ba83ad27af796472680e4f76eb0d0188d2a4a7c11d2996acda053a5ef1bd07c9b57a6da875bedb18e7b86ed4d21de95d398a5e49a6f8cf9fc661ff83cb40fdb22ad2a760917edb80738b33ee1fc1040ac81c1d7261c4f6e1101dcf579c8f6748d5bf760f4ce7eb0a2e6cf10d7ed786ae0b7ed0aa86b2625ce538616f6d712956502270b74399dc69a8e3d5f7fd1ac69b4bfe32e18d76e5d91ddae6bc67c55108b30e746ed742762597e2905f298800e65d09797244092dd14bd8825c4bb70cfe5cb4d7a577d237e157eca3e5eb5efe1a1fdbd277c6a7b2cf3a20f68ae92817baddac6c643206512caa0002ec7ddee35574674064c00912f377ec4fca7201a8c1eaf7653f18c51a00674b559a2c3490fd469db156f088d2dad7f45598ae128653444924ca06c77105eeb33daef119953e85c9b11d0f79a8158739f2d117b687704e2f764eb14402eb683a30d80eb107240d7a029fefe46ad94c8ff5642eb1cee694ae5aa12753646b43b94ab3fa50edb1defead7c4fc74db6c0f484d25791569cb59a5292964b185b205fd3efc8f82a4e4982600c0d908b79477df43030d6e94014284a0ba1ccfe33234771a7177bcb43ce5f9190d22c05aefaadf9b47776aa038146afa56c0bade080c707061f64e2848ce266f502338af906e77478c801898c0d51ad0daf47ae93588e5c8a42ff6e40e5fc822392345f3ab410d5c5468810ac76a22c14fbd6be053936acf429e19838bcbb886ffb0ee8b5b6778ee05132be92d0af2a82a47aefdf666bc1e653d34e983f98260302b53d115b3798d5d564152f2482b5968684ec33debf5e3cf71dc6af2e5774c8ff360205e8dc7256f9529390dfbc2226ae361ca0605ac0ad84431364a84673ab02f8222f8aa47b369fe1319c40fae7ad508a9c07bbb44a0a37c4a3693d67d2296e30b2a282e1cd7a4dcee79aedd4fcc5bab39ef5cef2982cd010506574731e0913712eed4bea3f3755f833f3ee3cdde75b3cce6f95c82f0da53b1c690b5b12e9f16b967d321e48f136fa57f3dda0a1d3b8916817398b3ed0535c8d16d65da28cd6114c30be43e13ebbfa32df74f92701cc3cd6f7cfec6ee4d079dd5bc09c070d09be30ccc861f374c6aebdb0ac9b168d8ca08e1888d132c5d7edede6920f3b4d38ed6d19a80ad4f340f771b4d2e01e927e81f435278a0860deaf4062fdb6074f92e9aa4218e51e356351fc1a104c171781c9549143b2f90c9cf7522245ebbfe26e280a804b76b5ccb2490bcf52fa568f109c3a2acd79b5d95f8be6fc00e1feede71b0016de90805ac592f70d558d56c582af3a1af79d315dbf97c979ae08798a7cef57e5e8aab64ec9c841c24f1f0b449809ca7b3cd02b4aa7bdfe1d9ab4f9f7144fce05ba79e1b1753c8b377bfa90bb28996ca3c27315e29d7b8ecedb8869ec1aa2f933e61a6fb5a6d786b9a0330e87d2909f44e20d61e1e7fdae42c97607e78a95f9667b75c84033986f70f37a9681421dccbbe3150282ff1a227c4298775ed2db6b3cc125489930cf65aa596c6ebd7bbd60bb0aa58f2272e7305ab7f12d4af0378327bbd47856b07b2befd15f285d46aa258e3bb556f89f8aa36c6152f96a3c87e2dd75e28cba4ca233b80531ffdfd669c24195f5bdac1cbd1342ccd68ee07790406dd8def417d04f70d99148178a586e682db0e5e1679e7ee5fc75de840d0c40aa83eb91ad6bf0918b41fa53be029d8e276db0158bd450d09fb1a8871371e32591e58b2025f2af4befaf2241fd39f7365bf957efb28076f1c711d097b568f2b0e253680417603f72ee9c191fa845f53a7c5015908aefa8589115df18899405ee1a9c68c03175899272c8b05a96a85839402a8f882c53ee38c1ef101a2024af6e36d98ad0ee3f7fe1f80809da646e2daec40c58cb16f2520482266216389a718ae3acb44da9ee8f0a6ca65343c46af528d0d7f5d066793552222d431296850623cb1ffcc7b6e5970c9ecfab55e0a77a66d9a0b71f53f7ea59aa7ea1aaeb3223921ef83336ce7b8a8bfc7039144edbd69bb29cc7ec9b78fd175c91524cbade50ecf3ef60f5e323deaa29113e071c4f556c4a2f732c74b034edb39935d1ce6350b7b3ec265cdf2901923129957587cb99a35409f7d7e116c4bfcc52138e762547362d1fa1e2af6003695b2d0139a51b37a4a977e6b339dd18be0ec647d44ab8ead8b8b504ebfc374f66c3114236fed0457e9ba55206a2030015e34e73f3b34db1147a2a9aad38ea20ec4833ff980ac2ecdea1bae3516c6fadd360c92a383a6050da6f669c6d0e228bdda1d0b098f466441fb553c287d59ebb62306c30a29f9bef061d05b4d23d36abb4e8737ded4bb23ff0ee323a654c5347e8770db152212519142d3ce240ffb76b2ad89d0c39e90e9d9167b26d9f575e1581312495495511eaad3a1801b9043c2cbf1799fa2f8df3a90a0f202a964c2b540e303eae60ec1f9d67d5551951b56b1547d1486bd5d238cb188ec507c82ac7401f7d4568e06c5a4e28856a8edfc9e4456fd1ace95c18bf826efe282c07f8c5fb684f0cec41dbe857a927fa09109e33b30f0d3824aa020bf404ba4d25c4b1bd238a4363f2756c46ed0bde654cf6193f2c6a2b3e52bd9005f95d3a5280317812ff8442d18c4516477f8e6683aa4544a57c6d2545c026c4bdb1b725524acfea1853d9405f36dfca9195bdf6f74bff403bad183d0cfe623e40eac30e8dc1ff3d7e897acc2b9a983b45276d8025641ad80bb539d40da87313f21230b6a6a2cf38fc42ce113856ad22188ceeef3c7683a74f727791c2646469affe661951ea27d2ebc783f632cdb7416316d4bf66f447c541e10391218ef4a558a66c5a2deaa13b60ebdffa6f77173ea3cdbdbc4e287f9bcdf10162106429eb0e6ef25a0bfc9eadd64f3f958f40baa7147453020d846849c2ad492df84b9ba4ebab0e5955e2fc85c7a12138c85595ce03ab6ca03f6f4cf82a0e86b157ae505bdff610c964144f019da91b7c0494869569fd0c930feb9c7da95f6b2e58f0e42f440a5fb829ff1a2e6929075bb8e3f55997aeba146637dd0588773f473f77c3c0e367171eb059e7199034e51014414aa87270cc00c027afe3371c43f6f5d1e8ec3e6822682ead18f9842f3c7b5ebe4df698ea0c866753803a47bffd41d94eede57f5fad4adcf534b36d6349b1c7e3c0383f354a5162ec9c1ce5947bb3b184ed7fc036507c6d810f630a52d562f4db090014a527b766b679b74382aaff146e4583f8ab0bb6f40f25ad34bfd730f1cf470c52eff437cfd2b0fdab0978b5628dae4690ed3095237fa60714d594b2599378ac2cf14f355e7cf20599b091599e65a593a95cc4d4fda3896a792649250e264ff78e1dc35d6c6dce0269c67c8e2f2a513aa9577e65a436ad8d39fb8a05798e85ca2e32e96cef28c095f0e54bbdfcbfd50cd5d74462f700a2e2cd9682fbf0adbf59fd33ff2ec5f33093b879ee52ae026fbc5434ce507c255dbc29389652e28f83988ddc86652a17af4cdd0078183899a79903a7868e342d5a1bb6fcd6681d2f5921717d7507d07e5bdec863a278a98704f582a05aa824b280654bf3b5a1ff32847b5825aa3f84c06c6824118f6c8559a00f13dc6be5083a5f2e5ea2d5ea5e08cd5be99f7831a8b547eb83da7fa3f426394e94132e1ff0bafb94a48ad376322206a49327c9122deeefc8540e56188246964fcea67df93e409f7ea22dbb825287b689f8f91ac26d9c6dd7f16e1f9ae8cacefc77b213677562aa0d9ed42fd76226dc651b87f2e2f94c51317db13bf532e9500bd581cd0c78586f671dd345f968004b31b6ebd36e39778fb458961f7ea1407be716f6694f2198b67ee8d11d5b2b7e6a18286b5e8287ea6c39da3a2b9a4d3da524652ceb59696df877f90d51a2809fc410863e481fa598e62bf7b8ff6ef573b520485057440a584facd9c5af3829dc5549c581a9cdb9d43df9723c946f5cf78b220e903406a93e74e772e66353078343507fcb9b9216a8459bcca55a2581e168e0396d2b060280073dec58d722a57de4a123a6360aee57d04a3523fe6f4cc310d5dd62745a8252b2b00776a804bf547cca7536b8cf05f2f6c94d910b7911b77b603aedce01b00625caad26390fd7d0682f709c23e9242295f50f4fd11389b30edabda440d3ebb88e762d68188dc7deee934f5eb4cafbbc61d7edc3b0be4c4f12dec5147fcd70afac52da5efd04fb1b3c9b907e74dccb0d61d7d6d6ea4aa2e89acb5a4e66821a848ffbe94321edfe27e06425925f9d05127f07ac788c5154535764992c745ba13741689d37f9386ebd2541909b8d5beb712b737960f336d00d54e5965aef2fe566eb91e4999dc6d719a874f72e319dc1cb3c003f392c98744451f4b2ad8df1e326ec1f3741fbe35179eb307b306dade63720bdefd3eae4e4ad60639b99edceb925fae9a96bd813692c5d6550328ddd2179f5983c149e2c4ac855005208ec8d9857d31a0b27913fcfda532d2c931fcfc0e5e97cf2e4855ee616c1bf0d46a064c79ff0bc6f0039d65a5aa425ace2410affd0d58db9c03af7acc96ada4f16d2682bc13f5fa7b55ec2b3514962e6d31e2dac257b21a9cac5ce89b5eb56f8ddb809167d42cc095830e01bcf56f8f23e4d40ff93b779d3b8a76964777aab80cc667fe1c2e12b32ae25b2beb3b1d01ae5f3f43a522b642248b4a3e166afaf2b6fdde4aa719f8db63bcdaf07cfb96596f8978488e87b55a2ef668d5ffc87c94bfda6913e7dce3d56dcf2b62fc8885ae5a9fea98c881769e49a98c00eb00f532123e950616cf276fad4ee9b3e2731ac19b27ab61bef88b6a1442cd5f14ee744d2a252626b6561a1d1a76ef618946381a986f44df7b89d64f12c52f129e174e53bf5596b8e54c6574d7e63fee3410997c01c8664bead6c5fae7a98996b12c7d5829bc45168d6eeda8c70014d442b56bfa91fd5c4a5ce6e4d641500b1fac771321a2a4206a391351b3d1a0b2eee88c67961e9455c16eb5804fb9ac604509806397cb8814ef5874c231c648b9e4c05697359a63dfddb7ea549bebcc2d16ea3536e4a650eed7e8a37afb1ebe3adf3322c5a29aa9fe56daaa7a09a75886623c20c2eb52062656bd6caae18c94315713688dc91daa8e3e8d913edcf4263766efaaa0e15b119b6f582fa184ca0ce13ae67b648fbbf082422e197549e405e2d4f029895b1435049195ac667c02b278718a0795c1facf53fda6e6b7c3d0f980c4ecc9bb874622ec46e5380adc886f2910e90cbe568948198e2a8bd0bc0f6a309cff8172ebb7f162c98ba84239ed446eec8eb2783ae991a6d20e00c20fe667518ab603728a885f22b821d9e8c8346ca3f1c50c1556f7b1982ca9a5d7246d62622d4787ca6a31455291616383922380eea7b56ba75de9807296a758ee5cf98eb09cc87f7cc781de9b9914c5b4f3e6292cc25574381eda4e2616a7c91cd603e48a01ae255283941cc3f05e1c042039c8a3f5233da141015688e08bee45b48abe12391fa1ddb38fa647e3af13e928bfb96e0a2b491181ea84d4f49bde1f8aa8fdb5b0da52fe5830cef77c4b9f49e76e75b06e9468ae38d6b22d8969ca9ae737d37c607e9a251590bd8f27275dc84ec59027a537a3f8d2f54c3737b707ce21352336620ce6d4f916e2e35f1dd342595b13efc73055ca3988dda10c6510297661b8d4dbb8d7df0c0db703ba7ff781239342f1a871cfd360da8b0a54d03caf119c6ec960200ebed897124151c0447dbebcb2e1307f0d46e0282c240194a65d13581d9271981100467215025be4a5e90451e236cede95101e8f1db69db001117785222cd5794da8b33cfd71bf0a9d6acc0706dac62a5fdede02df00be5a71c804b4674522eed8f14f4646771d98b1723cf6ef06ddce52b9345d9cde94804130a771ff34ab2d2e672c0a8cc9f899ff6306dc33ac7309f726f0776cfde52f7e9bfc8295409dce17192618ae8f3eaab6c6830c6e64ce85084e057a2baee7b6a1fd6b3be55ee32468b6bf90017f34238c8a422d023518a04f9647a302dcb4a302df0699bcfcdbd7e1dced8a1254211f31dfa6a49474bf9896f9708b44f496bb21967535f0668f8017d32490ff24851635ab536c62ccbe46546f886c3f13d9fcb8f7bd3ba66fe9eaa0462020a593ecd0ccd656df5be85818e10b64a716f1047a348b0ace877d58116f665725fd29e7dbc262a0c8f83d2eec23c6413ced7155b3b3e8bb6a9923c0ee85ac53d8be403ba9b55dd3e4a0ab7f1d36de7b6dca908bfa8094fa079ce147620dc380ccfb7a7abfdb45d1b5686ff48f29c49f1fae70748352139a6793fd124c3100c5d22accb2c3a71d8c777dd3c1f7f2c1a5a7e3303440131db70c325680ea5550dde49af32f0b617c1f1c6cb842edb7a8d472e9b0d7c69b023c15ecda938e8eef2bb2e0d7106b85dfb23269119201ad87b7df4a2dcccc0309e69f337fbdb84c07aac63d7b07b4df87298789d290066d0d64d1f17efac0ce57b339245306fda3ae46af25fd00026acea0aa94f003151fa5fa7c6ebff7e9eb6ca9e0780772d5f8bdfa40fc69786249e934fabe85ff210dc6b9a5048d2aa99c315b266d3d8983908bec508957cfd43d3f1459e5317d043401675ed04652de6bd2948b53404998b4ceee3e13f0522a12c202e67d5196009277ae5f376ade84abfe3f7c3e8c88e54bc5007a962cd1aa3f750b224aa184fc1df9a238b1c428235cf6f454db5e2917962a279cced5a4b8ee28260e2fc1889baeae82f0cf93acb3623270ba405b28f73c11198e13780ac59358b65610a70146608b099c643d626b2973b62c66c51e78717ab45e185aab14855bb67b916cf159246f9c5f4af7f2400b3edb4466b73aaaa537b7d66428f286330ab60ffa71fa6e8ec83d94ad0ef081c4ef27ba2ef506fa2fb9f7d5651d6b7b482746bd6f49458d7025a1c7be036a140b6b76cd325069a60ba19ae42bb090cd6764bd9b5cafe05b7ce2a9b53dbd59e06e01afba6148fdf0296d8bc900d77c40e5db227dd8dad25c04ed568aef1b7d7ea4b607b0fc385292326e982c7fbf5648545374dafb27c505fdacd749ffa72729aaf33d55f5a20e12e0e45979cae827a91d36db0b890933752d50dae12b222ad8f055665257747d185869ec5eef1fd82c1e812c8641ed1bc06525b8d92a8eecaede1da5bc6c0f3000bb928d08d4557986fafdfcfe1bd76446aaeabb8de2ca44056b1f6cbbb51cedd2836386d5c721e18f6f347d276ad402ce438b2077432443af8cd52cd1e78348917b2b75e67bab276f4860456f40d407c5c25ec56768167a86d6e5e7e89bd7b78cc821d72838746882c59cd1c0a59b4df6491bb1bf98dca651f6f5b43e92667b0745d5bbf89474aab8d20a8c61d457bac2798524dd3d6ca3fd362526d6741fff2c0c5a7e63c75a301839b86c576de244fefec4a86809c5dee6f2424c3c0959ad466870e5e47d72b9a4457606e4628b328e24cef8c396ed5013b04a2fd6cf60d6c3ce0772e3e71f4d161d89485f578fb9c93f67d9c4e9f669167ddfff0cb7dabd560a624cefe9c532c2ce4fff18ebb7e8ad0b79457d0c759e96f98dabbf8e7fc06765a3c87938f6b432e9859d91d2831648e5dfa648f6326d4d212ece6344b26bbaf1db9cbf2200087f3c81502fe51c6c3e531f007c9d380282dc1aa907c82c5e43310eb4a28abf56c82af86b67c3ca1129e5ddb6da31e0f47af9c8c52fd95811ebdca78aad93a67e056d0717a9d155c2bdcf8e43854e6b31fb8600a78687d295f212a5330649b1685c4890fc383051205021b657bb9d592a783f6acdd832c0e777755ebcf0f3d05901f59efafed462f4f3f4be89780a6f83508e36eba056a8816050a04ba87be809098e37fc07c4e13345ec7c4e9ca9cd4771c9a4843e1d4128172bfd0fcb2d609ed943066418f25163203448de29b284e505d3878bd7bf6bf2920f021d917de635e346db883433cf5a8e3fcfd33896c82f519120f9bbae5a81be9b9db0da5973bda611791280d18340b541e1e3ef59579226dbf9f856b61e9a286999099b019e1bec2e3fd43e6261c0c98d78215de0375bf054ad885f1ae5353d80182bdd79409ce469e1ee4a9f8f627df2d52378b9e983aa4ef83e1f821dc5ef1be50e57ff7b94f0140886d1f42b5656d6a4d37fe7bb7e6a076c2f6b1a037b9c4103eb692405dbd4ffae8ca209b370a59d2d3e9ab0d459abed43941a044bee701a57d424806f791a1fb22b045125e243f0641f8280463f6b1f8f628b1cc66cb657cf60be15ed93baa9985a0875622c8a281d0442527c9e3016d5a374bb95544f667aa85f06a4efab9033d9b1ef5aebbd31b8dd8ebe7c1e81b2f07c268261752088956ab9cbb735490cd21df7c4e938263f6d7b31efb645e2a2db5cc92bfffb9c2ae47b8e73cf08fd03f399017af94584f0959bee5550147146cab33ecb1c4f2da46c1c371e22a1702c926fe937a1bb4db535656929cc6a17db2c4f80b513318a3b99b67ea08c1a508413fcf3e36bee61b5933dcf348d483bb7f450eb898b87896c54b0a1f6aa0f7bcf7271368c85277171b598fb2ff1c8243d94d597ead8cd4d119eb5d4126c51ad52151225d7e79ea1ed41b65c44cac828a5b63e24dcdadba5795ad0e24fc317d6d8edb56c3117b66ac6302e47f3143e51aa603c1ef142eac78f971a942b55562c341cd8b72f6d04ac9f782855fcb7331a891ef653fb8a40a18f102db17e73e5a7f8a49946bd83e74c6d8b2bc7cfa9bd83070117b9660c08220ec1ea0f470abef1f53c3e32a9435e7d679e98f579c034c805791626d4aab4b2d5d8373fb3e5190060c1ec5dd96bfbfc343fde5b4d8df4574bc7407da05ce56b0293203140579660e406314cb68f0853e1fabaacd9f1c794e53661af2f31b5b8ca0a5a6f93ff6fe1ed8402b5422f328b0f144a3156fec3192edb059d42bb0278ced169605bb324ed48732786d6d0d4a7ad93a872c93379ffb5b4f54fb4615e5ebc5cf4fcb2809def9a3dec1907e0e6f7e8390a79fcf16f66640645fba5dcc63c4cd0ef0e346ae9e62d34bff5d6f9fe5761765d76255b35bc77d1fe1990624ce5593b98a17ef0448b4bc70c36cf3de02f6f51fb2bf44ac18a1fcf86f1c4a24b0ae3c3129aba760dedf792af32cbb97970b0a1da41e924f6449ce996e8be2f0282e5e8b9f82c0a01a0c3f0a967734685c15045d669802ca46367cd0b3ed70ee92715e5b6082bc4862214c0dec4660f47b4b498e8d28c856d74e0f77fe99fe40d4578ccf4f6b506ab775e788cae874e5236c73b7b216c48c5ba4eca7bcbd7df97da43aa66799a458f8f79b29de1ba004ca25cf5657c0c0d26ad4a3c9f7fa4e97c5d012d0e6a32d62e410a48ceba33495e71fedb61fe122c5fdaf7bc58e0018872f96842db93e1aaa4a44a2435a569d2c78b9d8c8433565b4d87511449f8adb1ee6f4d4b95a7f0a27907841a3d169cd79c6959286e754539907e4bf384f5a15b79723d9467e0adcd01258d35a6157d372fdaac6cf536921423d56ed6e3a46fffd2474e1d798fd79626d5209eed63aada9c6b05d93aee0d0d3886691f6decf49090332527c9bf0f055a631c7cb3f4b54adcbdfca60622b29ad28ce8ff24cc09aabe1cb4825e01a5369467e91fb69a18b0d4c1e4aa87767b1065b73e4fc53e55adb2e79b64227e826aad41975f10cdea88cb86ddd3e1175c4a19f74625b5ecee8d59b81969ed1aae837006d2f03cba60d5db752b9a0cbd2a4350408c9b0e01977e9368896a7b9ca8c78e816b6def34c26f6fcbb57cd39bcc9dec13d0a4ca19f1a94d9e26bcfbf1ef87655150b69beee7d0ac632d5e825d1bc5fa399cf782f965582fc8ef450d474f2ec0bcbb24d58bc02bd710f842beaef44688f02cc24de3f60fed9ae8a3b23a96742fab26b4a407636dc0fcdd0de38679279f6fd17da3f55cfe560d431ae395dfcca9c14c8a98ef4bdfa127c2d56e80b9fb28b353e1aa56339b43324c87e04f76b283cf21045ebb5284f606ca3f07c64e0e1a3a7fb8f2e0ffc7d5bb38194e2db57b864c9e9ef06fcf67760a4eacbd8c7b5b3839128a4dd737785ec68bb1ee7eaeed071cd9698a5ad6eefccce9966cad34216e1f79cd09930c9f2557f64868e0d6a20b8629fa3b6367f0ea01937169b937c82dc582b41049a224e0a8f69d0ec81b8b3768d2317aa86492b9db361bb9e07431aeb3487a485219164daec9877a101f849bbebf8f04fc2523d936603e38163767005b629afb2b74d1c414f65fb6f9d1d374e06be6f0c197ef180c9b17179d4f45e302ad331f57742a8072a1304cd61e255002f1493f1b747aba2cad3b001047794049e6521b89edeb7d982623f32c6f2bde6492dc1cb2bb214e4d1d303565d3193cead6782369cd4d71ac3d22103acb9339b40e235955848bfa4269a2a8c8ff48bd55f832a36f8bbbe35d723ce07a7feb4fa17b41b0acf25ad491e007d65c9a1583e4e6eaf0a0eff0fe7dba2f88d1424d255ca44bde39aca5576798e0d2862b0bec2aab3da6d662f067121ec6204235d24d3af93ffb4955ed6de9ab10dee948cfbf104a7873a16e2a97ff2e10d7d0c6db26ebc31e7b3d43cda00b4ccb80efd99117d1b713c40295486a104f59ff3b532764a7afd684bf15efbefabe1b1588282d2e376dfbe05b3d6f6d76f727b98e60c988c450e0fe70719e58a3a40a7253c5c8b441c4929c973700beabad39a07021dbd42ba069680cd62bf421b89950ecf825595363e7609f17b813c5da03a25ddcbe8e9a429958a5d70c63e31a2b7af9d9e7fabf47bdf6dc6e78e9b4ec7a770f2b2e64afe1729cd772b1823c50dfdc4e45131088fe914c8d54863463d142cf0e4deeee53c07c678fd43a4bec4580997be1654e895c4db82b9c42a973fb19cffaf11b712663d3f5bf1448edfb185df03d377e01b0d403b2f70b76bfe1b09d5cd2284cb3d3706d7ca9a6f3ea3e8dfe226ff84e5c4abd11cb6c7a098424e3c0fd086574a752b81bf05929303bd2c5bccd3890f77bd4b7805a60f314edffcdd034158c6c9dca9c5586f5f129a867c7da1b21a88e9326efa445d5b0f3c49c45523fc4af39f11221a12c44abde63f718f57a00cc5140fb72d9520a6b2125384977c43adbdd71ef866679b1e6a7f107a58528d59b03b4ba9b4d3e746e421dbf41f9db045616daf8bf6e4e7b799acc2196cdf6254d1ffb150006a3fdc491b341e03adb3414caaaf719b1e775efd829ae04a64495a72e8b410dec92499bc638b74dac048cf4a13c5ded0b09f17cf4c1d6378db556a7d6b6c47f443179959bc23ec8377b2b4ba64858e846126fd8a05fbb9a59e6c9a919f4487861b063bf923e42f28d14bfa1646c486d592a819e5fb6c9f84bd3202d116b4149e17892bf4fcde50cf70e40bbb6671088347791de3b0d732a015d918b2126f1eaf4990740f63bb83d7dd8d6eb41b89cc5a9d307293e030208d90732a32b8678b8e1e15f321bc9798c1a7000a2bb1a75647e06fdbe45f0a40d3ce4e13d45348dc475d9600adbd95be2b5b76745dacaa9eb44c3d2dd347a4a7db03937d665e071097e0b183a5f6e813543b0889b0d3c33ff8f83e2b6f9c9ec78671a1f4658c8a5d1df14d3279e573ccf7b4fe8ced17c1344690dc054ec0d73ad1cac63f50d2eac28ef5adc4367b3d69577312c6930da9996ea8c34f206c98073e69ebec7b9ffa35711b27b71a222da206d3f9df0b2e6801d5d9a69633fa3a80ec6f1070ac13e98c58309697d3dc01690ecbbf3103bc0f70e866f63ae7d51f38d8ce45c441c0ceeb6650e8adbe75971471d4aa70016283dccfc6505d9750121b36b73a7200645fce9da546ad5a8fc61b6cd256231fbe538858cfe3720bb6ea41a27a262226a2523fc420ab08f56ca35272af25452eaa9099b3604abc1b3d82ba5fca8ec236e91ea93c63da2e30e40afa982f66e197abaf6667f1a46835ee6538abe0406741e3b53dcea96f20379ff03def2d48ff027fcee43cdfc50ce09b319a7667f66e87e9cb443ff6721e3f1fd6f2d6b38b9606141464818b6e41006e76734028c9de5aa446c4f074dc313c88ccb7ce92266c421316aacafaac9979d5b71bfd7928016d342425151ffb13cca58ded2805e039bb256ebc57a64589fb6decb854ad3fcc5d905131dc4dc841fa2817dec2f432cbc94779b9e6759ca9124becf3f16ed9d6c7f1283d799f750e4ce2e781c1b90e3bf7228043925716d431b4c1dbbd9c0d8eb05c7bcb88a07e4034f7a36b58584ab06cfd96d37ea418daa01bd1e03611f99c9d165d352ae588e0f24a538b5426771b21d379f1da28a2dc4a9bf3161ebb2393a22f41dc1c7394206df55b404413797058b69e9150af2a8844c5901650d6fbb76b2a9160e6a83a1e9af30683b1645fff6aafe90a8e48567fce0dd37abe0ea9b9bbc6bc73bdbb08a848a4be0aac03d16e5416d6045804c621ad5b92ff3c8a1ff95544d030390c97d87822c2249b93131104c30366657caeedb1740ba28860a4c1bd3c9af00f0896b4e82b3cbba3f7f23945d3b3b843b55c66ea98cd0bf5cc42fba55add08b369307bd43efaaf9a133288f6a30df1547771d6f6b9a52c35a250fa68d6939b513e312bac56dd1898717fb6265d91bb54f73f42755f296b7e8dcadd2a4e6b08ff4ae6781c6a508cf59d4f5f28477bbf4b933b4cbb1e562f6f85526f51deee7396eff4029989a00f995b4b31f913b78e19a881f9082c49f15eb6555499a1ae3797a506cb98b87bd369593ce3cf41a2a5b064d2d2c56f87630c2a9f0832e419af01e6083ecc70a0aa18e0435b51cc5a89b50cc1a248df40a49c2b96217302c92449cc04d73d807c1ce6f8804d8ab6e64b9b91ecb32542b5ff08172c2643e922686f6eefda75e2729a620ddada54291fd8abe7235df03c2b7e3cadf001e21aff567ca27dea6ff878e555784148e9d19329a6d548612bb745808e5987f59c88b34c238e3d89a9d28f05a9ec4aec3e347e9d0c9758fca1424d64a88e56fcec720018797a93cd83516bcb9dbb193e49e5fcbc1234af114a6dbfbafbab5e90529ff9e4f09567d53990beb8bf649b79b5a735c8965f23cd739ec7286e8cad4e1547f5b013f3fa1a61c457ba8091aa0300c3470832dab42f4ef71a74e0a38b2564c4a6fa6fea4d87b8b2d4fca561cbcaf0afd64cca35cf86354c55dd57db3153a5b72ef50857802e60ac32a1bcffdff87000a37219fa909cbf86ef46021d6bad19b51933b220d131f5f2c2c773d5c93b5fb57e65ef556103f6d2c4353d0825770be9584f0bd8c0650a6f9106f74bd20991c2b1f2a55fb50b1344afaadcf2d0e2742643bf1fc23afe1543fbee15cd508ab3b3b18652dadcf5c2966bf39b579bab30310f863b610c8f1d1807dd043b33c390dc5732ee47a9dc8536c9265f4f8d62ef16883c448b95d1196d6482263c938a1493ed4e4223412b327fccf1a5f09740f30d129447c31a1a316475cfb0d8bada8470ab04f866efd85ba4c9fb2bb5a5b08650021a327e062f8555cdd2ce2c21098e457295496e06381c82c156a94b04b4cafec0fb9caf8aedfcd2bc2ad8358aea68b058d4db43d2da5cdd43d362c5096b5c736559799e931534d6a38e370b630d8125caa2799903410233cd196315585ead73d5fc59c56b77f3619ce0929c0e605cde15d7ed9c3fca7b8e73e0eaa8e2065c5ca4258b960647755bce96dbb45049ec5adc9ef7f2fa9a4a5e70526730f8a9a908bf30ad55396d9111b738cc46096fffe5c4288aea481acb8acab0a8be0128155f4d262c10e4dd07503e837c081e706d85c64b2d888d0b273cd66a799491927d03f87abee411345075cea3db96bb010aef9fddd20c630042ff2e42bc821e171fc39c266209d2f59f87b5e8e5bbcace3e98a45619a520ca55853222737dad2a0339fdb874409a9f68153eecd829333f9a989a01ea479ed85ccb9637170b77644e4de6cb2946c987d6ddb570c7c28eb2b3fd7b2ea69e3ae27e75906ad374f9506a655fc490d4d803d05398455ffb4e0be8e840bc662b6d61a8d3439c0189536119503b8e8260ca54043e2c2010510541688cfd585b18d3acc42588fef81a989130fa41db191231b9e5abad1eea7ec4a280a63d07e2bcf7780771e20feeb01763c9d4637e1d9ca526f2d78a048287a56b38ae484d7f96a6b8d1e28fa5ba5bb96b6fc477093cb4a3c47d12b28f00b0a9f00e03f244faf29fbf16aacd61da6f862f54505d2207c5b0362dd964396aa79dfd52979d874e1406643e2aeb4f477f1a8f612babeeed8bd08cdcd85b181c13f61845bce70210b9ea6a63379c2cb44d6ffdb7d376cb585850b96a505a0f47e4d5cae9b9f7e600415d9f296bd09af17b66d9be9a8b0504615974bca553afa6ccfeb9ff1599dfafdffb7fbeb820d6c5403f8198bc1b83295a7f6db8468a6e13983119e5391143d9f92264e869963733562634078a5656fb205cebfacee63cb302886f6e9be7ba4f985955ad0571d3499d18f5a26902298dbb72d19f752254f261121dbcd27551e895bcb4fd25a5415c1d7a52dc8a3cffda7d88cc55c487ea8ebce588b2ea433f5e98c497298c0bffa3ecc4aa7501104314f23f6ea7d57622faf2f7d44fdba5ed09b0a5c84c86010c67c518983cc60695d73615d412285ed15db0f759ce92a005473ac630833d379c768f94077d4a6f5834bb3be6e5030645b5ceae29f42a1c8e2bafc7be12677487ae46fba8eaa3b20f5b5f1d4364d3667942c88ff96061dc36a37d456755e0dad226ae4b4c55d41ac572c082f16bfabee6e527fb14818f47e3d6c2c899e01af0d25eaf9df4bbce512474957a3bf34bda732991477ea67dbecf96947aab6bd680802be67bdf92174a17725807d78b607afa3284f11eff01780acb3a7ee1e9b1409e8e43320b674709699056980fb51466ac45b7e475dbbc1c9470b892fb71767f229fe6b444bff8be0303cb52c32d6634f42a4b047645d781a6d51ada66332bff302adfbf6bcc68891b90afcbc95faa700081b6a588af61b938a34b9affb6ae298185089842ad57e1bdb92aa2dbc93f2c8212bbc629a4b8c1b0e13b0ada09e74836c7053bf7853e9cf0872fcecd11f65952dbea04349e01bb874b960e98bc90ef74f705be8cd25377d627c9fb228a6b641d29bc962b773e9901e3feb9da6bfc73d618a46e6e330965d5729e7974d5be86b021be78b501657fe67b45b06c48bb15ce4c033d45880cbd299c08db14380b6d79b8862b78ec15eb449b707efb110abf7d7c0d781e04463c01a901a8839a9ed4e95f2448a33c457a7b2fcf4735c7b9bd4d8703ad0dcbed814ba35e61cb6d082a86fb2bc19a40e01d6801ada890e797d418a33f9fd5a30c3c3f0ef65551d8bdba58b6f907d9f3fc9c16b42bb9fd65317697593cd02fd9cc8cea9f2b550bd85d016a0bfc8918a4a8bc0653cafd8d99b9785546b856687c23765d7850c956d816a828168eef308dd9959bb2525ea2b5748fad4836e4766e9bbc786e4c2a1e5149cc78d19d747c789e0fe309289bccd0497929287387d9252bc47b639beea225c0aec73c459148f636bee435f89d5371dc7fc6db12e3954b2af856accd7a5dc7210218c99f8fb2aa92826a6151f13dffee2a785d5bb2704f5bd76b1044ed1fd9d89c4fd62c624cd960b4257c82f7a5af7c1f353dbf78174e8256e7a6ac224f44c94ecb44a975981e4ac7e86bcedd98138f5a721f2db917f60e2a97d9455c71ec90f3e06d4027ba9a4094e1233551b0291b23c8ec22fb36bbabd894479442818d21056b5f1681c4c0df59552a6fe16a476dcc915f5183e29a7476770fd5b447fbeb74d1f2e40a4935d84c3265e738ccbf054c0a296c62f46afdaa618af6ff9884e0cdd0e1a3f4951088bc1c18d89326ced9f589477d9665e1d5ad2f60f78c9a3a9e85e482eb8d757a5a3d6f529b2528a87070c36b38a0b54c8eb72217cce88451e0b17a336afa464e14af99312d452927412b7617c1ebcfe1c32bd09cbc676176329210180e0f95fefad222605c70e79390044064e10be93ae5ef0563f646f3bbf7294d6508f3c7e59e23b2ec88f976084a0858d475fcf805dd6d75cc49e0b193a4fecbe1ebc3e37317d83229a29e01d2c5e88bc018b576c81df5d52abe9e0b7662675dd5d2d6c97ea792d52e7e23bde0585f1045ab38473183322c3e3d460ed41e35031604d199d36f227c85458428b4c368c729ee2c79f467e6788db7a32a0a6cc84acff46633b1f6e2734191fc59fff6f1ed8b98e20c8e66b74e113290d234522812a0aa00983d39b438b2d0d1ea335c40989ceba621ec9fc5cce10ba06e20d18889b97d85d3830b497b050d78139f99bdfa508327b9e246d4a3955169bbd2a3f7cd4b9442d733e50f369cd96e52cbd1ed6fa271a206795a35858394373742c934e68a4e380a25a440745cd801b5a5cb2514a372f62b59d206fa483742e678e7161cc90c79503e54e858f4f2236ebd944745ef10a4c33d5236bcd8fa0a58f240bd376aa69758d32640f9bcd14ec0822cec2a1024b50c0396c34786972eceaea06582fd9e4c1b7e748a4c808dca72a6df542f7364245dc9b6cd780e77c67ff0ec79ce9506ce88f7920661a8760402a68b8baff4c985080c678ee690869adc2c3dedd6f79862336121f08c451d611dda627467c485bf94cc0cad6d783107871533d49f797bcf584a0ba3ae817eabffd6fcb624253c4a1d6a5afe0e73e0b9e255f9522682be4bd42e6a0d633b69cceea124883f280ce474bf724c0acaa3f78302ec69c2ca254192cb9f55808b2d4633d2b0c983a4c0e5df089ce4d6f1158480a1a644f7e6f2c21e69c36d9f201550f8773ca48262d98fd800e618e0c1893c5ab1e0fac9121ec5a904563615271e241db13a42e15dc82ed653b08bd9a4da703083dbe57db9e156faf2c77083fa44bcd8298bbb23c272888287f9e04c59b1ddb98f75339e57d6976d258aff2c9d123bd491211d65ef9bfe786a356275ebd401d5eb14bd3381baaac88cf36d487554f31b98bf5600a09504f17f3d2208c29e3c31dc76491acb20b76bef5f3e6b8dfcc4c9d5d343569b51e775130f007a6612bdf497a23fe6f13f89d6988938232a822f12bc039232b22dc87ca56843f5246c65b47e5198f644291a7e875ea11de85af79ea994158abf29918750c0951867343d64874c242f31137d6dbe0d4c7f7b866ff4a7f00515815ecb35c8a7b4b3ee6f2826dd056a85bce667c8d129e749fb612c6da9e7c6398ca9365fc18aa2e3e1c949955afc7b8d336b61ca619f92f2519a56edbc63a52a02e05a09f780b66ae2adcbe749b327667f089a075241d097c1610cc9291ae9d9dfb80ff4dbf837b9eefbc1806f90a82a8963dfd4fb1127f2da5707924b934aa37d19a997dee7ceb2d3032ae5c55555fd5b257a8a62e41cccbc8bc205d7335a042ef5f7193a05a115faa373e9ce02ad59fba375f069246b09509a449736dc011d68200ea166d96a2fcb015bca288793965edcd88cae694e725783e027a6fd86fde34febf2de14a7721b7f345b17a8ca0bfc35d17e36d20466140ba6d44166455f3fa4134be7f8d7cae17045d76a7c8c0d55a5d67f6eec6ee1708af9a04cdeac28ced41e9418e2225110a4b481ba0070e6a7617ef3dab718db4f760390f2f5a3469f4270669cb2edf10469a0e9aa5b41357878be38d8010f0ce27bf4d3ec098acc4b97c2c12674bba50a0ac614c588d7f9e2b49cd3e19a3132c925e18d59abe31e864a94f6c4bbe07a1a388811c412d714a789d63423c123764ca539807402d7a182de9636bd54c6f99ce88282307fc221992dd571264c82a02b3d6da4a0ccd164f94f81951c0681346454ef86e46470177f6d96d3e4dd43ed5c14003bbd0095aba1e0c9fe78b3972dc63807fdd3389c00ca8659170a9e54597cd7f43a99922dfcdbf4bc69f3207cd66491b305516c2080675b36864a48684678894bab2b8ee24908c998a957cac327a92312f287b5cc0668e54bb6b26ec63f320b6145e6c7c3cf70f435c7843b787cdabfc30c0dcb26b940caf6075a5eedbd110c83d524b19bcbeea149b4531c378efca726bc523a66bd6841dacb9ab4b479c86db5d9c330336f9c83929ee1683d4f1e1084128e2a67d62e8790a8ce878777bea2b731db6d034cee285e749704ea848371713c04d4bea32f7117adf751432981e639847884e6ae5000505853cb33448eab714133161b42df3160ca42cc0aa419fee403e6f027619558bd0607c8e50aec09c5b508cfd533a170c9c96517c4c5e74bca3d7c13f9e02c66db186ac4e4ec2f0de07c8bee2d4d7bf9a162c36cd33be8a8792dda5728f12ed139b6b1b402d3ad400c4d6a1c9ce529efde9dbe07ee5ae2b0b6512fd0560d697a302aa7a9dda5da1e1044027b864927034d63c04ddbddcd7bf040ffee80be4fe3cb8d6f953fba470433e6c9d1b2af9072ad8a97c785316dd6b4ad3535ce6b7fb684183d497458e44a453469240038efa217add3350f20cba875296a895803dd750180ba4c5f49f692989c6b32a3db698ed7ee3f102a4d24529d34e0a37a0d6703ebe68a348a1582de0b66278c1ab0d2b97dbad2ee7232dfdd191caadcb44743f3a5acb65fc61e75953d47ddb1282427c8c086bc80138dc7fabe473c1b618da99f9a1241ad4ce8ffcf363a9656f7a0571c2ce7d5b7dcf7a95d26b278a95b79ba39347430f96d904d7f8c034fb57069bad0c05496d1a0345764aacdadf9969ae4311966286cf9bc462cd27efaa85697b573ad0fb79de3b5a939a3daf38c2a5826283fb3de7ceeee0a21436a4ef8729b10a94285b88fb061c7f37016a8e090cbc5c4c9413aeed019b7db2b8523b6cecce22876e385bf05134a25081a0cc237500713cda778b77818acbc30e22b2316598037770b20e18a4e7ce950a4eacf2fbd87e9a0fec10c6376f40272da7e13d9b8702ed47ae5270a934ce9c36daa19c03ceb438bf64da16b72daee7f6601286a6f1caba062eba35ab50914da97116e4360d7b9687896c2a4c080e9ffc530ec694140b858def56b69daac498b3595e54853b1aeca2be4d255d066c15ffe6d4ecd2929596f2da806e143e8e9957014464a67f53702b0dbc8d2cff588191c6cd2f18728895eb65e4452654684af70deaee2734acc7a636f41c86e530124d4d9e819a3751740edb24da965ee5701b26ab9c08cd65c8f239b614c10af59e41b6ca5baa8f0b0f41422e5766c908bf74745a41969216ecf50b011126883505999348d53a6124d9d1cee9b47a76d86e7983ca3cee6b92ed958de18474c2e97475cf3631ae9752c62c2ee24cf18254f5afcf2470d57e320b45c1f8d52ec2ac448a0ad04632d980453a85c8ad8f964445a0dcc5f99dcd11404335d9bdb7a7054256ca7b313de0a4a94e6962004bbfd525d2335bb4178c02d5075011e05efe6f6a2dc1602f7ed63f476fbb7abded61f6b334d03a3ab89f1510fb13d0b2bb300ff4b74873a5bfb1f04279f1f45639506b68380e68c2e8ae9d4c3990691cd8ccdb50f81da356a2eef033dc83c2738cbe0dd9530b2ec9174f7090578944d0f9d3473524fecfe274b2637d41f2ee4d961eaeb62f04a3332977c958efbdd0f1e865f006ea992430d1784fd9f949a22bc4d7af199ada1920003c29572fbdb763f23de37669a2bc7f109f3a120992f8bc3eea9788496c60a532efe22c14fe29cc239148c677a1ac563ddbd58c43c77ce0ac13264d7cf24d4f1157e95073559da87e49392d46d11dce9ff32ac62db366b16b1a0b187a281af56904b62abf8a5fec9de9922357010f3f6dd53a7507365fecd48a93a4b26c5d1a66b3822078e1fc3a95f450bad4e99db5631f2920f87fe136991453ed803728e4a015913cd9b46adb0f3122af4401f0c5586716b684674ac192aadea46d9d872e103dc8f7ffcf378de3b700546197a4dfe628a4df5249a2062627770082e5734b46e7d6fcddd6896cc9e7c7539e8b6b10c9c7fcecdab1026ac132259dcdf67c155b351360b4c0e3d091ae5cca184e103aaaa46173985f95ffce9f60c749fcf596b15c731a5d0c74bd48093d6e206e35693549c0dca1a82cc3be457f6ded54a0491d25f141d1ff45de85c389e9122899caed7c8189f9bdcb2e29f55e7726ce125f329382e17a98df00b7fe6af60dc373e67b96c67a579e120371ad69e33e8472dbeeec6abadc9773582e36a5564cb49f7d2215387df3b746de14667ba5bd4c2ffe6d580c3f675f50f2b9481c656cafbcb05536c3c8cd8ebec645428241b1dd8c555c59995482198eda852c030e55d8a7c986c265d7175b02ecbbed1eef1461840c37fae8448581b2170ff666dbb8b7361629450b506ce7cb198b66a6e8bf6ea9febd0a205e1e81548c6d79da627ad22951fef950c205d69bd8b3ca2e6f24389a81592f44ef05c7340ae6933908279f4495ccbbd986146d454cc8481bf7f2727df9e70ae38fe3e5c6eb3b88192251aabaa7c05bc3eff6c4827e59a74fcc3639eeecb0ff26314aec3edbf619a6225114a80dc5490e6a0a4120ba4d74aeebf56af3be950743c0e9847c5d19261762ec53250a456fa2c08b67a7d8abf81b6d160913d3ec1f10e2b14059fbc6d761409a83b7b390db4fc1c612a5bd657fb3f7b08dd4fd54bf8e496a3e427b1661e5507498ca47626a6b8924849106dd88fdc965210f9f9227e0e2e6e9a73f966b03a390e5287117bd44a17b8c208748ceac52a5cf17b7ee00b6900254fb2a1bdd8a5cba01f647337e42448382156b993f40a0b5b7109a00376938f06916aafa489c8923c7d22216da25dd5e19e740938675ac538c7b4465ce7f3a433aeed372913779cc1f4fe51c24ae6f45ba885dc69254846dcce43c27950e5e2c5270bc8ed076bea013e0bd44ff7ca367c14cc12ac8d9a71e3439832129a1a4608e3f4f33efdfde6b4adbb5b6c4c6a179ffb4ad85522b901e380995fa9cf76a5be3e5dff8908fa5ef9e5e18089cd1cc699a190d7ebfe18d5e56bde4ce160abb52ac2e11114e3c07efdc5e290c10cc71abe31f53450162c891295b05547d964c00edcb80199fc6f862dfd0bc076b2dad7ae00a0dc7e8ad82a162132d1b1795eb3a07a88b5e7a2e15844310f8ec38501a239170392a7707a0a308e45080fce21ea21ae39364fd233b1d63042651401e79e069fa468261597821db21dc0cd50ba626474a429b1a0cfda60bcfcf430f514d2e9fd4ef00efd98b19464d866d77d104bca21eb264b2b134c3e7ff4ec957973ef359a59b2c1201e9baf798f82fc0646d94db403f8be754fb964b388b9cf950e4d035e99453ed4efcc9fc25ffa067e30480e6e4aad0dfd76d451709176e0b35d2cceba7930466ac85224c363f2639184413593c3ab9216440a396520199a0e1395b609a2971502b91199c5121307b6771c31856c0688260408b115bcc939119b1d689bd76e33c94a36e36c470d2c0aa355be053fd986a2494f11376834c4a5f86be8561774d1ec57f8e70467259af50d33785ff92a2b958b05d6722b4abc179b72b6d570659ed4a0bf5a2c66cdfadeba72e617ed23c5fc2a463a556db598e4bac6cf73663551e4aee273cac64d3c0face3d1ecc23700b16806710f12be426d874c5b387fb19ff9d48505b7c21b9e6c0a740199954d9cea0a4c0fdaa7794247ca0027b01a0c4126486adb69c09aaddb062789c964b252d90bbbf36359fbc5033b983a2a4b097c5a54baeaedbe7a15f85adf3eb0dc109d020700ab29d32754731415a54def9460c4660fffdc6d2431696b25378437b09acf1b30e4a82c08d352d9b9807be0b735bc1caea921d95d90ba5a98f382d08f649e0a4831ea12e368efb846e9d592ed723397a2e28b0bc101d0e68bd9f257eed38cdc3d314d3e184ce08aa5222f1f08aa3c38ad8377fb3569241bc50ffbbe7fc082528036c1721cb6eae3b614f77ef69aa0faa72d45bbe0de7eb47d2f7d49fda87e7969d120a4adf97ad8e0335f5c6aa1bd5d6b0a959bda48814e25ed803a62313c7f1024ac3b1e15bb7e5b108fa299a972be20ccd01af52c912de811b92732a0c4ce2a06fcc6bce5e04cd596fcf586c16dc02d02d9e23354111d8059232b7896dd091cd80d0af4aab2fa31d9eff3125aa96935fa70963db625f5f69faa5fb0b5942c61b96657d81ae2f331345897e6fc2a05e786d0103555c17f12488be040b7924f5c99f45e8d747f2874524f692bb38372fa6f4ec617a13df21be3742f42f677e769714225be6b061a8e705b6c48f3bf39a401b21b2ff01700ae35d5795924f72784ce65136a25496e3714a9d5938558bd5c49fc5a3c7c53d81ee37ee11bf8a9be9a465ce7767e441d55361f9b7a10a16710f8b73470f4189124d6db684b6361c2df43b8673301f5942e63d0e1580a8ca40e705f554d4e5ae56903037fd0f5ac14e7b0dda6bc20b9672e2ef0176c1347d74a0fd2c6627f0402cb542ef9203bdd43f0ec44a6dd73613babe0bac5e7393e2853f397768bd42dfd578789841bdc80fe13c29ffb5f3a125d7e2436db99cf95e0096fa3bd4036c1676142433f8b5555798e6d9c387a88c5682fe4d5073c9c6cee0325438e05f5043a8967f862b243f4459a08fe4e42cf4b48ffdf5c9759e0faf53e89c981f419cba5d15cfb6f3b28ea99f9a901eb5010afd04baf18b5cc8c83805b41b60566f92b3596d3cd11d5eb8f8906a7c8c553caabed253ae3bde6734fdb9de3573f2cc639b015bb0ce0f867aa7fa4f0bde0fc010efc7562ea34fcdb31475f7f956f00fe8fd2c92c540dd2e59d5dca2fb5fa09f3c6daf2a63c90d8ec6e26d4ffb2fee4c4418f9a37f1323df1bc0f90c9853a4e316dbca35aa320b3ba7af2255fd72e9846b88e0587b3a84414b470392c5e442ca78406220922958813cdc0ed8c40394016c1bd6289ad203c57d1e8a39e695b0e24fa7571be1c95f3e3dcd0030dda5a41b3924fa5289e4f60b668eeb260d86899886f2b3b06c106516a2be6a57b72d7a8e8aac4ed26ed864dee62b0b70f7e788db09e2f2e30488915d105646233a6ec11af9eb1f3cf5a6cb2dd92cfd65de4fcad649a8598c3d02b2d0c28b2f20259078817b16f8146858e515cb80a2bd9198123b6cea248258edacbbe37ec7c0a59e055f213c17a206f484bcc540958f00faa323856dc8802d51fd197e4e0f540530fbf3f5c3f710ae1c724d337d5ce1d6b6cf32217119697da58d1049cb3f7585388af1058450e0e47c72bb4a33e3de50bd28257e7d18e5f8a0ec996005e1b1cdc51215c0f6231681e1d6ff54dd4a623a5af9e69dd119ae5b962a42e162271f1ddbb72f7f0c4f0bbeee05fc2e3a7736b015a13df41191c6017c3386cad701efb43dcdd3d951209d4a0d708cc403560d7e231aa038efcdca2e91288a2ff6d0c09a56accd2634e4cd8635fa80bdba5686a5635d8e06ff4e1ab44c75d6659dd22f6d2bb79909270bb8a77962f75856f99f2bb7e2c012ca2599688d7dfc97c47330b4b022ccd602ec8859e6ff44ec012c21a5d606799ac09f49a235f8bebd195cd8d6fe8cb0382dae5dd26fe8386cf4ab9caf596dabaf953fbd2db36ab203203e6e93d904ccbfccbe53734882f657828944f231f4c71198f4cb2bbaeb95935615b76e2e6040f9b5ef48395b571852404a1cc390525bb7acc3d809c1a62e75046d38b8ae9773fa2ecd3447635920288c3e2513fd19749a7a75ab3329bcd0fd7ddc5ba64413e8becf838e5b74d5ea74cc9df187fa6c32352a27fc19a6236e367cf7ca9a5d8ac3b212170525f4ef8b8bd30984a65434e19d43c054b2c3e0be05dbe5e15174b1fd934b945c21dda58ee595c70c01e1e126221aeee337b1741ecc67cd03f6469e1f990c51b3b2393d277e84998aa59d1e2f35b09eecbe164ae74822d9435bbc87d062e798b46ffdd2706814668b80d3b09b9e1ea075f1e126305325eec480f7b2a4b8fd0c178f2550c1e8725e1cbbaac4ea980e439362df502f41c6a867382d0f630e6e9eb15d3fc9f4b199a78bcb41bd837e3e950e15343cab1cc3644ffe3525fa094f53d4c6200e108d70f91b2b6f129002f63143660478768b80c03a292e63b0e57868e5640b87afe35960dc70272bd66b6372a50f67e4bbbff7224fafbeac3183dffb9f29e89988c7d8972937ef80edcba9bb50ea87497ee7326d23130af104779fa2dcb8c603cb5002dd9037237ed6a2a836df79b9a1c3cc011ea370d1606f8e8051aa54f7fbd7a9a61ab224098216da46a7eba73843ec341ea2edd0dec631ec3359d5b242427bfa3eeb595ae1c283c62c69344a3f8fcb1157e976e488f4bb12f8ee5bc5243949f9dbc97d118f99bd85ec28635806374dfb09dd8b24e596ec567ea05d0df0190e6b23551879ed6ec0382fce4ae7ecc867d5584afb7e86cc4b6889fcd3905adb8d16276d05ef62660433001d3af88ea111132e35c18cdc527792bea6466a944a6c3d4991d0559ceaa06fc8f339cc2f3a6617ddb5f053a79e24f550852c309d98e5fd7e4985ba90519a9c0d088a59b661a2f964afcb2ea39c41433b783a4e45cc65b374c586b56c99f3f4ecccc3fc34fbc78f94748edd6de6513660fe18ab2e1b02f6a87429842041c4f57efd7e9f6d85784a8090ce99b86151900ddd3063c71aea7cf18b177bd9d3407891c21cdb7de5776a17630623c7f780c3f3b19ef1a762c1330557353053d8a8d92b867d5e715d8b38c0d207b77ba96b01bf75c6f29b9d970153a1d63c325348c6e36bcad3695b6535601f749a09df1735d146e9dd44d6764f24dc57ded1efa41c71fd08f266369fa39f397989e9bc2f184959eb49db363f5d609a29363b0c51a3f9f7e690659d2967e084e826774480afb8769fe8b33c9adc1a6514e88f2dd9221be14fd8bbf63a0757653e10fa006339ae7c3b890e4f99e2a5fbbf16823bac194f8e17638511e3b3c137bbd6f6b3a6b39089be6854446b200d55ddc5321effeb2858cfbe2f5b9929ff6a7869315852bff683d4ec7f36f28dece7ddfd71334973f95a4f723ac8ae6234949c734ab94c93b9712bbfce2ca83ef6f5866c496f6c8dcdcbc074b25a89a7c20df96ad1554a907f7d19cfd5c892e43e7eab3f23b5f42a51bc89fe456f02c907e619d81db86c3ae14d52ea683e0168f5ce04c14894d8a2bb953900e40857eda4bfa84fde10ac6a71af06e298300726f57e93f20732545249100e6023509bb742f5f542bf3344ccf1543a350d6747e76097e6b9d53b4435bf6d73cbdb97617cdaf8d9fff47bde6b4968ae1a2f33a2c7b40e2c43980dd3256bacc60c81644f1437fcdf6a0576ae9ec7452952b6f30abfae4d898e3d0d403749efc4e571f7ba96637c4450e401530c3d2f119b09c132a4a5102443d84e56635d508bec72f2dde3f25a2a4696be6584dc5d4ec664eb298c5a64e7ea16012c82ea37d147424be41b9930c5673c305cb949cd804c256464dcdce540ceab1792db242b509875ecc2ad3123df317b6620329184756cfe4bdd2adcbf34ad8f695e415ec82f89757e9a134ca090733251b3e1404176bef8cdde9b20e0f1f1a9faff1df58782e85af9fb93c3996cc95f1ceb24a99a1d2fc7705a8ead9400547a02a845f086b4df6f3cd66a5692b3dfe648398b6031585fea1853d774a1ec63a34e29b261e0f3ed69e85acda28ec90a1396e168ec3486a318e6ff80dfaf7d34987652d3e3060f662e041f9da4a36f07ef140cf3302438722a581f616689162d90e814c986838f7b0f696d34ec43e9c795cf644d35048a4c2bfa24889b62ff60cd5838f6e43273e76c133b2626d15e8d68b4643a651ebda6f009474a808402f86dc615d5aefb32dec9c07e02a5957a729f7702ae81f9ad7a620fbf8b00e33bda77455ae10e56bc78732947bc1a02fd7198ffca6b4778b450de2c664c2a5291d5d3945c020e3424f36c1117e17642e4c7c9ed2153eabd9baca86bf0839e1de633f4b9e1f360dda6a4810a17e7a1ebeade124b542edf94fbb6e62256ce867ac671e5edcb5d5e6b43cff968ee9933daef38e9d3753504f3f83f0f852cc43429590214ef2e25fad50b618d48b6c8afb0a9e2fca55cef267990cac74188e663bea9ae6f5421f824fb80568e0f8b5767b2dc52e7217c0b78f1d4e8ba20aef43bce2678e46e57d58d294546cff59988284722a8c0ff095519ae31d186087be7d53535d52d6dec4491a1d8fe3d4d882d2b2bee1227d7e4e9ea2bfe69359e07cc19d2430aa470402844cfefb440991bc96041bf0e81b470829230e88ad2a18235aff65ab47f1007528348cf440c62585594f31acafeca132943276b55abf1ae32eb8aba072aeda16e6f7b1409ea7152ae0d340d0d7ace2c59c30dc69be94fe5eb2da353d571d015ca8f3414dc484d7cb205f6214f257e0b110600eda7a61ebc419298ef8761460e167af9d3fa901ed63ed49f3edf282fb22a7d09fe28be9b087d7541b20064f323b893d6474aeeccdfbec699363eee51f5b2f5c5cedb1cb141def7cb9df42e0a4d3feeab97c6bc95d5f7afa5f7a5cdcaa04ecce937aa4107906d65c479e6bec7a37ff966c7653bd9aca4b2c030412707e94c5e365c6eff2f575b60cf3207683f96487c65098a1770964007eac7097a49bbb09de296e39569a5dc7bd6387622bc81ba79d6c3ebca6d69197a78cb4ab3909effd1421c91aee6bcaf01ebc0585c3a059ab54aad3efa5e47a7ecb84f3ae1a843291e03fd233ced7ff72876454976c2c29e1e57fc91ca649f6f95afa2394451e2387c3cf50a611200165e24a7c451de43e0b68452ece4d881be30543ac213fc105effe8673b917c00638cd735ce30faf1c4ba8107b0b4110e7680e058db1b066598ee827d7ac09fdfdda9fa3885d21e3d33506f82d5c3774e482a5fae46c88438db3ec45852ce126d09e71da64db62e8d6241396833431fa5e7665c47d777f76f657da4022de2bf6ec7b468bb7ed16df69b88ededea050f8acd38436a1461e0619f74c6ec5232e0562957c55ddaa85f74d3405050101b5b63535fb47a2c026ab8dc41c6ed96aafe95490b95535b54312ec35e130a68cd96716ab7cdce64734c240fecf936baf8fa723332d5e78a1117ca984bc564f127622df951b7bb90ff857b05fb31fd415d17f9a2d4866c20775e0fa9127d1b5d50b02c565c0f4f2f1243f07db9bee3a1855139751376be16ec9e9560648fa53023ecb057e9204d13305407fbba6f2243e9e6f3e3f5cf3bacade265941412da6b4bb3388ddb32361829434c880f8a37b91c72be53805bf8d826095045d75e0b4ef8cb74f8f4746f3fccac27b15abf25dcc9ff6b245355f8b4a9374d09d2c2eec28751d362cb279377d49a540cfdc6004c5e4509a9aa30c6233f449f029a1d34e01e9f49bcaf04b7dad2e0b8add0a9f63511275f50ce5e064126d328a4d9bce62062c163df40c6537ece1ebfffe1c4e3f2de3586e14c241e83f058e40d647842a29f4d4452ab17cf6d001fe85eb9a1589971add1a73989264eea98297935045d65557d4f9e2c9dcb830537edc2dac56f75f1714f199e5f5baaef3e3e30c6b54524b2195c12d13972f90d5117a8ece2d34a4e1384a834f420e1bc24cfb1ee2a3c5c45bf4fb01e38849ce8f0487650b31d346598d8c9f8499ce2e28726759986424a44bb4d1f4d097e985905be56c56a027f68fcdb008ffbbd12237d582aeef186c6e2706c2cd00bece994842992e2c9ac5fce78df4fccd358578e54f8239d195a388bc929bc41e91f5eaac1487d4ccc8546b453de40a96d3cebda5d75565ccafb6621b17e76d70ebe1bd756b47ec4900541bb0bb21d9d0ff7c3d71c1d5ac74d6d09b170209d17ebf96290739b0da537c45a5bb6f662f0d2016d60bce1b47099fd64fd0561849435c172c5cc97c331ee510f80509abfda9a6c56699f9fe4e7a1257fc7ccac18435cc66f9c71b2758cff322f1cfd0f1cf7144e1c112427f24ec6cd617d802041fc4cd640c73bebe8d8b34db49500ec334fdb3f20cf4891da577372cf8a5b940098b8e2f8ea805255b1a7407c24ea0eb6bd3d7428fdb321ea522b380899a99f1a561a0a8d1fe53bbabf13019604823cc389c17f170858fb6aa39172a993e885d022e089ed644cde9a7451cc3994d35d89ee063a5207932cda129b401fb4140de5ec8f6a7f151a16c2057cf8d7f87cf8bc11fcff2dedbd091a38b3eee7583a08f2ed76b012b798c7be1fa849175de88008c2ffe9a9ae1826323856ff3fcdbcc9a30b0fa6d05dc04d7ccbab0d550b87236b63d83528082fc8d8f18cde1a21571c7235a2c20f4a788f0fee36eb153c4f7e7b1623adb499d5de103e78d776f30cad07f1f04d6f2f4f725a98a0fa43dfdf03cdd85ad9397aa40cc1a4df8a2bcd24c5022231ec008b0ddc45b13775dda8f907a3596477c254086cfd831f127e40b28150467bdc7f2a476109836b1008f7844574f674c093570c10c3481c3c6b32a546e7d70fa4dd374ad163e6018ca79165a67cb0256d69a277dc56e51a2e8d2a8e176aef8faeefc37b26b55181bb50f0459197e40a24a29a59845625282a306df487278f6d80e6161f4244cc9a93fc9545db07382f40057c44016e40839875d4f2550e4a929dbb802f5b0a5d31c6c1a81338eb762fb2995d7f90d8ee22e46c8843d7163ed8c23410a421189d35cf73892bb8f12ad80993a3178b313c97148569d335d9cd2c881099814192966a5624db9a324a944f3762ed97ce309e1500c52463bd67db4db7194c230e1d0d7d3c12e7bbc02a5a320dde59aaa404be9b113b5d4cad579c0b53c1fd64f8b601988cbc613e040b667ea58448234220d36741e2ba341d920ba0a17bc4f3a69925e5b5267bad19fc7751dfc4507e70d2a9cc2d25c4e73e57e6b42b2dbb0b4522661d5b7b772340bd5c0b35cd058ae94478529b177420b605acdc1d3dc91fcdc953e144321e1e16a016a40599df58299e1eb8d9190b951260ebf8c965b97e5bcf110d1058a0f01000caeb8a836609cca05391a281c11b4d86409ccfea80bf8776de2fa71839bbca27c68a4afc81fc4fe84a3300e784ae64754e0d64d015170864469fdf552d545d4072054f22323e3576ace95402f077fdb44a2c41fd7cdc32bba1faee10ba2cefdf63ea8ef48db9ab4cb27eec05c215896a08e033145c67cf7836dea057b06a7f2167c216cf6a71fdc9dabfcd569dd576c9f69125f98ac861d6f0dd3e4013e7efe848230b30fe257f01325656aab0782e0effb0ca141b463ea1156c313e705fa4521f7f08a45a31e2e8eb04848cd0ed625d8e516052fe6054209041bb10113e56423581caf4afd6e5486b5a03e56f8f2baa71f500f9e798bf081addec90ad250a6f9c7b73d6c97dd29d1d8744ee1dcd1b6f74253404349a1fc59c69e6e5e6a6e5984918e2f18c0d037183044188e9c56f75cc03cfb4356ffed64e202ad174d5bd93ee293835f5599c23304761b7935351c6c4ebdda6d6cb76886a2e0764e41d53283514d27db11866bb5acd7ad7d07ab585a8345b6f6c080d157bd6ca5f6162ef9361808e592fb23067bdb151f17d4b765455362331a4178c15852a7f2fa5b79208e0539a882a0b32d5d2c87b9266f19ed3197be470827f4ce825d8c5a69889d02fb4cab2c6821de26ea1cd4d8c6da0f8cedc77a13cb5c49131260e3f360ab55cee161618e8c33d49e1abce2a388fed7ad719e38f9d641901a86abe85d699c0798024254ca3d014176648f966c5f26623e382a50c8ebee5bc5d08a33b2581578641aa1394073fb3532f41957c7e1c602f2d0e93df2b11abecf8d5fee6215b5f48f48d34cde6e3681c9d34c1b39302de65a9406e5760a84a3403a672997c5ffb11007bb0d3f0c44a3f8cbc6bd82635331209596926667363620f8066bd9ac04910be3f553f28d4029b7678d5f161bc9bded3299ab1baa7e1287330c4711d12e5b5a42af4d225519c7d9477de54783f9a1cd6de07aacc356f58317b3efab82357bea6625409d7ad2ede8c1785fc68a19775c8b2f6feb1eb546167f9337394ebe987bab24ef440983e9f54822d7a7f6be890a34e44bf298800235e95bbe9c228b9f1cc89afd35d6f80d021f0799262dd303e70f953c7e54743252d850969133c1c041edc1b1824d45e541c1a94083c6662751375d23783d4be0b84662b00379f37b86c5029510c3765c337e73dd67244d06162b071a5429011d50e35864992ef44dc36fcfa31c200929519f30bfd4a4baa9466c7226c40f4ad67a1a62a3f779c333b4da8defedc2eba058ea2885e450094828154b786947152a8e8c6d28b762c20eda59b32f7ca8dd3156c3891269e1c5d92c1173b40b0d0397337bd555a9f3cf5103e6390f3ca58b18f95f05b1920c2fd6e3f5b84e97046a5bba72fb3e85ae8676640d269b082836169bccc12b8a62f98f00bbaf791ed7934ef94b21a1baedb4d8383dd03c647a690cbd5a65c4be37b55bec8f342d3827fab8be18e2ccdad20fe7c31980430b3c08db332dcc4575f172eecfe800349252e93bdcb2758b5845390e31544b1c41acd5cc20b83c4032011a9c460abdcdc7fbeeea479e566bfb17735926e63dcd2876aa69d3570ddd11b705d5f75ccfc3384f23e6ec6e902496dacbcc18823dfff09d567487b09d9c5bb2075a804a569e333dd64c3d66832b64d7cf27939518b86ba7c3873f709a09ce68dd3708f70515d0339db6bfeae01416bcb65e6a3907f7ffde9912f12f40335396040dc9084bd4e8ac58246d2e0e8dde1a88c8935370064a25a753b3f0c253ca5d4e89a687e04675a3687a717b794508747075b3e005ba145d8b679189fa5f4031bb0c95404da744b0d93f56a5cce89d32ca1690cf1595a0dba47128bf562ff6d0d0fd04a7795cd0811462df6c0736a616db2ad0cb13a16b9564340649962dc1f6fc2636e524aab1b9d5ac7e7355f7bbcc7c2f1bfbf67dc685bd9101a2bd9f4dd02a812905bec8344678c7b85c0ca1c2af8b9605285de3dbbd23245858d2a2dc17fdb3c301d3c4f660cfc5dbafd17383d2dfd206acffec6b83c13eae84d67bbec106f7849012aec4e04790ee91cee209be02bad90286426a7dfe33e8a0a51fc7671f3aa29dbd64ed6adb5ebe7a10f2880567ca2bb8b4a091a402bb790934cadae917b3d2032064e061c7186d17dff7c34ac2ab37da6699fee689cd98d4408adffbb9736fdf8e63222356e2af13ce05193a9aa48382f94ddabc6ad7ff7fa2973b9c8e6e744d6341e863ba76cd1d95e03e904afcb3307d3e87fe9f7da9efafe458474c44759c2f18038bac84b4dedd886ceb25dbe504c0b3ac37246b70062543357e195c549095a91a7a760e6bd14b6c6bdc28e44cd3cb20ec529c80b26d80eaa47d62707bc944f7b501af8aaf9f11ce8764db8283edc6f76515ddfd986a51eae74d02f2ae7f936e052c0a1f391f03440a8dcdc0eee329789650e08f394870a6354c4ddd0b801d93a583b4aa0ad83dc1c59f66c5f83d451410b4a7588450fdc6551c3c3dd1c315bd675cad94b0b88008c7fbf07df503f3a18db29121996bf2e78618a0f9d97e3754dc8ffd9afce678394fb5ebc391dc19d6e5ad7b009bbae07e9d53499159e75aef62e6aeec9f290de0851a4291a6cceb32a0f68a2c858cb89cbf568477c3b454d70851410ac863b38b1a468af9051963448a3da699ac3e0efa71db065bd925c12a28b66f4b616fd212bc6ff616c367f0f2827f021bea38729a96b5e60c26d4a9b29731a238159675d640853259dd095e85ca6e7acf7e6f82e6f69cfc7b8ba72ec7f257dfc093e77f051585df3e651185bb127d561ffdb775ccfadc4816ad4d36cab90a878f6446e8054bd57d4fb669ea6969bafda6942aaf8a4d79d3bd9c1039661449e4a73f9ff3d5263f39ce9a3e4791d3d9f06bb3a2fb3cf4a9e8f3c1a36ecd65ca51702fac5032cbf00d49d06a8320358d8fe165e443d2c604fc4ab3a41a24d211dd4bbe95f3fc044ddb1376849eff452e5814fb1fa3d2f0df7e709599c23b45f780bf485798c93ebb8959ab4179f9fdd27aa4a12e2d1bf88a2e71e8ec9144a5a4c1ea79613a9927dca307ea21c4179c63310e386054edd840a67b2b7b56a4752de2e8b1b15972c8c925b9b37ffa7f37065f22371060275e1e6734945a75e69a667f89eea9132216ac1348ea0f5f3aa4217868ab25153d0adb10653a475706c3664bb6616f373b6a6f73918fc68cab13a8fecbe2b41ebf38d05b28f507db8a6aeb0efbb2beba1af7baa4e95507bb803a5e51d91c30b110833d8cb89ebe70539856e12ffeb82bd580391c5ffcfb7618e57cb3117020afc3ca0074e217fc04d98d716aa1407369e5f4bb20768d664cba7b65471e451ebe4febf05b883895bf8be48a71cf83e3acfe2a89df3af0fbf0614e2156aa2980b6fde506984fa34cf32f97fb9927f369ea94c1004242233f5ada0b3128d0b7992f7f136aedd40a3edef63be83a770d38b21a91745595097419878ecc2d68775dbaf66ba669d60f72e1e2ed67f621043c84ae81a5df02e55b00844526a612700f6529dab1affede0580b74f63b2593c73b1504b0f7dc2997b8e904fbc3211413b7df3071c4309bdfa815eed00cb9aabc25b2e90c7f7eea00349e49f9e1558c167bb0f5d3005cddf5c0cc8b9db0456bd86a438bd3ba72ae9b5c83e0c7333ceacec4b97880b1a41e765a4aebe7b40ed149038ffa88e7682ca6109c3b7057740ba7b49a68f926d079c5e5127d6c0ae2a5965dbaee3db7edc30b25412821a3b18fb5ec178d3cd001a04d8b641e06fab7546d7b245fc4687840bf087fd974c46f73f4610125cce60c13b4a80b4c92df464ec8d8b62178da2317ff8fe91c7bd212a3de1660cb0a5a46a3178a0d7e5b19403d749e1ab903783df1006326c7e9c8b12b7dadadc77efd129960333cc7782bb0aeec724351a6748816e7f0b431a08ff135a8f8dba12e9f1980317b43c5611078caee1af712e698b6c6fa181cc99dc4dc52bc2256533c2ad9721490433e3ae0eef4552797741f0f3dc94057486472de146be421463cab2b26b83e48145bed7b8560229c15fdd24f84c9777eec0835612bb137938aa0d5ba2e3ee7180498aab289bb234e7f983901117d106972497803a4e582e0e31df91098e2f0c4e3d87cc543abe1f99ef55c1c4661284a903880a9ec0957a6025a54d110a7b2be59ae364a3cd2d199f6cf88a7bbdc242b532e680fc5289fa45d85d0e9e161fffd752f755e94bd53000d095ba583442e56fc3cfabb789cdcdcd32c37573db07ddf250bc630509cd15be190006e68766dec5830d3115d8b92e281ea0dceb1f916f3b54a56e236fd0380294d77938816153ea5c1c06889577905aa11736d0cb6661c1421b0e1ff16fd69c8666b550afa90fcf7986f9046b031337c8991c78fbcb6165ed5a5dfefa98b512026bc9226fde54238e77174c2c728bdba2b61aa370b701d6bc7fca152319f55ea29d1e3d9564f9a9ee09aa8569d927bf91aeaa386c011bacb7734f207f680db5cf4f7a1bb1222f60d636684249234e88ef64bb8c353bebbe0e22dd813deb1d4239e40b9843ab89b94a6ebb9d89a7889108df02e6b843863e6552afb1a703de3bfe335cfc3f394e97c1f6feb4a8c8970d481cdd6b7338e10d83dc06007149702cb4a33f92f8197760b6546311828ca437f2e43320dee113a0eef18a0f563ee8322386eddfe199d3cd9487256e5b29772476129fa83a00c660b2fc5fdcd3ca48c426d527dbdf9903ee181e19ea50cf1d43aa96b407e88edb92eb7bbf448d35b48a558e7263514f38e7d523d015a14f57588bd0df4b842ade45b8f5cb7baf7160588e077e4f70b9d354da86f9171ec7a03905d85b573cc1a4ea65539536e4333e7c542f218ec9d3b9b6323ecd3a40016f9c8107abeaf4d619cf520a82072f9b905c3dd756a357b32e11ef25b33b74e210f33e97fd6069eabb1d5364c1cbedd7f8f12528450e18162eaff4877e025900e50a9c8205f98d2946f8a45c0c2532110f821f3d9694cbfa6658e9be799e8bd7a31833439dc80e030dab88cd22046c9e3c67e52a857767f70ccdd6715e701ce6e682d0d23f830464fb7769599c6ea21b2746103e9ad93ce0ace0c08365d2b918d8254a272feda9a42aa3cbfd3519b155acb4ef185012fe5f86bf38855bf057af3a09224d424c4e98139c887af4f15e64bfe45595a601b06aa540e75ce8dd02aee05ba4f11d45f0793adfc8516ca0d90383e6b3b2544dd73bcfa2c6910f1a1340b06e27fa0aab756091f1f75ec51229c4f5768e03edac9ee5ec9c1c5513cab1088ef2471a22a9ad528ead855af9a9cba00b8bd191870e81130f1cfbc5804d284ddf432448fee89e1fb5613e8d139d426b6970a21ea8cd230238cf09839b0d81c846378524a0e93157401f7b0d32759f3d4f980e09b5357d5b2b6e16af036324030c9e749b9ece7d0d12c26fd114b9c2270488657dcff44646412793bb4886e42de3eaf2c38227cd2c707dea8d7d6fb8c8df99d28f2aa5a678647f87e921e7d4cc3f504c455a65a35b872c3c0bdc7d5d73bd6e7194b7056dc94c23edb9bea8445a3396bee5f564dd1fa5d24c44a19bc43e1e44ad8c5bfc11d1bbacd20554c9d4bac452705efa9104fb731c1b851094e18506e790593be038ffb1d50df38459288f78ef253f023a951daa096a87f45afe38f937162c659f2bff5fccfda1fc9e383f28f69921666c88160b51d060effdfe788f0bd1d383c68cddb25a40f854ce7273b169ffa246b16dfaff761e93afe076259da99396be127b87ea1c896e8dbe4ea667c92a200a01b659bfc8834f6abc7aa303788409db473387cd5bb5e9b76ffac90b77a38de45ed073ef3ddeb3727d768ad64d2d88efc6ae8881f46075c1f2bc7789232fdce12331ae60341fa0b8c1ecccc09d86f548132881cd7fe0b3063f73b5181aaeded3da462e6e55fdbf813726cf472b493762767c6ccdf18d827750a6ba1e2856f14deae2ff5375b76c700c18b836cbda572fc8925b6f690c859956954443657f78a2e9bf78af53e996c8b3865a0b52e927fa694e5663bd6af58f433fe5dfc7d155571907be60f03be76157d1525fc08994e51b4e1f0e2d2a01cce646e02980811551f430e4eb54416bf1ddbfcce6a8e25e21d76f1756a66b9d4b908b73861c8cb54165536e879ef843063018fdb7d3982b1d5c8dfccc15cf2503be56baf51b7bb14e0925003be9db94091e222513a89aa96d4df12e2af90ae2b4612c373b9da893ced44149f6bd17c887417d7c43bc2596c8b7ebfac22a335c56491ed40bfcb399fd595293a3be744101214d8565b4a97f1de4653fb5fe2e60d9c26156aa76c6d9b70df4ce5b666979952729ec0f806b1437c46e7322c96beeef9b260e589f8b8f8632524975385d5d8aa2584ae7192d765bceeb5d27b8a30c07d950d476c9f22ca6644552cd08a42547f1c99da6c48a5328c647c688c1d3b9d0d48bed3f0a8c784a2253df6cf020bc03618546e9412d4dce36c5e74c73d6c43f7e0c9862865f09ca079094beca5048cbcb3140ba0db3f3adeb6a9a74168b2c86dbf85ec02049b848ea23252719f1972496fc87ae8c6e626cdc71d7a743c4c41db2dc735e3aace34c105c2a511205cc951d6970d8120ca7b594ac0905fa24c4b96913e2eb51b46e6c1f9b0b9da0ddc9bae2b4c30321ce1af223352d3847d5eadc865eb32729167a9e9e0991b916652eb262a202071ddd0cb85218da514e1147df15e0e076696fad408a4995967db9422d0f42f3d63767c2bc1328d0c508c0aa2864d4690d0d509baac914813c5c6eae457f494424811c9f8aa875bdd17bbb92db6f33f2fa27f552316686b0e91c533ce151e1a1c834370e4a81b3072a13ce5ac0bbd27a974f728a7ad254fa95b17b35d22b9bd746b0e98f99e45bce170f49de5dabb1b94ae5ca316da20ba512643c38fe4605b6dd52049b691dc6d87ebedb0b907f80f967d7e918c72e452815833b3bac85f18cd3aaa5fd96a3ac6359d2181a7c4ad10e24c86762d5700f94926337c7925f9f9b94f0ca2eddd19a7d0c1773a0b45ea5bf6498ba18fade80ae81af9c5c6cfd3a1e39b58936300160acdaae7c09bd71400693d6a3bd5eaf82535477aefb6af7afdd2f6adf7965c423103e94de6fdd10abab75d922575f3d0cd42416e8273a2427e6cbfef81c7e6b0afc0f9a4e91d6deb7dd4008d22dbd51a0ebf5d886bcddfd22fecbbbe37b36f0e581a526435d5b4824dd1b82dbd613264c562fa796a6f1604e73da3e2bec0e399a89f277068e6d70e9689b5ad913c28a87d26f8df4f5ffec8f81f96bf871ecb5665f77eda1806a186c9d8255fce8b58cd5ab44b0749a48fce5ec4623c0f8e09e656b65fb686f2c7fdb68bcebeca04c2a18b512d30fe365a0521757ef8c053fe1ae9e1a83dac418e75dffb61d8075ebdb080a58f472731d6006e23263f96a55fec765436653bdbdf96e079eedcc7fcbf2acb1a1d64375f775b5778d51f93c030db3276085e0cbd508b5e98d2c2e6998a259876a06802fd34e425b8e805a3ed2a9ca18cbc2a6f16b593de299daad6b7d6c87e317fc049cd9cdcdca43cd770a977ca9ecf45e19107848e5337bca509d31f320d7407a0318fd4fdf14d6c5f5d7f8aa423a565ef70d335606f2332e13051970f6708c527ff1e62707ef375896b258fd2a505ce7e15ad4759846b0d45b4f8f2a55460f19681775ed75829a5db21760878f7a0b6fd746dbe0c71cce28a2c210b6411dd1aa821274b4d08aa36ba4f58859ae65d1616db6c9066a4a4e749c06141aa73d3ec4c3cb75d2ddc34e80c138a4de31a1a7d1162e3ca0f572bbfc00d6025c35ba71dd465df06b51f9cc9a65cd384522f277047f0b08e6899b45556a07f2889c217e4f28da0a776b36cbb719c1930d8666a7e79e1ac3654465527ea1245d2805e09567456fb526b4fdb5a8fc98cef2b6fb4bc88f800efe6e4a087d5caffea8b1d50e3a9f219e14063924ff63ed55a8189fa8a94ac56f4152eebc131aa85f748f2048e2d1d3a1bd6e48aba92f64d45ca6a76d77bf44fabf2cb107854a0fa5f3fb4ff6e13324fd8273f080e2c6605c45f263f28cebaf975deff33b8fc0a7781bbd7529fe3fc5a6f6e5181a8d8ad20d4c18ad5c4917a403345a82b3f8beeabd1abf2cceaa3783857b970539ba751265789a33e6e46745d0c6c3d566c8eaa3f22df01a5873a04f17ba2d82cf3af9e12a7d19e6977630ac68188628f8369377dbed28801146e1b6974b9cdf2beb690a3b869943b6a18beaf720eb17b6dfecd896734f8aed64bdc0eb8bac1e905a85c76f12a7228c9341c4f2b97909ddffd2012af09bd438d5b84d6e687a729bc2ffe04621464590ba75b063d3c8f106088ebd0b76d51c4799a2648d2cea1325b86660bc75dae5952f1339815d09a06a51a3c6c7895e75c7ce8eef9096b4878b0476766e1c26e38259a29be1e86aace1634560df9f45f8d550ebaa834786cf5493ba75ace63d00acd51af7ac46ffada61bff585bfb99b47f54ca2696ace4e871e12b9cf261c97003cf705e889b41e27f58a12c3952c52a2827df26adce2a72eef03848aeaac6a613c1d9e8467f89ad329828db215a8071a6e93e94bf0b345c6c60a9ad785c194cd891d05605dfc55a293fa15a84e6f08ce6c6e9f6c209e3b7af4815abac0dcab20d597586a2495ef86af88e1fd46e878d301b4dbce80aba6ede30d6848363b8f864cb9c325605aae83d22305243225dc7a9e2341b293b38d702173bcaa83831ea06638171d2896b4c203ad85341d9fd139ea878364308848ccf89aec0c01c7eef48cbc0fc0d53e123a95efd486c90ada18cecfaf7c28a6c409dbd69ffa42b75eee12c24ea50563d28e070a72d26f9f7f9d734dfd79f6fc49b11a7b23b6417ea6abaec0f28748b0b22db532dd5a313a8585b3c35187fb81c0ab55c69279db4f9512bd1a159b203316905feb6593927063b5d46a9b6bd9bdcc5df7805ddbcd50e9c1f6cdec076796a0bc9efee336343fb332fcef85cfa12ef8c98e09e98fec909bff22bfb7efe09920a9c8418b18559a2d675716eed1ad10b717f1aef8d10db4289fcf90dcca1de3577a9d7883de01c5e2fb781ebebc75ad39e8361aa84e8e1304405bbd95c2d2f6ef2cc2514769aa6dd9e76cb445238136a9eb9d1d815a3848cd099e27f743611445259a61e8ecc42ffb5e6c05a9c7e5a4f2bf6a09126e8351c4910cf270bd7b8f8247d0a09fa5c8845c0507dcdc589b3fb9fe1e0f3aeeb0481f8ab43da428ff29c85c49b76c74c677801e5cc7dd163b7250c23811d9f61f7a53e42b7c3887b6a42929e0034d35dbd5db991a801279dd1ecc1630caaa0bd829c6eec5c3f2444577f77763fe6cc57c825d24ec4e7a27faf8cc777597a663f13710f5b72065c8c39d386e17c8e6e28782b8943185ac25806b122b391f8e4cd57118ecccf57279d99afcfb8135c1be003934f36a94f0d8a32607acf717abb82316c98c20a97f87066b13c6cf4cd5e2608c8abedc759c246bf8292464fef7944a9597f3e0394c09e87fad2c199714fec07ae5638ee5b96c25f7f6f001bd23c81acaadf8c289c44304e980d9a304f296cb1c26aa716e94f2dcb319c303f1e8f608721157a85c105b17da6ff7d281e98dcbb81dec66a84ceb7b3e89adb51b03ff568c18320339b20ea69730ee013481491afbbb3a3e28a5add28ae160196d7bce8c53f6335ef910939caf1199024bc17e9ebb410a3f4f86fca513bb3e0991f7fe8fb6ffec88f5ec1137c003d7273f34c80849b2de70911dd8d89e65e81c09866021c0badee7f1621b3297620a16ba6d5a0ad4f1aa0d4bf15c3a2081c6e7def346e650f1921c750ef471cdcc596c0f28da1c0eced2e9049f835feb1a895ed529d42508eb68838bc86692882e59167cb59c4686059ed70bb9932a6fcea257a6b1012890ca69fc51ed31e70ca1ee0dd9bd4131be05cd86ec457ffbecd49e9f3a0488327cdf713ebf66fb096a25d88a67222c091cdce91fcb5bccbcdc3acbeb7a6e22b4b1613a53dddb71a0565d269a41f7b3fbbdb04c19df447eb797efb46931918f6b84a3069d1783c690252132cd4ca9845812bc0d93b790b21f6e4c412c4a6a55949c94f00c12604cd83c79f6ab8a70303e742382c0ff4e30a2bf9d8c75b084a7f48f472cdd0d2e1de07212172eafd447539a63d81e131c699b5d765c2ef38150a044f7d9eb0c853a4df58cbb0549bd525506dc4d545f7a01b9ea6e549e701a9014322f3c00fe759992987152eeaec46f9757b954cd9b32c48ed0164bd7a3dd149a88c89c34b2befbc6a86a5a8fca87666d54e4557a0267ba40dba0ebf65f517d5c522eb7dab4da2f1f94522729d39a28e2f34174ba9c7da8497424ab41dbb96fb30e3df062353e4d97c6dc4e00b2351eae71c846e915f71e42d3a0bf35944fc4bfb8f56a8122ee26cef37d6f7c03f6ac86755f94c534eced2523dfea9eb24dea91cce7cef896110e60628eb029d659c319074dfbbe5cb3ef8c2b7cc8fa70ff933cf94175d6ef2ed8a13e3b0c1230916b5b24b010bec40b6fee36c8cecb934627dced7f51d0aafff90b193101e8bec2645a8054cdc5a9a8d2f58cd92379a106c85959f7da56b7a261668028a24c9d1349050bc9369c201f1a8712405b417e993d7ce420f9e1249b4ce1012ea084d30bc1d443a64f4e6910b8d438c44ce7b45e9a3f34372ca4617de8aa7ca3299337c962575b9044ef7c02ffec122f1ab9fa8f2cbdd7fa5ce2f5c4f9601143307836613ce6d26b5e5f0508c7dfbfe817214ba66cf36cc622c657b7e8d368771205c16717f8e8a446fe78e6b997783d3b3beb0fc14852b4a4f32c87c4cccb85d8d0c63b93e8c92cca38d55b01eeccd32a9def3eb13926c3361f7b3c1da91acb960f08b2a6d228ad4cf8dc054f8c57e32340016b3767de1d79ffded68bb82c46f87158285e08ee98cef79a38f626e777b880ac4127bba00544450196640d8a4dbd087700fa2484da8b8253bc8b403670005cc7ff50eb1f3147c11f77e76e6b48bff24d4efc9d5156bfadde00ab3f7225ea19043a890df415934da6cb9421ede6aed7a9a2d09f16fd822a86f521d256d7fb8c16514c722b7cf71c961a10596f6b21d391efe53aefd8f07d7453d612f751a7366ee2eff40c471045510490d4d3d8625d13b87ddefddc8d1a26bfa246c7166d93eb73a42bd75f926623b0180712d216ac41c0492390735f61e7e1c0be5b3a2c74b1ec2dd833c326f1d037b9180eca917e0b4aa06d1309018eeee7c6c55e47ebc81f40f5eb90ea5f4a226ddfd67002965bbfdbcf93a3f766e3362da6ac0353f2a26014115248890f5473b43e39b5a9cbfb13f1e265822cd297f6b0488bd96fd07f5db1bcd35e7f0a63939ad665b86c0db77cd5700e3f6dd62f6407f7c0c5f5124ab62e41f8d1a2e3c192b2e3f53b1b3aa241902a3e16f7c6b8843637c77299da818d2b6ec0608ab1f3e128f90ff3e933effe978e6578c9af5000e8a052ca8a213492490cdb4b21285d18c6d3b1e7eff7fed5457fe52fd347f258b7d58f99e605ff51e378ee6bbae2d24da560c0c0e57c8682d12af8800151c6f2bd722a1278741a4a3d129ad54d00316b7a8043fbc0b073e84fac7be698f993758e80713c0f6c761b10fdefba15ceb67ae58a220a5cba5220a1ace3626328d1ab16ca11a734f939c567598e6dc60f806946e713fcf8341fea241766c0dfa2fdd7ed843f7a5fef898cd2068ec3f7486c4c1e713a28ec3b22cfe1235292232751090004b1457f80e568da98004bc0b5f16b321b2f2b00dadd4e519599d1ed9dc25446408755ebb87c7d0d3545f394b238b2e401c726e54f7263f42251684792a58f5047dd29bb6e0cfc3040ebe685ae19b1597df3e627e64a23507ba97f94886b8429fdd56760e31bc2fa4b4dd6a5fbd7223b64c4c78478c5597184eb29a594525e8d96afbab7438aff9b353c6d1700a0d18c1469d2975c2de44942da2de2dadc5e77ddd410124db918cc91a85531459527d7c0bc37422517d3686a0ebdb9486f0eaae6265c5be836a49582c1fec3405910fbc606167ba20cd8f4f5a55bcf0519d11a4faf54fb19492136c5f5a22a578a6cedf91e1b2343be0eaef260586829d2222627dc1cc10d8833f507256002c2b28f7b44772dbb3eb6bd9e7c54f320350cadf9a7329fb9c1ed6e96a54b679f2bf4561d04f7cebac39db0d404be4faafcc7a649a211639e1e4b2830fbde68b889286ba66655e592cad19b98048d8ba4944300a6bfbac6679eb01e7cc80f9382fd815d75cfc66b391cffd7208e6806903c22038762beb75b6392169d1dfd9572c1043504d8bdfcda65f0b5d00e2e507bec5fd0159579cdf3cbaec9c2871ce6dd3b46e3651ee45e7e0ccb43116f1d7ae8a99993afee7a49784ce55e6d694dfc2361b133749d7b775c8a67e2c223dbce3031772acb324d4f7e67c95e35531097e4a8e44dd5bf7fa04b2a4f053bf5f286135975de7db632bfb8d44f2c5c6748141bf2a4419d4f6e89007f85425e48d554580b07505931b12b23be4814a107f8254437bb1abced5356a8f9a3a92ef02e931416c306e761bc7a4c85cfa8034d9e1a31962df437e3a4c02bf66e73ad66d639850d5686fbf833ad04b214143e4d48337d3d972a4bc7a4eb5e38e959f8de5457ea1b08a632f2d387163886136b88fbd269da9286b8a88fa0a52e08ec97b2e43ea5d0edf4ffc5cbfabe8561a7cdd86e32347c172a3843b91d88774d5325370336e4305bb33c6289c3767979d82d48ec4bd287049049c44761e600fc8809ede91077956aac1f8af35caa5f9612e18fc5e49aed74622d73c22a08454456bc34c88b0db8563e556e4d930643bfcb229800ecc0382f81622e73d47304a6020b5fea64ef3de6357db2d2be005f3a5da9abdb8864c082be9b61574d2db42a14fd4b56bfe913969b9d637fb074da90873bdcb6ef8ff51e44e503b034ba692f8fa8c0f216e0e3d49ce0d3499e1d37813b8c433bd1627177e887d9ace3acc0b020392c72bc3a7d4d418ab02a2d9d5341c9fdcc46195d38413e22d3a4210fb20184f8cd5107f49a10258656234f2c726c46015a0f609e07a780f98d303c9d2b03a98bcebbdebd12db4028b05b0e8ea254c43481f3b38b9bb1dabfb5404eed226a1709dd0fbcf666b0dccf71a2ad44004c2450705b2fd91836c8eaa50a1fbcb6a0fec43fee85d07c792b7406f536b75c803d3bfbfaf9de41e035ec33760759484b6395f26bfacda480f337a4e2fe5a03cc5529eb8f197bc7417ddc5fb04a6c3cdd6e1f2d9d05883a7e7e92fe53387679d430947655334490019870b597b0ccf653bc925d1e7d43e51a2be9246f6e52743d696cc45ab658967d10e7a90861296e2f648a03e754f1f09a0f217583a63087bc142f55814c535ecc993a37173ed9f6ec2a8682a91897f18a94d9876620b59ec3aaf916a9c651e72090d80b6da17ab8c552df1a9d84da49a8749cc0bca55452b30663b0422a1786fbaaa5029fa66b4a2daca6a93038debb490a14f73a656a762c54ab7832aabdf6abf5ddd3e2e94d32e13e059cb67fafec6687224c1ebe8b319fc1fda4836843dd06c3c027ca5690bec8910829a874e84a712cbd6ab28175e39360b88509f60ad7690adc41d18b94892bd62fd53c685b12cb056eaea02585f2de8e8f57f170a30a046deb8b6192ce41a193a4e6a86c9b79deee06d6e7de0a63b00e88f34bffd849488fbf510642ed5f0e0b4ebcaa7629cf92a496d83e4f66d0b9ac8cb06e37b11efdc5934646d09d69eb7e822478398c6b878340438a24a258979ce3f7ee7af97c2fd63c9c59df271f4217e7744f9e260749945d4155630bcacb664358758497899af1aa7d4088992ae7279917bb126f3e8ec77bb9cde6ae5ca3d56e9a9ba82938af8278a7164f3ec46262e6a45a67f07f78ab06ed974853728ba56eb66dfff6f4f39d3b95a581337f84b1b9746b036adc104e06efd8c0beddee272a91d3ae06e5c27cac2a324370c76ef4ef88102961f596291df02561b2e9972b0fb9dbbf43002861294bc04d66852de5ef14af725316a56252dfc4931ec0b3f816cf7e0951b042b7f623a6365d4622ab534088a6d0c164d44d0642c5cbbf9362746b8c5f40a41e69d99d713f251e3d349c7980e0dc9094822174568860058fab410bb5ad52e3f6801e6fd707c4773daf3ba49148423ad79130176e6567c487451c00d1a698e3ec6d41e7ddf124575fd4c82c3c2d5028e57639f4050ebfed30b04b22263d344fcf580014923f25a5e7f717edc2f498425d69e30bcec96665e17938808246dcd79ae81532b8e67fd0c1a6ab9bdb3a087660367aa443d95c5bbd5c480c06a9314d23f11baf4b5710f9ba2ac50d526d80ddad4d8942201c50f83f896c2b34cd8bbcd4f66269bf5625e9913e32db24cb0a5cf0b46832b90fc154b4389c57a9d564ff790233aad4c3d98d5567f4182e2dd966aeb1affa965487a48b1f5396b029d98cd1f0ac7b240c72e4bf9ad2d9cd2a85b9dae48999e9c0c973e1dfe3a019b7b68bc049ad583a33c1f1073b5d00db120d6e2ef363beabdae42f43965702dadabc44a4d4b1bad3f9a9a2ca98106f6345f6086ade05e9bdedb6dd3407899310d51243ab0a983fd422b5792495d329d42d7b6ad203495b152cf8915b4aea789dd34453c97a6ade3bef6b6948508fc3ee418b4121f08484e889941f17d6dee05e76727e33e8fb608d665547ca96f3028e66c9c860ebbebcd5875ab4bb8d7fbd85ea77c3fb6601a8ce8f2f91453484b632dce1d1e5a798800db2955d42007b5c17b2d9f6cb66e8ca7a8363fdb305860d3162e2592cae23ff833c7ed87ea78a72585f88afdd9c042c699218bef2e66d4e9b0f24f00877a969ded92a524454e55f6c1cf7e86cca0310ef608bacdcfa7f4bc5270119b0e56141e96d0a6c9397e0fd9079e98a363fde4ba1e476c52221978630ef0be8d14b4edb55fad5446a010c1c0bcf527ddbad0f3f40c50b16e5efd533bfd980b6b344624a94c1abc6969b1ee4427b483811386d3495902b82d2a2c43234933728da28d939ca576d68771d1a1181879213c4d664e805f60c93ea2bccac64da0b49fd26b71b9d436f3b9757a2d91bbcf21903d0fdbdc76e460f460550cd14d89f97cab7e7ffc802e99e63e9cc39710ac147e33bebf4473368c6da970ab86779171d84cbd7b4b33ad6c8fcf54854f95ac8c8cecd36f33c0004dfc342042d530c4cb5c5045d5fc57dffb652765630dfd09933811c5e87797df023cc1fe306d5ec4230abff2ba7554f1c54ccca1d5bd53904ede4b4ea5b7ffbbade6e9e50e46ca7cfbc3fd0ee78958522e9d3acd13fcbaf714613ce4d266fc980e215f9c3782779ad8167ef8dedc27ff6147cbfb04eb0704314007a76e427a751ae65d22fca2c64ec69f60cfbb6e65b6b92fb0c746f234ecb945f99aa84b2f2f40ebe2ae06b4222e87256b4e4a9aaef4b296d25b1cc62ba4dfa63792ab27d85845cc6e448e4eb1cde06e059065b7e7bf93f19c1d78acbc356845d34a3d76d16e0299b065842574997b4538eae3dd4c128133b50225a6a9a63f52321db9cf49ed18f18f1c9872dbec023f9393b52494a1941e784f844d409fa72b376f3e429f5b3c811510a0a8216918bb0933840a740e0202032ab833796b28f6a09b38539316dac8f9279727a3cee7da28bf704c4eb4d9ea3b048285da75a37d352b7ca8ca0c86ef033c49c3b6e86468c4923fea95588ab1e15b0ee1e86387b50c61ba2b8c5292439ec433f1e18b907ee028063bb46c1a1a4d1e42bcec58f17d054cdb3295632aba43a39d7b8db0fc33edd71bb9abb8efcacae633583658d6530bc1b84de5f156251ef07b3f1ab2cb95ea4ac63a43a58c2847ca8cd499a754147fd04493595a74293bacaa31caf85a6fe737ea8b47649fe54e2bf68a681fe47f3e490d6e60f03a5f99703323067746fe4a5518924cfd69de8ca882ae83ef59dab9073bb2cfe536b1568725d53a76f69ee6f8d5d0bd2632878e76c6ad548a1309919bf9087039470c67cb1194c0ec18a5835a997a19b4f4e6f93c23ee5c9fa443a3b0c950afb4f9db9b52f9adf427bb6c53ec16282bac760ea66089cbbdc9edfc29fe18e73319c07fcf7e87f941eac7fff2ebf929a2eede7f4b2041168ad48c60f61eba0bc9d508cc2bebe6eec99355f0f9f7eb24bab418b69cd0f12a4cd5d4729a8eee23d1262a5af46a7e1e21b7ae505e5641d50786f017f2d907cc0c830f5222cedca8063da4694ab608d604dbe3c9eae5bf3341d8d3a26ffb913eeecacc73b48df72ea67902d43ca8137432c62479705a5c44091565ecd24639765fc113e3181c3a0ad88e8ca6851320db4fe5c219bf14bccf7561d01fd218670e31599e401a287f9d7513a4eb4a1ee6b60a7c7c0de3f3736691f9eb1024059f654d9d2553722eb772c76bfde824346c9e7a070a4436a18b5dc513d457086735645372ff594b9150518bdd8f5a33c383ef8646e286d3e7ef8258933634ad70b34519dac106dd321019f561ab6165b1efe21c326632fb0eabf9678f84f1e1082088b12538a7754c5dfc7c9219750cf174a825f87f0f5a3b0c0b9733ac6dd3e75f8ff6ea891a7cabb4915c1c65c8aea65a73390aed11a70aa63b223559cf6226d9639f88cfba0596071497a6d58f9c33cdd5b6eb65f96d1d87c6d7b7b4466c106c8c9b64618dfcd5e61d162db262f9538d230d9f32dbcf0bae85339fbb652a0a2e07687ebd025bf84f8351e2e86cc6d1d5c044cf360514a4d0c75b20c30e44629f26fe9b5b146e8aac83eddd6ddcfb4fc8be46164687e605e385bc32a597583e533999c5a7ac8e0e119ae70a20a15c0ae257a24c36a14b157a92d156c76f701c89a600499b3fe829d3a66e66c5e1b4ee664259ba6fc240bf3e2833bd8aa1b050afa7d0247ef9803084c53fb0adcee066599f0bd0a66ba562bb73f2df1ff3c812fe4b07ffa6cff83d29b11279fc371084edea8adc8697907fc1a96f7098188bf52703bf8e1103d72c9a30c72c52f7d38ec2f8c12f600427c3b458ccb109cc7a2fa9b5436f656c069ab30b64b4c09806b37e5303dcd1c73726f646e02d7127c70b0bdda7cb776d9dbaf5513d2206efc1b70ff96b36c54d072f1c4a8aff6582537bc1e7577015410e8cea0f303b1474d061c88576e5ce37573512c7d45a34c692c913d2ce1bb7d35182a655212b7629cee33ee390a4c1d8880ee0587afaf140ccfc6a601221e0b93710038b95b5ee2d9899a198272546d77201255f3f6c9c5d88f72f961866580c3cd3381883ff669e5848c50d2974d426b9cfa6346adb342f80fa1664c92ad80550701037ae4e69ae0a8d92438f918097b55d8ac964134afaef12fc8d34719b8f06a961aeaee3255f83a32fb6cdd553d1deaed1bdfa5a8a94b00adaa65e1331dc98a8c38b3b33ea3496a6f046d14ee65cd5c7017a357d4e6532108fc2e1b2349a8e1e9337009a63c12360bc5f9780611958607bc431a85b7adc14d712435b1367a1c13d241f533c09ea4e45fd71312ff1e2a419a177401129439ae76dcae3a5197c34b92d98bb185e4e98be57a644b095f0626093125e30c011975445a5a83d8e8e248010f15183ce85275ef42ac07ef7dc4378d2cebe1adcbf378727bb98dc44cbe96a5a31fa909698a5f62ecbe0762482dfd53e178279e14eb7351db141bb8cfe3cef3654736cf0db3b7f05cab23aab45c9bb4e8de79bd5209931e24cddb4684075095ca18dca999e9096c7e8d690b20697a000c560cb77b1057f6c18a16ea86fff1042fa02f2eb0806177fb41e7b88204c6e2a48fc9d03225080ec9de4734f85b4e70aa783643f8b3ded1c1ca0b2449855593735a75c0c438fcb13b8e681abfecc562d69c498d8752e77db12350d75289c8c21751f0007dc5ad06128a77330effbaa954f2fc7c549c366b922ab8c27934d973bc5fd61783fd528a4cb5d58ab3898c38ca1cfc1c8c437ec0f8a5588b10f077218956bcf9052f6fd5b2bb2ae874ea5aa6629f1ca87451abf4ed12e33b3539225e39af67acc009aed500c043160649999fba141d22fa118eb9b0136540cc2a72a91dc5718f21975573cd853c90ce068efb75c7b6facaa370cddf3163136165ae3b9a93599d0c29ff3641ebbd7ac93650193afd31fd3e521661f004539b428db5081573cd1a3172f4b28cf7f4f4269af9b77e6123f5cde715f4e3b3875e0b26c286bd7dd1f540e92659aa160ed0ab69ec6d1565511775a6c9fe7f3b1f20ac045c3faa6724ce65895c2c057847739c0c2ccfe3b5542b0432489ed7ad2180845c563d0c21698f991f9591fb819c87ae42cf9c71b3413c7f5ed79a1387ccaa1cbc314e9356b742e255c39bd00b5c2632d0f0a504d40d64794ca0e32aa077927f37d80915f72c0e80fa0d430ee298daee8bc4fd7d9c831d2c43310ece620d4d360a346de1c781ab77dbc7419e6f34d0e3cd8dcc392970ca4bc779a3e33e295f921db1308fe46702dd42e115ea7e340159cd29b2ea02a832d479dc6a34c635f03ab894c4948bb80cb78d797426200e4132be6ee3a50eabf90a48051b145c36340e3b9d05a76219f77cbbad77adf85f50c42480cde4afeb8fab1bec41db02499893b4302b05871102eb8cc3befe2b96048a83055c3a47f4d446b3e5d0f24d4863a6e51e7583cd78dbe185fddbf1c2ad79e6a61660a79d1de0a276deb9b689eea255d85ecf8299ebb1043f27d5608b989a3b14e10bbd5a988f8d7f91da2e808a3d18f8490b26fe83f795fc9970364c681d5d7a5402768f0e978a3dd203eb1e6a21e922daa48ac8e4e58119670abe11e05d7ce90dddd1bde4fea35d8db324e63292f370e2095a66d59680696c30d0278f7d92ce491991190d6a58e2e9f9f0211faff7ce9253bbd5f8a78a9744829e1e001e90532cbdf36171f8ec02b9cff3673ad6f190b6a7e9cc073c152388652b53cfb85f8baaf6977059176cc988ed1e19067e0ef8295321cd400101a7f7ebb96dfbb37a88ad7943ec9c84ebae5fa39a648b2fbb9f0ecf256314656eca9ce6886cbd5d01c4e7486d1d6b54abf82df9dc052e21e6ab2e408da63c8e0cf69528a0b937ae8813882ecb0b13c1b1a13df436ff5a9960d93f1429ceac1a01541f31aa100e429ddcb9196613e93384695fab80361c4185669291269ccdbcf1363b308d8fbc5b9938ebb9060b01386c91e5ad55d497a844dd4ca4d5a33b6686d4cb49d2e2468677632718e9fe7daf5f4a8cea3caeb45224e12ac020f75e2d6c3cca29da71d84ef46c47fa0aa059e137c76b76ad41e00350d950aea5bddd0ebb88fccb016dcd1b54c2b7b6e995e6e49486f9b4bde1badd05aab4088851cc75c98d8da08ff9f00ffc6745caba30d07ee157c280a2c6d8dcfc5acc35b0c08cf9bbcd62a78fe3731db7ccbb71072da4349285309a67779517518e0bad3ffced96605242042cf17254b646167ed137cf8b0977ee7184ad9fed8f7892958dfaf9ffa0cc15f1d5464e4395aa9ac9dd4147ff7b17647f8db420d79ab45ea966e44943448ce1bd05ff939c2ebd403b744f05701c36e65419d89fb1df878cbb2e05dc2a8fb22051b01cd2de754d9cfb363bdf91f7d658e985a2d1a962dc4cd493d6e7afda3cc49ebe5c13850b93986abc66b29b5a04b3c25258bb29011a88c78245d0fa798a8929aa19be7a1daa8c18d140482147c47b75602e9ee3216b42ead2d717c2c329955cd1ca0a97603cae7268306d3c863304cde515dc9acf817e0f89204cfcbb4e84d2ee32ddf6993d8f0c1b199aee5bbff88dd135192b70b19100aee2ba91139d3e03847c8f2e59a7f75db5e9ad1b74cad4f09dca345276c8d075da73b309a13a5d135233f95e5a316679cbafae66eedab05d92f1408323246232da3cf5703b7a1f5afd092f888800df56648119972e0ad7e3dfdea821287fc6e9e0c12fedcaf43038031a73b464a46f7b71e5da759e64260885776627de80e8be1298c7b16172e7168be10427817a246469834a23701d20ee67f4ae4acf9fd6a0a5622136e6a1022e2fab040e4fa1f769c16e97d1bc1383f81d98592bb539ec16357b6d57eb9294dbac5bc5a671f04c107538f020ee9ddca08a2dde46648f7b1cf8db84e7f00e6788bcfd392828bc0dc6d42937fa20cc6edcab91ddd82a5a009d8fa2c795ff933095d6536e08b562998ad143a21d13e84cbaf0b44ff1ae5d52a196ec5a341ae49657b1880364d01bdaa6662bf1d73d6853e42b989fbf3252e44f672c9a2415ab0426796753ee82574ae5435850e326604e3f5618d623dc3eafe8901677f0bbadf6549fe802719d0ae91022376c2ca128237dcae680a0c4e5cff7ef247184d0a0792e97568ea3a9cbc15cbe170c7e72b24eae91a1b153ef3e92e85bccf87a80573aadebcf186c2a6fe9de5033a713622c3b9cfeedecb60adfe577a4823e80d53a4559b7f6f744cd34e8c9f22b8c092b2e2520a8969b4e3d57c312b701d879c72f291559261b80bc524fbbd73357e6ad17967097b98377fdae327158d8e0f45af34c95381862f848ed6537d03318357e39340e2a7279f7ede54d5f15127af45c03cf7d805a25c11e52222445cba401373444a9ad02e3a6fa022bae1caa60da4fcceeb3cffa97bfabc07e91efe37df5c7873e238d64a9b283bec1c9d179c349ab6f876f4a1a940c45785d1181a982924a43930af45eeda5eba2b39e93c1741b287ad524696500739de8512e02f74861e1d9ff883955bd5e0bac7ebd1295969ceebbca0726ae4578b21fecb85024e621b708fef969030f7c0adffa0715e308d1f6f2731820d03b9218f6011143e15ea58d42515b860393e7a23c5b819ed732a156014ab8b7fb85bb05ab546eaa9e812ac17695e18d820a83e1ce8c70f310bf6cdbba2acbbcfff1c33b6f587914b3918f90908259a19e93bc5e4af8071fdf9be63e9d12c598f8c714597cb3be6199de5b4e68b83f35c8a41e4d39386f78c71ff770e3004887a1e6d7a7dc8c5014b00e90eb00252b90e046831c56608b973212bca85af455f3f932a29d35a4beb73b940659bfed961960728efb0de63891ebb2a85b60b14d42488498389db36960ccfc304d26600424b4a7d3e4f1c8b9db5330c54d86fe1272e8316aba51d1e3e6cb2a1c04b7721bc014f1897722b045c6e6d713fb727a8052f7eb1259f996628fc91d58f3b440594cc542a7ecdb24179f9970f130bdc326c5172a44777d8170841de89d01c94696a599db890f5355fd0d253cba8240c174b13687c3f6990afecb707041dc5ac1237c77b18ad769441220efbb86cc7b3344c9c9e4935efa7a78b8388118338980b4c66d1ddbe1d2edf439b0a0d0fabc9fbb2c81d51a78bf3ee48b9e73f42cd45fb93849d3d8261a9daf1948919125579d7918cc0adc1506da318325951abfbce710c073cc6681122a459f2b596e68a9300b9c90325d9702879d0e4d0aa06a3a880ea969f93d3167fe4fc9fd80734409a4abb44dbfe6215468c689bcf89a4074e427249d5c27f1de374ac2586aeedd8893194038e2942893b71c100aa43575b1bc942a84dcd1e78f1feaa182abbeed52076135a4cef041cd5f3a83738d87e8b372a3520c4d741e5add473174171b41e439245a0616c29f73b824a72e8303da981a6efc40d76158eefd5a5bdc62bdb6760b0b4bd59c27bb34e7da7e36fbd603bfa48f2dbcd97ca007c4572d9e8b3fd41626987f7b1a68132e63f38341b61d689e733fbec433a53a1c30c7ac2572dcb86bcf5c02f2f9dd8f304317ae5640c8622472779ab30a56ff1fa9db3b6a548de1a450293264fa7ae93ffc256ef57905639133e2ffe64ecdc0bb7117222f93ef4512bc7d56d8984280628c87a1e0c0ba5eb9f4073bed3e6c04adbfb87904f237afee4e98841a64f52f74ed5ee1a338f901c2b9bac473c72746653e726e74fa71d8a95205e15acdcd381019e0d66082160e5fead503de152d7ae258e7ac893100942a5f4a6f71a539e8ac71b247a203912d05dbe58107613d7733b09a5b73e05f1ce39176475799972fcda58935e6d9b2b8650b4db88fa93c000f9b79d7b6e9441f28053988035698b5c338bcf82c59d1dc0ed7eb2f8a8762d620483cc220e2d37a03597558151b70e8eb91c754551a295b3deb8f778fe975a8a96fd5d3b2c44c7260e976518c4f2e32c12df6666718d948ffef33632742a2be21e6199add37855c4fdab635765fa0fdb9bb52479688a0359cbdfd0d0f2df0d457fe5da88bae1f44fc52fac4f88d5fcb0dd1912212ca55cfa536d1be48838ad9c742c4e828f0e679a92498ae6bb1001a730e14ff50c1b55d01c30d2a0ccc9abdc7f27980be94a79296806defd70f5f19d6b503305d49ddc20590773146696264a848f95d7c10e69ae0c838a37c3a8377b1e36bdf5ef548f894cb43db48c4a5e0d09adc9f2fb0691cacda148eaa50bc04f55d32672afd6fda0b9edb85e38222f9599f9975238cdc41d75bec8b5afc083bc6d32b000a0bfb4bb0728f0b4f2dc7a8de9911de49f537e8c70b2f1a06238ac641d18a34f2ae31c4652d7cc300ae9e66212e3ea7514719255a5634772a4461d206b52f78788f10b8be6d6343d73b0b7d72ad8568b059a8afebd54a59997d78d6f70112232fafa84a26048a3006534939bffc283248e1d229192efd01fd6d9ee1b691eb5be148ed7bd6ad13edadba2940a3c23e53c5fc74d35f47fb59072792b57beeda46f9bccc6fa3357c3b61625c825aaa308e3b21c4554686e75499b0903e86baf23240643de2f83c00cfb25e1036152b6c74d33793ea653b72a9929fbdb32a14451e5a2a5d53695da54bb17e077ae32a0cf6fb3842cd3978bbb2eedf7e7d0e509d9b84db6b15380c309c13e38979c0c96a1f712714c52c9a15d6b48909143b88dd3717e23b8a5bc45638091fc5f483734a8c50b6283cf2217e79f07a914914fb4cf8d5cc114f2f0141dfa859b403ea36f7bb05b0d37d6d1b30d1a9ac077e1a88f05a6dcfa9d75dc51131a7df5efa382ead1785c2a6e3c6f99ca7ebf2f1279052253c5e2b02c68a640d0f2e96dc8c91bbac45bb8bddae3cb6b2c02d737a060ac654d75ca4ee5718c097f4c0bfdf5f8f5fe9f566a6eaaff7ceb2348a535ab218404c98ea6516c454247925927faf2cea15870480f811077de8d4005ffd549a1cb1d7f2f678653a80cc6e896425fb0289da5d8260b36ae6473658793188b9eabaec8a5402155c57fc539fa674dc4f79f7ca6e200d3bd1bd8bf0d503e514d365d2f9988fa2baddaca758da902f1991c683d451bb9c63e13f79ec52c381bf679978ed5064cc3edf2b215e7f312d71dc55425d36bc3d42fa6c7f528ded302be0b945495d0223ed67123bc0710495ff774c7e0a32cede25fa7f83c3b8310ba76a9bfef51f466c8116061aeeca8f94f2033ba4650c30897bfc77f0d434bd4f032c068a19a254a3d4f7beadb38ee8effe320fb0cfabf91edc23bcb24b699d99802c93bf693b946bcfe18b89bde19e7ca0ef3008aaa76692089b21358fc081bf7c2cc048250895cdbd21aa5f4b54015e9f6653f682e23e043395b76e07701323992709e456c201ea49061c519b4e94d65f47934ef2be638d5d4cbb1dd3b06d8113509bc806205c2ed274fec0d0d108df81c0057c0fa2ace266f67e66f3bd76595754a327ab6aa385258a7c81a60ce0a3a395c34eba759610b0a6e61c313bc409c10ac9943e4d69a66a5ec2975b5b7d30c1b87a95a723111924246d8aa79c9a852e681591ee244b7b782658bd12d7dc5e2a2f2b130d51eec0cbe784ff44d151e98bc7069c708c38366fb42e937716443d0c7f5685d23a07249e2d9491fd5a1e0b8354d178fc93547c6d49a607d54c1d768495e06446420f1234378ebcb8467e4dd2f87af1481799c73752bb53218688f1b5b3b21647abe0b946a5072ce070419280e87515cacbef3ed7edc3e7a7fda407af221b44556cf0b53eaaf73b7865d8d0baf82372491b5b6e3a4fe11f396008f47a7da567f6f1501c9774952d5e9fc3d1c4b7fb508d3eabc584973a52995f053d02aca65830caf164a23eade381932a1d15fc3b24bf9451a859847d2be90709a8728740881878d7bdf32366159de06636e960f618631f3cdbf5fe743a7b7cd84e9821d5be138b29023f39b38919d7cb912470b579e466a80dba48eb78beae1b227bc872695718159b2d3a04d2552850d227f30ec7c1f4738869e01971bf5a6cf25cb3138f8f1642d378762229ccb209b4c6d3f461d48610aa9bb16ff1ba5ed04439874b574c7da1962febbbccabb45fcdc6a2cb989a4bca1ab8bcc832b377d8f590fb2369d74f99122dfa4c6637ba6c31279bfb12f2e4fb9a4ff10dbcc16df549a69a46a96695f9783c906ef9f693bf7d9cc41dd2ec1bbb6b2b0bd8cf43345c6ccb9acdcb0af48e4859e2415439b395d7a79aed295e25c59eedbc5d6008852a3b61eda17a3dd84bb381f5770c605bde2abae822fedf67ce164f539607afa0f9b3303d6940053f65d9d3e9cd81b8a1216818e90398e1d723058619ad9cea021202ea35ac7994c9b76e3d341c1647ae2e68285803e590f9da63470a639099c22087fc88aab622af87610c602ce1f4b7bb20f94b84df4778fe811a4faaa2cff128a964a0cb1795ffc72d9183714a58eaed95f79481001e4a9957c7e91f84b2b6b366262e6f947c295140a1c80cac54a09dcbd53ed18c0e5d45c5aba4dac1e5a4dfeffc1ead4cddcade9e2c577ebf02ede05f0f97f75fff8432115c4b400b38b4314cda7c603803411c2680a1e2997781dd814cee00cbdcbce600b4f3afa1d0560a7c0ea4f6bf46fa9d63ed51bfea16d095d91312c8a7410f0b08978998db29db13a34b2a09b51a2f1c50da988f15469953310bcb5da60d535b979d02164f25a13838f7252b8115e82747f174f86d884141d7822a690014ce5e4d81dd859eef6d9c99eb44f4c3d3e36480c6808a2d9fbad0ab675b1b1fe1b1c1a399c28bb144a349266c1c8d57610c693adf34ea670f59fe1a40562547af5009037f8dae62a10e7ea541cee612d0162b383704888bdb1c8a035ffd9fc64dab43eb8b42460b56ba2b48d381ba24657c931607c31674d7464fdc4950ba8bead1dcce79711290987b0b6b84f444298069147851f9478d213dee75161d90146618198fe9e355211f3002a740a5b1fba77bcc1c247f5c7afbfd327b29ed241f00e42caa58cd58d5ee198c2a819fc40fe84015b10c592386436f20536b67b13d23ad226ccefea4a7e964b1ff9f2d163fb68619bcc76e3c92d30d1064c467426657de6a8ab342fc1b8f26c53b9d9a1cc7667ff5d8d5e20f1481586801f72bf371bd772f4c7db72088f5bc9b525f10db60bfe3cdf9328177bb0727d94330d16a88659de397cf3dde5ae674e994d1b0eed65ec5416fa644228e26fcd45d066dc31151536f0fa2645cc389759bd1b2adee6712d03453c8cb2f08ab1236a2d113c99ef9b1067dd36d333cbce620525d20b7b3274f72304767cef12465a81692c176826313367c6ba7fb96aa216bce8860508df368878056a2585f67d37f308d7907c9884a43fbdbd92c144a9279c07cc2dad8e45fe7c0a15617e4a43291549f52e436eeea2d78c93ee31854f7da3189f65b3b634e2515669d6d630c1c0e49aabcbd4a59f659398360a347878482c3a7ffc075155a190589bf6306d2f3d8c1bbcbdd374d3c1a82725f0fba2fb9c30d8db9b1169a7f7e2f123c78efa8081c946c196ef919bcd0d0acfdf8017a13e9ed0603feee90b02ecd44f9c3e539dd1d9f598ca87ce2a7d285844b5059b6bc49092b04875d90108d381c73a620f9c944a4432283e5b160ce001e5583c48c8b3c0600b84fce8127ffcf513b72eb8c8446ed1f000eab0ec4e9833593d7294d87f72d414dacfea96be133272ba7affaeb6b7911bc35d3aae50cc6a23bb739b0e590fd798aa07a1cf0af9e78cd084efdd87291198deddaef21570026a8549ba7db7af24c0bbf7b8ca77fb9017807f7c412e5c153b29e1e0db3d3e3b68f589d453c57da104e09e8b3c3b56eca542e2c0d8b110ca96ff26e4b66b4c6d5275c9c6ff3c14a03e9fc24b70b5c5ef7eb1a5929b9d83a9074e451dd83ef3161a3ef53c7d2c257341c356fd4a013a1a53b2d6b52faeecd2b6ac57617026dfa6442c3bd55fda8649532288ab1d1548b928d33f01d721b18d0f681a897b3c0e054907753ec16912573cafcdad388ae42be255591b9ccb838b1c1a880bbe7bba308c3a30959c8d32e7a465a0704bc19dab6f2b4016becfc3a383d451af26d6a62c247a523f17ed86aca546f7f03a7541479a52e0ab5d0de84190db5991b43a33f6360f68ae09d75ace5c34bb8e56b44b33616d705f824357cd196d5cef7e1383a6196f5bcd258e9a244fecc6b22727c1443a8a766c51c35dc9b8941ae3d75409ac9cda44cdab56adb754b8216cea5bcb974b1f4d387e32bb0d5509c136b9920b8cfce5160b35a0e96372ea10fefa9edf986c6b01b78f2f5bf476143c4e2117801bce78648d7f52062f7571ff694f4dee5d71a756ad5dd3e931b3b8348252f53e116bafc89a1d99d0c3e5021a94d906a83a07b1af3f436dfa84808a22b4b0193db37c2e7813bd9d6da91e6cbdf9d8b2dba48fa01b7cf7614e3a5511e9411bc5c7207633002184fdadddffcff359f94e537f8ebd2abc7217bafb211a366ba72d524cbe0e24e2d1617979c9bc981caccfa147bdd8a7ac886713f3d2c852c67fb06bfd14f289e008efea067dcb840bf4052ad0861c9428af726b17cadca9bfc8126568830b7229d0d146d9b9da4aa20ccf35c65730712d42282b57850543c13f3196e57a6d94541208dbb264ffc8195d92703fc0c46ba65815c411f3f5253842ff20f86fb714e4eefd9f70adba5814aa2c738847eac3e658165a09b63a480c4b19711be12008b7c4c06e0fabab07cc2669a446cbb600e2abf30dc8a98fb8ae89404c96a74100b5f82054b78bb14565ea1b3d795e619f62cb509a2947f3385a50c6997acff1dbcf6e1e79a6ace31b0128bcd47862ec2549c346fa7b2f2f9f53cb353d77daeccfbc221a07fd0d5d333f15e81b087ab4d3b15b81b58d218ba476424f260ef8043e5526ea94fb3daf8cd21196edf813b412f982054cee8feae36b1b01a0b82afa0edacf5d53188657ce502c7e94c9488f7f764e9a9aaa812a9dc6009916053a73bf2e52d5a33de78e788e9251196e281e73d87e3ee97dac9d4ddb47b086d610238c783609e72d0ab67c38b0cca15ef4e2fb4a7176749674f8db617596ce05f6c938d75aae712836dbe1cd6391ff0fad707d50d85a946f446180225fe0bf871bc63b66581fb6cac0d244855daffd9d228eea222f91992556af52e8e41aabd5e84bff504d837ec62be2f842181e19cadfd95ab94b83293c811bcb3dba8d7ea2bcf8e6f36248f8dfa727550bc31c827224fda8943b2c531a6c4a19c9205da4f4ed13262d405c5d31009d24eda70dd8cb42ab9c44a1fbcc8438852b4c306187c3e43717b8ed5699dc0568cf70fabd6cc2667b24cc60bcbcee1290dced1d5d0366a75b625d95d9970f606674f29ff7aec3add50450d0984a383b873a08a9c9ef71048fc203fd3662155f902c7e58147f28ef95f45c5acec1f7244c834fb45f5cb5bc91f32ad9fc8c0c39d7def0331febd6a2c2b0ff87e41e9dbbecaef54206cb70fa96034cb8c5256e9e7e99ff5786969d65d5f0dcc7e5a531c3233ee8c40a4298bc8b1deafd63adf1f0bd864e4893b07cc71ad62122c21dbbc2b77c2fae69453a1dd4de214c23eb116aeb726c24348c228227a7e336e679be380c22646dddbab68d317c1a05a9cf84a201aafa5eafa518d1f33f925d74c0bbdf8fab8c174ee22a93c8e0cd8b78d3a4f13e4a8e1fcc4e781e561b6e371b06d3ee8e38fb40cb4c25f2c715a51e6aa903796370ff2f8782a4a259c40e05a408392e6ad3d83e168cfb60800ba3dbce3b38883f9b445482df5fcce5e4c887ca8e11be9932f6c654d663a55e9edc8762c473d44b29e335146d6cf4758d10517966cac35dd814071db83a53f6a35ac5e9f79093d8740204b3bca03243413a1c47cbc0ae40b19e32425b4c0081e520a5ed3a4315f056dedfcf33a365548036695713edbdd2a9da6d4f54b4b6eb60b609f77e7aa3e5cdfe92bf71b2cc86cd04b4f6d6dfe9fe391f4c1b796af3fc1815231a98a2c95ad665d214562fbabfed6d6c5dbf33a3753318d0f52e23d17084aa61f424464f8803749a220e85fbaab29313ea014db3cc10d57c10f13fe12dda7315f5eabf8fc44afbcd6f184d47ba5047f0d4cea64c91344b9fb1a6f412ecf384adcc7b865558aa06882fdc9819889f30406f51f61571a9c8f41010c5ffdf8d5c00eae98e4231898a1f31b09010525cd5e43f51179e86f3972a9afa624362f3a6d4bd67c3378f449b94e0b257c96b90bf28c405ccddc9cb11b97892fd40ce061d3fb903f15bf4ae6b6a452deceddd2b921e6ba1b2a5207a77dae3a1a1d77a2383c4e0f779933dec407dad8a3befa58dfc35f71164c99161b597d11851ee40e66f02c490384cfabec3b5328e6a04927255e3fa25e5a1bee8cf43a7e94f84f209f5ceb87a076e4bc6f3d4c3aeacbe5adca5011a123bd000f646bec944b9e1914cc50d18d1e659449d2deda25a6ee55bd8e4f11701996b91db61c420d43168d3a7e0190171312c12428265589d1883094d55437e61f18f4cfc71cdb6a28adf64f90f6e21613b7cd2a7c75e80fd2475c8e54f5a3737474b3c2adb3c5263a57a40b31e4b91e2150d97fa68922260064b22b2cdcbffaf4b10c288fff2640d336427b678783f9228b579d9858d8e87537cc4dacdf58de48e6aee4f542f884680c7a85d12f908a5c0bc62ed120e10943b66c898aa9604bbb67e59cf20cc888ee33eb284cc5541567b015957c3608db24ac769ca60c1ec7853559c6af1d33f10cb7c2eca69cda92c2115772633dc5a8a51ca5263e15e5e7cafa60111e2b060cbedb1745caa886444aaa2e706f18bda5749283a07bd2347d6a1e6589fdc86b05085ae871bfb6804f22686ee672f513635dee38cebaab6d8054b3aad435b5019ef410edf94ea6a4ec98b01bb98d0c51316154d7f0bbd14bcf4d62e51ccf5a50fd8ef5492790d1eca4bd72e504d01e7fcdd5d28164944a2162c764240759406970eef178109e101ca7a5b50ce729aeab59d0a3a4091e5f21985cba5f4e9428e44b4b2f1378cb69569183865396440c47983dff0bc92ad8fb8b606e3ba7e9d03b2d897ae9565fc43d9d8beb1613314ff1e060600d3a3aaf94c4efc730aaa21d623c0d82d5dc483f96bb6f55c9055e53a3de80decaf8710294492f21ba520eee077db12eb5dde54fe2ea624663f292f4888457d7f78561778610c094a2862810bbcb069e4837e24ba15047e5decc374beb56ab928ccbafe205be15f9338f4acbad5eb04c06c3b4632e8c42ea436bde0c9cc287ae6a59eb17e22f5e8c2c4c7d6fbe844d4ddd638e27ad63eadc096b16fb57654bb46bdb6ca4cc547cca2fa35ae054b7c8269d8a07c36877cf9b59b5b1f2163e4492804a5f06618bc33bf386348e6625ecc75ef98f921f883f1f6f52935fc8d399b65529a6538608ae4d291b8633cae1346cff011ba04dd90ba1ad763b6474c06114afd4dacca247a2498983bc6279f486d2cf6d12246ffcf41c90b4ca003b7a245fd814f463ac259ca08850c80597455af18eaf5950d41312fb6c6fa8750ddf7fa545afd67bdf6b44527ddeaa82b5034781ff3f25482684d4c00fc7f341dd89d6f1f509fe6476c79c8a035d1752c6b13c6a31821d7b0c9f21a2d2abc20d6d6f2b3a38841e8251b95ad0f6a91fa44f9cbfcb41620a8d593dff6f6648da25ffc720652e11f3c39c24c7602b7336f33302248cdf7188f01bb7c9b45f8c7a3654195a0fb8663e8dc735bf1f7733001f624ed066a2de2066619e506dc90d14623c5f476ad1f703b5e16b37b7e6172b6985320e50361c0a69b76e26af16d4dc9d5e27d9d68d0c25fc14442d46d5eb8021109a9af54877185ce212e2c63fab397ea7044e1af40eda23d821f0cd7b83b995077abfd5c1964546f5241a2ea2c9bd838cc4331a839f6176604adc309c907e4f6a621410d428fe8026299a1523551f27bf017ca180ee961ca51a5307e2fef9f0b6caf950b86ca0d49b6726dd38b8351d29f291fd6befde8f5dd3880a575663bed7bd456305b7889539ad978b8aa0f2cad05fc7950a6a94358199c484dae22fe8c77cd9a9229ac097fc69835ee8fef5ca7406f85f4830ea858cff6772363f668ee88783c3c5def70484bfe6d735e94a856037e4e47763d9414033a2d7c590e47f507d69c97d0033db87fc90a91b7e9ed77cce385fc4fa71f8c8df47428592804396ef40b8e48847aa03041bdf201bb4c41a3d8065ed0503db68bda41bd28ce59a6110bd8bd5f1c9f7d9e98b28cb152f80f511469c7f77d153106011fd0f4b4ca16017688330dec2e25e63d6c7aa95ac96a36d64ecb59ef5a7b5f101794440a2e65e180cf4cc492f3c95225721181d0c945b0ac8c2f542b126e94a1a0040c23676a942b80b669ce373e11393a6a991e6334ee338a375fa7fc442f61d90b86862b1948355836125c09eb9c78efcc39efb7079a46b5853e3569a41b8bd14b411fd88698eb4655fb1cc76bf70ad1949d7e31a0e4a3aeeb52e90235761958edf82c706d1e650020c8c113f814ee50eb025375624e388f4b92d422d2b44b8f83d926c86b6013ce8493d1185a503cb1589464ef316329d44af7b2aca116dac319004d262ee80151941af2cff052282774a13dd398591c735745a4ec11e2112dc7d5c54c87c63b54e775bc3a81564d69f232607da00791c76350cd25834e526f6b9db901393e5341af37049244e78109f7b801047d4a9efca6dc4e149131aad0f5bcec917f42bdb060600fc5bd53e67792e4dc10400474bbbd48460459cfa568f34187b7487bdf5e462fd4fb938c74b969c7e9d0de721ecd23e564595d8730fa566a5b5986ca7783b58ca110dd3f036f809a3764328dff027b66263cada0c0cb052cd33206ce130e6eaf9428fd5e97cd61d8b88a2585b53cb750c5b9c2b9f0635e61aacb27a8564688eae55c02986834e6dce89455399779361302dcd8e053e0dda67310fb118f6c5b438bafa88be04200bfd404ed5ce09632e3cde235d99e282695cfac7e8890de87c44b614e16c197da8d2bd6c901f3472655d5cfddc95e9f1945ad0b51c8215b56850da2af5c183e9e48213cb12bc074fb01371dee4b3f9b75aaa3a63cc0c550fd960078cbb6f9c751a958bef382adfe0273ff89d8ea04c026a1531f68677e072e729bd82b96e659e57bbfbcff659a987c42a99ad31f7ee091acad2f639dad123cc1cbfc35e2265adb72ee2afdfa793dd8af7da4b698558d016906ae7e6429d989d6e228a2a480c1abab9aed662d010f03c496444ae4e3b3b040eb343e275c0652a08e207d908abe49729600bf223753958136c86424514df1ea4d91a025edb3ac38dc4e7cea698f3abdf6d078d8dfba2264ba2df1f226836ad62d4d0173ab7ec3917d02111568879cbb88622e436f85870536f09a854fa995fac65209b7f99ab56cdf62acc2ff6d39eb4eae923874ec08259494061945fcf528f9d88825f3e1d536198eed342e2ec5aa93c33c62bbca4f39fe1098154d02e0e10e4ea8085ed076ccfa8914ce875c8ad130efcd0034b2f223f3347a55eba86b815ed5de1d7d272242df46bf6bc91a2b573f6f7c2873cdb21e07df8a1aa60d700e7964a47002fd370b58a6248e19f8e6ad66d1052a519118b1b990565ed305c63a4fc0566098bdc1264368cbbcfd1b85060e1e9b011f701b1200e9362f673c9fdb886150e8562875c379a476c6aeec637be132588719aa1dcc148367a9f3f1d4473886e1068cc139a55bc9b996bbc69ed32d3ec55d0b38ef29db8308310db1fd687c6a8bdc0cd6a504dffe83ab5e2d479867eefedd6e940f518c23df05a98f6d8e99515c1c0a697ac9b1dc69c13a2c8961b525ae816e4490798204c5e8e368187611c99b55e2b58c8ab3bf7f5c941b0451c5f2b8810719d82318efdcf8fac31ba86b8d1f08c9e2ae035b361487afc74dbb18ff716dac2801cd4dd7b254fec6296bc2f4fd10e42ad717628003df6800ba8a4f05ad1ca8c74ad21462405b82589e0789633861c83ce1cba30eef3d230ea29f04b6e65b2a920a795fd7739b6ae81f8c6c3dab6d640e25e62fed491a2632004a7d927e7754463741b237cbd70b126804dc41ff68098cd6b2a3b20a490262e4c7a1b0f8cd1aa994594822cb87355709f7e4eebaae68aa174abe03367e6829a7ee3b12d82d84a3e67809889b3d0393a9346dc5a3ab523b04c3b94b19d508708cde9ccc4ae40ab0c849772eee729bd3202432e2a6cdce09dc2e6492184beee2e68e065b6c0a80c2fbb735b38aba70abc708c4a49aea7c8ad4bcaf9323261e8bbb5826a9bc0cb2e21d82b5d3c18a31bedd3ca6dc58dd803fef59d4bcd1c438619a51a0c8c5f7fc2cb01267825550b6bd3b846f6cfcae0c2d47c89f360bf10a63a8e4041d267cbc4deeb86f1bf2e9b2268c47e605b59525408edd79798b0a9d5f819fff110d702b0e8832c66278e642d23730a96d34db490913d615039c1f892160deed273483d3eae5e4c8bba85c555dbf6c49bfe437f8cb8ce234ad63947e024c8a193a913cea747f09d54f8e86df68f4a3290c1c7abb1b3bb73bcc4a6978582af48d015a24b5659855adb7eecd3da3e84b7763d5db8a687965789e247e8c53e01fc33c109ecffdedf19c29d4544d89841e6fc0fd04672a72881b92e5a5c605e7b913b7f66f176b04b57364658900b37c2f0de1eb60303f61738dd2ee5d1af19da053a0c6d268dd86b7d498e55b6920b6603f78ec32718900278d561aa0a829449127df3cda9c588f061509d50eab0c64e9818573b56b6bc4dbb85fba2051bfaa47ac3da76c0468fd881112458dff68659d60a6037be4e5778905bdb65c07f8be198a5bcff00d4f3cfdb6704008c63fecb4dac9cd534fe93620dc2bde576a74ebf3b80d15c94a8360d20d960639fb0e098866c58ef8cf3edbfcc420cf5850f0fe429c61a17ec372d682c28745bbd11dc310b518538ea24cd714432d7a00d1570866c9e4524a3d4d555e6a1b737a4550743ad138a39cbee9e4ec7b5868af6cba928d7e78360e35c3f54088b786856d46328ab648f08b7bdc3c7116f0764135306038d45a4b4c9240b34b7f7021e2163a3605a1343aea3066214cd3c721a6e18dff0f9ce00316edcbf03efce9af74572e5580ca3e911bd7e8c49b0accea515d9f07d2894e27216e6d951f3cffda494566a2370f43a27a328e329201621c7d52ec719d2ef1ed6ae1950589689395c60d9aaf9c4ae732922c1b6226c81cc068cc307db7228bbc35dfd9f8410cdffdcf76f221fae8511eeeeedc46f3190d596f364c1490ed6eb2c47d2f74f1a1242290dc88e28c4fa0f8a30cb9586e77b6e54d25fae704bf1e64a4e80e11fe7bce2c1688681948d557b03ba209f6a860e3e87417e373253354d3a34acb59bd6a3158786f5a5eb3fde426238fa33f2a8beee3020df68ef77f54b08b0207da9975dd7125ce46f0c100ee737eca4c79a30715fd888c5307727ae4a584b8c23f454428978eb75bf0ea570c3bb9795f9446601f94c7f5d96ca8a275861cef33b1f42227e58311a32cd372981e88f158cc559c06176bbeaf18160f352ebd2491a50a7b1d72d0a482029713136adb832881754fd0e4b3ebbe4a63e35d9a28c27f1edbe304f35a7f850227ac5e31321b28a6c04e032570ca93dbeb260ddaabb1acc1a7a2ad6a421ffe8be31e70de565ba27e21da07222a9b38da076842e02caeeb843737bc0ca3746d6b0af7403c3218773e5cd41fe3e2ee9fa41f5340a890b08d8a709e6a0fbd1fe5e8fb6b67f20bd5d6cf74601c8fa70b6ae0f4aaa3a75f53905591173aa4fe30abbb649916f4ece1f6955559ba8df94f50de691b0c91e3b490af8e45d37afb55a1093a62ba7e414f6d477131081038ae90ff9d8525915cce3fbe0abc77c34184d95fcc2da51bbff71dea7763207919c843115546eef178dac4de6e5da528704b52a3814cd44f8c8a87c22cf070aea79f6a7dcfeeba852fdcbd48e5a76693e06d34c0306f6d1adee84310320cc57bd655336111fa2ece1530673465f8ebd8aaaf166273c3c8b3923faf3363e99fba9d19ab73dbc751bee20b9a4c6d83b866b3c2874067ff204dc9da5f2ba3a57007821051099c8b429fa445109511acd01c2d178f5eb5e015961de4a7362549b27fcd00f84d853cf7db3818b93afb74cc5fca03a2d9bdad665186f285e3eb4c8babdaafe231b84e9bc90aa14e370b00c239636d533b2d826293e722df61b69efe483353fae5effe0a6973e8a28b5b0966da4ca215ea0f58abe90340a20ee8fe7d3c2a9ddfa6bc05455bf15295ba1853650ee09267120039e655f264da1b294b20644198b19912ecabf26602acfe8c93cc5acd36e1edb69ec7c1c7aca4b0c2234575cf719a1c86cb7a86b72aa8e932c553f479f5ad39544aae3baa07866e687fc204434d78dd8eb3db2a2e85e5cc7231bcd96d156b29353e921fa0ef65f1ba3f7fb28d44b19fa0140f10a199e2ab69fbebc9b884ae35114ec123b4400e6064ae8da040c5e838d09f2bfdac5e7209b0709bca8ac032d74cd03b0c379df47c1fec2d28feece5d696c79de8966439b663bb3b0b52bce39e3f6d5ea3849a71e783726343a4b745bfe6133e424da3fa02a4ac1f586b8f6fd4b707c1db694e9f25517c836fb4edfcf59d4e166c8f7b54e73623b5057970ba1549866f630c68eaa696b8e66039d0c2b605bfef0a327063c381643ff3fa8062057222e82d765a3ebfc67cbfa712a33d6cad81f199c27d9b609d71fce9402fb7220fc0ca7aa0cef1f2172622f8de7296deba621c4bc4be058822e29759a0458924cb519dff8f7da6d3f0aa152945bc3d355ed47c1b10de587a4e1d6ba0f453b140a69ade7ccb8a9b4b924a929893e6c0a29278bc457ff116af88f9f24c8df14e101729ce6f130a15c4b4d6b3a48f0c357424e5d14c41d6a9110322678c6cf3be6cc2d615c844781cf81746972879ba9114e7c2075060dd12f23ae4fb6e04f100956de0ee9d4a89d1d4a38070450081ba2ae55d4f7130436c4f9bcf3b2f069535e97de68f629746945fd1d23bf32e9ce66adb243463869c807c20d915e93a58a580b6443ddb9008d32bb8162c99b7df6dae81761a99bc28ef030d1497d00557de8ca79f519083fec4a541f01c942a1201a7f099724340830d3987c4c3d48b8d5d54044201625a276d3afeca0295787ea775ec15b2e675a0f7f33a0c30e7d65f70aac967e883b18f0777c7746e18f78f1d8d84fab4b3292dfde24e72c8cef06eaca61ac2a4cece79477962cbe06cd62cc671c479e30ea81a8b615c4e0bf52a0b4bb912dbc31a7c839818052618e113cd4781ba7dab565b262e1eb29f80a9e5eeffe9a122f041e16713f69ff28218a10d7cb569d87f4103f1ddcfcacec54d1eb08f9baa7984f6578a8c35627068dc8a2c7665056d87d307b57401dc9dfb0145c3aef2ec832396dc170ed1902d5ffa4ddf7c8fba5a6d55d6db84eb642c26ca3e7831a2d03737fb0e79683cb8476ccb138e72df97f6c02bee65b9fa15fb6dc30eec73995de00a93bcf8ef125a50e1d6571dc817f798abcd2eacba3c481073ba8c89a70365964124b086207df106a33a1796270395ccc34d4a478ad1894dac9b6489a3ca52744c45e9c9ba5556ac9c834b9141f34452f60bf0e6697078a0521e1e28abb1696f0adc612a33edbc2cb34f57ccd9402a7834a903d357a0851732efb014c98d4a6ef5f10fbae7feae329c8b8be8024eb381a2a59a8dc99f277f07d03485546fbe595b344ad7d5c069bdf1b814fb7286b0607d5bc27486424b657b46c37d7acfde2292f7407f228095a4b83dac224dc3d8067cc63dabf69899a23fb920ec8a2be45d7de7619923a980e65219b5a9b0f026046aee9331ff0788da4be0dd44744aa5520fe1f0dca2e464b561661c6300147c0295eee3d9bdb15289349cde851973f1268867c268ee430bf071de708fb4f94f9cca296200215e885d4dc83148568dd40ace830b7193b3cfd953b29327524fe634f86008d6929e3540f46303eac1bd48fadd91b4bddde6430b1f9cef312b17b4b4951e9d530bd5b120e831524b6c91f8ec088a8d142c09f3029cc50939b6d753a8ae37c8620510101bdb4d1afb7ba0b3057f95d8f152f74020a45d38dc1cf0f8772dabe5583a4ab999c35e97b8b4394b98f28a0d03c55030a3cd966138fbe43cef4df23bb5dba599318306531022f2fb0e076a0584b73eef83a8d8446e6daf7e3dd2a72b85e8395ab7ab62bbc04ca658d548a87fae21d379c4cd2716f02e46f1a04f954a60db0224d84f27f0fc88113f550fbe834404819e785aa810fa0f77a27817047598d4f0a803e827e6743853e5d9cfa5c83c31452ce0e5e23deab5238ad1e879fc03df8587264ad8e373c5b8b0c92bf001c8e44dac9591bc5176f1950033de194df1e5c24e0c8f375b58298c4756978d8cf22dbd16737cd4820227d41911c108a3fea1c25c3290c7cb1b9033c26f1a517831c69314604fbf88d23730d447a79bdb40067c5fd40ad34adf308e28a96d506be7b26bdf09dba4fafb413438298090de4d06ad162aecbb359b62cac060266aaac3cca13bc762b23577cc399923a2d243d0f6eceb0846c61195ce814154b79e515b2d7829ae88462353863c882850130c28e4fb5b3c12207ce7bcaebc023252db1e80a2ad492a0d07705c1ccaa4d19dfeaee6df24f3967ce5d74bcbb34d9a329440b61b4081fa2d52c67b3ead7e2d1333bff08630682c367f7a27800827d83da7459e6c3e5d2947f1195f3c94112f152a8fbfc56b3aa7c8814516c8d605b33c2c15b48bf16f755ed58b187eee0f47497b3d6eae78af540372a44f1cb2a818ff0a80bcc205ef2202d7e9ef97474fa7075aba89876a590a127f4966c1bc2a8a768c49e08863efe9062239724e62d432538c31f4aea52bc6287c2403a6b69b21747228c4f75ebb900b81c0410a6c8be296cead962566ca628936e5a92382dae9cee2bc8ca83b6a39f218ef045edb53460f6be02ecd66281e6c080682f6cf9a4be672b2b74f5addc392ad9183d9bec889bf786a1381e8fca6b83c2bc9beb7e8c9d0ce53a54a47ac17425ca27e0e34d0e434f7c367f5bfbbe363456b913e023e8972228f289e8f92d2562b4d6b94aab6f5a16d9a0355e6154db40b7b541064ed7d7db8899664a8360efc7c358907f245f3a481e47e551fe04c67610e26b533fd93b30537ce91d3be00e7e4995d593f5fcfbe74ca3511f83222dc8577c096c1ccc4939d68d30dd89c675a5eb4199a428c0464d6a949b63fc9d2bec0975bff380b97042610e13c5c1d47c6e393cc9782c0018355ebc5f77d10d5777d290152432d6c1fce010a92f814a856bc06bb05fbdf5396f912cab61a60dc08d2e9b315880e5525533fbe2fa1a5051bdf067e4ddbd45415751eb87054bb02bb17de34a06b37289928986411817eea9e45b29984e3f3e966a1d1231d637d5656078d65585edc60886d1d07c21673ed5de1963b10f7811e3e36550b2bc6438d226e5c924558b4e9bdd8e6d0ad8b0ba165d71bac143d9ffc5a5aa6123dc51d5720d5b881a6411f9a36b6258a6cdb9f9c8e3a9b3af48d075a77f4b3d56644546e4434c9256bc5dea48bf7fc43838fd52cbe0195c7be1548069e9d1a4f9d39a745dd9f0f7a2c42bdac59a0b07906dc785d8ddf4b15240992904de80a134ce611001be132b3bf85f8f0ac6debc4a3c4e5c007d240356785be06f566978450fbe81adb65afcd14f0b7bd3887d3efea39d45a16fdea941ead8103ba9d832e21d941feedbaa9b122c49a6a51c1580b223006b257336d6cf3b164edec129fde5198e7f4200f61ba50befa3628ce24338088355781a23cc8ec205cdf35574ff702a704ae87439d1364db2761b9a3b0654ab54372bb8e096f64939162de7efd9f848404d632e7d817d8f2833273f28fdc8987ee734d1f1aa9607ae257ca4a6049eca91bfa303b44ef64fdbfecf429758b93a1c92f6c8da1e4de59f869acc92e6aa9de36452f519a8ef144b9163504d8bd355c142ffd5c98463fb1b340bbfb2e78f05942027af2870991b03e7ef3d98437ad860e4e923ba9bbbfb9a6eecf491bfa2244349b567d60f2ceb88425fbe25e43ead5f7d31b2722a07b068e1e4699e8d0572037c1f117d67c47053144c00739b411a1231961ccf5ace627cdcbbc05a78a1a48e2f5dbc1dc59bf8966b438b24aac841fba109d23a1053a4173cee2af24547eacfb65f91484ef657772e1e4685825aab325f7c6ac5bcfa2990b0f62b69cc94bb1c7992dce36bbac64e5ae742051a943ae624f1c088b99d70dac77f91e4c501884a9ea82020df06d64b66ce9b1d2b74ee3e34387f462c99c672987463cb7ef3e534f2517593c0757aa95da6ec2e3f468e049afab8512e2277a3cba0194a29a33a86c97c508fc77dc0ee12a59330ad35e7b4a9642b7a6f0abb42c6751e99424d218c70f4c5cbb5e6bfb0659c243fbe64ae8a8121ebf145678adfd9561dae5fbd7f239f5af2383bb865755566c2ada7d2a514032716fcec78d0310d43b2f12371027cc11324e12a2e33893290add1bd41b40edc655299975142ad9517a99caf48ca1aa5177565abf01166243f237721562fbecf90b2954ff82a10bf47ed4218e185607c83b735fa2ada7cfdb4e4242db409e97ff94c60d86f945671547bd725fa19aa1344bfc1641a0eaa9e3e057a8c304fc805852dc96e5a1958bf60fdf05a3beeb0f7d8e5c7c82917b09e4c99ae2bdb401cdf664ad4f6e70e3fd317d5441e5cdab6b7a130973b23129f09769a810569a56eca95e9edaa9953273c86fb54a26d51977ecd39011f20e6989e01afcf14d04dc46b6600c1a439467c9582731a0c247c0fdd84332f8e34332fca35cf0107987b3ca848d4e9211634f6e379d1dbae0cf4aa18c547053c58133484d71e61cfca744faf46b64c6e53e2f56fe837c061f4d80e39868df4b2baa6f1498363d9d8a0baa3a29e0060488e569f38701802e50cd440c6561ca1cc7da9682e56c4c56920483a5ec887a8a60534301363c3637545f3d24ae14a6ab494a752f34d39614cdd69d479056b662ce5968db533f8d1058fbe54b55d612e750e726c73c40e96927083eba9f5d323a8e11e9ad7f5f578be02db76468fd600e71e8bbd362a04fb373d040c610d318840b6d5e5c7111f34a1300bc55f9ce079081a174b6fda53e2da61a70a53e293e59f22bd17a4777e349d7c00a346ebb10f9fbec78c89f6970ad17b49698fa185f85d91e3a4f0bbabe7d1bdb1cab40ba74b3ab0868843e9effcd42c7f699caee8375623f4e1751571555dabc620a8b20f514a4581ebbf0c994622bce6c69d16f392aadcbbb0f02f3db9f02b140648e6ff0ec4c9d1b72cbc4064a7251bc756df0321d05145406569602c186d39bf8a99e6081e8fde920d31c9388b460f7b269a99e38489e4344229bc04d76d297674bf7cf95c3eac0086905144234d4b37dc826d56e7cac70322b2684ba448677023429b61891ba112feb46a23d808edb03e2cfb0165ae2b7c93e0eb846a48dd3297fcf791bac943ccb58c814e96190feb4c10655746fb8e23b1ec1c8c20d2abf06de21a5f14bc77e4867e49f5f0dc812a3f5dd604ca6b3e792fd8f4f8fbae283793c20f506fa17e89a8b572b617327198732c1295ca1758feddb7a024f4ea10b442a57c234b590a9248af7db0e8a9b08482c430edd75d005f8bd2423d8d81821cc5d5ef7457ef3592eb3199fa9f5cc1ee62e058a1fc394cafd78d14f0361450b81c72122170488878937beb324dc3fa3e2f96316061b9bb04531f7e2b3b95bda65d3154e0e0e2ef55f9d9fc4dfa9a29602311578704927d4d941545f3c0b8c2b6858d293eb814c4df52e3119c9a4fa9015fad9b860dc962c06eb2bd7f91ef98076543804a5ae843b059b1db68a845e2e284144d0e98bea05511ba589ba227e83c1ab3053306c9759ccc26eff7e849accd964905ee89e9afc4f60e92199df7acc608d8b1ff6366246bd4f29dbaab311f334da08f1c77bb3ec55ae93bfd8f57eccfbf88d8e907b0a41909b99469fe1ee69df3a2fbed008e7f672a332f62b12f804b6f199eb64fee4616036cb5f36b7bbb13e014aede64d5e7346227ce9c413058c7a5aea8183b091ef13977d98361ffaeadb800b72842f554d7a7d4051d3ee322e5c994d954f9db56f189725083c15bd88d447b7eec95c240e46fab8f94ce615d393bb76d07cbef6face80a4b98b4ddd193e1d1c7fe2ca4fc81659a8a7f43726b9a936fe2630a1e846f9bb3c1eac2f94f062ab6b30b21d78c82a41ef8c28da9c577f395df98afd90bcdf8b8d73f7a021e6189ddf76723fc1982ca45e94d474e1d29e2fc75b357fc214746642bfaa89eeaded7edc106bb62a2cb916d7b2c4389cd471f5c75f7eeab85129511e49f2bab27f2b234501625feaf4b9500cb479d33132131abccdc5fcf75edfadf292be4c6be3859e4c714c8bca58dbfb51e112bd32ddf613858c2a4f4cccf44c09eb8aa9c5429a2dc478fb8722003d0af4ea2f8417670307c2f75615341f710e6125b4e510ead14160174f1e4858354b685465b96eb9928e9680600ccc4a5f0b6739357bada199527611abf21e1dcf469f6e3a9b9829f51fd048e7a1d03f49acdc755e42823c656aed64d2b51f977a70e17feaf5fc6db79f79b0e9865d9a417568b5f3cd3efaa7d24bd36ef755a3b901c1bbc383c8d0159b57ff80c5d8625638a5f936b22e78158058ccbc5edb1790784c17f6e8a3637305563b587b3b5a0167164665ce8f1c9c75846018ae92fb54ffb8fb4bb811b4b48fdac43ed48be7690bbda700edc08c0c9271184673f472a36fecc9cf5015cc0f1e7cdc293446c4488f30ac40a9658d512b24b093dc4df016337979f44d064edccf92d4bb07f8123ef4163257f10112d0f7426047b6eac735f4e7475977228e7084c3b1577fb795027824917679ad3951c34cb1d20b809f26b14547db2e26daa962d8c9b4b4c139fb1cacfd14b3f35103fdc7e43a00438ec329e60e2fb47fb5ea3f57787e3d9614e0cb4e8b1b513b04cf6c63ab712405453e0bec1bdbfe8e12fb99b98e1365f3c16b757ad82ef469ccaf5390f2bdf5a4c017d849be3f753cbe44e440d2a6f71ed63c0d7ff8d059fdff787970d93072a437fca2bd161beb7964d9a82954faa3115d6b4bd2f3581487dd05c4608d488a913a87761690efcaf9a96a09040e06a4120b255daf4f3a1f58bf80d01216e98f61006b22a9ae489a32b91f024e62981858e912d87468284b9988139f6b485cc47033a91573bb1ccf386e5810039675dea71dccf0adda785dee72c4c60b79103466b000d16fb6378f96a5f4deed0ae7ce46e3ffe12fd94d6161909375a45de3631c486b57e545b5d9a25ebdbad3d6033bf3358e3a408b5944a5b11db1bf61a47d20ccb0e8d2f34297fb5c9004603e487d729ec19c930cb81395a54b131a09bb94a2393508cf21ae4d06bab21d2a4770e5fea5e1f6b4e1a0adb8eddda35ff529d7d5686cfb7895ca8c29f7df6b4f38d695890c170f3785ed0bce7d1c774cde70b9e7f97a5818d3aea6867710010ee098dea6652a662c8aad57a3fc0b4f6e7b93d6e1d15c59a1a43a10994d5305a11b9d43e92384220a6ae78b2a83a2be084208a72d1d3e7f6103735926c36b0bdf761d033fa56e6ef5f9bf710c08ba4129b6171bbd11dca6c30f955d689fbefc3f58eff577547b446694915e89d00ec652192a7af4d3b5799b2a32545d9c00f62deb561035fc84c9ced6ec9855cba2a225e62d49458753b24ebae852a666c9f211bd18770c34b0a9e0d946c92515a7119bee929e315fb7b3ad41681bf9302af8a182e8b5977b8077d34defb385c21485c7083add63230bfcb8d2c5f1287445bb30e5f6f9d30cb07b2f9b8f942bb8521244c6d556e599e65136070261299f584ed48db403b4b9c1b350be26ab5709da015881de2266718a366271509e2ea7de66bd9b995e62169f4292c53a9c9d1a3c39ad640e67e1fcbf5ce96b83f316f22f784eb227322e834d580920fc71d0b391e48a096192baff3c4cc18cbd4df563c2212ee70157390a6e5c5fa34c4682098d492c2b1f3b2877d81e27f9acf23399cc75d1ac4ddd8d9e2a60d89f7e9d9b2152991754c985cd237e35258c85a4252f564fc054f7c39102a37cfc3e2bcac001d22969e17b0616c109458568747c2a80e8d28cc7b707899facd0d032cf9fd4830adff5644683e879eeaf56f1d7d20b831b7003f6dfbeebfda839d88743fe6f6a36c1235e9ba39c52d2ab0b6f85b074213778e24890b743b2cf6b410cf6be5bc75c32e393cb717b5d49f0668828b42230641da057d04988814e91ac672f84212574a085bd87378007b08dc4f4e6484e1fc44568cb10fb8e22b4261acbca3cdee188d2f407d7bc52f64463bfcaf3e9f4318573f4e31f989fa1e144a2be63a076e6993b91cc694017a5687dbcc49b8313ce854ad9d6ae2cb1c1a85fb9d2cb49e50ad8d46f29f04215f0d99124eab3af3bdb8fbbb8cbc89387b7daf828c232765b05a4d557cbf9d83a9c081434b856bddccfcd03da731195e6edf5d57a582ebed2b6a3481aa280d701caa4791fff1389159213b11cd9ebcd2995e02054bb3871fb6292ed838c7833e63cde4bcac1f97f4918c6bff9716e0031956efd1ae8784a508ee5e798199e9b0b71db5f95fed4ebf773e2643b7b16b3d33b75de5b9f22538740e2aa05366f337af6a142f44f17bcb538c325aff98f184db7f7112f9fd52784d2b8aa944ac64168a36b67aed91a9606ca6fd88476723000bba0bf3d88f92c878a2799e0e8a453d44fb82b46fb20939eecaeb51a87efc13f543c3ef5fd320b4d06ab717426c59ef6c9e258dc58776cb05f518e34255aa624cf90be555d3271a9f02be106f769ea6438bd618106aad5a9a2c39e26dc3efcfc57ef135a0f6ecdccb0ed12e74bc3e8ab5107ef0fb5de716538b9773f6e06822748ba0087a45a2b4162d7aca465db7b5e9ade709cbab48b244fe16183044b7b8135bfccf0089920cce647a02116cc0584e5578f23f74b02008b192bd2dabd3b101a965fbed070d00630f1f569e441a89c9a94f1a9f5f4e29a29371307fc7ed1cb0da0c62610d6068af30e4824f9f4fcbc3da9061ea599cc9b90fda9362e862e2e1a830c489c1283bfeacd198b70d0bc860195c77a840e5d2fe3f8a008c1570e3b9b4432d5154e5a3f04d62e87693fab304e1e909212420ee3909976004fe3ac4629942978e996b2ea7d9a7a6f962c67275b4850e7cd48ac28b4113ef54d3338ac172073d52f4642af1ccc3b349efbc6a5e10bc4a424eaa83e0493553fca35a3aa2ec699613bb3547c6d4c743f42a4bf6c1089417b635d9e1432a6867990b23c16587a1d17d698eacff1114610497cc89c97741bef92f429e973daf38dbe07233a21c954bc1d6ce2fdb753dcd02d94655e5dd71696dccc68eccdde1163c8f0409b45faf72ca3f2aa20169c220b8fb2be9a685af7c7a3f792fe3aaa030471a965eaa0f07e3cabffce55d0b66ac3b2903758b41601748d7fd215d2b440cf0d01ee72e4a6fbe254f149fc0825691caccb4a2a9e5fa2827ae94203167e5c8e5ecece9aeb75efc11575f1d5d629f473cc97ad76253709bda15eed297f6d8a194ed097d066d070bbf24380de4557baec3c0183dbe6a422b6269718d43199d15f0e0bc5094cde5b3b450351845f1ac3ecbbd5013c5ca8c6baddd312eadbea426c04b5c265d035cb345356d3696466581d879d4094dcb76c18194c624061b67a84318a266b2ffbf2faecee78c1252c4ca354e4f517720289d0c22b478be7d64c37753ce0d2c221c8667fca18cde9279d92c8a9d7c4d2412f996b98d67e66aecdc9140b65fbf9aa4feb49261442e7de0200ce78858f527d16ed9076b2215e3184fd2e7228beae9860ae9b6f8bb447a37099fc9c924ee8bcf81878fd5fa2bffa75f202f5238da7e4e6a0fe4079ed651f35197578170581c2f6678e618fa0ff6ca7415ab955673a5b1e386bd9d7c07921c83f976254a41a650d9c640575cbd871e72f7b9ac1aad4e12f2e5cda25a8bd281c70e741918f8bb14b8ca46e304e57d4d40861ebd5477f24823cd7522f4adb33aa830f2893289d161880dce3895a6cef4763717eb2ba70cdb51f1fcc406f42315810cad86fd1ff206af432f29f70f155740ec37bf42d4a754b605a5c88f6ee234b618c7664c174692940a5aff33254c0dd2c8d9542fe4ea6b886b6a542a25dbc156e04a55366eaa64da1f1607ec897199fa1f4c68145f69a0fb0e2af6a6b6be8fad31e5c0c4e299b87f465426359ae1354da493eefbdcff80b588729445717a32620ff85041f025a72e789aa91b43b808bcf68986a36bf8c3551c772f0d9fee73e7f7a18692a525fcdffc5cc1744f8c1e930c5d347fa9b8d2211c381f16528e3a8c5aadcd24a830f44e87e6daa229dae59175aadd2ad91f91f49705892d5aa352f2b54cfbf168c7272f027825621696beb0576bc05894e45105df1ee1b6511973ff25640dd5fb19b3e1d9c2e2bf902e80d04583872eee950730f87567fc63025bfc6d6115421a3e8fb4ddd06887c435020e7934d4e14f7886a4b8b070def07a951db4ecd40a4cd2ec8eac1d4dc916686a8386b539fadaa62b347fd1e7a372335a93819bd004ca72004aa123a6151ceed01f80006ed84c3de11b81e415c83a7c9392a3551813cfe65b80dded08d683dfcbff437a0347909c5779720866c3d64dafa7286cb0fcf88ad843ac91b2d857bc899c080261e604c867b5d628a0e37bc24aa0bfdc76e575a08a010d442f655a1c2ae1b6342f08579442ad02a8d2b5c7e32f03719499ef3cb331a8abc9d68a11189ff3b75b0f60b648c3e3931ab68767b8e4cdd4395280ff11160db0202d768004f1c6605e17efd71c4dc38021f9d0359df31eb21ffcbbc8db9b52c1a7380642d4588bf381fb1640c6d179e9971039b42b093c07c0ac35123ca356abf0d9c70f4a3e9b8f26a73d2caf4ef6c9621d64c5687b7beba5836014605f354cab792a8534759d9edbca89efee30009e2ccfc11c7b6971acc00afa630ad0f07c40349fac74aa80aed01be59335d6ab8400e75741125248de8eeef97f24d553a9ac868e97be50504421c0b4f581afc2e17b188bb7c954ec07c2b73b42a3496484c59b3122452a893c207b907e213badeb67fbc0894fd2510871bcd2ad250293e5b15b730637b73f48da463ccbbadfe6ff1636ea5dc02bfefb0fbf9ac9bcbb6b06176db56f02a321d67c5165803d6b441612d5734815fc898f5348aa1842fc5862bacc2bf5e68c08cb9b380214c8d425d3838b9889ce2bc74f827e0d6ca8ac7ece3f9e59914e8911debbf024e438819ef246e412e0e54ab23f65b8923fa4d869c2fe381540efda0ce078e057e7104e19e1bf0fe7bfcedf237535128c61bbf9bbb3303a1f0274cf0fb3e56f0a45c2b71f3a551d9a92729154ff3d9a8b2c05ee3901cc573f4180c66aeedb8b7470783eb6e23825acbff8c69bf16b93f502568b318d7169b2f9ef3840d54f241094270c1f426ed1e30b4472c73bb322bbc807d557fe3e6fe557886d3aaed05370a080dc7e6242b7d9091ba3cf4d7645cfc49cd9d211e03a1045a231e250b6efd4d994456adb2206d86d2ef86bf70cac7479f06277d1093ff9325bd60cc6a13f6d409354d65cd2eaf770176a9f1607c44d2351f165fa610ad0ed3a7ac07af01a6643644f5b86b1ba01be43d6c84a1a4fa44cab6274c695ea1fe3338f2280d9f4505d8a6b9a62cf9eac2ab0e5ef2f303fdcadf2b9767b6ed0775da160ddcf8e67fb95e09f48c941dd2512a8b8f0819029d465c07aac56cac8cf1be69271e319902aa81671e63baf28cefea13c2e85b7b7691cce813df9b270e60afa023e1bca134b014054c5bee0210c359aa267f1b255b6fba1a744eb48a10653d91ad79eb9f2ab6d09e5b2012e1d18a240f47dd8756e2c4b0475a96775d831a504d85397e73dfaaa5d68a77654ff5327461db5dd23fa4d88f33efa79f06731555483cbc726aeaf6df290ddc8714a6c2b19a7d1721b51099c2f3c5f907255962c9690bf40582f1fabfc68a17a3b407eff2bbefbed1b81fcef980cc5b8ba527c202eaab4ee21e1a007746b0782364243e7ac9ced8c087676afb20b5e04069890c54a769dfe37b9afe523a3343071fba00d35d013b87412d8e7e8ddf1f44fb44e206ff976bf1c3e63263c2d64bfa29ff553aec0bcce293bb86b0aa9283b7a842af0125f9acc2db4be2d875bfaf307011a139e910a52e133d5fff6d7d108193a2ed0134f8c90f118c5519e68eef1bad2a7246f0e6cb114a9c7c29371613deafd7e2eb10bbb5bca90e1b7aab71219a19c9b3c66e7a0d1daa7515ef9d9d278c67a105fe14840669632b32342f4b31c7595a93778ef6e2d99c6925320f69bff6823f7a018dc100c6ffa6a0d0161969dcd09d6e3e109897c39d6ddaf805bd7a39916f85daf62ed6341a80453a1441a3579313c1ba8d0c0d29fbec550e02aa9500e886d698f54ea63a6c696ad8a524a23c5e06d204e5569a96322e9f8dc739d1c93f3beca60492936ff4412b7aae750c0ffa318597618ecbfd6693135533dd2928823cc84a89700d9eda6bb79edffb4f752625a640946298603ce951ebf47cf91dddf95d56b8e151a9e087536b81daae6d99d04fa6535599dc6f985bb7f86f820a2439cde091844092fef4cd726e5f3084e78735a3a008884c66ab010d78452f155f9d2f732f7d3466ba8528c2fd3d8594d43a58210cd331da5bfa44a840d395d30d7c45f4d5a40e8f4c06a74284a643410592cf986d07ae15f52fa2103bd4fc31843fb4081438afa32f7a481e46633d6b4dd6b67abc39a8717756d73c576c17d63aac3a56a6415fca366f55f7eb96b2d485059ae2d6abb9b1075d82048cde48606110d406a642335df47387d29522ec47867bd7596a77d3bda06c611b8b0326b05d2d3840b5d3b7742b9a80844d3d3100730fd12e946413658e348d15b4c30a629203724c92c298dcd1af7129d70f92b2816ab14bd6a3fcdbcde10fdcecb37c7157fb1e1fc219a124231a85f9c62676ec5fe7eba9a0134e825472b1ef5523491338369b9ca88d363c646c126243cac1b03cc5db38310c1c22a3e17743b0f2389dbf22dd69ffec63864045d673372892aad8cc7f6de0a3b35a77a06aa46b6bf1a0131761b5a8af79f2e8e7e2647cf3eddd893f1920604a65294cf0bf6c29627437be4db2ee3a20839561b5f2cc7873fb2cd054db3d7fbc2622c4adc6d9754ee93286bd44e934908d8d21ef85c29454849b4041da49ea06819a7d1c2076bcfa8c081a76c5f699c6c477fc97d96df7f714593c4bf63aecfb09bdefb96b62938e48d8159da9bacde73c2d1d1ea8ed75eac979c08329dc6c680e1c7d2128e270fe6e26f151e9e89bf77a5a298fe41a319f63ac60363874109a88c9f10c96b6d4a749a42daba0411c7195f40d47e8573cd1c2e9c75b366acf5cc9be2f10879ea3bad5f395dc9c3cc7a09014e97c3e84c4a874a442304f6b662cce1688018914c41238eb7e620e23a640824c5488ac5da32e274d35625a5faba4d489faf38bdad05844df010a581039943243da93320e1672e466bcce5a79cd9ed0978490f7de787ddc5c7311f6243d37ecb802c2fedf2f78e6919112ee4ad978018f2cf22f18260a5fcf929f367afe9cd7412078284eb50139578353a91d335498e74dfd3040ab1febd566be5424bf4f8516b5c4f2233ac4124b47245b939ddcd910f3d26c7088740b046f83333b94c99b569854a548146912bb25a8bc980d3bd75827de915d33fcc3c53ab88f12c6327b47408e95ec8311d9c0892ecd2f879c50a44f17b36fc1748fca1511a1ab539edb30807254a7dda478ac16dc5f23da73b2f15cd023e961963b010003bb9ac0683d6f5f62d14a3d499dd0d2ff63a8423212c0565768493380c37d1bf714d36958ef4ae0756649db99d72823a5ab75bc6ae9f247060d1e7feb63c977137deecb26e2d439045cf776bd8fc999f68346f4b6a70a4c704cb91ec596365164a40b6fae9b925a6cae7ac60f4d08fa4a0970d29abd51c42a9c9cfc29baad8c8603295cd25e27205cd5c760bb2bef0176138088e1aa3925bddcfd3a65a96ef109e554eb2a24fea33495946a9c406476edd08a7a588d7afca640ef15fd4003012846b990a8269de865e0daa05efa5464fde11c98319e24ff9ed3418d7052e76fca946b2389292dd907084374684cd193353407a9a9541d5d6e22700732306af0570db26280750226fedfe153149a098d6b03f36b32f56fb84614076724dd53b9adb73995fa2ca3dab087950674622d96969a9b501634212c13d284ba716e0d9676fc1b2ae47d3286b317c13a1ccfaea6e6d924fa5da7f64a02641434a720128464bba3720514f37219b8d964e8954a8fdf246f39003cc5fb275d3c5f3fb0444224201006ad941fc11a04688c28a1717d5346736c64cffc660e39c483de0e146735c4f43cebcf14694955504b0406e687e06204a5097d504af9d6a47504d98f5d5f24a130d3d360d3818d45cb7035a05d79a1c005d29977d346fa49c740058be334cc3de454da1ff96b8b9a9eaaf12a0a35aecd7cbe7d3dbb156ebc95b3c5749b4a3a269e52ab074c2024414e2c0de5ee065cdc4c49516b391e4d9d736e547c01d736ca75443ca9e7e0af17bc10ff9cf9d0b4e59fbc41f0bec0ff1d23a0c0a77a709e41e3f960af627786430e495a6cede8bc1a5364489eaf33f87ca5903e6897b4ca25f99cc3cd9dddcc2419a6bfcc543bd1571fac590315a2f4ddc75427a2e616f5d52c475c235c7cb239e33bf4cd4c32ae0e22b9d0e32aa2d1aa731285c9a611f4ecb59ef461be49d616176b4b1c6d49a056aeb5be546cf1359c117e38e25a7754b4d9d1dd0cc78a18108bfea428c4146296d9fe8ae9463c985db1b402879d7cb90a6f161a9e1f95497ffe0a5f14be004924e4298cb8a0a2b04f173d81df2f36676a82886613f1f6da5d3e0a035bb9179164ecb4c7dfa1f9949a0a5cb0d005b6ff01fbcb9326ccc3973a780b7d7df97b20b8f7493685c751f0555544b83b10a1e9db006e2dd2703a48bad41806beadba9e946e1a89ed7b2c8c11e7256220896e9e26889c440a01cb1289c3c829e15aa1ebc84e52368b4e4e16ed9e2fa4bb6b81fca6df060fccedbd1495579ee77519a622afb68ce17f879e54be6599e46a6887f01a91b5e68b350dd8730480091979584c13facff95ee8062441f5b5484860e766efba4acde7fa37ae399b126b3c762e1d5fa6460fe69e1918d00975c0a52fb7a191ab610416aea07b6254fdeca09ca6a8eeb4f449f5758e7e6d457f0ba6acb5e0a573cd6cd898ea63205ad93248b0121cdf8f4909daccb9ef11a9aba8cd7a1c304a42a09264bb4eb348f67bc013622dc83ca26e3647b675008c896fc9935b06f11bc83bb73bda14dac5e41ea860d574d90de8968558841dceaaa5c0e24eb6b977114a83862d07915c2863d3bddc33b3511d6689b4dd8b10322d13be796d848641d18a5490f8e827ffdd101d990febe4d99c41503c25525ab5f32bd259dfdf6a30f88eb6e71f40284c58c6387f876e14efae9dcf4d851d3f665a7e2e2a33e0bf3554074745f495f7d0d75fbc287774174027cee9508a17caa33f9b562006a4692c8c58b4c72f8c4f63e9e02625310d332c9db8f6c2fe6a6e35e04e17e1d75a9a29ac9a249700cab76dbd5ce5e0ae757bce247fe2758de40560833b84312c34d1f018d9135934229b87bfdb1d47c78cead6d10795cc64f8d26fd3a0265504d1e9735d7edcb5525954cc2d93e3047b5b466fdde7bdb0f0c481b71c50b7501278f559e84e312615a8e19595f7a8a80c47f3356ec56ea7cbb725b34b41bfbe480a3ea53b29b8b04fc30a88153f0171eff20099424253caf82b04a8417e70333d4dc1f4dee80e17d15e7ab10e53009d6d1e28884e65e1146dec551c1d2b2e9d1aef7755f1a5ef7f5f2a81e8d5388091d564d122e2bc7aa01de9dea98d48473e4b0005e52428dc04f625a6bb38c15f26b8e5a61d340f0cdcffe8eb1fb945f601a98af08b9f8801f6a5da2715305fadd3b9037eeada2aad61f8374a3a0db3b1c378db6e4dbb36bc9bc09a4815d2accd1d88ad4a029ba56bef64f541a21d23faa1aef6589101d3f8f3e2a354667ef45ea7366b341c01dcc429bb628bbe52a9ab91f1561c38af9a646eaaf3030fbacdd65b7549248f6c7348d772658d278c9ebfe245dbde1ce1273fc35d995891b9849d0b3599d26120f1225440d62aa1d07442d3c854487f23a204b5dd92883ac007eda2011659223c0155a5e0f101b8631399118bbd09c1d37733e19a296ac8b43b633ea9c9535d8759f09cb47cb6efbcd33185fc4d7899f78a7de76a3dd52681ebe95b2480fa2496f06ca9be43304d8e6fb49d8111e16409b9c88c73bc8e676c65680cb107862a2631099a18b58c1db89d196158522caf183d60299cc5b2add9c72715ee8bacd4ef45e9ef64514afb9e8ed69df7e72f85f7a1adb2b6f0e5e854bd12aa99a8bec91063594cc218369e85884e003bd5f86fb219a6e30218ee00ae05d30ea88b36a85695b50c93fbdf20481cc080be6fb7a1c350dfb2a7a3ffe14bca8c67b41daa5834f42b93ecb54dd477154bfecaf79fc7a5730298f8f30fb12bf88b17861efa7a54e62fd50595c00bf9720beeb01dde729b472ba9ba86623587cc5201c4d273f36cf8ad2114b24b17becaac792f185db6dacb97b68a04f6b6682a207231a85a8ade0ae92a96268cf00d1fd7dbbdafda4ebf130a303a3db390151b5ada97c2a31a9005a09b6d160aa2381b0f302be5deafb2416e63ea2144e247cd7089142b69e47fbc269964a2b02786cacc61829bfce69d01e2b2f318cee9dea873c2fdb89f344f9fd6f316126c95bc96939f9bf15bb4d86e899a3a937b2286f1dfb89f5dc55cab1d2840bec19d656127c65ebf58595fa042f7f63066983a25ddeebdb6eb33f911aef0f5b020554c4bec382753ef81a14fb875b3d55ca1a4d69cece0dbf0c0236c20aa3e2b9d5009c32f9a47cd0f68e902abf641cb7616d05b806a348a8163f0ba15b0f5a12c50945b1263cbb46e39c8c92dcc08c61f52abe0305b23f4f0543c99b246ba34b7e87b7a7dc70a1d022db6eff17584a2cf3dc4cb63d451aa5922dc20032663400b0f09da70a2cba75107035e31ef712e06c1281f0afbd104b6d3431288e59660d0c868408a3c8dfab2824270f0a5be79ff93b2b6d8b4ba798fb33e19f548c778b321e4f20f61b6c817911da44b4ab3f2aedf9471a48f14e30d22373d4f9d0c6d8afa0b4f3a0a533134d0bf9742586ef9e56a1478aac206d33031b61fa0407db5afb8d1367be5cb3ff95e47a074d2a89c7f5c16d5aacb86a5a1ce61ca14bcc6769c50b5072689344145857e3bee70fa3a2504aadac315fb1af4dcf362d46cc8e7a6bd04a5a5b3182bbe6cdd92728f6b21c430c2bec4d9d9622c30b804465772c6193769dad9062bdaa00c068d6e71ec512c843dbcecf9d44038ade5f147b2e93ae276b6ffec9c8dd3cec8a347a29c81c0dd5c5aebd3f2359232e213de6b007d70c436be4dd3f35807ca01389fef54f8d89376bdfa10c0e13d5690fe8476b9b6abb0dcc922911548b8ae50675465946e95275f3ff1685eb1cb956ed93dcb160eab2d44662f61572251d08f3b76af93023c233e0d8fe08349ff48cd7b2585155b5cdf505d7e7f5eb8c4ab308faf539edd1534a8abfaffc4cf20994bf231c4597bcd5a3c2ad38d6c3b87decc8a5d29b42810bb6de35073b45957c1bb5a148b52a6d6387f2d45f53769b2ab5ac53d018cda39d536ad559795718a11f9487149129d0385739d1bd9d78d8aff6044e068061bf57c7d7308a7802630de98fa1a7c997faab513988f18ab6beef538e669b6eed1937c1ce72e875c9be23cae5e671d967550791649ab1cbdb2dbadaf729c7c42833dd23087b0d515fb50a25d9b0add779511ea2c8baf666ee2be8162234459add4cdb4d2f9ce6ac747755c93081b8b1a7df346cfac335133020357a124b64a66bab0d139549b5dcad0518a068f8087808c4e0eecdc8e47769e1fefdd92ce0d236594cdabc5f30968181f981afe96081f50b4a98c2c7fd1da5d4783302e46c0258c0780f7ded3684a36eb92dfa08afdfbe03c53226cc8ce27037968525085a4a79fb7996659752ae42c8690ddd56fac297bd424b2fe8355a99c3fec50d8ff9609cfc5a3c2feb19e83a85ff306182fa48df557fb75d75beb479d4ec90e49209257763e031204824622c060e6d6ef7f452b446a25e67595225b101263500304d77621233ea51ff29f78e382aa0e5b809ef587b3dfe3a5216d5c7c553b032d452a0ac126a840e0f7290ec8e4a7dab60da04f1338b6e572abba4571ea22f3077a06dd06bd922bb4048b545d70bea9e0e479314cfad063e06bb822154b1db363b91b4be323921a74b6be33e2e0bf62a4863230d6eedff691566a48f59da6c2b194f7201e66c88ff12b2614017e6442cb06d872213a58e79bad0cbe1c902e962e0b4fcebc263c9de280499ade28e3cb80a21b68c008eb8f57d6b2c2bc1a24d86e8c9a092e636bd5d3eda32b3e651b7be3674c8c3dc7b07264d6ecfbbd4236630877b9d9271257cd2d1066bf20355b883b3b2e5a516d4cbd7b8cc67399d2bd76e520ff46972a5dd4a8454dfbf23f454a192238ef5c5aafba9f15d5c8a724fc61d72f81b4c3b684428bc94afff2d5ecd65e9ce420ff6eb6d40016e4429a2a93f86e62120c063b70cef70d61fa834417f303a48146fb680b624cb7eb3437be1a4435b0a760bc62234c361a73c550e5ea9242a16ec1582be7e2ed2e432bede2ea79f9eb3dc33eb596c9adb97738fb48ee0436e44a96883a5b17690fa9e9eec8a2e1e70d70fd52af4ba1611bbd870e34677383c445f2b775f79b01cbbb26610d4324c5239e040ba8d68955d1d9255f335af10f08deed63ed5f20f9c8eda02934ac626a12f30fb57e9171532d21342d0495bd4e960fce99ab1a59b40d615773f155dd0d15f47dfe87c403ac39d8edaa88df26bbb8e3832eb1f97471789b9b7e2ca6186c7f18179da07ab1a2dbdc65e5888cce702aba10fc8642306b3a1b5d48e92decd3472f6982b71faa3c63da086242b22dc8bd967e1e80a1c1f709010da835d720d4d1910823ff4c6c501a95fe212b14acf173aeabc33dd72ba506985304af0f8b87caece9b68d9b5575e3fda51710873aa6c93396952f92e7192908b9341f16ff1d015b075bcf25a05184cdb8eb73b2b108b508102c5f92b039d2b2a66edc31cd6664a2e6bf21211bf52c850f952baa259ea364154ed71e90e3f5c6e834f3a489a9acbe71de54d1c0fcd61c388b9c192850d98fe8ee8f044beb17bd8d78384e57273d2aefa39b6cc7c41372fe0050390af5ae8f6028c5c8d716c5dea49515da67894812094d86baf053e0f55c05497298d5c7840a8faf2e4c7c29e42d71bcd3de2379f1aafe6a250263cac7004ab320f0df84047f953d416a7b4c7f7cc468c07c0ebc5a73a246ed1696b2d497ee57e232d910ba19c42faa2c5e34d636601bd8277bff61e0064aa0df7cdf4ab52c2b68719a119826a9a8ae272f89e290e5ec78cea2a4e63ab46a62cf6ea71d21dd225238a297c93935b38211c987b3b88e308e8e19c5424c81743fbc43daee2cd279f40fcc60d5e676fd877b7f036a77017ea2f9e36db79b3d2935424711d8ca95ebe5aa959543612074fb7f8ffe2173fb79c45c35c95d032d4230a2c61495458fffa01033acc600091575bc87d4564f43dfeb84448fe143ccb30cc1fe0e218a9a6ac9d21a487d21e0b8bbbcfc392c95ffb1c824c4494e07ae49f40644614639cb6cfd11b73b915488ce0299c4928bc915cdf3a4f8c2962b19df6c245e568f2038550ccf9ccd70e92993f32d430b9e12bad203870c9615ff2dafb2a72a93b0f42cc71d852c3f5778bf4af6b7666538090891e9469b3fa45711502d1df941a1063673bb7525ada39a31fd4b017714e9d27d3584ba43df2c8122a6013f4fcfa3b9d75f7bcfccbcb3d6d26e9458295dcd200452f8139b702dfb840ca2be3ce8249b109e53a258ec457fe123ce30b916c7302c23f5d211be398adae09d64dda3f3bf4caabcd5952739db6a57046bd9df62680abbc4849bf42c2168bcd1b28a29bdda498f559f4b0a78b2d4c57436fb2a2584c715f79bad6a09eda55183553b092d49068d9151c82e52e24dc0e9b2ac6f343e203f4dcf4c41bc1149502807f9db108d21fdfe808fccd19cc6a11e407d2cb6558394e5f6426d56ad124d00689de85e19b1ba66d448c34dc5c6206fb5dbe2e24ec30b66ddf96e0fd27d251c3d8e6d3f33826dad44336df1f32cb71e86a84f913288394ed47e257e5a75c073165e33c5bcd4922dd84aa2efae5de579afd6e9aafe710a69c49316623ad3287aea086363ab58f404273d2b8f1d818c2ab1bd6977353fd63ba92d44579a06a95258edeb282ce610c781be9d1ec8dec57695d352864e4758e8f1e42ede1337dd5f9bdc5883d2f08171a45925752a8807c59932eefb12b647d44243ea29f3f90c8d04ed0478820889d504a070770a9ff6ed4044064e0a7b126929a7d112f8aafd5d1bee106aeb8957f596cb49fd41ccc858e161f75f37c35513eb51c0b9db008ee012464507e6bfdf46ca7570e997532e83f19bda746b8825a71bc8c37edc03a108276380d81cd6bff6e77303b9e8a1157b432dd1b06cdeeb88cf769eb27729440a448a5c1040eabde8385fafe6007a56f6744491babd94ef86156f8fb0a5f07b28a6fc426dfe2a29e21fb06b397b8c7640d8283bb82aa01cf96192e9ac1e6322b88855d77a16d396084abcc4e40a9f7bfa2641cbe77192c290e1fafa88d08f5af8d68af65ee7ce5686b0612ca66eef9497451652798dcb0b7198f407d7427aae46c0839f950ab2c3678eafda1a23f85fd1970d2cf8283f2fcd6ad8ee4374cb3e9bda44e8cf1e3558e62f03a80c9d896a219bde2e55666b460e6042c9d25d7d5d9fa75d4268337dbb2bf12ce1dc7a872990d91cd73d775a9f80505c5e2d2bf8637337868caba1a49a1e5142143bb0919a9d2da1c52fa663223afe75095353d6a8f2bbffe98bb41ae880731d2b0047b237f54ef7bdca928860a82c3b6ad3eb45af4ee2c68d556c8145b43d6361337c135e1e483774342f990a01c9493ab28f904c36e039bf40e4ebb1edc1ba41bf71336ca75615d8eecb808c6e932933fa2fd00944e9f5d45036abb5af09f6bff06e2f3207c1b061acf6831e03ada4f645a5e0bb1fc3dcf8721990bf5ea062ca3aa7e8ffbc553859939a93f0891c61187d4d10378f55b95842b0ed6310536f08199aeaa93594cb88162f7491238c511b0fd77e2fadbd84d824e7d56ac1da72dd66a86dca10d3b030db885fa79639da176024c68c1d97f1c39776ee2131ab39c5654ce302874b128d44d329d48e927e7ee6876b3cb7429538f5d8838d9e3706faab2896fa4bbd701c1b9824c284afe50e73bcfcc8980e63da96294043a8f5c6c94354ef9ec630135ae9d74b789cd0ad8ba3d53016d8851b754ed6e13ae9f44a59429717aab7cba0e0d09056a6f4d39760e8c4807a2c6db486fa98c762eda03ea3956c4b58ff331b8a355da69b97c76ad3072e87dcc69c806cddbf1d43ccf39cc797d0b3139b260239526229526d84c768d989ee5bb22772fdd174c61cf691f1325d8d576a59bf480da388e69b211f08c619dd57cf2c056be43a3f58073a43689546322dca8febb0603b048d4c39e7802e550f865c55dc1e55109ff14165a72174039b8a721ab9ecb662f0c50cb127d20c7bc8d5154751ffa39713d6a010dac5a290b294d2fffaca487eacbab5378ddc219295a1c9fd242c350a8bf9824ba985e539e0e521b03f3d0d3b6e6d9fd2e1a675658e8adaf71b8a8582819a5e23f7e4753c4258f3d0f65baf4b4c128ec3bfd87e9f122e288146c3ffa7ca501223fd46c59a6edfb4e64b7fa8f590fdd19e186c26eff61aff4fbd0a28dab65bceac4aa67a98ce8afd9524e29db6f8c960f13c4af4ba228da37fce0749fff6ab9590c5ecaacedd879214a334bebe837bd0abef87baf1c5b812a1a553215d3db061745cbc6738ebb57cb13d02e8d3dea1afae06974cbe9f4fb4bc55b542b355fd8791f8cd95b33fa03b0995a2e07b2bb5fa5a5aedf2d2aa1ac863e4ed3b90c1f35571c59db22cc083dec4bfd50c257a258e28ecde0ac7a63562898fdf0286465a5b94ca4e87484641b642668f727a9cf28fe9a5d1f7553e7510749d170d16ab0e075e362a7a10b37f7f22c6770d2eba2586e2d01d0c7cea98be3fc2e4473e7117ebb767fcac46fa657f2e3c73a05758541441639fda0ad474c923151b4539b5bf9252d4eb498c3b4ccff107d314a978a87fbcea25ec22e37d5e69afbf4888309d530d054e1727fe5cadf6734c7735ee5de0d5ecda43ab81ec922bb87834061e7726d742f928019b4a1798309c5042b295de2d7f5e59c81f4fa9dfc6817748258dc4cb0daace7a2dccd7a5e7d21bf40e270516862a4237eb304ee3e0e88c80c83e2c010214af74563215e7a932ede4dd2f3c61f1c773dc22fba28e2c997ffc2976c8c05e47738a4324747381f36711aa542f38ebae9f7fe713a6a9fb485f1e6c877bb35a5ac6cd0c124696ebe10c540b900853c58ee99f8b5840c5400793f865be928cb0a77a7bcce0803b1719ac8774115cdaff252e098f4ef758cc0d6c9019c1ba59655ec2752d3083074012516307680b11632f2e4f9ac34998e5049c9ba34a0a0db25c44f76320f957cdecc26460b32ec8764dadc885e3021dbfc74884e062d5bdd7d6273d77f9748b180ebe39849b5b98dfee996ecbea22ae2d97ebd74827dbd29a20f228376a2e584ebdc7b09f80cf0bae4c1e5f92910f6af94b2e704655ba4d913877249c3c3a9987b65313b8f94f76ba0fd5256e0502b323cb05dc7b0c9ab5544bce2783a660f8ee12bda9f2f4b4688c66ed35669fb6325ba05ead43e34397b5511d8c014d76f024f0014a976b467f9b9cee429a85907aac5cc43eb6f918f931be87b06e38a6995e4e1af6228cdabd4936e007ae5bdbd02c9ea752cd83778c0c80db8e7c25839a2e8ae7d4a69b54c6d21680685721158a147652ed483a2910b5feb47fccc81bbe38ebadc76eab70457ad2335bf4a42e34e803436145e7ef3a4661ee40fc2f44ade01235576355c7611bc618ea781029a953bacb4bcb97e641bbd9ba04a3d26a395340f27398bdff2ddd47892a28fda5ab1e5ed1617dc4d211a7ff61d44846b4ffb7985dece7a3bc3deffe31ea315f06fc59586877e09379f140d94d76a81d9376fe3d1e733b870803f3ecfc65d9528ca1cfb316d2ebb9cffb68a695770f0c13e6de79d72ca5abb160053acd52790c01ca67898c19be0b0e67112e169194aba52bb61686a49636001256f3d3480aa5996e181125362552b17cbdf8000665623714fc3d68de0ec9c65459dc07d8c0e091789f370c0f74506218a3221dd0887bfcd25f0b59899fba8be28a102e9b763a5039dfaaef6afa8e9726e175ca929b18ecf24550994961f5068f7cce57ecce4d874638e37e55d7efdf5c228fa776b652db6b800e97536aecca3f15d321673002a81f0e93d58f889ba69a449f726b8609b0a9419955a2e82cfaf29e141a0e52545766e99dfc7f83c0fefa2c1e9e6d5ef73e104783d79d6365c695f3d79b498bc06e41278fc12180f1426b7a27d598b1114dec5cede586a41dedb32f6b20e33381bc4d3ef513b90d9f03bc96ec44e7b42a7eb5d9335027b837ac5e9d84b36407e89c9f4414cace28c29e984402494e4ba3ec43244a1e31664321278cb8854ac53e935466e7edeb650f233a57cbb722db2d69876d901586e505f728a6f7b5c44120f6d5701d604e9b9b43881541855f37f69a3fb5f87f14988fe53f6b1322ae508743bbe9a3ae86fc8ead3f869a59634fc4ef45670fbde9915404595e61482948f67d935374f6ec69af11d3fb2731753bc069c087dd807c375b31c5b5f6f01117c1069b980474554e15ce43fb6dc907f41c05d483eaeefc5b8eaba8e7240d986ecbf4097cf43262c5b234e7e3c4d7ff96e3810fdce59ff3a0f0eeaf0a52568650251d3ed57c933c0e653d7fbfef52451419e0ac9df6296a8a9d56136ec6a1c20b5904ccb325f3d93a3322145e834f16bf9712aba9abc216abafa071c1c92f3e235705e2140b8dac7b5742f555e3d05bbc617e0f4cf081ac8af66b0e2dfd5571e36e3d2ee23b6db6b47f1d0d88f890b169b8b3857a8d234998004af1651d1b51d8237e822843700f8bec8930f3399c749ae735b39b771c5db181474376cd1115a41955a5deb99aac30aa720c48c65c2ad62af46f8a6367140f42004b482a957f5bc85fd8709cb15ea00b646606fee1a1aafcdc51093085038277494d17be788cf3caf69910981c8e7c5146ae9cae634288d803847b176c28c91cf2d1134ed50fc021e709fcd70fbd746c2000092b9dfb7ff602049c0e9e71fcb9c881d1b23189160fda578fab60cd5fa9b75803e5f849e5e5af91aef12d7e0287dea5115436019a5e21aa6d2fbbd0befeaf5983f64a35ca667b6a5541ba4401d3b8a4f7036103aa870c018185508cdedd9c18b0ca0dbff3d59dd4ec82a6b4ef99d2b1e64a93fad3949dd520bf1948963bee06c5606df6c430a5c2f1b53a860a0eb30d46aec469c1c7964f06e8cc2dffc5feda333ca969bc24a5c321bc6889a20ca5d4abb53aff187e06d0553e7eb5b2d0d176ea66016b7c4a5d6cea08d000dcf14069a79a94d8b2dece01061d0f916e3e6f3a7244fb1730eb5cc359730e4587bf1776d55a98cbe243196a0c137c44263ab378a40a2541ceecc1c43350e9b92265bb76d80ad0dcb67e11da1f7808a7b6d38c15e98b41b45947ec003983f0b1a20b160856f9ec21db39a950b46c4e30772fbf494ec33c7af5326c7ffbccc41d0cf62cc026d16c8c8b57036c9bdd3c00739f20957ff7649c8669cf48ea4550ce5f89a6e2ea98b7bef5a678e07365ce29f04d46e9a78ca51baa225f5b9ef30fbf5d0b96550d019eb17b0200a7d172f23ed9ec2d831b1e75fce8d1207cb8169d53446ebb536c4bb6a15f072626c700d7c7c5ed8242c69be284b6acce87089069ea9bb8cb3bbd8d73b04467948335a53bfc0c42405f3dd30816349d92bfc42d738d16887586d950da390adbf198db1031de5a8b6b153331da3dc1e6c5c31c4926b193ee9e405de4b6a8940d6f52b3c1d1ea6e63bdab3323c5eca09eec6bde75e160703467e677a0e672c92090ec6784a7fa952afb2fc374c0f8eaf69e5951950a55a3f16e55b3b3219660f0cfad8b5e8523896a1e31e2adda0597873a27766544d148be8e1d28cd8fee5f9e2219eae501c5c3863807bdc55358498b3b73d867a4d0b620aa2463a5b9fa0b8fdc5317177841873c11683e58ad554d917e926f92e9e621f93f48021c023e6546841683b0ad7f47aac6dc0e1546dd1b2df189398733171a65eacd9c822b0b8592b6b03d9e06b2e32f85d96c69e9010b4a9ad31f4a0845c28a46ee3707bf78a617d0da0012bf0ef8ab8f8a577298bf174907f6cd47c8c0e23e4acb4e299c658253c0166bbc92fdaf23d82000bdebce335bee03567624ec3c42ea106183409270d2f625c2ec612c6f6ae7e09b258ff2278aeb08a47f2c9444ac1a0b789be9d6f20424fbe3fa64e44a7e79466afe0046a6a72c16f58d8d002059a133ce2cd5f5590b3be6714acbe4cbdde83dd9579b3a5c09582ca950df5dc2d425a8d23b8e4c8f77a6aac34c8e15712600f3fd3760e6a2173fb8ebb9ba2da870ac9d961e13c027cca0ae289666b0ae859331ce39f014d02572e1e07dfd9b1e8514fcd4ecf9417123312fc97307694b47978c075f79d6fb68c4c8e0a2fdeb124d74ed001959582d2dbe3683c0cfc036a58af79765e7f353a71fa72cb89d426d2fba2c83a8135f0cb9ca40b9cb34f8e3eca793885007dd0ad1194bb61b1560dd8a15d663b307d4b07171f6b9a6c9dda1d86ccb234bca4bd98e9a8169418b5b3f70ce5a8f42b072d5c6188ec81fc5179086748be8b4158f738f56557bee14c54fa3760be070cce0299bed3101c78c6f4ed85ccb6650f78972766bffa8907447c754e7edea4e2109fa6f47f92e2e337393c9fdcb0ca3ce98653fb0426ccddb9e959ff8cc54e6fd7ed37241ec85cde83324ddf73572b823479a18b0b10209ea8f672bb77f63b14ff262734cdf5af668efc21fb1f4c1e9b0b8f7ba5ba6d1d2bc664889710f24c42d85cbcf656d3da1da6c3bd55ac021d4f8ccd849fb216b7bf084f43be2bd526cd54fdd7943108c4b6ddd0b9c39d1c068d1ebdacf72ba63f86ec50d99d69ee5749acd812f427cd145e30983c7084cd75a29b8904ec44ac104811adc8be3718501db8725029268464d6db456dea74ebc12508dc1631413e3db5e9feceb295ee523ee959f9a4845529788ade7d6bf0f913011b5a9832529d06ef592c6ccaee94c2290415ddc041eb692d1a35704d07ffe1b36488ad21aed00baf9fb5080839cdde100a778d2c363105808619acba32cd647b28063978ac07a7a329f7202d00e35ed7b626d8aa95a722040de0b43f5434a0976278224c2e606dced5b9606b8e5ef6995e2f658024e2fa3af4312da024a7afaacbd84d25caec7151d0962ffd419b70c96061109ae381edf97bffe7d3d36cc075ee99b33ddfa2105d2eaeb1a7c9272db559fa348354a737d13e437a07ec69aaadd0a415217c9c8d33e76fd526a178c941cf37993d4c19e940c37ae2ddf12fb6dfcfa360154c007f71abf1d6468f1a0d445207a7a5167f32528a3a09a0bf6d5be26e309d796bc302f9d0aa749b90c242874c691f81e4f127a3104c454256cf1acad1da93395d109857b4b0875bf57974890ca68b86830731106f7313d1dfafef39e931f572bbbf2aed1a3f192e19fa4bc00a7471df6d42a1f776b73b8724d2e093c10fbcb81ee9ae11e98d72e3659969f36c97aad043ac4f1c295a831d85f94c6231f4a624c4ac5cad12eba4d8594a09112140511f7d760ca0446c8b951697a676fd6b49153efb07f4b0cd469ad1550b1f46dcd1f4f7ae84c2a30e46101e69d050fa62a2d43ac779d4f7f1ed4e05de4ecf690eb68052bb80e6f14a6fd2e5bf9ff8b0643113e53ce368a6c157290aba44dda5abe0967428eabc249aee29edfbea34cc09085086cc7c454fd8296619e50822b21db12b13eec536117c9078fa165cb36a832ad17668712aee22aadd16602e8b2c1af28a7e8827dd2a4f2393b835c904a10ffb58bb2be1ad66d5d3ea5b91da5e299b23249e29e10d18218f21c37aa9c0f6496b0f49c23c99aedf1bfffb6e32d236f068778b9e5ee9505f54abfe8a7603d3a852ad70d399cb1513ac94c6e9727a372e60f6ea7152d85d05de8ef377a2e3db889c5cb59a06abbf97026ccdff394b6281a77c5baa7cd49c74b4a8ef79f9815c552940043d5a0b2d518203670ed4d39eddcce5e6612560283f574731d68d41a08959e6c0a5f13cb81f83788b2bba0446952939918473e9d76f2f80fbbd3af6cf8af183d16259fa463dadd94afcdd6969d64688b050822dc25bd9263e4f5ff11c7a4780a2247d1960915148deca92412cdae676f20f82a6403d3592d750d7b1222bd9aedf749044918000a5c52d05b92bc99487786d01e3bc881460979ee852f42c7ad5abe51c01431497d2c94c1f544a5b00665fd7efaefaf9b79adc1ea06428b1284f9fc8456a06ea26d0de8eeda739e730e3c0c8c37a65e63930fe5616a1d4bc8b304c27f8347bec7e94328cb15977220c9727e8915bed4f4e46a2cfa1b13f18f813b0ec3121bf520efde881c5ed27d52eea4f5465b2a37ceeebc1e271f84f92aaeeb7036584df934da8afe79dea306e7cc691b07a24eddc45db1b4715f7841357acba12cf75da316b037a4f1bdc3483b5d7fabbe18b8b7e1d5ce2494eb9064742f8e88794eacf6e5c28b1b5fa2625f78d224ba2eb11cb3d5602f12975f906a31916fb1bde346899a210cbc7a13232a59be242bd486087816b6d89bd85c3543bfb0bb7259b7ab3ba0f54509a4981139350df9626e8ba58e15e3ad28eeda61370d34020d63e9c3d50e17a306d263d907b898cd241f0be51e9cf8ee3e78458023affcd57506a54e81ae4952c70afddb327877672b2e830322fb2224570aaf11feae289ff564d9c145fe768e07dd8b03fb5ca917ae0b1e04f459f2c132bf269bc05ba3e6caa765c961dd75b04d08756a5661d6b7c555bd2da022771d498373bac20b4318ae5aa74559cfbbcd19b255a9ec1db5f06395347482102a1456b68428c6a9a39b2b05aa12610ab9a23aceab3687dfbf29dba471506c12b63c2e45675cf66719e99708e7adacd2501294afbefe3f0f00fd2b5c902f49f7346e2e84d9acb8b43675e8ceaaa80e68fc881529330beb19a47b9a3004b87446e81f0e6788df1aa6cdf83cf9289b9d9228a8fedb6578a5868b96418c0b4de3cf939abeb3b0af0212ca200632b7a29b3875c39be8ad9f280bb18bb6ce5be8c6afc2fa748163730742e51d890d24340cca1ce0b0dba447155530ad3897c204937d52349b31d0d5d0d345b152a20977dacc9c9af12d15b063d793d341ddbb76cbd8d006f1d4499186f11c8824af5c1e48dedad1a133e1876d4917faebb2191830936457ca7563f99452be97735037d085843de1078fc46b1c467edda6f3772f868d1a949a12c6b75496394b4e0af3d41ffc505a93de6bd709243c19a0935766d1c701853d6e7da37f1bba72657c50025c1356b99d107d76c75862b1a508b8cc1922db0ec495c84964769f583e5b549ab1ae8b6637814bb73e188164db579afedd0999bc6b6eb5fb5feb7795017300e22e94e1164f37cce420f8f5645322f22474dab830badfc6e170cd6c742d1ae57c7c3d9af6d787abf973c85a54078698c7cf31d5532fdf22d8dd3a6d9985719c2c2c5269d977134935033387c84aa536013c4f8fb14aff19913446169c98274153fe18d59abcd12da2ce478c1ca82eb74b000afc86cebb491b71ffbc91d5e22ba88273934220ad83b4b6813941c4f0d93887bc4dce066ce2daa625588d0ff49bd9ca357a0d29e5b51901857b51d6faecf5777d17fc468d28aceb9c83479647ca07f280c671d68e1a36b4064dfc26f03945485f84a48ea2537d057a6122a47cd9929950484974a5ad27108ff22a7ac3391c92b3da6029ae77d7f8a94d1803e108c45715de416ff5ceafe188150710f1fbaa12255083da1f815ccbd32b4da522be93aa5bee2ce42a73fadfbb7b88bf60e64353212c63415fd74f8247ac5b5dd4ea655921129d0ed766e49426e33fde9f3bb4fde3cc8eca50c5ed5dc11afc58abdc719a4cacc1a21b178c224e43a2725cc3fdb69652c2cb8d9fcf07d7e3f79b3f1e5e39b9517a1074dcf8e5560425af5179f8a49ce116d20b14c7fd0a61aae0c02d1a2c0424ae5965a01a43d7dc3004c3aa584b89c33291d59ed78b60b4d9a48ee7f680e70f05f2c90ea7d3b2757d5f118d2125ba197b5b97be41afcce76a4f8dbc74c5d7fcea418b25cf6cd621b5327a180a6138cc24f66f467e88c3ee6dc83d5299b61e915ea8a30f9c5341d21edac88892ff10017775d1052cb314d35de3eda281986a12baf4cb4a12bad68e3727258574afb8f402c2ca4c8031b033430a70321c3815b02ab9e13de97e62d69745ccefd9b868dd1246a5112e9e6b3eb283a14591e9af0b16766afa6d9fa428f0746f3487853cd09807e5355d14930d5f545135c766d2f05e5a5ed8db2f2f9375fa354a36ae124a77e064554e0b5f1e4323ab1fd3412f91900aebeaa889663d0d6c042c9f3a0312cc921a2e28e20acffb154e9bc08c05a5842a4e13e405a427103c50a61e59e27e4155e0497d50cb2d6afbabe881803ae1176f00c8aa9c00567047dcf7641b9c33a9e81ff2d0f8aeb51fc3fcaf3611bcdecfa28716634b6e02435adb80f9026c2168c50dc7cf76ee108524c2c7971ae485d6f49ad66b78c24641acc4cd8b6227dbc5d570f930289323f6a18cf46cb0231e836c236ebd9bc94bedcf5bd655da89df3df0402399f32ad706b4ba13b5ce267371fd146469f180c85c9fe18c7c08297a16dcaf3735e86ef523326c3df69213c2991f1d4f62821ab10c649e5ec9f8c43e4d8db3ac6d5ec760dbe3a93fd05682b5c472dd8e6ad0e412621d8c307b7de9b331f9c2f4e74c1016bb84f176ea207891b6521610b4c3e2b14c475aa04fad683691e4f07cfaf729945108e22f4779169fd4816ca2b537e56a57d5363e236ff535d329a06402fc0d4d8d206733769263a77bbdc2e880a2bf7f4f9fbc091d7c5bd892af8b9d5bea4fc698c85d6ebecc8ba4654b99cc3f3823440dda3f53c2f3c8fa0c07df3e5033d47db2a43a61183f83485224f14829d791d562db55f725fcb8f59fa265ae6cb92078db5f4a6d6e4e232406f7c77f3b6415d16f5f04140e86e6104737d5a3ef95e0f4684dc8de794e04b3e9c13ca00819d783f0c7538872c7ffaf76aec95bda0d6ae8f787fd699e87200d2fb64d77ffad846908a16cb94c79460fd46fb7add3ed593cd0838cd24507b10d9eebebcfd6d98fdaa7fb9d39b9ab6b80f3ef096519b068cf1279c138af6ab02005fb008889d0b3f161a5abbba1fdf329af5aaf32d5e5e11ef8621d6c4e9c0311f8e09cb3e2006041a0572c61e2222a9bc5b43b8d0e2199060a3e02f8f764b4a2dd902f268cb40744e01da506b98c829627f1241f9b5abfd2fb1e285f711a59616ffd15f3f8503dfc05856c3b5964783da97345e2f81b8dfa59b6b63f809e9c675fdd17e4064b26e65d1aa4525516d47258234336fb9af64b0988672ec790e1f679d0c096f8b433f7d0ca31ed88bad255cc7adbc31e7984d3b6cc41159f80020575a6fd7aeb4a4b9a973908cd710861ad0bb2ab706b2826414aee2b466035eebef296863ddef096b1a68e3dc4b39ccf5e18bb4cb5d151c4172a91767619a49807f28dc09303c01a30ad1b3af8131379582baae4ca56066e1e101a7b40fbc70cce179e8b6fdbd8a8591bd7819fa39d47f9a62a94781c1c02e57576b35ac01294c838ffa6b5527607b8b6ada8c1859ca5dcc00f92132a9fc6e68283daabf9df16a92ccebd17d9eade6e0aa516f9bb57511d36d874d4406fc0b8199a3cf670ac8bd6ef0915c6a266ccf2e12de273e369dbb45f0fd8a5da5375f1634e089451085087b23479b9a8a2d66c78df8d0c93af91ee3469733388310d37a0f060d0c613221e1401302c43b9cc44c1235e4cfbc845bc2be3b1eaf2ab98c3cf5eeffa959ac4a8aaddbcdd5cea762b707a932e5a2cb8faef99dbcc7c5a37338c65be782fd6ac6d271b9b8f479a9e133ef6c02c0b21c5fd98414c0f47eec28a71aba6cc84fcd20b83562df1c78700094306c648f57702cf66d820ef42336ea95bbb7c0268f5b85333e1eebc053d771f58a73ed8157d96594c9e1878e67c2fa7dd7e6f350012eb9b1b3ee4e6a09d1488cdf5e067def285b627175d7d30ad18f36d4f5d5375a6a771642474aedd8bff75dd416ea5a0a2cd696a67610d43882a1bcb2d0750667f823685f770b84fae29f3c40c28b48a8ad0edec0403aa26dcf31edcde5912c06596e6d87162a3700763a94b5549fc58a51d9fd1babc069441b03b730b4bb351ea2737d797d38af3c1632145dab60ec53956b422e117ac6e20a0aa2b7404fd536139c6ac0af57327f4297a5fe06fd7eed544bb46848f65a050bb5c63a291b955b3fd80157b15d2d888d44f602c57c830ccbc8bae7727262a2a846174b852b0be440e4a87e68d52813566fa1096fc4191b9dd80cdb7c10deb8bcef289134cb4b131d0b7d9c187e61bd9b81b80e1a3b04aa2a8f8f946f7e466b9669a0319c29dd246e1b8a7cd4d0355a73e0cb79bfe98c281511bd7dc2fb9d5f9b963978b74f7ef452d884b3807fd59d87f97527663b010f6ca63413c4a51d03eed251de91f064e5b8317b33787cbfb4d5906c2a09608770f04099b1a90f907eef9443d2caa38e6e28bce202cb634583938f531f629a585af927b6afa7ab395f8ad167cd1de6ef00050c9a33542ad41094829fdda73d23d98fe03262c318e19c2bfe6dda3125b6db93b4fde8dd5258d3e0a539034285ef50c840c04a592251e63086485653472c038056f4770085d59d29a30d4f10ba4d62c6a7bf96fa0b56ea0b59d27014867e89f4fec16ca635ee06b3bfef365f8b1a6d1213d301bafaae4b9cec232c25d8cb8a6fac8fef13f622467da0c21224bd034f231ce49ab541c4c5f652c0742f7215bed536d7e9da1c86e368357bf097d0135c2b8c6bb582d7f738d5e70e6debc717faa52734d34df5473e1ead81267e40680b5eb1c7c283aa2eff475d2781c2ada40322f0eca41e77477f2d7909a23c9b9c4a28967a13ec7112b840e977f0b6aed9811b3d924169192001d7b3b29b3c331b9781ba9433529d3ceba4843839321bc8cf44a11bfa9fa16e8d5c7eca8015a27938c9a85108215a21966776c37ab02bcc9ee78169e22dac6895926919afdea22c240db84eefafae91598b49c8cdae02fe36204a8214361596ea4911e989c6cbacacc463f71755783cb3d7d431559c234507a8b3155721e2bab9c274c6997c203c4d03485677170eba440e837427758d5c8a5c76cea8f95af79dba5a281404497dbffa14198238e6a1fbaf72e71846e4be9b61afb647686f9ba3073fc3352eecda0c6481c2b0f515ccffd7f5d296bf337aa53d2323bf7ae15e1914f33930bdbe8a726192f8994b1b201d73af9b03905a0da2ebd710aa01c0933349c6c9772acac59a24425227fe8e4465398770a36be39bc0c66363f7fa601134ada7f0e0b9fcbb2bca353c48ab28bbd2045862e51d519667358454ed2ce8bd22c671331a443757ca544794c07ad294b76cdd3f28614dbd78c33dcd1cea436706d0e59ef048474b892925c6c88b27decd3e4a6428e7ae7ceab3711efca6b227acb8efa551693a0d7912f57384204ce969fffd9ab01df5195699b9795ce892c78a6b4f2df54cd7690dd15dfe3983cf5a1c43dd9a77acc5f162c968dffd9f96b5a19a42d478ac38cdceb13967e30101604d44df9ec9c15e4b68036cb3e1446d1e1f99520eaa5f796894509573db03b6b45907486dff34fbfb0a6f82f8c0535d500f196053d579edfe49dc325a310a868354e7e2af1116d8dbf685fa837b8829c006f6ef236f7bef5a7ea7a3e290ec5170a5416fd2aae938f2853c8d60a92f05ca1b05d1baef160fdb634968137db1942c54c230b15315835feed6c4f57d017ec9d8914a15e28c24e446faffbbd21252d970d0711b4c409aaf2f12866700ec8b4cba31c5bba4b7dd387afea3b7627f1cfd9614fbf1a5259db13d4f125800d4700b12cc449980744b4096a652397d6a5bb004de502226f27024c18c5969876d96e97d8d709f0f47a0a1f44bd9b3e738f5736f9a185b646cf945618acd34a3906c06497ed7d14c149b8a44d2e284566cd03b9799d64c1dd50e952038c9a91cf4fc85884f2d6fe341592bc5ac7af4e95efd053db7a835a01e6cc9f512b1ec92b7d9a378419cfe2b9bbeb7b0130f248338b16a72de10a725e584f1e95f0671d128ccf07e5834a149cdbe43447c756b844e832c3db85b3fccda3b51b9ccfa3586e63461d387fe9d3e8f335ea0f13f399bf35d6c9214df4fd8df627c9a1a62983136791ef928367c1f1a2215080e3fa77e5ae2ff5f9f1beee578a93e21f5ea3fe1b58b7fd3e5daef1f788f39032af648e49ee63c1bfbdd3175479628a2b0d165d4875d030f1d9a8f55d11600b23dbb62dac9128752a28e35200b7264c52b922734dbfac489ac8b56c2c92bd87a340ac6305f4e9faaf5fd36cd46996518c73a865e56f9ddf316db4e63f50bd89ddecc2c36040a4b6184ea161447f58800435f61afa9d482837d4586a855f82f5b02e188c87c0b341b9f9b0289b2cf141de87a9a0d73b87e868f51a2e3c87e12f9b0c7e41f4bf7da2536be4098ad1774678cb688c717f8527b73d83409b3557d2d083858e6c59a2acbc9a7b949145fb6c8c1bf57114d9dbf09b6aad48fd2c51d64740de843410285270e0683fc6ad55ce86f8f324bc803bcb617a5ab88e53817ae0772fcaa043e5c109cffbef1dfba61c1d6a225ab6210b5b4246fbe2e81bc073ef0ab894e9b7d367e1a38d93bf43012b9a0237fa2169bb3b51271f7b60263d0b0830679f4a9072f7a29e821dd4f4478f961682f76579e89da1f8de362237b5a8104aec4711d65ad780e5b185eaeedc61b5785b760c0ade07c7144e5877c4a43d880da142ff4d48eec5c99cdfb05b85ba51d4c71d28b90d09d1632fb03092f0ab4a578933e051574ff8e8de80c25743e2bbcb4eb720fbab68d989e94f134370511e30e629e2072d3ffd1d7e119177f860334015fd4ce02d1ada8e1d7b2e257a3631faf11e58201ad006aed4572a8485a1f0c267a2e347d512670038e0f444e75568d40a343779fdbcabfbb7640530e878c2f0f7ae0709cb9720b25a0f0b09c4eecfb376af908e3238c3b6b7e0294328f7fa8ff5952bf68d42be82e79de144362087cfaed6c9483490838e5e5881b3d869286baacf18f6f00435df03cceb6a175e73dbbd69ec150326053aceca54fc01b285efb33edee18f8ee8bb267b324b13253df9b737f52e23b2319c2d9057d9941dea09ac77bc0c67ef1ff7b99cce2104ef674c7af63ae818829ecb85ddf201b4c4aa8fa1e1d7fa9c7b0cb48afb4b25e15ddf807e8f8b9e329b9184dc17989e5bcea017455ecf378ecbee257d6483dda5cc3e7c8c8d383c84903dc866d87ba9721e8bd57083a86888e8866efe1efe99bbf48d7af3791d1917c89721ff5e04b43323c18429b58c8dc3ab29938dcfd38b6ba2b882e2f9aac4347d08faf5c20f3b3abe1bd8eaa8e0235174b9430cd4f6de4d2912ba79762d33160c42ba892ca8fed3ed31a37c582db2808dfa5f8f74bc39dfe2d937aa4cfe57b8535e9cb5db675a1838bcb1257cda39de49f718ae6e60926c54f7ff76a8de87d3473f81871b13c6c28afe5e8004d58459b576db699a7ad90ab5e121bc58ef8489721d675faed61fc4415543b9d8724a65181d7446f88c1042bacfe4109c9f93dda1aed067d2c381ece0d9ff2e31668ece1f2b64d7d6b2ddefbc1a6a8d52e9a01855a038de94ff46b0082369b58429e7af26d506f6afec304fa5af9f2bcf23888235fb756999cdf7ae4531741704c02fd1ff98994a3a7d68a85ae4c025c49603157431358172d4569474519709b55b835988261ff58a8101ef3e86291cf1c03d00938e14d2ba8f8b3d0870ac4d00cbb869b977e5a3e6134718f50dc8e25e748414af67dcbd481f6d5dfbd83014895895598660d5ea1eb9ca4e135b5cc0cec47b7d81af60fb129ae0ac15e1c5293b7107d824eac203d1815962c3bf05468bda2937b9fe2200d990275ffade9c3d05d54ff965371dc2386c1c086018b78cbf2a8c81a9173c8bc751ff9226fe6ceb87fe6e9e0edf31b677f0eb9834e39dc561f43cf2decf5a23ed6c4b0efcd22943f009e40981ff9b9a51561191f1415d7836e1ef2fde896766a5c721de452b5037369bcc590f4bf005575d23bcc33eb871f0c43669bf3acbce7699ab276c5056107e06babe215804e0621d19a370196069f546291afc4666870a032c4e10c85620b162f15b855142d34368fb45e4f08c0c7f78024bb7426fbdb0eff1c730cf2b54f6d5c72f7cf5e5a826600de0a4e18dbe66d4b314625a892030eb0c4a9ff4cdfb649721acaecae3809163528cea1a79b7f7504e675aa2cf9e13c730153407f5fc3d1f0692656c61fb927c862b085483c7aed968b3b1e87ad86d62b815e0f6265e68bc46c948ce902ebb5452e5d001fc20b558868d5aba1fc7841150426b28b006e2f20a792e087e6b1bacab5c23d67b124643265f000435ff4cceadc58fa3a47e300417c93c19d67a8e206395edfc49a4c658fe7389211c8ccb4215d203a5318394a88ca6164d4681815408e64d9f1d437d507400610bc341720c6ca20d607e800758b9edb1338720577205d3b5dde26dc6b0d0c9ea25bb22179a584e7845d7b0ed7f2a9c40aac1589eefebe626e858eac32a9b1c6a8673b147f665af202c2c43d71ba178dcc7536c167174ae1ab6272e225648c11fc521d31a170e7b759134b5280806e2f1e920237ca84e33712aef9061c392b78cdb67a7b875edcdbe1220921946936c738a27723330bfa0bcdeb396bc524f6e43939ac5a5cc2224362e42fc3f34bcd149bd8d503d0e7ae3cf1a1c8466d17131d3fa5129fe61affdb218469c93d1f2d79e75600dde9625eb42c57c1b382af3f2268c6f891352efb217c698edb8e9fa8473eb29dea8d9c4a89f7d9f400b46971e245cbe1d77001aafb604d555e1c5309c8c923f29aab92dd9aa24f0737f6701a016150c6a5f1a06217034db039d0e5e98216e7320dc2d5f7ba3d5471cd78299d34050e9086c2990bc179d05a5416d2625beb3d30f39086016ba5f2ae1fe87309f0c206357d169f1292e2137f89297fc2a9b54078c792d16f86536dfc9422f6e238f903745ecc38c47d78308e6d84740eb32de6956fbbc5e2e779ad7d597c34bbe8a2105f64508b528dbf8319609ae435dd14bb36d8b9902170bb0adf1c72a6dcd279c39619e14f1b9ab8aa137f72c57796ef2d49683c6889e5499b2244e74a4448b24335fc8f9116ebe0eb98f9ecdaf8bef97d3c6f54c99d14a25bb1c99e1ae8f0f62eb30964578adebe65a7af1da1b7d6ea839f817a92f36e584a88deffffc7cbbaa9c0d697f15b85d9a6e127868d2219e19ba87efcb04c6624feabdbb74bcf9fcbd8d0088b067460818a6bfad65cf47352df5da30de90c217f2803b41c802cce6774855fe3d00fa8f181ef1d4f524da96d38265710ce6a49869acbb4d51896bbe9998b1ac997a486302280fd487b59b83d7911ce6cfaaa6e4a28a1da904a1dedfa5dd0b1c4909aa05451d4fae4840072836740fe79777e93cd380217d49ead93292387ad5808406105748e78ff7c4d8d4c430107eb42d857522dc068f1bdbf3437775213dad92d2f6093289f447f068567daec4e75b20d933c118a8eb1907532ef863cf4e9738b7d5e499aeb5d34b5d48e0890997c8e3436b3a0cd23abc9bf0690e229ad8c14abb175e0829de53b03e63cb8ff17e3d3195c41223baa0c630d51ed726d4a1a2b8ef4f758ed661d44e441564165fba2e5f4d4dda0c2444aec57efb48f38e7288dd8f9175e2750c01dd3312b7c98d11360148b8aba421e00242239f6fc49a82f021045b139b9e1c0507a02bed8624aa1401f30c76abfee7ac356e7e7287ea70491d77f7f642c400e2062de454d7f9bcdc8f77c93b3280aef86301402e3bd683b9f65cd345e009d80006a1ac89aee93494c09cda424d049904b5d587c70be4fc502892b5dfe10bb8c2f0919966f77650108fd635576c785eb2f40b5aa980a1fe0a1a1d982ecb60771e4ef30f8595a36a5ecc39d3e209046d428d789f247930b0ce920eb601730a6b2e689d07c7daeab14820a772c7a0f9008787c390169a4ab8d26e4f4d13923afcb074d710e314430b179fc8ce4e500beef1400ff20fdd828781e87af848e8d2e2ed55ac7261efed8d3c3cf673620d436255da81282bd512a31d8e697cfc2dbfbe5b135abc9ddca4c20b49393ccfb870d36a70bda28fd700d2e487e727219acace417ee8cdaa3ee630314b089cf133e0d6cff3cbd8abbd66d816c841118db47f91df3b7384576209dfb594afd4ef6e3d6fbd28a28575510f914cf005a7d8a43741b715673fe71a36503fc8430bd99d4b4f8710f51f4c5c2eddaa5247faa6130740db6618e7583d65a5cd43dffc7745c316231a81be16a956c856d382e8c71a3d9fe8fabd760c2544212b76579b13eda9050b8a552f85bab6e6f9fce60b1a04c27366544479a934f39e15b00b855c81337594995fd10a272e86a1aaccda84c9e4fc78acdce2e0435ec4b90b9fd3eac320fb270dcd7e13acec7073c685a574eeb1b0088b9b949b320e594a9e3b226a0ad5be98333b3330f38e9e2d9329abf719e4b6b7409e626afd5b0c90fa799632857405658f575acb4ddfe5a6dc9088df551a9b4b30efff3af2b8e1a07c0b5c25004f69ffa0f66101c0502a90822bca12b5900ba4d632cf8d0e3832cb1b14c2b8f7cb2c3187ab41abb6d8408791659993a5b1c081187cf93570fe7ab3a583f8c02796fa493eee2d5b35825ad4866f4ae89f5d1f214b960a3a08fb972bd456c83ad2d3c989870885b84621dcab6ca134ee093a5926ba11470b60c70275d97e6569a832ffde9a5ec18fa882680d06b7bb91756674822abc4c744cc35ad028006254c455973405609cc8241d268417ccf675c32f9aa6e175cadbacac525f682c89c608fc9b828921914237b9297155dd644cf6114c5fb5983bb10bf9947f960604ed55dcc576c985d450a6a5017a308611e017379a9c626b399ee82ae7780979400052798fdcbddc63e131d7bdb95eca87d33574ede8bd0a5411bbd7d553b8e34b51983c17949bda42449ae1c4116b41f49b31944ccf479c7b4cf34ad85f30a765e0601bf37f1a1bdebdf526c9ebfd520f277a6d8825d3912841c8653018507d7fbc9c24d11602b736a4b1926db9471d8e2ade8010029328d5650d57e9909568b22964c373d65c35dddbe774e32406a77ccc328a9070b17bdf386ef695f0e1a98128c2a99093513e678b65f52d42acf0c3a31d274f2f721bc268b6e3490bc0c9e19343fd98e1ac630d002fe3b5cb581286eb39fadb34d68a950d1e4a321e71a01cf2d087f37888d1fe9591f24b19a11282ff291971d6159c6606a9525934aac18a45973d41c491c862138a041e458046a36ac8c04ce35c9be7b181594e46aa8ff9dd35385fc720991f25ecbbe3fcf9909b3a88e88dcc08d301e8e1fde28159c07ceec6567a736af0d71f3ab69425b5a7fbcbbe03347779fc85b3ecdd67369f265450b079a0a89e8bead541b9b881250e8cbe4a523c48dc07c05d2405ab6a151a2a9126d9252010bd74746a7f0997870c2a703b09cee3ab43d18461ca0d80433fc7a204f730f6b355de37b93197735c98ee98e30124c2bb6831fcf5e799c22b2b2ea8fc3bee9042b5e99602d04c71b9d74cad24b138b524658278c4974ad8518f0d41fddd5f8a5e48d6409efb5a868b2f732b0ba9888d3d4058530f2353b6a3eedf9b1c516ea259ece0075f2515a7da638e99511924708b91a21bad537452f7484fd1157eab4c6e1fa53c22296fc73b16b4219e6bb9ca6b309ad1c7efba9e8880b7f3c90d670f369b99a6a88c87adc4ecbfc7a09e3f0e57589452d82b8a7b25d805933128d9b0ca86965b2e5e1505a52cc83b145569c3cab462698b86606d32729c719ee8b07dc73e0c584f0f281a8b40cb4936c8548575404663c90f309f889e602d58fc75f92767b10ae9380e6b8a0d82440c800fd2395771b18309600c2ef0b788d82fa01bacce0b17a76f98542eb664a00efae88f54f0294965ef780aa986ef50ce2a25d5ad4135d54a9924b45ec4a65f7f962ffd545554fbad93eede6bc6a41ff6dccf10e56968e648e47fc6b489ff304488847f77b92805af06a594666cc061e5943d292396de3be69c9b414be8fcf3acf98444d8d1f1f039889abf25ca2a39b7de3310c876c027920d786f2dce3be882c9d33d25869692cbbbad18e5469e0f6f2bbe3377fd876220ba4be5a0b4e7fe3aff9b610028649959637e2477e06b1bd1fda3f5390630bf73c56f2e84707a8f075d5d2408f60ce8d3bcf4c8f468c8a2e6e96d20ed7baac33a652bc0a2190e80423eec508928fd4088e88ec841f624718e7600bb81f253b6d6cf18d805aad9c4a5abbb201b1cb94c4245b883388e8afd24dfb7afa323ebadf8876005996c0385f0e03de48ed368a9e3216fcee74e4b0fee1c1c281ba595c43141307ecde8c9be685c53ef8ce1717d5e9e4872f2f2732a7ac71e1c79ddef4d51eb5f9d23514b3ae9e36ac48eb988e78cd13f02e79be618389fef3ef3e5fe8a8302b5f1bfdcc39808843b0d608df9d2e2ab7f6f9f81861550f2a5060a97c6d6247f3783edc2f6f27c6269567a33214ed4d7f75145716cfacca82e745848aaac2f810904c1f6c5988e075c2baa15076303fb54fa7c39e8692bf73e20e2de68f35e1736d11c182fe7b30107dcabba90abdf8cb6fe67c7428a714aa3099db36dda4210fa9cbf6288f50b78d7ed88451f89053919133b0de45a28b1f041b2b45b52c96f2ddc03b13c3cde77616f6674a0bc396e208af653d6d81560b2c7f3ee37684ce04618c6ba66c134ff6d67de779c2832763adbc2f2faadf4c522202e5e29728b0ccf209d54bcbe561f08a271067526e65ac1f03574af5e08b5d67cc8d0d7755db31125f47238dddb9027458b24c39c52efc026299280db0dd1cd3d4c05731eecc0479ef7900cd0a8f852c70f9fe773a6790c462e20f463ec66c64787e4560039bd098967d4114d5bd5566023df8e74564790fe97355b751d58f33253216adf74d0bed68094405e7f2907ef0ce4361599c8b0fb4041f45b7e716597dc3e1430c23eb88c10aa921c27bd30181dc180e4371be605b1e40d5229c2d43ee99bd3bf3572bdc7d7715ee6fa7088afe772a02d85c3fc3125835c1bdf44222819ae156c060fb62b053880694ebe1508dfb49e69a828f54fcaf01ca86800e2b94a19db718976deb525406bd7d62c20c19361947b38b6bec28697370fe0f28e1794301d23ae84a098d2f6d894f10ff9e07d50ce38fe3fc2efdc4e4041a93369908e0874b69e57d0d1958473d1ca3735935179940cedf0d4d3bfa8a6ca1a0964546bbf17bc3679eecfabfd2963d339232f17488dec7cfaefb3f228decb352a922f8cc43df22cbf5d1fc31fa25ff940f7ae3cf7bfbb8f698d670c0a8aba979ca88d915506970119959d9b655d6032a371bf6737dfdd37b1a31f1fbb19f3120b2276e447d232908a652aeb3c55dc3a04600c1cab7cbbc61d573f806c3efcd214a6aad030c37b9e7ca8f479b318d93b1777495e26e847ce85c85dd19cd4479cfc77c8bc56e2704347c781e21bd67d9c2c0b0847caf7d9a3171e0ba15efc8138fd721806579306aeb028142cf2fe039540b34b06641021939aa7d0bd58ea7b1558aabaa9ca64958ad7335089d648256e53ad698d8b0c085fe9d7b3f4246a6623662fb5f8f780d42c0a8abd6235bfb392158a38324b0b0b25634b19e3dfdc0b76a2d2590467dcf1c8070650c7aed704fec101a7c31951974d32fc56c8223c606f1d31126529c87dbdc3a9657c780f472700f84075b80dd6ac80002b9ed29931f3916480cdd26845189ae805798be32f5979c37204228770461210066394c52df4244aae02ac0f554edbf823ae78c4093d77a4df9384f923e37d87cb51c58f886d2e829ca25fb01daf85281f48e67a740022df1bfb482b4dbf49c1180a43f08f989398303b679de27f4847ede0e080d4727d3ecee2080b6d27e9cd809647803040237db8392ce29ecde7a074b34379926a4cd8963ca5f67ec344c2b97742182d4568387e933fd3dbad28345c181247414b8050a55a342be012d7a4509db8fe166e35c135bc759f5628fd7cdccaa9d18738d27b8e46f315851daab8b52fbeb83a855cd2c3dcba1c13f0013d165caf5f94439fceb2b9435d910a437febb4fcdd646c8b5fb5463f0f29b1537175e15671ba4aa40ce805b731b1d7785654487287f985a3a13fdedbd7dd005a67bb21bf419b2e544827833f0757dd387b1cc8b22d841a05b10761d6e4159b7f341551ee5d79e1b0738c78a324807348ef864bfd5502e717154e57d4c63e2d2a6326ead13c34437918f1ed82582c79b724bd65e5ff926a5eda1592a6027d13fee4f5931b33dbd7e820ed565d43905dd3bf9e4c4f5dedffe654b677bd3a5eb5d910af0745c9bf43d9fa0038a2240f1fa4020a8d37c349004b02caee679d7cce3b8aaa0eb6ed59a171122655a321d38d1324fdf5cb233367349861261f8654258cbc2776c6c03632ab72bde7075ebadfa50b757c662b361b416bc74e1dc2bc0c9827116e978a1a8629600129b6605b07230e8d1ba488dffddd53cbe094ad2fc56af07da4c5348c4451f2aa20b80f4fcbdd331d0d30bbef495bb146575e57bc5734bbb6fae918244ceba4309c896b990b6072d86ab69dfd42926775c957b154db587aed067099e8d13bff341d96da89c76e739e2aba519ec2b09817af6b99806c77c2439975f6d4a44de77d7234650054a28c163095c03e617c947c38a1d237c64be0ae96db61acb4de040d008ae511e622a2c9e448c8c1f33799c23f89c4a1a80bb3bf7dc38d62ad91439970aba45a20bb82bb36c081b64ac12a871b9f1273496586ff7bfd0c609c47b79d3eaf97362d210f399c14c16d70f9de6201fb97f8d88bfd3269848aa6cb01a7f2e9dcf9309fd44e234971949360068bdaa97ed9dea6a397a27e6b48a1963adad357536ba555b78d8298424d4585b3aba9ab68804835770a3525f716db012377d26aab79e569a04220e85817ed8e74b4529d647f54d25b3e9a059e097cbd4895bcc1dfee782f85c00c0083e2b723460b70a4a6d1df8363142a0e7ee71dab2fb9465a34c788c0cb26f884d17bdbfbd0a3b5e395431a04ff0e6d64f3656e814d08a57111cae3616addd597374ebb7891c906bc674c227875ad09835929e7f1841d0e66c9772d71406c30511aeca162bf13fa8e6d082643bbeb7bf5ba2cedb6e8bf4b600d069c719e16db3e0e37ef69d638ad2ee21583cd4a62b52414dd78ffafb607d5b723526bdced7db06c5626f5e1f46147bbd10e38bcf6cc55680ea9bccc4eed8461c16c55d2b618d51255739305ad8c27953f0d4fa2869db918c8192f7d9d9b5bf8b9096434bb7d76cb9d56c113e45211da86c71061cbbc1809576188114175ecb6b4de3277ed2414d0e705581ec4afab10715b2122db8e5eb49304af8c74170f4ce564b661623eb613ef9d8f9b27459c87948267c1f9b98cf7cdbf3220b85861afadfba0b97003005f88833d9758a1bf97ec972cd641817cb6b43610331e93a1e3d90afef5f0556f8871b46971fa67dd7cbabde50992d2016ee641ad7baa4b0546635dbf62e98925c85d70b370e5e00b5954c78b271d593c2f60e14898ad0b116f260bb056ae7b71dbc6f17837fca5a02d97da59496708ae59a6b9a6611dea1c1bed16a911bb20872ed632666106f6395aa3999ec730a48c17e3f8a46b411847fd64c19da6cd477f8d55bbd1b06e72d30e60760b314453b42886c2337ba0c38fda6542fa35c60fe3728609ac486ad8ff453d6e0c266af91257f5d7e1b67339311ab67a03d953a76d0ed14cdf230eb3a6a2480b6388ecc215f307f14037b6b7f93951a8ba5a807932b56e2520d39607fe30433b2f769bcbadecccdfed753ec480fbf9aae59e67680219173975162929654d471734968eca7f351eff8cf65e7483ecbf01d80ad93d9f08da7af08404aefd76c421f1edcf4ae3fd6b4d34930de4b6446b6f5d8fb753a9568b62250903222b7a959bfaa056ad95dba78688d04c0deabf21e0e37c02a2278406d9ec5d24dd437eae825481899c5b5a3dfd95bf5af08057d9e63a64df40a81c7e0c2fa75cbe196610e4acf348e391957c3e510d147b3ee8c3ebf21e59fe5e72724eb4e433e0a69ee7c45c91b9b144144dfd4c1dd5fda3edb79977110c99465f4dadadbcf8b53cfcb81c603c67dfc8dbc8dca195b38514f7ddf02ab35fe4069eefb5fc543e46a6f447f7a2273b86678e7d33d4c908728069a0a4c4440f93d137060953839967406bf09f2379c9c54191d9d9310a640122277b5b1e429dc71bb7c69deada8f6d1431e954aa3caf2bc06f1d8f603faef32efa94ede01988317ed0ebdfd1eba688fdc5377b1fc152363112061caefeb077a580858e0ea25bf9c9889e64b2416baab1e8bdc2f272456551ed633e16539e846f5e631099b6cb4d8332d2ae12ba58d93c4f03071b16cc35629f34261a170e3dbe2299d88cf23c357441a5bd25c3a1ef32b9e2a707d25f925af14d0920fb848bddb18280d255431125fa9542bb718d00a50b24f2122589355d9e498db04d033a4f8ce690781891b795c2790b14b023d5f49da6d0b6c392ed38b9825b460de42c5184de688eb9f982fd508d4472a5784a761c1749aa63ecba93135c94d7f894b7736b5f76097e71afbbaddd18e42cb4b7d5b704e07719def2ff01e1364c61cb6c727db13e97199da85953e48e220ebb9c876fbdc942ff2ef676a1e046d99e9188b8663f128c18ed96e89e5e1990f9f2d8e7219ab10016a8964ae651183f47829833d30d0bc72f666428d77ef947806f459bd1a9161cf40ad94db9fe5138a2b9d21c7d94f84f4918f94413341b61f9d826e40f3fd6599b8f0fc6de23e16e6b7ab022889345e5d680ba6b816d22f25cf5e051494b0344b63bcbe8e5b6e504a791434df7e0b8355f29d038901ddced647c248147b400698ef9caa15a556903a5a5f44ec57ea78a9e26c7a83ae487508b48d46c44b8e5fbaba9295a1dd217f6571e01aad0612f91a5f2660d97cf009c0a41ead9742c22b475f17b685ede55e5b19ce11e9ae06d7725d1f52b573058ffe2c6f4e2726d8ba7314a934cff94b8902c04e95a30a59d288f64c06ea67312d89f2f9e1da8d9cc844f232d9241b61b7217098f9e08a630558496db15bad2fa6782ce8c8a45996063fc92299e5621b372367f65a8e84d0325bc774139659ab6d6ab80d26a4ab1a0eca135ed0d27613cd73b670972ee0d5a52f4e24b14e904484e23e6ac8a4cefe67028651b35ad37e3966fc78e24140ebe81605c0d2deed265e575af083f34474c8b6e44ded1b5618a31dc9a274bb842deb0335d88fdf7bd6f8d93cb93b9ffe07ed39ae04afa6a0498d8d5ef404df69d83bc66b606fdefece18611a05904e369ad0896e589896c5de78023b05cc7311e2363edc7f49b569d8fe4174618bd22ed3c82032215a55e5b51be49e78a92af793f00407341fd02733293c0b94e45e599c7724d882ea7e54f6246669bf010c9b090acd873f8d27bebeb0be2d1c0bfb990b09b730c5e987f5c49a00a84b43e4fe573dd4529fed7f95b0014c4ead155e3adfc92bab118f40471d5a6580eea19bca724254ad9fd85eaf6af4be46271ee0c23bddc3793f133e3c22b8edba066523ed4e6c50cde9257392d1b9e7c938a6206fe1b8ca2039a55c1c86459e980e44a398af6c002191c51cddc9f856c870c4556712da1e9d0b8feb7cb04ade0bb830a237aac78b8a6da406916417cb8515ed3e90bd8befbf9417dc69a1ed4ca669531502d09f64aa5618c44be722b9995a2258df29652a13cc2f182f37e0484a88e2b4ff3fc00bf71bfc52c1b98a164aad97455e6f42bcf84f367eedbe1584992e68864d4ffe266fb81d28ef0f8aa0c9eb1d2ee43656c6a3813a2e155abddbc16cab0f0e14a5e313a4d632a0a6ddbf753a8f62b0c2897c1f54d46e4a621abeb157530277bdfec4410242de42c73fa0e320878789f8bc62194e917dd2528fc183b14c4734c136b6aa29ef71e1b6e3ab2f7b1020fa9f76b517ca71434f0e9fc0dd58b149030256737289e014c63a4806e9ccbb361090b16578b65cafacd7c3a7ba5fb89c1a5152be04ab5d923c43559ab25b9ed46bc6c2a9e58d5af7d37226b30a1718b47ac647356e2bd3ff3b7ed5bd05c0930b9ab2147506f7d854bfad7a6fd5e4189e4131a9abdf3334f611cef2c66082308df7e1ba43f10c916a89a275a73f1da139b355fd6b15d80d21af810624386853b36a8dd7934b9c2a95ed85508a1f599206aee9becb8114ece6611dad5436d627f5a948bc2bb809bb57e883725c9127a47eaab12f6c70b95cfbc9d7657912c315a21430bbd0f41b53db4fc6278de82c044cb0b8dc0828c822287b4f799a4018c04d3b1d305c056bac83453b44da1b0efb8b91a88ba3d4ddfd2088346a29723cbcfb636b082c9930a90010b314da2fbedca85127d0df9cec58a5e15300de5a27d4757bef6661bc25e02b8f7e221422b5f42711a980e8d54d237a23a2ffc9cac02d71189c298f4d69ea6eea224e344bb9562b1c81e08ed06f85346a90c264cd26acfd1bc366f91b82c5c465b7283988cfa2d94d0f042b1c2cc2efe3f5508cccc8d555f79ead2d7113831c23d76f22db23d746dc7e2f0e85d42ac6f29b8b15ee46ba2cca85d6ad4c6c088d5fb8e3d17fd5ea931dfe3e5da723a190ca7d48d74e877be8f614e6b12ba3ccc8811199465823796c6c1498ce65d44f9092b6a2f0074ea28f8c54f2aa1963d4a95198559a16cca4cc47f46de5876c50fb5758400e636b535fb1ce28729f973836666545cf2d45e11278f9425e3133aded3079cfb27c64120a32b2625f15d80f834be6bd37a969bcc65821011b0f38a1fe45091cd51f72b2a7895e0c3b9c3061019bea07ec5cc5433c2e2302cc12fe27d4f897471a0b766879f3c983211b3543f0b28f0a6f49d59cc2db0bf01a7543d5283d00cc438e8495f332f15112cefd287a4db03c2d0d9c282ead52c104849ef7a65574d38ab997b3a6298d2f8b154a73c134c7aa67c2aad3e1c269913290eb3c7be72dbe022e4ca56c783a42f00cc3e750c218ef064c9b75ead86b470715c3e8eea39d801137fb05394dd446537c49a6976ad00154745ebfd11fd9b42bc4deb7c6fed77d563992c187b1b2d0e114439b6a648a3a3ffb850bdf6a2d3ccb29e7793c47a751c8642dde1c7a75a27b031bf78532b53a7ccaf415dbf9f99b8d7820d10e602b529fd0302501dbe3c8ced506e4cb85a5cd01d8c75d7cd8470e055eb19a2e70b02a6b9632e6def08114b41077dd71ff1d36b322c6538f5fa695e294a8c596780a93959c9507ca8735f1e217add300c3afb5fe0ce67f8cc88c3a299f56ca35d4d36fe0163dae67098d807b7f883e81c111d3f1407e452b52e219865cd0035709f22c7dc6d98c4a1e91dabd016da168447366538e5f43d61b142612b8e52da5ad4c4af29e6e40c3fb7951bfb9217dc84d1f0c1eb153bef576ce9d691e7f365aa2e82bfb8a0206410e96bcfeccbc1529a3e7e1c4bc1fdaf8bb8245f9a0bd7eff0c15dddcaf4e51fa7fc226ddf00dc793134194dffe816b9168fffa6bedb768012cab86b462dc09bd41b79a178e73890c334bd32b85a6deffac334b07c8be4dbc20049a895214babc86020ab455448f7a26694978ddda74a2a504b93e7115aec136f8407ca51426582038258a4b2d2c6970e0ca4b0e843ba83f34621a385b00096bd24b5d17bb6a2e43cefaa3f768e1eaf09aad65e833fb2871c22f371e834c3f8cd435e6bd5d8e3417be300ae894a2a869a0dfea7fc7b8cf492955b1c523e66882fc89ce7eb9e75a1d5328105911bc065cffcb24a28d9ed54892c1445c995cbdd14b3204fb43cddaf66a040620e930fedd7783871e20827c92a0c71a3dde9de0744a675dac17bd7e08781ea58bece3a8c0a98ed073e15d9eaeb858433409645aac875e83b73d0844d3236871dfc3afc8764da42e62d5c985ec91f3858e19a6445ed415925699290196678343d56cd5706e55aad07ea5ceba0010b975c90a642c7e8a3c322988daa34b871fcf6b6a8f0b12c3e400a0b94240175e7c397147ad5755546ad042841b7cdd872c6f5db9ea6b089a4cbb0a41ac717cdddcb98cf1a7a2f5c75823ca743f003277ca2c551ecb5366e0359c7114fee07aa6d0d88ff1625049888336840e85615d8d790de45c7e1dca03a1231269961576ef49a34ba63a8ae8a8290309e47a923e050a26cae02b2eb48d89b0b29a65759a10b8855ebf6d3d2f2b0d0363f9246f677b3de90813fbd1d8596e38c5e3872b049703d493403e5ecea64c80ef7e823ee46e076b07bb0ec4b49cd8c1e086e4cb78f2614a2996c21a739af95ac364e75f580bc63c2cb6daed5a27a35f59572dbf74fb72f6374af151102e5fe44f418dfd09f373003589f4374658fe22515fae3eca5a2120604e3718d83a5c505604ddd2473e4c0bf236e67916d3ef7e1479055f36f933e01dbd526025aa53f383d4412e238bfc604ffedd49cd39016ec8ae43ddd749f405488d1531f983a8c95d5262c22d8874da02da7cfefae796643d20253bd7d8400465c8a591739b3c191dcc6ea86adeb04699a84c8fce47686b515d87decd846485fc49948fd65ae9b2ed886ff9b1eebda55e47709570e99f4d62bbaca3630d82623db7b6d835c2f76f24e6af6101470c1cbf6ec1754498a114a6141cca4cc51f615e5ebf1a35f85554042ee4700a29b8dc89349d0550ca32bbaafc19cd5baa843f9c622d8aceadd3fe3a17b1c6dbd7e7b26d2597417a744b6d49a9095a5915313be6b5e9944bc7eb42b651ee8138e2296044ece2d14af4623c27940c84ffc014d3a89d7cf45b558d4378e72d84842c65f05084b5432f6b54240a2aaaeeff6ff7def5e940f2e9855d85dfd23ec5d6ab5842dd6044d8aa45bc1105d7ac2e5638bb5c15ac79e9a0c9a6039393c6296b225753ce062911716a196842996d058a8ec3ad65f7fc1d89a811fc5c11c7fb4d500ee997dc42e86b97467fbfe6fe038be8685a21c46c03cd1c0c8cdf5d3e346fa00730f754439ffb318753d551cfdd54a97309b9085fe689cdf21f6bd4bd91e96520e6bf4b4ef33c9598f7433a640ea01391e56de8c0349c06cc0cba890708496151e07293ed03d9fae84a3a39f5192ec551c7f1ca531dadb805e368531eb42068bc1008bd71b144ffac9bf1cfd8601fbd7568d0a196c93b4453947feb8bb5686fba223339576647d51f27d0b47d27026d829e18e4deb4040989c5c9d474b0cee39d5ca5dc2945e0ae0316718ffa8010d90ff0a7babe334b982c570e32982ac1691e0b18bcb1d8dbd43fadbbeb3168dc0bfa12293ab3858a8a9fe1b828c016777e84ccd3ce30b22a8699da93508d8834a25e078b02074f2c9e5061a170df5ab1fef17ab8e0f4e13f05e43cc12a20abd31708c25e8b8507f84890b794bbab0f3e19757ceb5949ee380a00bc4585a37d3b99d5d1d5b567a090673e03b4d263d5df9bbbb442b1168380b4266dbf932eeb710abe1488bcdbc6b1fe80009ef3e3c94b86c4fc5378bf465888da891b9ea9ad0c9c3cfd1cb9eba3f19f117818844205044fc369b61b62a6351d15d2a9ee6ab6d5c830710717ad7900a2e22db2e2ca441c1170ff38314dc2adb0e5c748ef1960a493d10b22b7e7f49b876a4ae6aacea6518f0f6e96df99541a08e65dd1dface60140dc82a763edaa2b10496c0a08ff848b435bc07bed650dc91dc96671dd9ab13ece9c17eeff4b0e9a5562da04e5e3367aff5e02056ad34d8fb753a347b9d80bd5a0429b72f75892fdea0ed5fd1eb388d9fe7470f64aaa6968f395b1add7328fb57129d26410f7419ece93e8528092408fa44b7c51325998141a1c86e9384e2ec37e0f860de3417f3bcf10ca5dbf6bca7d64bb4a4fb172807ae292464935c43821cec97d1ddec5c36c42b66b0c668ee1ed279af07092de1261fc6e65046590d1f6ff358a9ead30ad6e25aebec61e5dd9f6a270763ed4f8b34f9064f367aac737a69907f266516d5819a184963c81d3e9c8c3f4589fc228c574ab7788a89e23a11a1dcddd467210476ced614fb0dc85b0fdba6e4dfa59ae1721d01c199174a7776d43cece361c057f872f5bf030469a49b37b15cb76f1c356f205e7bc1a40cec45533cc1a67a6eac20b74c3d5ce9d87e78c6f57a096d0f9ca8ae187d6c9bd8089fb697a0a8068a7321fb33bd54c69095c9aef35ee3fd934081ae5f47b25b6148d602366596b6b5286ee5992286a6f753a140dc645dd5952c16a0eb5bf0b53706ec2d4560f166c974aa2c31b11910785a113c1ad4833aab16709d6ed8fa47d7631783b7d458c2ccd4abae4ecf419f915d61205d40b823e0cc2c9ae197d89bd872ab0ccc650aaca43a7992f2c35d4db7703b6c982a07d1e8a7f8e6266b51083b30b1e9bc8809eafdea680a16367570211eea518e16e09d8e772c5c3b7f8ec4db957499379fc7ef7d2a6bde3f4e7a61eea0e7ec829bd161e23d7d8f0cf055715ce7f74a7cc6e3f09d42bef47acfc3850d371beb945629189af467a61add9cf464374d6190637599332ad586cf20ae17c9d3af5306a27685b99fbbd615a077cec72f01c13ab7775a999951ea07ff52d3eab9c8cdda00438acfddbd3b0ae8a1f59d37db126ac20c24f871079a9a63df522ac1b97c92839650dcd9095770fe7f1653ba6e7ce2fa9a706eb07ae76448784d75549f771ee533762ba36d6eb0a424aa7df39158a23dea7b74cb30427048b4d941bee2696566f192a71cfdecc92397c9a28f8405c9aed68b7bbdaaaabde57575bc1efe4741cb5dfbb03f26f4f5be0d2a8df578b1f3333d2fa80a3df8a3da6a52fa6a64d1060be99810faaf8b7eaca72f9544d85cf651c2d3615c5951d528aef1e51a7da4d7fd291cbe796235f3573a44d723e23a00d71de2c2e17eecab5e3c296c65992d93464f9fb97b61aedd88c71e6ea954e6e4dc2dddfad253a20190fbc57f2388ccedf225738cd13902a6cadbe495717c8be6c73976b2265ed22debcc12c9e4a75f8bc3f809fe14a0dfe7d55d6113deb884428454bb2cfa4f1fee5a82a8d0e317d6ff187f869abe5675297a40117a422cc3fb0779aaa6e120fe725d6024f17680a5cea23abf23c6f057c41474c797bf8dfbc6437e01a9a9065339d440dd683b633f53d869e2b22651b1c46ecc09faca53ae4df37e298ec8795ab3496e62cf5327dc9ae9cb9b16eb8880f53acbb8db9203caf7ce1129711660656f103be0c43c98510d4a26f9f67b6b8faeed51287252a22ce8f6c40d509c3b440c5bfe3eef7745b06e5ce7683bf7d510c47d6861af708a3e60aa6fe3e1de5a24e4f70367ddccccfaa706d4ef87ca8e94f79402554a75d5e09f9d1f36a4169f591923c54b497545839264f1db0636cf219ac85824b3d4ab972cd39cb45f4099a9bf09992bf3adf0fc4d81899caf4d6aadcece3d314840203c58991bc448fe5e22d76126bd83177a7273b85d1c41ae50b08b2c19ee3cbcaaa93b2ef197a1effca046064f1b223f65de11dcf4398a8bf18037328c2a260311d9d26ebb92504e0439180e673008d66edc9a00891adabd4aeca65a38e9ee3e831926f82651c3779e6425196544d4ec164f2769b200268db5815d725e7b067559ea2aedca22c7b0dcaab9df0b16c6c11eb95aafc67ffedc76f8470745ea4c99e450236234b04f7f436ce6558668e9365e54b64380810121bab7ea6706d506de316c3e781c4f76b7750f883585f64053c5932a349d2886faa10474dd53fb3790bcfbfb431dfa0279b4966c5585122cf7c6255845e93f1685eab2d686fe69c62f408df8f454bc1c4811aa4c0f5af597655f047d3647288f439cd888e35c0e76d862fa36b5458f86fd9c3545981596b1a5d8fc6a41ed9eeb76b398cd9ddef489d14c727a8f1a36154f07ac961a4a84e3f3fcece673f5df50ca9cf26f3a0b549ef3f10a0b1849a64342f64cbd260e4311644a5ef18abeecaac9b66901200d89416b336ce4ad19d55de106a32375648cadc4de02885547e81b2416a227edd061066fb2aa5753e7c995dd3f70b61c43a9b4aa5fb1bb1ffd0865cd8a953a26ce1f03ec1e8edfdbaae9d37ae7cb551ff78d6ffe66c1a73bc085050aedd302b6dfa0c074adce7c8e8b32fb8b75382ffb363a0ab71489f5aaa1211a8f3dc48b374301c0ee4a51c7fddae3f525899e9597d97fd3b8f525340afd84ecf4b88cefc173c286dba408e301d3c13201e2eed91b7fe967e6a43c1aeb1107ccc5bc20a15821980e4e29bc33154cc0b8b6ab837d2d210cef3d7605d815167a039c264cb3b91a430fae13daf597b71c76dc28b9e38d7ee9144579b6ae828a3f8573e75ac81284543bdb11ef1abc0913d198585bdfe45cb10662ed59e03cf68feec7bf23eebf8a873323eb945120eb53755f9467145b59f2c7b5ddaaf03d4c1241f958cd5886ff36e8b4759e8bcfa1101b360550c1c21a330faa855aace944f14243f18ee11dccbe56f11e45197abc07713cc9399350a1b5fa09789fb2ce4bf3bb3f75545aecdc3a4867525f37d3f9d64d58a8481b5a5c150a8b5a454d8693ddb12b527beed2a1c43d880539bd77685e1c693317715ad870c0e75d02983504d9ffb3520975c48f98de8d7b79de120783d19e71608f3e67c75feef8e56556a1d669f79403bec9ff798e7479b3030e32f860d9af911d3e61d71004d5f9632a359a205f61e5fe62437c5207523d35b06f6ed737b4a62a9f99c39d1ffb66ee4dc719002c37cc922acca45777abda7f748398bbcfa67b9c5cd8633ae15a7145d3726180280e2c96de0920ed071db56441b03ce8116e788217d9018e080575f87b88cf200f7b4cd322d660be1558066d83d4c18c0ddd90e687e67604e95de19c7beda70d71d149956b5601ac3a75e8cf45a64c53a7932e3405479eadbab1eb16132c96218375be198e49c597c480e4764b6975c86f93aeeecf8e999799c88ff00b6594253349686659818b5951bb8753f68221f07cb97b2aae2d258edebf33cf429a48376f59284355ffc6dab512581653f507383cb25cf0936db6803e08f4a24d5580408e8443946e3ea4b78b1251d74f24d33f2cce34598962e6191794b1918855884576622ebdf6e9931099a023cfb9689857df25e9b641bb8ff6dabee4932592a9edf4ab47f8c1cbb64d53d00fed5a5885e2af6016f2c37c3ae6ed60b20eac0fdfe1cfe5221bd4f5e179789cf463758d3719c4c5e0f630383ae1fd6f1a82937488f4c9d99b293143b5ed6d4480625d91e97f70d5bd77cdc1d34a7ecfb9639b971a4bf1bcdc4a9bc04e2160fd2a86cd09451c21cbafae879b919b006c9afba27ec6f935dece1e3594602c7ee561c58402668fdcf28416d70fd7a832fb9be06a2a6f952a4fbc02bcec91e2e9e79ab35c032e22a3fddede18ecc433f04a8937dd791f95e62006c7ef0d692ac8cac5b09a118a2519e325d1efb50e91b0f5e8dda597d76bd6af3b48277700737dfa6812c803ef21fbdef5528fa9d9571c19ed9f240f95570b3346b135a4295eaa168c51e41856a17fb262112cf7b135051e402ce7e7c258cb762db48b09726ea263d2bba4442ee6d543798ecd12c4dd53528972a9c18202e9e0d9f6a01610d9a7c24bee92d86f99dbaa399d6530d40aab3de4c36fd60f5a374aad68279e51cc725c30501688d9f70ed2e8f47f9f8138a296dd17b1eb5bd6b125a099dee74addf6fee9a25f1e982db2f02181cf015751197bcceeff49c1fa843e7cd01d797a877a4e15e41408b47b57067c0f32cd5d4d5b9ff27a9b0a1b1306d21e5b9a3033a4655c7b2957b3fd69e43ebf6651ca1b4ebb3488cd4ec4f5da70e857cbed88b0e42f90a4fb58f07b8c2fda57fc88bf12daa64d760fad955ffe226fde922ec2b893f0513a3f9366538d31391e205c41a05b4eb451fb5053bf15b1780079fa7da787e787cdcbed2e4ece6a8cdd8094f4daf82612ccf69c705cf06eea43102ab1d657107648a6e9931b47301891b2c43a21229053e69ed1e760534b6e55114f8b14dc7fa3202155a4399e6cd509ee2fe47fa40db9d8ccde14b07df0b68885adaeb489c379804aeb823a03391527610e69b399c140acf4ad136218051d65043ba99037e74b0bc5f272110b0598e2b4bf6289633a0a9920e4950b594cb9753e9e4e77bbcbe8e3ed6407f7653b6e0f53bb09aa17e93563951d92dfcc72d30b522d6321b75f37aec34d917555051815a3b16f55969c9573fba5c5116cebf54167706fa5c372b21c50c6b54494c41ee1fe414d4f3df32c90d63573909918fc6f8d107d0953f4f756eb6ebbcf4a7bb07e8a597269521bdb54e16c8e3ec05895a3c91e56aecad544c2e5d87650a1981e9a80eed0084eb796debad51d8d763e761a93ca91ee9b1e05bd3dc4e3dd01f422d3b2d713358c1ade36511c938117261964b620a8375e7ea5a84415d00ba929120e36f6e933b5c829f1420e7ac4aefadacd0b6ea9e419ba67f58e936005f7f482e95598ca666113795d1ba48e4c92a661cc57ba47cbd54e941148436e4ca1848e7de9b75cc57697c62172fb01475a8a0c5be2f20289ba3e2d2259b48fe2318234cdf02e257df65be0ccec35fd740c3324bd3f41b000842009264914089d2ed646a75927511a5513b0f102c217f937d08805187e1b4733b40727a20586059d41dde195623439527207f81da05218ce55e3b7bbf67c97df1c80d6fde3949ce3b12322c06d5e438ac64b35ae1e0ba357f6b5fdf03700ff17a34446f5b1a629079949035b3e8d2fcf2667ce6c780d2078e995d18464bc8a93e9f05dcd4bed8b6028b439f4b25b0e808a3375e64a3b4157b5d35cf522cb58bdc997c437683818f137c9f778f8b18d7c21ca24d9a145dcfe886c3e6871bc139a9b130ac7bd1559865ce2c2c47de3d8ed66945e8d7cfa389b4ce72377ceebf4dd244142bfcbe7b548df2d620f50fc3c1973a0157b40a5412c4dee198f9cb3e7e419091683404afb4cb2bf1c820b1a372deb2f442b591bf164fa2af90124c66ca1121857f5201b620fd17c083ce49b98209ba61cb7543153d9cc2ef2de05b9c163bf57c9c75c79b2d3cbed3d184bce7cea51599760dc9a0b62673ef69907f74063ce354c313fefd54c6d1d075600afec29b576e21e7e281c5436a1534d04a55605c56aeea5122382fb300b5f9a75d8fa334c5ff0b07099ce9958f72ec21ba7b2af00bc373bb87b6057b711d328770d749edf6fa6a5888cfb6bcaad07748d57e39a2c12cace7ffc73aa4f9438ebcefc12b0f018a53f4257627d4bcb116590a779c4b528160affa8a1cfcb1da6206f8108036f3775ad49d55f5b93e0c1220586d43dbdafb8fee4e6cc6fc3d5837285c611739289a00b8899b6203df9067141a6059d8ce6c8370463dcd1443c086cac13197bf135670f641a6e86c42f94d33a20502574ac92d0cfae12b1db3c251d93fa564ace84c989c2b8c86fb7e67fde4bb6ba22142c479225d49dd64a3617a794ca87a342560236753f019cdbbb76c34d869510585b7f66911ecf17a93ca4a0d9da3006fa2abaf7fe402b2ab89be51353b7a1c93007676116e7ea302e4d1a570c26f6c05710c959401c98359c0c4210a64f29ce356e5714be55fa6344d670f668c7ce55129e56e6cb7125e3b0c64ce504aad107e330f44688c81338e2ae3721032ca1e18724c979aa5ca67919605deda2dc594131944ede6cb228341f0fefe4779918f1198ed21ee82d30e16e36a2c196fd7aa0b0100de9ab7603e2d9ef92eaca40bf13f17b68302480933d85cf996640d82d12b76771a12b0bbf768ec609f074fdc6bc5c3547283fc637653c08e29b0301668f356c62530284a1f3e3d8483c53512e55a0c53ae713dfe77b9b2919962a99f177f2ca4aaafef7c6341eb95acd4a9b152b274bdc787c53cc121fbd2ba045f25af3a06e8bdeb1d4e10702831ff0ff5ee5ef4e858233feaf8b16fafc5f84c4796a8d8dfdacb2828bf732e65ca6d3f38cba316edd7cc109b676e0f92380c2f47e21184b5c0926ef9d5ff1fe1b1e5264370ec9743dd95103c9b0b47501eb9594e721fdc6671248e449dfd5ca2c050ceb0d3bc800a4db5e8214a120005400a07c2eb688de189c9529e73dee21a379fa90ae462ecbe8330b30e9df8a063618ec6e9d3439b6b2416cd5e0a8c001448cebccc2c1e6166ca86574d57e1b40ee1e842267b717df60eb80ecc2c8709f3c6898df024df197eb8b39c0056c9e2cd822e5d0cebf479eafeab7a6ac3e791fe804d9a64a38fc531375d8e240946bc2cf2458ff8188c9d9e24178ca8197d1824c32ffbf1ff5442d0bc6adc5046d250db69297a84404fde3705ed245cc6958383c1032e9d305063ccd2e3803b67dddf9d47fc280bda6c930500854b89471a633468a074d4045a4177e456dda0beeb852d221caed95477acde65ffeb820acc9ed8e696726a5029a993388ca73b79fa653d1586c7501d585172611748960b473fdc767608c0ae6d453158d83900ba2f4d5e6b017652ff9c8bd16aa90e52f9a2e792c04e82d0c0f78acd8972b43e03db313c630ec1368b161c9781e367521918015c7945d02a1c8701186b570bf16998c7881f278069ec51ef4abc4501a806ec482e200d98763d58edf27069361e6f44bcadb6403079836691aa67363c621473cf8ff63894d9f65313d7c970a775819b918b29836e2d052c16826ef5ba14ea0f957ad3464bc1d5e96b52c72181f3fb89e1003425a8a5d38bd849e280b9e229f566b035685735a603c80fb591ae8a1970efbc008e7a59df7f2ad968b691441fbd9da8c4d51dfed50a9781ad52e2aa1e7b41a10bd5e7244c1011b895a579f75f8c0f569a27abf6176033cf8e4cb49ca9cf4a9353420ef0932df549fb6e6eb7ef59c28335b01f6a0a6d5688abb83de5dc0d4c493e4126fa3e55f8826dcfa22c0846fe30909f7c3528954b394132c5f112af4416c46da7620c23878a4e377a1af5da1aec72f73f8762e9a5120719645ec6bb0015c6fdee52bf0fd58ac9a15a57b72c82aa5e5eea05e9ca22caee8981e7206a6410910327bdc8915551790f1e4ee4fe89fbd9a290e30517bf215f6939d604a98b4292812b476b8bc7cbf2c207ada8a8ce63fc5ca47751b38b79ef20802e005de4be0996d204219927826b03afcd3e9353fb5bc3ea628296ea3e3100ef3bf0de17be706c6c9b1964c786733436141a9d5737bbec190df7be8d67ffd118ce7cdea157f85e20b53d25e8f88651bd9ed9287df9b6507cfb1f5abe7305674f54c085772842fe64754cbf6a4bdfefd968df61c20161255071164e3200dcb2f1bea7a08ff416094c9b796a9d58213f67df71da573b81fb0342f502f5d5ed10e0bfc79d4c1d2f0f10e1929da692a9066905e4e7406dd74d487ce648e1df8ba329535e18b9c261a3ecec045dbbcc112de51fb2367c03fd59d844bc10e6300669f7e45b478b337451db2a76287743984e72577c9a4ae15514e355ca9a15194a9f1d9f86897a8aca1fa0d1c6cd63abd54e3d1b02499a8973aca17510bea82e32d466d425c5604efad9dfcd845d3783036e3908eb20ffdac2722fe7b53cf14101c7ce508b6648081b8778cd11c68be49ea0b22b0d7c1c19e658bf66ab69e9337b3b15e54500a051e17944c8cddaa4422167decb74be796798ed35db52a9bdfa704bf0e0ff0a537695fa32ee7688f69deaf134b50a53597a3863673aec50807bc003680873e0024e004b410af3cc9a2730928914514bc20ef8936dc386131e7e2d42b69e0cc0c4f8a5c74fdf5ddec588355283e728c7b628556ae51a9422653107bbe13e208c204ec4608978609112b8ad407a9ef69dd925a85502f5c712d6ddbc4ed8a4dfa09005044456d26103d66a3d30edaf1412c641855c87b102c9068a61aefa3ed54167f3087207cdb8e2b3a8631ad2757fd50fe2db2fdd58d6118b478eb3275f2d169107321667e8e660b825d9b9028c30fd06c2dfe46542f9d2db6cd025662b08cf64bbc3426ca096681b3ebaf57441ad6a2ac015c586951ff116aec91dcf81c554842edf7dff6075a74741bbb47f208ce9d51e85739c9596fb7fc7ef65a812dfd6b6a76fb43bf7109e549b090b7beccd880103ba0c8cdf27f591bef552fb00e168104e93c5f54da23a3fcffa11e421c880fd2d690fd45a0bbdfa7b925c86a44c3fd6f5d1810689b999c235bc2ac6e40080a76059f7e33ad37800fd589692c99705602d0009714e435a1a3254ab7595f03126728e568b4f8d0fdbaf0a0b45d6099ceed35cddde186cdb12d84846b28dd675f7afa25e95ce01a980d498ca15ecfc1576ca6b1d14ea69fd6a7c1e46dc5aca98fc7c285cef9648492b9afb46627f644225d063f00b256e5632d4b6576a5dc95c7603fe03ea45c09fbd1695469b1d5a20343a48c71b6f18fcbda0e6d45f1684519e768fae76d97f047441ce3c85fcb1f69b38dfc9d55a88b11bbbc43a82595edc8fb57306519212af51a58bcb10760c975aa0f68c3fb2d44e91f80b2ab1e756f978b9c9923cd033851dcf964955d3b5db82f83dd7d2fb5e71cec280d1546d4013d0de47dfe5b38793fca24c161384c6aa4360ff6a1c9a5aab38f466052fb8b24d5e08cb06818b2a3dd6c0956a3565f3f965659cbae48bfe5d8106c6546ff27d2c8094829933f96c0163155c33e1a72d1e38bbd08a174ea71b6303ef8af5f37db7f0f202db0fcd708feb7710f8c30ca7c68dd115d27a0ed8264d770bcc969fe1e63938103577f260a91bdf3b14f4896f290fb156d592e01df1817d2a99b5250dab70d365d9a38501759084856c15045c124c54a98a72ff2e7bd118eb8905e440ac5da98dd39c0303152d0473b91021843ab0da3e17be79fd7f350b4572452610af8f560f08a617f04e5a14fd27467b275668d04fd5f8b50f88f1f2aee5c70575c9ec0c246f00848216fafcba56402e56d174e113e9c66fc4c966497b1c46f6ddfa87fa01b2dfe6a6ae3c6d69a420dc9c32e4a1547b3dfdb8d2d4d614b4b5de048c5fc747b4f7ba3f1b68a908ebf09cbc02d574325051aa07d84f20ea71352c475aa43d8da41ed170ab2fc9e09eb7a1e88e1e15105b3929d532a9354553cfd5283faa9f241101764c73c193a2e9677b854d1410a5703aa478d52571756d49beb1bad3db5a59a3723eb8630972974b28e5790f62e6f6d136baab9fd86f49d6f307cfbd3efa43204dde21b233dcb22478dc6f5e9b9cf8868f849241eeae2e44a7e432c6e1bb41f589b05ef467b0c64179d04f771832ae578dfa600c33200064333ef8b5439154c6c2314ca1bbddd1896040cbbc5345aaece32291fa71525eb2616304ad2b8d7d3c6b3d80103af371dfb939a913c19ac1251c5b5637cd463f32c8d49e84d69aac980cbca8d774b583ffc964348d60d62ce923f6906d11d1d43d78c224b4e0fad7104d96f0664b56a31152920e6cd610996b5cf33991bf202803481db0c04e7282fab1afa67cd341383743c3a05c542469c8d69782445b67b50ef3b895daf221d9e32882614c0385bda1cd1b281436ce5dc0173cc1318616c91087beb9f4404ba2a15824e23c9df55afded9f143d49dee70c0c1a0bba9cd071587424dbb2d819fe1267e8bb3387c4d6f70f49c449f767b998a57b45cb9cfc840172d1859acca8f1873dbe9c3bfa222885ec2013287c5a5dbc77e7664d19ddb5b61f8417ee061283572a8b76b489df22c2273923301b6638fccb28430fbe856d04dcbe7669525e1c83ea6905728593d889fdec28b6632fbd6713e3ed3c173044a820a0c138e282dc71c16510cebda9b3170415499595ecf729c0ea87b908572e14d84ba5981c3ebb036b13d26edb3ec7705607be28f3df3b5bd96d4d132f3cbeeab2b303ba6c8be5152b3189291a06b32ae4c3fe7c11abce9a8fbbf7ba4f584c7c763a5aa6cc0b577ba461afcaa884e48fb2743d54ca090f9417bf8a59b4a0c924049e2ae6d3f02573d309d93b11b3459a231b121390eddea06ee14e26a2217a1e2646bb0fc6372dfa752b022ec7af462c882636cb39cc755be2137b3b1ba2c9daa0d9d65f402a46ddb7c1ddfa8d610f2b8a178c803176e214c5f76916fd552b24224c6e8e7e236414390a0887a220f276f2b6283463afe5aa7a716f81e1b06cb2cf93c59d5cb98b7dfddd7bf7d98f9c96f3768371110ccea253d9ce8a00ea6658892b5973566536eafbcfafa25ce0130e826465f99480a2092a84e748a144c4c046015428fb357e01870769b029404dee8c2258b91863cfaf0801290778d5f4341f443648d402a8201fe088c61fa07c301548c0d3a2c4a17f1f52115eae69cf154a258e166a159335722aa6294bd06e25d4742f87e0a7cabb1050b6626e64c020894aa401df3a0967c25a2e35e5473f5317a2fc11cb3b51fbdf7da01422eb8aab64613dc07c1172b1adff3da3400760c1d9948d4e175cb36714c913ecc6a4fe79c8a9c56a64f997ed276cb59776c0f9c59bc96fe388d1ac2e72a9215a1c6368b58535cb832e5803f1d7126fd032d4764a9a9c96c5dbb95d3bf5a51c27206ec579c0b4aa4711ae002449b22ba7a125a2dd7789ad36a76ed13cdc59409685ea6513eb0c04bdb53aa96a204861646e135dc654f090fe65ced25bb1d99c024efa94debcc0bb1c118685b37a243ec77e0ab78ccc8adabfbd2b469b9da655fdb93a48102de2359890bc755279b5f7302c2fe051354ac7ccc6701cb2ac86185510576d062595407163aca8f472f325dcf6770d71c3e42d9849870a7fd272e5f75068281d2a71b4b9ebd8dad74eae6d69b982445e6988479e1be4990d1557bb29a65f0d696f0844835f9a8051e4208bbe13f7a7c6c78861c2e5fd29b447b2b237158e92c8732009769463cde84f821843e6091bac89ee9f500472da705cd566039b11454a5ff02b91225eef94bac3cc8024e3a61788c335dcfad4688183d18b84d076f7557b9c83e550a9986520758ac03e929545ff4fe6feb08068a0b62d984ea0bbbf57db7a6ff1f547688374ad08241a19de984cd1f1c9a9d82830bb65389db4423f69452fd78b8a46f58addd335c32608aeb378cfe9c5f19aff9af0b7e0532cfa597f0b4451cdc7a2c0fd247e74f82af445f015b3fb725c00cb16e089eb6e633801ee9da100d61bb34fd6fbf913debac88cfea00edbb752bae90880a23ab0df9946fd302c57f00ff4afd388b612be2317139b27819eb55c3ddb5b74016812955f5c9a4d121033c0651fc807c15c01eb1e15279d3a1ec4d66ca71f0f504880535de07204c95b52f3f77ece3f32c8e3db0cfd397f1fb1959e699488c2072bf0e4acd42debabe2152865ca090c0b2c27092e1915c9d27795a189d2dc399e42b9e64fe86f7df6a0f3c602d1f85e40a94f5ed12d051091ec2986a1ab9c5466500e22ce4f8ab944033de052737667e955d3dbdf6dfa17f151d9ca2bad67ecb9d9be1a515c89b384dbdb799621734cbc41bd9e23d1fd0547d374b6318af8da92124e7dd2a838d9200617427833cf0db57b2e5c313cb86cca2b2be6e54cba987a90a99e9da7506e6578a05daf4af8c9eb168c95043a0178f79366643ef5aee9d44ebce9d8351526664cdfa7ba0980a50e5b9145c373d265786efb0e422498fa50088e347d5183deee834a4d01a7e04696255f6b008b68a5cd83279a58a9c0c925294b8c36be55c42a02e737615ae6fe00a8c6c787aea945431eee09d937e4e1d83d63f46117a210f1c999172ca630ff7f0d7e1fbd3050fa2208a292ddf8fa6fd0779338f3f97198dcbbb4ecf89dfbe649157b705accf7bec2490fc5296c39fa50e556e2880e6ee1b93a526ded3c742dbc24509aa70e00e4ff42e301fe7d5cffee865911f6534587eefb084efc19ec2a998e2037605b163439bcacf26cd7dc8fb101ffbaddd16d0b37afff50400c5ce4882bb311dad3fac209c0b09252cf6fe10e617a31ab33fcbf5b200429c1b6f5835e2f779fc5c16603d51e061a69c709809a4bbb7f10d99eb0605a3ceccb48745ade403f2f1b24938689e27a0997c054a5e5cfa573f9dc4f32c0906046d2777422a8941850982d0b5a94fb8ad9f82483a7e3139c5660011cb3af640c7bdc9716a3c24bf25a7b22b2e44a7994e061eb6e1842a212d1780bb9b2622cb1239d466d20d881b6b8465579d2babc8dbf5bb7e7ff8b5d20b28bd54a517ddedac8cf1d1fe4c784a7279c30d384cc1b890df97b6487a613914b9847881903f8c080fb69383f3e287dc9d17a6209d460f87f641cf3f7e5be02acbac815951cc587d53bd6ceece38db5966fe219571ddf093701f98c778f8607d24838afcc4e3adb4d16bd149ad7ac7f7986d5fd517f53517bafd25e928dad28e0c23419497205b597daa24114e4eb95e57516def6f2d5f529bbfcd1e3de859b99d8e6ee9f4eb4acc476a8510c1f6e944abc41ce1f6a0a79cb679e3c687273da3f04e4b75c65c1c4a7b142a66bc948cc41d561aa8564021e3346a2751427843b1696bad4140a626cb66bb6c7185f734ff039b8ef17527f1f886c6cc08df5da20b705c6b02c372ca4b01bd3a5c6b37b715556f3394eeef066271fdd9a15e6049543204bead11ae826abe7a2970e8a0c776d9ed01cae4295d9fa2a90f21c6dc9c1a5ce38fb5d96d0b27ad555c8bf5d5f86c280220b928ba0db5c66bc1cade49b3acecc9d7da755b4308803d7648e7182699f75525582a6a9ea4d39613ce8af74ce9eca40701d7d96f00052ad80d47d7175bb254a903c8ab85e9fd30e4b69cf95825ab55cbaa1fbf516d54ede6802d18ce3761031d38fa94e1a20a14791e6af5f37748cde7b364021d110b3fe940b281891670a906afa65c379320cae91a3749877b440f28ee54dfdaee548a41946887f6648d9a7cb171ec72b0e1bddeecc5ccc2ec9287308b091afa919afb1e02e54b4bb0467c55a4660840e521fea507d4b3c478e3ec1fddb9145b3297a177314610d865fab31d3929c070d98a7f68ae7d0112f87563a4991b813b98f6e69daa6bf77d9235d07beaf2e9675ad616bb7773bb1cf9ddf3a0ff247bd3a0c179d0a811e6f017d5d139e9f7b3cf2de56bfc7c0c6cde6345694780633fd5f78f9ae548b7437770dd4db82be1fdb080607d0bf227e0e30a9fd39d2b88d1b5afb2a6a224dc9a85e8cb4257a43ab9166ed486435d48dcb2079f8e7bbdd958e64d2b556d1d72d879e352174abdb5ee2d9fa7a74408cbea3016d55c330f9597c1a26330f9178b4756877e0a445e2beba5c709fa96d4fd1880eb524809c6cf3c9e56d7b4d2eb6cab70dc415bea1b247837967e5e3ac25a00ca7a1a17b52a58ff7ff5ee01131fc1b87a6144e0e3556c7896837f4d98f9a1d5c4cd0445d456136822c62eba90386e1ce06e0fc77025e28c38fa2717132d9a83aa3e274f00d73f97c2be56a2d235b4b84b88a26d1c45ecb026d2290261128077066d6d4aa0f4ec783b6dc2f36604efa9b069c4fbe5cb54775a993a6a60c81a5a7dc91a38d97f0b6d2b501799db5ceadd715601542393cc507270e3cde892cb148278206c393f4030d6e03b62b13577caf9231e2d276bf95704ba91908323169bf0d42fe565b866fe55437ea08c811d7a6390b7506565abaa8c29f06b5f0a7d6971370768c555f366aa12f3c9db037b7f82ad198964490a947231541764cd411119141a880f9a8aad694608fe886481f35b6c82eb76264da859dd703aaa4747baa8ab0c92d319e3f7d175c2a2ec2371ce1559babfa054015928ee13d25b4dd8c99aaaa9e42dbabc87cd30bfb5ac0535f70e36b3e6ce900d6f3dc5914bd03be8ecb62fd0b158114b4e49efb587c3d96e02d02c63769e6f425f9e731eaccf3d6323b11a4f4e446233d017aa27c78fffb579dcc09c77fbe629614a6dd74efc6af5174e99ae04f82bd2857a47d6754adfc1b35d7e03137ec7dd36418de096518e90b551ef41c5f2e002e36f027048e7e65797db130d82cf44c675624d180490d95a1aa17dcd4a21a1cd8821cea668fa8c964487a43cf051c6dcd5c9c0b7a90703c8333d3911a1aa5e3ac1e0eb391f54e1a83befa4dad627bbd1b2a95316fd1204685514b55a6885c8d1628eb96b7a8bfd0186c1265297c77ae667c046268f7f54722df5e75941a09181cdb1f9a419b0173250737da2467e43a9974593b24d4672df20d25b3c6ce1bbc7053f4c93c4879fdbf7eca9a2fc7dedd713134ee280f86cd1ea315924e1f849199ad0df6ac148c77f6d925bad5581acca3f5745520246711a9fd69bf8bca88edb273ad6f1202f1117017b773aa438717826a2d31ece65e5dfe644f811150b35d2df57070b36e3844216d546074c7e2b1820fda5d484b2f708468f69277e52af46b280c80c50ac3f1af4e75de01b9da0ba1073cd01de70ed7ac718d25b961ae2e62489e5aab5f9b98061ba5121e23d7bb30e04a810fc43991ebeccee9951b5e8b3dc6ddde3d4a1e74f03bd90a50c5bf4ba71651b95c11ab545cd0f2d000800118f15d4c13cd24398bbef2a111cfdde165086bd40269ca0d938fbf2503e21605aa5af7e38de2e0872d60d82c977873fef1cb3aa134c5b7850b24aee179986dbef3e35fc8c4632ce5fe9f0bae8986e4260ec64c43507bf9a1d5b32a5b03df2a690e541be81e339e8fc4ad9887d74df6e0efd31ba7f4a496771f82d17f78c323ff9d3d0ea34a7103c2de6b61911ef42bb86c61efe10724c3b44d1ba11ed24586331fe8d2f037a31bd9130dc01fb4253270f45fda2ff8108a7fdb9ba3cfca4bc0ac8f3678e392265085e28da85775e996959890aae9cd21d9fc0d26bd14dff3ffbc0c9ed28dd111f4bb8a6464f819ba328fefe4af341ad315c8fc1f36a653d588827c152b0d38f2f6980b9267a8bddde1227f8c35508cca2183f910f70cd42750288a7b372afff4f3f3233c5af0a7ed8f8f78c2f25087243366bfcf2e980af950169f52a92a3b72392e0b12d9e75aba67f9246b7cfdd63c084aa81af8b71928e53a7347f4170ba35631c8cea2c6dd6e2be243f21d20d47a0adc5213506a620ccb598cbe23d9f720e2d1fee62cec91e3d67eac219bf077df64978b252af727899d046de6be9dfa6f80860b12bf81406922c398a24fcd94a9b168e3db7a4dc8c0170118d2d07e3250989846cf6fb92dd6da4e0bd52921d13a15581e3bad4cd8286e182a60cf95280136ac2e90a4590a2e1c4faccfc3882b3d4151d36828674707761daa210a91e61da5d61ca377d83bcdccdd84567905575d966609179c40f3543f4d6ef79f945b89906d6cdf3accd6f52d81d57f7aaf3427cd1a9aebfc6bec7f96f7535717cd5aec54295bb54819580073d985e559ebdeff5c9573ef5179825eaa9c1d014aeed74ccc9121c12fa5f9003e36bbe87a8063e083d7caa278bf82e38db6348f5ad2a0a04a209ec2aba950d7e25c2bd280ce6263de38500ca75b47970d8e13e95161f7a81acec919a4490d5a023e6ab54ef9c4852e6ee94c77e13c24f7472863ba7444e681e0a0c61f833f238304d26ee72bd633f5ff1ce2047248a5470305f8440c62a1fd1727d45577b850f79ba952dcabdeccf6cde9d24602923a9623468d6d53fc76cdc1765162f14ba9f3cf20642a58b15365a2006e51dafeb04425f9d3699e6020fb2b9291dfd14dfc89608755dfe897161521afe9fad68cff210038037fac0dacddad88af599ebb6f37da605d3f427819a1e5fb93f2af4e43e506d8dccf00a47b351a9f2606c315388501af51bdcc4a4d61ed12d6dbb74b72c38d19b3b33b14d51566455d244dc0da0c37f78d3471db555f7c47d03efcca195f4c2e49e857d8726bf4b993c9a42a24d4107e698f0be586f647be4d40631c71693b23c3c91ad89eec5313c618ef7e582ae2733ce162acd49db5b4e79bcbfc9f14df52b79a69da9949912e31ce00b548eddc56391fa8fe89a1d3a38e0b7fc737d3163da81a56e7c06686517447c01c3c9d038b66ef66fd78cb77a4006e484dc7d852c25f5728f6eaa2ba9a576bd45ae553ea1e23d385c83a11cec71ddc13a725dfc4b47442db1735d8ed49d75a17b04d2c5b28003d6827218505ebc7a079ab22b06312223f6cf3063b6684fc177e12075e416bd14428b8516fb95c21d6df8f9faecb9143a0a11369c0c7b5e392c0b81f7d546da246ebbd55502ac12bcf09a3b6bea6df186b5d04defd48b211adb7d774029cbb4d3c6fd576bb7d5c7a6f28c71c71c121229208f57db2907efa21ee9db5b3497391588689311b425da2f2749ad94e57e10373166b8e9c74a768b0713f90c406cbfd06882dce83bad6cbb4c7df5136937a38da8c7f2ed6bb1c940acef9d676c73cfd79dd2743a953b28f50bf37a381cac21b66206aee354a17582ba9e0a80cb23cfb54a9d3b4aeb1067ef898639d507437cf144eb2b8f474b44972be349bb7d305e72cb538b1da0d62c36d550131aee243275e99f9ca28295bfe554c92d9d4d3e28c5ced2b16a2125451623310a07bb1c70fb657d504fc5ad1f73e84794358ac60cc81c49346a2b8b45be34e3eded48dca8f2ce852788655b5b744300c16291339dbd8a3cafb355adf8db8876df9ccbf5a932b2a4d043a015361c3b01cdfe38c4ee6356116a62ba00339a772aaeba31b7b00c2709bc88edfbe7e673d49cf1cb225faad87cf7fd837d1b916e9f03ca94865ca85d637a7fb899dc5834b7e42eea9ba32c91810cbb60785ea19c35972cb431c992f900213cf07a60df5374beccd6ebba5cad4c43d3f947a843c7a0bcccffb171b4cbea2d39c3f22a8761815c64fbe695dae4457fa6cb2e52b579fbf9990d1ced217c0f6b527594326ae13b7e2c7e9381e29e6d1b5e4a4856656ed013d5d008ce0f97c3216b14e794aa79e925db4bc843bbdc3b5d09ae1c94dedec6d724828c40b3dfddd423280bb4bd09c307d265e3937029bc51af2e0e2409c1a9effd3eec28f72d0f4765892ab2af51bf3975228b46ff7995ac8f09d7be658f11a303b750da8b2abf5a5c130f6aed7cd31afad2715ac9c7376ee3e3234ffcd24ea331c88ae82c8387598ca9d0d87eca4a1cc9d19df408b809db55bc31eb158a391b1dcd787c601438c30b2ef2affab621eb0e9bf83655b0f6b517088c0a1b4eed9136971cf987f50ae3b07d86e142fd0997ab78953a72611a85277ecc86e3da8c54a057e7ac962ad494b3d0d3ab8a4c9a477ea754c1b73e31c6384506d0696d23a5d08a1fbf886a3e2a8a4a1eddfdf57781fd0c9fbce6bebc06f1945e48e9953f03f9845b9245eac22320e5764e7ec0c5997141289c3375a57f1963e68fa1e2d022941ba477e23f130565282c2916edf6d0d95588aaa6373289ddb4848d3d52b44d6ed22e6d13fa5e2250233f1e08fe387c42d572f4bdbced6afbb5f56b09750b3244c5cecdb385b1d27f4b67bcc98f281ba9771936b71198bb2763599fc9477999b54ef2fc9dfc67ad4693c71de0578b508b3a932fd0f04e3d771c2740a95eaecac6d83e67fc2110e19681d30591ac66089123ee3f579a824680f8e9f0a4ce8de5b3131054ce9078808dfa2fa32fd1f2bf7e64073360e96c45e178e30a1d543ef75a6111e2e9c0cf830fb8de773350b9c8c10509ba4bca42742bcb0fde799dd070808f9f50e675c13d7684933fab18804f6a0ef7e98e7c0bf40f2f69464daf4d2984850f818301c3d7e9b48c01b0083370f163b3b84ca76dd2a633c1fbfe047e353b35632ff0eec91930ec21e9b36d2e2a824b3ae19897107c68da11e18bd142eac168d086e7165e8a1c9a583ba64e1bdb60113aa27cecaf2777a50b344f371d30c6072fd39f00e54eef7755df298d85c3dd07cba46ec0d42e2e9cc8b8ebcc13757cb5b410ea7c29bc173b1e80b0b17b935a10cca60bdc43bf577ae094ae09ce77c3213943844c28ba8987c4570822ce1a74029e526ff3ae72137267da8c00bd08051651661c5cee2b6d81a10145ea5ce21a0343bcb8fe9147412d5ba136ef8d152e6bdbaea91ce401c449ce08c26856c02ebb1fe2fecdabc1a8e26427c37e1fadce962efd2f971de6f78b5203c6d31fcdf1505004aa8eeaa4235d64e93511e8fc43b2bc39bdc2cf97c348d08c3940efe1d153fb995705a508b9fdce3e95db38b7b5452b8de35bef41356067c83cebafbd0483837e477bce09aa15a7fc46e595ce2f19094de92fa41c70b9570e7e3f3a0204b2c48fc0458c91b5483eed23ed7d981090f88523546bb8a0d5c9813859eecb5f7c2a9804fccededd330a2db2b69901f37fed9c2913496696c1156f769f530b2014d5c2aaac6cc5fa6e6b13c619d8b9792bbd1d393f0507e7b2b2ebc0be1c9815e41d9cb7ddd36caf9f24581bff6d51c804856cd70b10827b8983f156d9d3617348bfe4ce2f5c258678f17b2b4fbcd5fdcee436d4e49cb68eff4225eab0af06d44b85b28505c7d01a762c76bd28a9fac2ca643bc0af69c1a49b4810a5d3f51ba0da64990138edd4fd63d5d6a9356c8191200ea9dc1acef5a0f096367787a5de44f6cf65b93318cb4423fbc22b48cc7ba061afd5bc09e5a5a356de9d72d70f1104bb65b14c95a2e505a4ba8a19bd9abbf0d0602460c1f3d6fda74e8f0e386d468381052eace19ffe9538fe1364ccbac1b5f317869db32533967419b889e7e8d11c675907179b9ae2c283bd933e95b6844d6d422de85c3807d407a45621b72252de57cb1d67357afbd3c6570f94b0c0e9b014165cadc213826b2e48bb56d9d0c0660a43b2e8a6ab995928dbb4cc4ce275698b1f66c5fbb861f3dbf4767ece5b38f5876bd46fafba5df375dfceec981d63a33fd9bbf5b68b330ea5f109aefd3765168de61762a2fbd898b4f489181baf00350c6c5709eac76da318427aaf260c18675c5c4523b320ac6734b78ac192e02f088a7617c14a3f5cedef370376650c0fab40d7a5a522cf235e67b6a35a5a9c4aba28cf39f2ae5ed3ae79daecbecf67437788019b5c3449683ae7e9d1278142ae41d6b93f25471b740c5f2ae7c07dc505a8de4156180fc68d8ca9bc7b4516955872ed5ae1e6b5ee0e8a2d9b0a0f4ce0891219489e266979e00207893fa08c237c3cf009f12dbb807bb73f1f9d4f2bc467b505fcf44f0f1ce5bbd49e6355002796f1fe4977d72035043aea7256ecd446ea0ac834a2e9ec8c76139cf76b4de47adba9ff4fcf58d0322d657dc465d4db87700410ea87cd4c38b5cc0a1bdd299f2ea6b82a4a5f83e06ddb51c3411fc9ceb075f48ba71da7d7f20920222424cd1b0d1faaf2bdaa770072cf9f236df4cc8157bde198e911e66fd560e7551789bdb73a14cf49e186e499cba10f2edf7ca276144f38a0f20b18d7ca04b4744d6536b0d7f78cd1d126bfcd0a8c4f1d48a63c50368d722a01d1cf4fa4e003cf1939a781dd9f46994600c30e85c7ec07adf9bfde39de33be78ba5b3fc393c32c8cfa8554b4c474db3e9be2ebfc75125881715495e1baafd4c43378f9f829f8a25c55604ffa904f3afa7f5f17dfce3fedb7023d61a43961197ad50b57dfcf5e82c73cf7e43d4ee47a7c11c243ffac9dc87d613866abf89884cab212b0598b5dac751e2d578dfb6d902f201757394c4613c2fbfb2acda7c5cf757895476811a19be20a086e15e5c975db68c284998be026404caa902a047969089e8daa9176ee3e53aa1553184c3fece799b0363d38f5b0f3ace31feecc7d72a6acfff94594870c97c10e9a2cbd85a3ed1ea77e6aaf54d50829d28e60bfd22e45b2a5c0e3af2ddcce71213b7ecfe1f64eae6ea83f4c3805a3ed4acb5df4affcf538989337ad2b5c65b9cf7f0c3b4bb4599f0690873b783d7a7fe78d5843b02d13c46613882de40ead081843dbfcc8b4567d0aaf2e025d1a4e5f4244bb8655856c3169edcff1ae10a0a80a045b7847b111a707e8ad2188fc8ff4873eec03227dea3f47a175a432aafe2acd5b30a6bdb1ba9c8d58d5f439723ac14a1061682c601bc1bac423b0a7157fabbc7541fec33a843c56fd1cdfea435f2df52d1bb262b945a87d62dfc4ce00572acd8be916ba5c6f20d19e6bbcdd7be6f0cb1d92b085b7eef84a0d1aa82d2899a68048db940c3ee0dcf8afba522fd17c8f70697e138fd3c6110ea1b60c49928f8218e03f5ec0b707817f4b3d56072473b288a177803437a7857d56b426a108f6c469c8122209fd1daaa6ba7df97eebd68d756c3e6511e5f3ad72d4836c4c8d1a64931c9208f744756361507a94926e7f2be615c83b0711afca1934ca6c176415e45bdbd6b5471a348510c94d45249e4e490852338c5cb7ea9f85c50373c86d6b9d01943d4b70c2eee407a346632071824a132c834ed826f5961c3691631a406da60a7957dfe1342f78adb8a0d708c391db6e93ed31137e9c3b27e155a1d7d4bfbbbffe167dfb02ec9963de9cc58aa32190f7b2e58e8c3a99299153f92ea3f030a5c173f55c15c25a4f489cb1367b9f8d0c31017b95eb3b6e6a048d2865066c1257176d3b0decddfb3fde2fee20215ce913f7839d4ddb0ad958e231fe85efee8fc73109163354e447f730c4503edc8e9707776d4df5ddb2e118d33e728131d8e10822bd0e33be11a7938f2565500c7f56ef5733c68271a80c8006c5e9257243f8120e1636c1b49bc54bf8ac2f82d21f04830d00524078c823ca8e64e031697d2bd718107c380b1d4d75b997ca5bb006c07e402c05fdf72a2a80b07105b551d1b8ab165c9211b3df5ad4a23d226e56a7141794e4da75759c233b1374ddf0d77ea2c576f3f949b496bf0f24179d5a5b91b5c54253f83a6269d77d6942ec98293a66042a3b5085a5ecb02820f23145567bcec6b2989f46e904f5a889dc5ca489701000894018303677a1e88d2c65fe85145db99462a0f2307c83a3f211abd33488a4f9bac7074ada1d42cb62da6dd0d2850e1d54fce1bd5b9fd73bc6a4b3cd49f4fc139057e3dbd9409ceb8364f7712fa7e4680e12aecd17534b420656392397ea984f146d3f5a10b609f37ac439948510262c83e83ec0df4eb56bbaa8b0d466b08780a01b9108bed7af5c107c7c520021cbaa1756865b2aa5a81762f35468403edda6594612b86e53baccb0d692e87f5ae3391de45eeac2eb2e2a11727d73ce12c5eca47d1455a8df38836e3d8c397bbdbc9183d628c4c8233b938d95a203cb35b30ccc1af0b3e1fdf0a7bf0623992ee689b9534bb1a512b0615da9e43ffa8da14c61da10f3c4a8286f3e221f280de4a1640e31ff29fe14aeeab6a4b6e7b45e846436693546c534280f3bf2cb97164d7ec0d6eeb661c0715b1a1b68b81c7aa8be3441653351c756e65cff3e7b396369c0dbe909d68230a70e7d2d6f8a3e588cb024a8e5df97a342bc28b9d475dd9170984adf1a17c50468c8f95d16f3a69bae285e69a264de2692423afc7feb4f4962bba9e73ad9d07cd60ef7ea7f81692b3215211dea85dae999f860acdbc877eb868ce58934bffd411968f466f6568ffd11880731f074554e76b44f22dd30c70d913b83005898e838af42b4f3996cb4afb82fcf364d5280eb8c0dc322a9bb94225e84dc6dbeabbe735a54922fd8266f53261b9e9f26dac57d4ad9543ddb3d312edcc524cad45b7c8b72c8a107083cc6f656a2717903a244edcd8b0ad6836d45ceb9a4af1d524f14a2e152dfdd1bda710809ff0498c8cb5b89a5ca90a4a2e5f565d290aeef1611230e872af956a67a26674a809beb073bac28a78de3499066624e45794bb8f703d28bf0dea1dfc0b87a9f28b5be6e2e18339e38d1fcff810ee334a799de1274a09cbbd95038b4dd7b18f58dc8485132211145e3cd7a11fbfc7666fce1e10163ba4e18d1e95e8918cba6257688c2e448082d5e486af51f79d0e177256c8d3d60346466e03a880c22d94425f18522148b64eccb3a8c5e32e80806c7642423b3b569262f18f984a177c01537696ac2bb8a30a002a9ffe7ddbfd6962c2422ae3cb965ff8910f347a9e7a7417bb6e765b79fcf794ba90fc5b8b8374cb60e0f0cba16782d3944022539b181604b210d3f115b440af336a5ce28ac4d77399f55523deae070f050334b271fd2a83955743d4972a9ad435f74d9d299947efa195f147482ff628347784199bcd1b9975a957460b9ae7d04d8d584de243acff6d70e6ab9c30f01950291f306f22d22cddcc2d9dbb044d9c92cf04aac89d4ffdb78f3c2f4c5fc9a282b60754724f73ea771cfd19755bf29ad4bac4aae54643d2f16472b54bea4c7d0decb6eaef2061628fc0f00c3bae655a7e527fe4f6602bb485c63137a5b1bd2a914db52c43b5f5573ad313a7f4eaa091a78cf3ac1d283018132d1ddf3cb357d3891473159bfd854e7edebc377ef8a9fe9ba7127c3f9a21a39b6c52b63c344a34e7a1f4f2215d31e3c6b7c38be8d559704a3c5df60bf214ba5b749db01b5b4ee35490fa265614d19edda610fdfcb28ddd4f18f05e89c18cee6042a00b9a7a62b5c6eed682c67d27ed03a64091ef473205fb3e791a06c39b246e214f3616fe3cf1922c0abe7c76f0d5f04212b4e569d66de73f05587dfd5ddc0d0a6d0ee837e4390d96493a6739e75e69356a780b99fd889d5d8a467a88482c8ebde3c158a1151947feba96d20c20d02b51deb837086899b568069c9933b154994ead3f5a60610d1017a20c684c50db3d4c04c2c633a6ac206267bb9f35bbff2becc1df7a1c193e81dedd6a2d46af6a10a71454086c77e39470f0ed45ce9363f4c8f07f59c8b0928e8e58700f7692ac95db7ec4f509499c1984f2e330a1cf2b3e97589226a77094114737e440a1a4e54bc4106ef80ebfe075808baaa83b8deffa453ef334afa615536a4dffe0c7da14228c78b02803217a154050a9988c733e48e3a22d961327a23cc35d8b810b09a4cd973262f4fb1f224a20f9af4ad2e83a9f0bfe94c51602ce9f5aafff3641210eecc39262928d2a3ecf5460386854ef0959ab4c9ef56b8010d9cef96e4fcebecc87d252d85e08d9e2ac71aca7f961307d30f89e93f103757ad93a3d4796c2b0259a3a2f37563ee16c67097bfe89d2fce9850564e1727f9bfaca6ce12955b928292137357a558ae28d18cdcc7847f4d8c483333cefaa705beaf5ef27be04d50d6e77edb39c89459acb94d701f3cccc70314b829beb7dfb741008ca9320be38649f34a1649e27af061c7154a7695c586df18218cd9cae29c6ad1ee561951f84559e5d234a60ce42dd6db132b965d74e02750f86d9cc63c50a804c7365faea09ea9b2dde36adeb622a22903587eefaceed66865afae27788ef723ea17f597e373d5035f2744746a3f7d7a86b12a2264bf767011e97ab71b748dd3fe96931bfd2666b254a07f02fe6797ced49bd440e7fb6f50e61ec98ce5fb748a4f51196db42e09f5c7f0ad640c11c047b63922a61ef671d5299f7ce6adf7127572eb2a5a05a857ebd7c0ff89f398a2432660347ac9e92e12127a841ac6594960cdad3aa6a492688c62ac92938d0f325bf4dd837a30aebd2f8a0a3326b054d0b1b953bd152465678916db76ee2ff9475f60049a2a7b36cc66efe1548ac223297289ce334ac3fda0f6fb6e9b18b4acbc57b220325a402c86e2f0d4d85eae6e9968536e064923f734ca1fca2f7d85a2df7abdaf89c890b7fc9a11a25f1141a5ca4009d09404629e11cdd99603f6461638b914ef4904879a41bd4c81c2edccc0f0b63e797641c4052a557d0a8f9f1412ca9dd91196f21cc0f031ced0b7b653ba82cf1dd1db87d7e5438ba0a8b01d4bfd862c4708af5344813ed9196b7a1266989549de7d3eae346f9347171fb1c4d75010c5b3bca2761330ecc74bd6ba26c10c026380c4d4bdb53300237a9db463ba008aa9f351d93254ef8a091032c4d4bd47c2513f0df9dae048f0fdba097ee306d4da995adeb1f75a5fa9e772497b5ecf93bb6fc2b1e30677aa4f4defaf96cbe9b2cc5f38332e1fb913024c088d7513f883c3ba12ce25982cdb172a7287b30e374398d680077dc85755a9dbb556308948596b5298a25dc8b83cdd1b9d1815f3a675ec01a330480e21d07eace2587a2331ea5f8b0f2fb992e9e8ddf6141697c11c876c9795e70908ff3edb5a32a5d8c59f2db6275b9ab5055a0b52cb24434c97e5bafdc5bb8d0d8b1fced7ce8ad08b8a746458386ec295316f1a27657e5f47e84316513683dbe2aafe0fec609105497bd8d950a8625c5be32d3145200aff665b04b54091f57a87a85ad6b06469ccbbb2a4cb33884a7e742d10ec5caee32adace34fab422a3fe269d901904e07a2793822f9021e47954cb6e3de27e2be27db8cf9f4847bb55afec3f639e36cc324e186735731dcafdf8500e31e93dda0120a9e1f1f105ac0d6369434c5a6a528ee2046d802d66ac641f999ee8615ea37ebcba837af7b70a8c0f918d600d135c49c0497c2e93219ff73cf6fcd8f508a80c3a5c0df82f4b359a6566340556304d89578ef3e2175a6a8d7e325ca0b6ab7627c993b3d20e5ecbe2b2b2323d174d4180ebdc25d5b3562d5cae9813406385a25d52c1291f41ec460429c8931154dd34d83ea72913ebf16106b0839e970a6ada2fdc3496266ff008faee5979ca7c608ba9978c2a7e6800ddd548e99b148577763bfad2d7da94f4cb33e3b61184d2a7f0df6a9bd590e2ab898924588233f9972c2f2d4ac08c5a14a909e54037d5581c8ff131b5a43ed34c023a1ab502247e205cc88d25fbf81a7941550abd7414b57393cd0335e0872ce80c06c08e21e20c4357f059ed7c39c7849bca75b9653834d4bbafd4f6defec052fc1195e3b4fdfdbe341bd4f327cd2148f8aaf517f965ff0b72a57bcedd8d6c39f82d004e18d8449cc5e2c7f2575166e4559397c262d07406f88f60b40f60ccfc6e62c63b60e220837af10f0d498e59e5bb86a582a9caae4d7fb72d20e2ee5b4548f338367bb9be8d99fccdb06a656cc511ba15f57aafd4e6a73b987ff7ef704663875df1566ab731a205a1e674f6180c15d55d828a1e59f183d8adfda5df2f3b0977494e30bc63af8c792ab537cd758c1eeee1c31d609654e4b30a1a97dbe97028212cfb0a169dc90c060555b5f368c7828ab04534ae3790a28d80f79ab1ac3659390c4251572a2d93b72babedfe6e688b164c16560b6a4af656053947e20133db98874ce7aa052030e6c1cfce4a05faff0de923e355617516317a6ad5b5864d48e4a09316301deab17de11444309a6a24a4a0d4551f0717acad32c94468af4ac20bb46db65e84aae66990a9bdf7a7aa92a108c24595c2715f2632192c1b90dd9ee8349db02d7de3940fa8187e2f410645d3b3b24cb501279e0c8f74e11daa461fc2a6f21ce52f8027266c7606fa5346392d725cc2e984b7ec92114bbe2eba0ca8e6bfe1669051445c121700fcc02d97aa6f5a0a8dd1bb7aefe463dc52a32ff5e02d3bb5902f2950e4bcb849cdcfe9892795d06cc7aa9fb1204eb6079bbe05f3c017f6ea32221c240b892cfc8b39ff0e7db2423c0a68627093a0edb118f0fc40bb30fbb9773375d1464aaf78032ae02a6032e364589d3bd0e1ba41a869c41b787b72efbb8e17f13dd92287f558b8cc2d6b97c35e3c0a0b4ba099956dc7aad66e020b4aba2e4071ff68635180e6a605d4ac7c2341fa9bcfe5ef5baf9e2ab3bbad923a88dd7acd281e27adb383003e9193632801fd88ed387bb91a2cfc6761005b1efcf95cc2f9d7098173c317105757f2640e2afc27d0918a118e444a10c100179973cabb3152df6d6c24ac07ff8250b4bb0ccd3deecb53ef6a37ff6c218a2ae51b3e14737ee09f0b8a4da3a927d1be126fe3fe92e5043e6982c136540d9afe755baed70ffe2a9cf5d7b9f880d458e573ef1119aa5a959222f097836862d080a656bc3354df39f469a25c7d3ec53d4a2d0d45f60d65f5c32a1927875de8ad7078feada7088cb8bdfe202ac857bba78a0560dce4c4e16796a0f7f3462cd8fa4525d6bc8243e72a99ecc6d7e5df7bab027aaefac980b2f91a0dfca4b87cb1e46d699182ed8961ca539e94872abd2a941304d59f3f2a2073a878327ba6043a1c1689f346815fa57d8dfadd1612f1f330b2df1db4aa79fb262ca40b499eab93c25eb57ab5dfd32435b444437aba6e2117abc85834ef3ad79660c3c4d3a29ca42ab6e4037ab093d73eefcc7482cdffd3890be68eeb7da10354785156c9495790aa759ce685f04f9146cc0f5eb59fac6ce2d48a4bf1d4a94f8de053810a840e222782eb02e97706918f3b31f9e711a2dd87155c0f4a1f4a019f6023e6dee0302c8719b61811f159db9e62303b024c4a1fa6133d4330a1e5b33d6491c8a7778bd12c45e5c8c453992a49f5bf5581e03a8b4f8f79556696ed67682dcedf4f82c4aa0b8a7232aa1107e53d3d54e3ca386494cb0888b9d82fd46d863281ccab54ae84237052562d16197d585bebb8888ada7322717e49e400c14bf981c61e35a2e58315bce8246a274747d894420eff68736b42e33ad2c2e6986e04a254e735cb5d93e11e0ef2460c54c337e88e36aec1c6d220e5feb90633c731abc4846f26bfc8ce9f03bba78126576d7a76ab2a08a1e69fc6a2c58e443fd9408ed109ca1fc06ee81d37d6865976853127c5ef4b47debe485fe0c8086f3c751b4c64379d1125713ef861086a6f33b46ea3a109cf0838f7da35ac54f48cafb4ae30fcf47e95e15ac66ff48532db45c89e59939a6ccbe08d8668ce4fc0e29150a0d8df852ec27ecf41e1b543fb601e0c433608d66da3c1acdc36276bcf672405889c5036985ee4ac7904d973c148df31e16e201f208a8373144b7e93a0adecf5c77167545e63263fa70e25df3a7b7fa73a52c38903cda1d4eb2077a629fdfac88261bd392f40370c904dff250a17248fdcbb48e9d8fc8e9fd30450621be385616dac7b6fe5acf1b810d754277fc8962c5d2f5d4a285d5738b3800d36189105cf1f3edc3f3aa214f4ad0ee80cb1f995249e377f18a3fef0380ba7ae36cb09f707f11f2d4f7cffff866f4115dcee7cc610ee60f3ac484da570ec0a928ede78d7315307579a5f48d6d667004dd8229005d3a116f12752b3ed8f9b3f0bab6563498554d46c7c6e9786bac1f1a95f468e3857750e3434a8b90f66b01f90de97b96ce7452d8850d4f320b0b6ab95439c205858c1dd4aeaa29048b228cf19688c3ab6a47293a4df1a5c1ef445cd3521a7fd4722e393f714590212038845a5255ece7483c11a7f51a36cf4ada3416b27c0c457f598174a28afece9b17dcd37eabab6bc722d93025522328df8f388e27717886396f8035d95f0c07d1a7ed96b16ab6032b5ddb234cd870cc9b4c7734b6c7978c6ac0a7f77e1e8b263d44546783d19db5f3806ffd9f229f412764f6eb936954ce324b93bf9e9d8b83ccc52ba4c686508afce14a7f1333a2282469f9b958add21e2a5af5e3584c8120cabb2163a4f8cf64e52e1e7a0d5c000b04d8480978fc14ffacd3860db99fd0b40d24490a832a5573f3d2b23b536efd0340208cf9125be2fdaea8f890bc909324a801c17292e97a194037235cb7c19ffa222bffedb38fce0f854aaa9b54e4ebef6a1f0f8e964a27a2adec67cf87867bb0e15d64e71d158be4711e7765b2d1ce7134a7d8ee376371b7c58f758bd720667eea1d87261a1bdb04386b773957e9d3fe855e4fe3f2f1c55ce1d7e90f90e973d6b8dd0f0d824dff1e7f90015befd2e18e7bb1171d8b0c0acd294f5120a49d6ba4bddd7d1564220a4dd49dba3acfec1e4f330ae7bceff37b5135a5eabb98b7a398f0552aab5152f4a4d2a074b7abf1f23ab17e8504e6b7506c3983dfe04209ea88231b7d18714afa581a3d1051c1ee1f87d5447d878e0e4084101e70030eae38c88646e1f8c9abdddd9eeb4982b16e586808b09e8387aabf0904985e12190c7f46962ee89ced6528f3a32f1cc2418947ed3abcf4b617a7cbc0d99f32d88283320c9ac42b8df71c2cfaca0244425f1f16d3f416abea233485c43fd3452d77005314ae1c2a06d79d74fc22f1581a27e37e1da90936a5e9fb450b96b9966a3c19ae5c1dbb4a99f2271fbe99c303ca011d2c564d324542738ef98c8f2eaa57a8eee9df5d69dcfbae5719041bda53e35d46c87c2b6b0eefc2ca02fcd70dc0d3c628496ac6e5ce3cc683bea9fdea2e8c606064dba72fde847a82ca00a80d299664983ff09b3338d8c7008847b713e94c01d281e0bdd5b6d9bed465ee9ddc1b65e2ae5c8b425540332cfe1514aa10ec907633eca18276e6c7c253ca80727440edf6b22100a716b63f2c9a0808ae2ec2689c302b9a888dea5dc20673991b660eebfc8d9180fe86887e0f938e7dd7918e92bd5ed5c9403925ff2ab2f8d4dc75c9829b769028807510520e5fc6622cbf2c26bd6be3377214851384fcfe56ee006680736a6610c0d97b0b7b42c0be3a9e8eb76c3d4557feb3d29b43182af380480b05cb5bf468a6e9b17b48fc8ce1bcc3d75ea925df486711827396896e4f1791f28464d2232a31dbffba9b5f99d3b6bf4714d563bac4f71beb674c3c70b9c35cd6be32833c6b5a0e7beafe4f28f7765023733a9b124ac5b55f591f61c0119b83e9cb57393d91c25befe0e4e868d6939ef09bfb7eed17a8c3dbfadcfca5f13d09a1a4977440bc353c5f2c07f46cdb172a980cad170311ebdda9a796353b8a2f5fcf31911f363efd61b533cc6b59d096a8b8dfa07187133530abe2c78222b1aea1a0ab28eda2b0f0c6efb132cb6a48ab9eed8789258f7f3214b4259df5a5e5d7fc9947d4543c6f3d5d4d9d8f1b8dab62de351d94d09b8040efa18ae03bd0f8759b2e6b076c7620a056b78f2e3e0061edbf13aae245a13f0fbba72b2a71e7a8ab2788926026037fb30bfac2d28899d2dbd979072b3c3ea5117c31ea7ac1432a0b6ce3827cabfdd77544465fd836faddc3ef2732cfbe3984a12a5560186c50d0cfcc7c8ff865456af344d7f9e86e51aa201ca81c3226ff29064bd09303d21d2566f565a7970bd7c5d529f0a29ebe47919a146b828129ad7ab619440f555d648fd22df779ad26614ec329b22828710158a1f277f68a807f08963d2d6936692d3bf087297ac7b3709719e25672ae3ec57e2213a2c5024a3ce4bcd854c1bfd8928524e38d353f895c94282cc2c1a53dfd81e005f28888806e1d742493e2e308cb290783167e9014d286a6b37af2c3e94dfa39ed23fa6bd319337383748ed027e774c5974be2af9524c8dd0003a886e41ff613805a1636f35589372fc2bf67ddbe82aac26d5d9fca16ee096ddb46b406ad2cb4ce1709c5ec868e9a41514db51544131d4d7a019a339ecae9bca6a653f3e2a34695f60191cba7bba87594e5dcc316a3c795983f604efc0e30cca71ed5f9e5c77fedd5cad4d5e8a6e0e38a5d50b2d6d600f5ff74733732dfbc2a2855c4c3f2466c1363954037076a6b9e2fd20cfa888b870508e3f8621c0b152228db0522f96dd9b952608239b461283d39655ff8b543f10a308b9e33a0b8555b5d7b122cdea431560b357c5b291ff9cc28c602ceba4cc7081bc184e42d6895e421232528f772a596edd16f1c4df6a396032192728a1940a6acb440113b23461392924b6ff688337013f217b95d077a85ab3785b85b973087f4cbc01f2bd83acbf12ab1be844ab01f97192fe25bcb74097d401aa7d0e46f0961558540245fc6e63943d15c7b8f6cf0d8cf144ebdcc961854d559e7cf5bcea30a1764b0f89284efc291d51d2013e67aa4a2327036205d1b0ff95a148048cbfba0f30f2429bc049297d34ca8c7849f5e8160f42e0cee9e7eeeffb7a2e6ea471d2cd9ba20936244a5725722f52654d737a141f117e0f30dc76d80bf4a88b44d7c79e05ed09c1ef7292a2528637aa72c5a72586925a4de647c3c3b7c44ab528581ddf2e60022d10205156bb9530260c128a1268a29e0f8850dfa437868435d62ac5f87a66b9c19ef8ca38f583ba44da59a64a202f705efc4ec90fe5238e0b5c7eae02f881f2d3d57e547254d6261c5d6f04e71b055f5ba83e237a5a2af6622ade741e262e06ee99f2fc7c95ce5c0cd01da491eede562fee04b34d32eddcf45702316b528fda26a7bd59aed3fd3ad0aba4bd85814e40b4ad4cba8707e1e736d40e09caea9fa68181e6607273d3f8ba1b23b12e49da49acd4fcaeb63fe9f8a19bac0b1a1d8560a80053fb66523c593b62921df892f2bca42f3e46d0d24320fee835e49f247fd0a72c418ed6b73fac2a2ab9817b7b48d312dbb883c120d4054753848d81f5fb202f2132c55bc3540f6a1f56420446b2accd6b8665270423694dd5e36ddb2ff5b0c9f5b9ef1dba13284b85b608e8f1c85dc9a615bde5f49cf89a80bac00200f45ace88643cb38b2d74d03665a9c94b97d9b8cb0d8437dfcce66eb79ec0c2f1a0335970e7ff38ffefbf5c5c5c405c62a60d998fb09ada175afd7cfb45ffd67173475dc2b8c4c6d004609cd3155b07fca0447c1c9c451f4e10fb78676ecc269faca246e80d16eb9dbb2b9544922edcffb35bf94483124223ade197f5fb7976ed9321736f1ec54161ebded3336548fa6ba46fa3ef16453bfc28344cb3253cb67b996beadaf40cbd47249ff741f81d4198fd32f430fe9d15349a13bc529c571c25c1680e6a85b9eb706d82f248c9a39c195a7f3b9ab0daa401ce1296827e601db90cbb9e46226da68c636ccb34233c0e7bcfdcce90aeabd76363656e015cc6992c1f97fca3ec0f4762d656eaaf9236f539419ee63402245eb2479b5d960a95a56da0709d52945ffea4413c90a6a709a9f82d3c53d07e7d125f0a21cc6fe63f8089a52e55f241fdd1307c499b37e89905afffb2cce3d3a1e071d73fe2d9f64b6b0567b1fc6b5b9f106c57e8eb34eb47da47fc0cc5c3348fb8c0770fc18c6ab32777b487717f61bad71b55b1fd0dfc4750b0026d84a827eeb7e31fc56a9fff56a1cf5a7f379e7fc747e3d20b306e3551e0672ba23b4235c3099eb0c0cfa41ac146fd0de8c9519beeb36785eb0b16e9829f8f10da6329d37b06aaaf1662c858e479d3d4ede1e3dcd6e29e0c89187b76080b8f41fce027562ac66bf58a0d6fcc1729fa9f92a75bb2965b502d8c027e7848c472e5416548ef68bb673bcb4a430ad2abc07cd12abf874d54de38a86eeb16865566310632faef97189486cfb4c58e3e4ce60b9aeb2d753b0dd56c7b42c6449174a979c8dfd5dac21f57150bbf660e1be6c0d8ab3192f79d0391c1e652081f6fff2da776b1fc6d154b42623a521113e7dc03541eb60e91edb90cd639be26be365b3801372ac944a9652850f0cf42e640f32b874567dd9eea1259f990b722414dc57e9d9da279a6f7199484d30f25643bcbcab73783693d0e09e779b524e8c9ce0869a97f0bd9fc67e92ad4a2521a8c19c5827e2fcc210ba244ef7ab1dfcda5b3c27584249160c2eab7ba776d4956e8fbeb06c05c49f6dbf00f25d213fe510c334f706e8aeffb7c366992c85c9f3ccae66c3beabe57ef42896622b592131098d443e24d189bd1192397fcb21be9a235ae2d5aa63b234c75e2590b8c18b7e05628bc711e4c735db27634ddbd7b0e4a503b0e4648a3dfab3b8de791ce279e48f71bcb8beb8af187ff37fcd1a60ac39eedcb4229aea00c1eea0c308864d961f8c4323921dc1827f1db9a8f4f44d0337c507260aca1f74db8d6975733f1ceadae11e1a19309d8b02a10b7564de8df7089c397da3efd51494f38a1649915448d1241cc73845b2424094c86096fab74ea17325891ccce0653ac011a5ae6ed5116a47859affe6b7ec04bbf12fca89ce7cade3df40d7197b330963411a0d76a3298e58fc9421edb000cbd960f7be091c6b316d1be9d121515a4c13bde2bc0fab0854194102fd3d196eedd92cdd987054e633d91fd2e0c3aec7cdaafad28eaa339e755b29f72fe7ab3aeea57a7b73acf70a5a73c8a31834c95903da764dfa0d5978057a281cd0e546ceb6019f5db5ace823e3959c7da73553aca39972f078c28d2dbab98988c6f1f5d272a0e6473264028e73a5ee889ac3dce289a8f52b2edccbea459f4a81d97642ec79b56ad8e04a304246a6eb403c8081bfef6ed88684d61cb5e4af7d94eb65f120df57b059e99eed0b442540fa552a5f7e95bbc89533453025de0018b5cbba38a372002b1277c150ea33e3770a590570112ce56988d151e77a6b282a106e52ddaf1abf5c1171376f56488f86e9b1234a138d23f2e177c3ddf7ca0bc0561d8e5f483da6e07a7a6af3643d524e135ca33441a0babf33d3d87dcb157954ea757d3c18fadf17ce79a91006eb61971053dd674fadc09a1c236a29bfe8cb4cbeb8f0e6dea45ff9fc74298fb41f9f5f496f7450ec680fbb3163b27613dc39421ab21a233b90a41ae041c04a545317d1472fd45ff3a66f38cab633e14cc19572231b0d3acf827c29501eb98ad5f3cfbb7be68981351af0db1d6a83084efe030696ba0492067391c3731515de2c8cd6d533f8fb73b6db4b26b6f47e8b238bd4efbac55718fdffdc3b2f0e7e98bafc46c47a7112c50995d38f6097a58f563680eba90ed9e96286946259f1fdf257ec15430930de5cfe4b5e49e5d5cee2f474ba16caf0929f7bb6cbe20f5610a18a8e178b8e4b74fae08854b0c00fd5959ec97982345b3f4543e7dabe546be507df4aab242da1537d88da44e6dce693b4926113ba309b22e3bac26d877378f35783ce7325396019779347040f1e1ef74f7b1b26cae1d9577c6fafe213e37b9d1a735c140bef92d7fe0f0c295cfa31ccab4b3205c8e3eecb7a4c064dee809a2ef36cc00547d4888e0f118a3881a33a2faf0dff5489ff13f370ef46314a56ac44cd789de4a3847cb49a063efb7084ded934ce63a45c46b4633da57ddbd58101c440dd48cac8efdc6eb73d153543bf819568d7d491fa8d6437df746dc063866ff4b7d082e31272d7edf8b443c1d927416020e62e4eed694ee0bea3235c91c2cb341b009963b1c85dca27a686b38ba30f5ea02652e1a00033be311a5f739022449150e619bb457aaed94c5a95a032cab4b7d7c5867425d1d3dd3e174f167a1eb89983e3d490e96b422579753feb58814e3d5448501391752e1dfe93758981cf2f7787e96e4426a5bd2f31e44dc58aa5c4565cd60bf8165a8c4fb05c3ebe45bd5bb5e96f66fd10e4605ce4e183f1159c92a4732d0205201a4c5a8055ef986043e9b81710c5863b0c804752f78de4ae865ddea828ff424ed732269cfb3f1766f93df601d135518c6b03e00b7b8ff508229bfead1bea4466e75650b9ab143ca4de95565d05b7beca2bc0d273697ba0c87e1dd28089242e238e12f8c16de02ac67b087cd8fff7024d9f992b0a4b900978542f308cb7381a54d9b8a929ccc9a6f423cf8f28aa757b2d16fca1201612a6a4a59fbba3c92d6c3d78bdbefa8cc51b4c95750041592598f277988e85915ec7e8c6b006e5f8965ef190ae004cbcd0441c2ed36d30bec93321575aa700f456ed6303e91c53edb034d542efb8bbd5536ed5ffe4eeec1c3e92b922887aba64c0af3fa1bdca70ab0741c2b85c0109f5da0d63e8d9ca5bd5700f5e2dc871b2711c9afd393ed40d46799c54faead3dadd6c1e903ae45bf6a48e7b7ceec2160e439881f70d9e1611b397e7ecf4a53022d4ffb8d01c3698b9b5cc948886f8e4359b1a6ef4f1ae42b41f62d61fbaf229c38a534c215aac9fb90c5de1f82d41e23e2353052ad159a7cb61bc7d826e53eb14d7ff1298c23f2cba58ecf7e061ab0ee3c6a3286f4e6f431294f535c2bd41bc1981b240b8d97832c0fc5d33dd91c481a3e0802fd704cc0ed50439cb9f33c9b3080a5a912c440806ae232831234c8e0dcaf58fb2ff5173af38176ad1fd7aacca35ac04feaf7c05d97dba0a5315c1fe8a58022b80acf415b917582510e48613187de324b0fc08035cdd806fa3c9535a55deb4c7f1d247c65cd0e31a151b03a3412ac2a59f54f2489a4907326a59271a99d622adc5faf6bcb642c41994f68b6eb1fb3a5b8a5da07c256463496f7f9408311b82521a4c5812cdce5bfb303c9e407fcaae06dd7fdd50d775b2dcf64c4da35ca369f04f4c5781530a38addcb2d7d214809e6c9dcb81deed4e12683ead3e3e3605329d345275eef66c71190102f7851fa4711011594287d41eca78f4987edc1ef2a6b75b36299bf2d212ebbee8fe35d3bb48a62bacd79ad2a16dc8062903707bd41bc0935626d6a1a81e17b7d2171d590f1a0bc52d60bd1218a776e82fc68d25128ef4800721132e5bfecce3ca53ff8d50e7dc80a82c1320d412b758581e6f7aaa5c3feda3d60fb9a3c4f40befdc2d639142ab6979b547c3964685e24a3cc95aaac8f9b1a533cf8ca34cdbafe0ef33854bec101c328d1aa3edf701afbb4f8429ac9609f65a35f2d3f77488535fd56be961c5dc234768279972f3a35d617787587968af2a33612a159b92a493f7078d04287fe791957f373fcf2bd0565c374191d93cfe97068bd82f189f231517c37184ee299dcd35f836f0b9d2f0dc8c01dd3cdcf9cb619ededc321c0ff8f688f0e61f417de6033537a3709caf9aacf8f540901ea0157a25d57002c447b76101fa80910f424403eee5a16970bb9aa1d6d81ab789877d734f0ec00c9ca8ed37eca51fc33cd336f3f7702c61b8cf038a8bd368eac32dc760ff3b6520f0834b9d8fe82d1e992326d4f0c9beb49b6d85fe123074bb15abc3d3f024296d75d1689d4be69f5957244a72ccaa9adf9f6edb6bd4d0a54d2f077f775231cef280e35fb8b52f1a44c4c93866479004e2cc079af07621c528296a001ff6d27af7ee1f4f25889f069aa9bae60273354bf9d04ffedaebb7dfb9c71eb70e003134d5317fb283be3ab03db9ad991bd869bfa0bdb7283eaf04bf74d790cab0a137c6fd3ae7fd88b58e3e438a355e6cb630b781c056b60de0eae38078eb1672b166181907af1b8e5d06a995b6dbda73798d8b98db0ab06e5cafafa6bdd68fd7a1490ccd8e309e01a99c6e001475bc9f90e06e5f4aa2ddb8a63eb21811e4c444a35c99f49ce28317e19f855a17ae075f7a0597641ee6aa7d19371ab15cbfc28d187127a45b06199bc99ccf4455d4189be2b95af2c095237f4e30d929a5f06026cacc11255fa00a8236c62fe3c1974390b76f3e4a0bbd7899b89e4e7a50d76c2283c5434331b755312610e66ee8e79e6e03e09e7a5f5cba4c281ae403156323240cddc08f0b4020b0796cbad4111699e0d06b3a978fb749c7fa6d5f0c6a5778966535e79a11029b00a186b4a8b50c0b25769810aae0259d59fa14de0b31bfc6d4e238bbb39a1ebcb61f803317199e2afff8dbdc91523dda2b72f906d121f653d0d705f1cebfea3f146d52a81cddd40d03a63850a23780f5eb0924fdd49bb044922c009d5a085f50f739c20aed1291aeb2c44fc4f5531e9e902e3b5bbb3066371e95166bf34ab8a9a38f7f05c56990bb92f467cb3c555dcbd6e8310bb62eaef5d848a4d7689e8c9b0f6d806d7aea1e1b58c11ca6f24c0805ec483aa409c16efbff6319c06b7c69a4e06d6d2adf56e650ac30c15fa85a8d2f7bb243a4badaf6100efa0586f98fc5c325ed84eff50cdc79b75397a1972351dfd312bfc917948afb22e4243f46262ef70586d72be3685bdab5c4142f4f74f477dd00905f5927ee84f2535d14f8b2a5ef6e2b450310a374dffaf2f172e58b70eb10490b76d74f8f6d78695e789b5b2ede9323ce29a5e8d96c176a614ac1bc5c246e217ec8966be14f7c390921ad77ebfe03de48545aa949dea739df23ba9093e9e46ba5f3e19b8cb60ad9ab2a8c13fd53c9894852e7c2d99e207f208a62aa7591488fb3c458e0a59248f943b322210eb537a1626846bb3c617ce4ef72d58ecd2e3d552d7f41eb9811cdabff1e7a765fb1215e504b95af1affa912590d411fd9a68afc0d7c90690ebfd534ae91ab263ebe70fed9064d3bf8876d851d975e18ec3c63623648a3875468b7100a58892186a6e23606b13de26726e8042414e1b4e0ce666d6660f16064986f7534762d3c5d9cf7dd30dff7ed9c4ee1932e7451458b53555a9d8def20888e14aeeea1947bf3ddc99664f92903cf6d545dd78566bdf0afc3d878ae8afde5028680a1cbfc0703d02a4749fbc9fefdbdc94750e279ed71dce4b74e66882c9302e2423554d7f57cedb9e2b53c14e018c67d8f02aff651ef5665f8a1b0c829364e70c5ccce8b33ea8910b806c1ac28b9816a6372032c8186e4f23320e2b7f2ab816a4d2edb866eaccab45aa3cafe91e4cb684ddd68d4a1863edfbb97f74709513942c49f1bb440b3c33f27beaf7bc092df75c1dded982837bd4595b04ccc08cf45f8059da3a3f76960d59784516a8742656cd36e674c24b51345620ecfea70c6c0bfa92fb4b46d4614a918699dff94e4f6085ff9eb9f6496c94d1a7d989674c0909748406d0a032a739e816e5279c65c19819244ea7fa16bd5839a8bd246b142704449717c77128753364d84d8d171d8638729d6cd395a2d6d14a94603d960b8ecedbbb3f8edfec11879bacfdb0597e57e303ea4f224bee01f31d18fcb4ac962ed6774d6cdd814768c9aa8b083d09d1f3986153dbc5b68418aee983bbe123adc073ace7d212192794a26c4ca17f30832976baf39523d41cc8e012b38010e4b5867f35db08dc69d27306d87ab24205e3fbec39f550683b11bc28cec3dda2aa8e1fd8386be26e27eddf4921bab273cdd622681b04d27ca4046eb3d1f844394adae953aceb2b6a244e676c56f66d00a709c10f6661e1b9ff40827a72f2fbef79f8dc86532fcc11de909e9a74defb589353da96c2c44edf150f039948ab941f6d9950a70783fb7f82060d44736525f095dd96b04686868a1fdd9cc21fd76676447900f818e4755d25dc6a01153a6fcbf4df7bb99be21fb77262accac2a3b4625ae512e99523795121b23266f129b25eb0d8552a1c816c017bb9fba783e861f08f9e0283cc3b4b1f1ce00198afcc34fb72a8c0d93467326554b3d3e5b0ed4b1760bba408bdb42989b8bb00f753a57440cfae77146c195b97381638962212e1818e09f9387480504c5cf68d819e9135e5c3fad486bd20877e43892a25c49d84ea15d6c37101b44e984dd4ec8213f1eaae7bf8377d2eea3f955af20e7c985b6e4fe530d3795663ca58517739f71d9691faae6552133c08c417a7f8b257f98ba33855dc0697ecabdbb523f37fc9f4447db5e430852f83fe23f4f9488b82550ef09531007b9ccce8f675e5152cb47940db1f0319b6d7921ad9dbeaddaae6ac241c1317f476829aa1cf26422836074dcdd073928d98fa74c8f180cf4b7e7745d239476e82d65230d3c4a3a0125ac703fa96ecf52d2d447f3220ef5c5de64d03b8f8249b25bf4f75ae842d193e1ca8967e10bf726a2fe6950b889747718b29fb3a51ecb77ada809d85b1425aa9c13e4a61ff48177239bb8b183c0b1a71527025143c411110fc0103676bc37a4f97702204d1234d91f6a4b89c7dddb5c398d97347d7910ff3ecf2426d948e31aac29178b5ecc020fde0504a43e0288479b831814567f1f5f8ba616e046b529d43144b99799154714d063029888d32348ff434f3f98eff79bad93ba636dd2bfb67a7227ba7ea165f16404c32a071d5264d67043b9112f976dfea9a2d99dc2276467d1fff3864846bcd5a4386098683f0e8efb16d4f672013a2546b207d13441dc893203eeba8f9ebd1a96d24e295d49422c4bb6b3960014f6fbcfc4e4dae01783036e425905142628119d7e6eaa6719e74816ffebfef5571ce2b510a9a0f7c042dd9f0bde831fa40190198edf3d51f84dd5e5c4653e7d54a2dbc5e94905f500be7f0c5438219e9f6062ca22cad0f25619aa710bd57736a6b295e88872db3d22aca43133d05d4115148d565ca8f05e2b48138a4a2ffc9d1706a8d8661b624b1ce7499f4c3720d9d1eee5a1cc28631cdd2dbe5375e5867ead61457ff67fc1478f46729a6174c2d5dd5b2d0dbe18288fc454763b72b95593f2bfdfe35c981d4162853b9cf71ad3264023191b56e6fea930d409732efef0e9f7ae3addd48f356a450f3eceea1a7fe6d4f9e5ee3635c4fe5cc48c475a0a279d568e8265bc8f693b9090b3c19420417d2a361c8985799592d54c3ef08353a40d4ca7c07b6c2d52ea103655b4cd0df8ee9df6af87bcf437c755f2f1b21e6c542ffba02af010b5cea6748f4ab647b10c983a55bc808a3d631191e5f2a4202d700ee1367b995a572203cef81afc3dc7f961a76f5f3ff7ec7e4207316a064fed094e76d1b05c9fed99c4a774b98098bbaa760d4ee6db60f08f1016dea430e393ba8021f4383ec989b9970d4b903757a460af777eb75456e5e528eee51061deefc4f62d628dc2191359daf4eed89942a5af8297cc8f9a9be678a0cf5ac30bad1de80b0c8cbdc270396d7daff768c403470da7c2c678d5635788d742a1ef3f4e7d1a68a7ea77963dbfa787734f7d7c8ed8e697ec58530d7433403c0e70b7884e5b85c411aaebf93e84748be8d8a2d249e4b373caf2b681e9c1bf1736b63f553047509cf17166423c120a205c1301fa357bf338b516fb2025380bb84f4ab73ea08d3b105c9b1bee1760bde503f2ac6f25386c6bb459deb4f4d5bb74795ad5b1c9bf498d42db6e2d52a66669a0e0d81a8ffee0ad61835c8b28c2cebed82ef3086eda351e5e11aed8d71257782a13060b8865f158bc58631435dd8962cd286a5db7a9b3a3e417e7ec179cf0e41bb19ed2bc8327bfcdc62f1e18b6bd2adaa8d497b6cd71c996f3daf554a4465f250c97e9ce1005a12f3da038a2f784c0b9625b65b2236287cea322691445f0fec92afe8c7575543381214f92b9be44caa2ed0a6703eefac1bff58fa85743964bff7925d737bdcda5729a9e6a1c5c7e1675f7fd0de7f8f3bf100005f1be7f1342e637515ab53a9958ca1b22a9f5420a035a7ae8b1080996d09d5c2e2ab18d1165d343d206b5d5c9fe2885e10ff4907a2d29c2511b75565f426cd04dc3676141d85f2146d125f1f583b48937ba9d67cd2419250509518c36f2d8523eba677311172b91a9e9371e81167c510a3efa2c5a664dd9c2ef74fa75bfb16a837cd2627e9bc4b5cc561c403a4f7603b9726adfebd02e178bd3ce4c166fe5589c0b80b4443b822b4944bd387415b6502e6e32867f480b2b04b7ca525e76f1bb06f681bbbbc1d863da42978a59501e99e70c4c6995f23317cbb1dc9568e6898624144946df58d3febe728f8fab6351e7f8dc86eaecb9beb9914e6a8186ceea050b96e126fa91830cea61e23fcba11964647529f544772cd8a25d802b34d44248bc9d10ce8c2e26ca0ad6398ae9cb7e560ae68309ab5238326d016ab774dd2c5c4c17304bea304e15bf437be8eb2a055f1cd72ab9905a37150da18416eb6c915e898f4e67f92a0224c9233835a4fd9dc003d852c5512a2c2d3a49ce36a0d05efd4eece4fe2b94e7f698a0ed352e0cedff57d8444c86ce3ab94ecbbcbb1eafe0847c6e09b2691e1e872457aca5bd6aeab978de96874a56461a9ab3b13160b2d38d2fdd7c59909c87a47eacb7aae32a1528dcd70b0a0b526bdeb55b16adbb4df566551e4fb930df33cf6872efc2347acd7219e9a88f36df61f4abd14f95c6c88331bb160376c55bbfd12c0cc9819d0385c02a0541ffd63fd9947037a71f977c0a682247d4a6811b46deccd2d3980322d8eb0a5891c878f2c331eb5ae42e9e821779f4eff03bf7eac7a05a22838753035ae779291b78cf0780d0f9143a13433734ec03059aa02d691a136105a1bf6342ed89b3bd7d592af90c465df9f1d1dbe008d93704b38521c7ffbe701eb6175c738a36ac56c4533a5bd390dd8d0856842a4fd843778723127afa640e3b929b38c3dd91c5cabb012c2eb29a41468f4584234f401669b2b099c8a15c6bbfc3d0132d04949c07c3b372610541a307a90f78fe339c016f3530a49190e438c1a16f4d2b523d2342c8884772c1bc6cf29a5d89fc6212ec60b30329507041a163f133baab3a19913ce161a31a2fde722869a986a4bc59fa20313fa5bd2c35e534df3abcd174dec866a8e58bd5bc2cdcf7f7e79008248c073fb3de7896fde9b9848d7b3c70605ab806bdbe0e46d57d223616cd1af6e350d6612f6fe77b3ba0a7b759e3c83e800333e72721920362275093d9054de76ce0966bbb2b95f26552c0dadd705ab3f5ed419d09e0b02dd83672b482fc51c94f9a5e9b1804d44dc946e16f823a4a7d03551b765b73fc5eb5b0212d5d5d86aaede7d76abde4a21741df438a8e0369e4fa4cd28526953ae523fce6d5b1aa4267f1ddc1a2f879f2f0da680d0f317331bf9b20fe5ccd00ce52c05c3d08f2503986a7b362f241d680b26d766598b3100db38874c95d0270621644d59ca5c8fc86e7ed9ed40ce607de43c9f238d77fe161b71ae7657c8628b3ab9b0d2a420c5765c8895cb66549adb90a84a9a60579c3cc7c51e2afe535fbad9f76d9c4b26b611c49427e1400237c6537261aa4aff5b9f631f96036947acb3f36d2da909b4bb2080f374e7c409d8382eb9ed0ffe68fae55b0819f0d8224642d906c24a1264ed5ca9ae601c7c955de6d6dca25a554b5fa0f8cfd6ae47a9dd1758b260f39a39b86b1fbb4f01eb55651454de516635169711b3a6417791758fea707fd15ba0b35c7a7d07c3ecbafffeafa8c07f5a83cb174400c04789b812a830c0763aafbb638b4f1c7cf2342b8a01c88ddc8904af34759078c62812c0469add04d7a999c07e19247595ca76fb869a57c83f45b79950f47aedee606bb1995fa2046b3128e06bf55dd9d8f83c453c55561f28b7d8348fe273f6029e5b2850537d637f368a6ad8d9f4e35c9568a6743ced011e1ee177b33ff65cdfcf2d7779196e424c6dbc0f01daca5c00f5bfddba721e9f1673aea723d4ea7a1e41e18b08ac90ed9495224634f2c8a6dfb90233a084a60e04bebc7708afc42e370996539fb49c82a9654a0ab36b801e63904404d13c9b88bab5ded584b9cb54cc5d2e8b0e7df897e7aa2b011a9370116f49a99014905f41dc14869ffb2ebf35d0a0e55d2480c3ed800fb33e4ca1b94942d02698241426f8ec13f665206513ae20724f63d17a7467ecb25f6ca6889160927c13fbba45403598a1c409dd604568f04e2c955c048a84bb3e479b598c529758ff5ede965cc0d58373d4b97ab76b9f48334bf6321befd9428e999c04591d8c53d02a33e8aea2a7a83281d1f199772c41e7e72c7f1a4885f1ed4cff2652f913583d03d013e4489908df38d157831e238c185d4e220ed64ebc8a40aa94d75849d99949710635e7ad2cf9dd9db5ea48299779d02a24fbd3b4d3aea616c7c52199fed1da3373122cd10a65151d5fc8803a86964f144b332f1835be77aea6b1abef10c268ba4cb6d7fcf362b0d5db4aec1477c3dad0d98799f6aa46ff2f4c431774e8cc174ce79eb19ed5a63a330122e2765203676182b40596af70f3f43d426ad9474573e2194f98d723863d28ad97bbcb66a4e0e905fa32e38976943ab0ec2c14fa728c18d0b73660234af09b448e43f71ec1e976d4107882a858a968bf07d7f2ad1099331e6f5cd32f71c237cef693ca0c36490e09bb559f3d753a7eed3c60e3727f6ce172eda32be6de5f801c46d7bc918b3f7d8dca8d5f9881b58fb63c85aea544c4c24aea543fb4ed443bb8f15870cc61462e409ede7d42c308a5a97fb8b03b4cfc242b448f32c55e1570eb67a226a3f48ce50a83fe14cb4c7c2515c478589f2df1360981a0797d36cdcfeab54ddd823b8edd7758a1710867161fd48b23235bb9dfddc39f500046cc73c13229843c0e0bfb2bfbce872ca210cc5805a59dac6cd76ee76abb742b67fcba584aa0c2f8725eb42454d55cdb8787d4259e22021a1997de329b744c5adfbc6323d9892be8a9102f18c5dcfcb46fa8c2ba36a6d79ed9f97d7fd3781a08d082df1cb42a28a1c596ce7c2674b00027e8b491682b124e37f19f9380bbb47d12d3cc417659b5e83948dd4a4796c2e2a4fb988228216eee6c0c096c62155bbfc34e217b868f5b6c22ab97b96d24c069e847d5dfbead1f5b452897c934adabc67e2e97037b8ec5220e24f3d446c51da870101724ce68db450154b2ec0bcc427d5fb5cd0183611ce71e9a007b3d1e1d69a6ab88009c5c305e420f49b81904c74321d259e3462cbbde48188c2ed3d47bb26f7533564399c66b0a9e4d4b330f8355c91bbfb5913a2672a32f133b56e41a6bc97c292eaeba5951a71f3702988709e0e9d5db86e0e768309a6bb8b57fd7e8ce8a09a19237b2b3030e963f9ccd91846c9c900c3c4f3b65db4ca49164361f4edde43d158c3dccb903aaf585ba0caade2f709a3faf60424086f6091b985ac095092794e8569708eb023cab21d4aeca4f87c499a06a296bfc1289ee2e1e2782fa8ae13734e0116290cafa524e6108775cccfd3b9487b7bcd6bd54b9986a2a42fc5ca87874eac056e295b8014b775ec38af2576035092545038cc9d142bcd9af1d7cbc03141521d5ddf047a257c3c54201cc77d8d5869c2fe178ee0893226d6feba3fcf674ad2482ef074fd8ea0d95a17bd0c1d5f7574f56e7c9966bf4111a4f8e7545c74597cfdfed71e8659789847675d26cf8d544e4f23e17d4d5ccb86d9fbeb3e821da84ff456b616fe190eea7a128a2828874ac62592fea938833e632b400c6dabccd71cd81411b89ea7c79169887e9db58a894e5ca6402b6cfbb04c14c068658ba53066d82565f2c1e79565e1173e23315a15983a09901fa27d5e2597b968a8798e0ae796cceb64e125b72c0d67fa02cba65b0db455266deea1b9801650a6ec0e4e5bfa9d0ed01e2a20bfc9a5a7eef44fc1d2daad14540fb7851c4a5fdbb6fe3bfbf7c13aa70549d56040c53cf7538344bceebf151ac298cea6f534251c62b8ec16f1405f222b8f69a859f921b5cf4d42d5daa4b4ca20872c286a5408c9534f523bf0dfffffc42035a96c51864ef1659cce4831002403ee24c34ff84cfb485caddb5649f3988dd209605640e2be2a0703db213a3f550be6967528edf8bd9b62a26f3e1c341a57de4c88743e11aa7566e94df77cc4ce764b9d651daecdb5720c6aee1e7ae87642f15e0de8d5e0b88a95ec017c6360aed8f77ea98e0ce3b08302e91093057ff7a739b471c03712a2b2c618f65611f13b42378c2fbe94be8d1f398d8a3a6569fe270476402a1bff5b3c5afb6a5d5c9b7d0df126ed6499b2582fafbc9a72791271dfe6e121e8661c30f4c056d20dfa5358e5b425c179ddd3dda226879a7b27d43057d28fbe7b31d055c668fd49a029344d9017a632f73e4e2b0e614f1309d54331c443159e732ae1c689cd1c77d870fd0291fe06b03b561b36131c60a9e46adb178d8213018d01940b21384736032b48c6db502c4053d224e65d62c4a9d3d31192f25dd113363dd811cab1ac459668376a3593a0405f925ac248697710558cb460826729a0eab56262dc7c42ab3b6ea4c48bbedea48635cd2fb11ec703133f531567bf72e6bb6e22b3120c21d6338b0613a1b699a5a4432ac636bc9e6faabfc91a8722653256f8f20dac32d38c99f92e3446f71b696b0d5f3fb29af18ce316947ac50e313f49cc992a691be1fef3643502124d08b365b29c9194fac806e0624db3caf1b46dd82a7d51a642561de5d49623ad204d2658aaeea7d89e8cfd07bcbc5635b9aea930f7817ea4ae0814250c7f02232a1bc0d6fbb09172139548d62ffb154862822ff00539aa2a0c45f50c2dc6c228d9cf88159af5adcd98b5ddfbf52116830f945294a510607525277064446ba499949d303b68a3b5c799b4a279c8db2f4271d3c856f10bfae43566b5c97970e62f570626b27284e840b96b22458a2a49b05e58a70292fdba2c5ba4e40d4774619935e2e2134dac6d05927e60bdb1e758f70a630bb42c7a0a1bc1cf396e7726f8892c2dfeabd88318a9359fc11e6a6489a197895abd9441d45566ffce861bd286fab168372313ca626d52759d76d8f2230d3ee5a3a68a4ce0146d07ea1468eb4d9beffd0cea27a2ba44df74b879e5dcdd55a41d730cee169f6f71c43436a30a5236a25d886d01a35fea732168aa8a9f57ca45d4fca1c5104b26d899501e9035032db6eaa18be7dcdab55c0acdb8a081f24028446a01128eee1a9d38159cdc5853a0d2883fa1de7dad97b347e0515c19b9a626953e40936255a3fc0584bb77cf3c922132c4ac6af8229633bb6a95bfc8f08b31b4447e1ee2ebd6f85472748897b8dbfb210266d868b1ec155d50272cc522c1f8ac85fce532e5fcd7262ae31b9526e839760a96dfac696f308bedaf76c8bfb23ee986dc8ab99def0cfeef4e376e5230bad9dc2ad5125e818c7987c6dedc58c64205f7dba5a3e6be4965af6be6619dc3c2ff0e7428653abedf7c6c1f857b9cb05bf2c601737da4ec861e06e497c023a3f523b4f8c647dcc17fd8659f0d4b6f5a7de48a6f91d807c83d76c9a881ea02bcc1a34e57a6ba6ce73f6524523b1ad15ad474cec8aa267d5d03747ea7fa81e43c178bc91bb1228762fc3d94c0b2b1e6e80e408dc828ddecbae1272361b4c0dff6398ef82c4f080f27d0067168765712381d1fb20ee8a732dfb1203f5e1c17036aecd44f3445824d8596c733e723a6a5c706fa6233e087b5c24a80370a978928d4b46bbd8841642c59f2e9fc9c2bcbd84fa470b96f897db711d24e469762f3c2afe21b57809c483919ba789c950f05921c9f5fba0cac636d4ad85c93e8ae893a0e2967eea78d8578ebbfdc61bfe62bd039c3e7552f22ee494030a8f5c6c8448ff33b2c4d36a78ead7cc7a8df6137d862f40b1306464c2ed3b8e8e468ecd3cdcd3a7e2ebf90077961904f3eacf12becf72687e8b7d91c9a4e0347e0e7e33adc369ba05d914eb459364e4b4f257c6d3548d10ff31dadfdd9314992b3b363f80b2dc1c9d6bcf3e6c5d6e6ba701803c5a192f9f207afe23589e6c3f9ab8b2364fbd1689c01a8150d412b7d66c342945c71b33189fb448d9419f6168be29cc0a08a62b4c2d51b01bbc53edd497043b89304c8f4f1f6ac4848451372660d0e7769473eea287aa2ba90d381db102176cb093175f4fef2dbb8c1023ac90b9a2030c3e7118259ab26c335efc1a725ff40b90b02a20b0435e4ac3bf307d984ecebbc235b8eee59eb778b13c36fb66239946240769e969480571df1a1936fdbfc4784b7066f4c99fcce67120254236c70ad89248d88ef7020c215c09928cd66dccf121a08ddb4ad120760ac3970dafba81ddbf6967542861179f43239cadc268e2a202943d20b82e00635630558ad254cfb6eeef2b621c236438dc4b00e0b54c84a000e6e040821114148b8cfd0d5471c35dfd0c10a6183dbf8899c425d63522837736364faf46580a68987f8b506f2f28932135ecba4e0551babfe1743c24b4093367e1ea6513834b14b6acba6f704fdfafb553cb6b6d4338d395e65f661168a45fb260f0f4b7641686c354837bccc0e7e2566070d4eb0a83fbbddf45dc14160caca21b6a9236e182483d879d0d2cecb07bf3ce600dd92ef6e8783301933426e88c9c0aeea92abec9117e4141326505650fced006dde3d47cd56280f46bc3a30cc595e90f2da297dc326f36fb18a717ff7686a7041d286b903e9b250035ddabcd1b2b85f020d55653ec30fcc31ea297dbfbfaca95e9cb0d4962f420f59ce25607b8aa4da8126599a9118cc6f54cdd21f3ac36df332c300688b7e6faefd1a1de5ff461bdfeb4d7e93943734d1974c8d889fe868938fae3ea57b9e4ba0d35212fc3341bd533ea26a44f13565c2ed8ed5c2bf3b0ec9d6b268c288b7870acc10e33b236b4bc65a306f17744fe1fe7258ec553c20d018ae3110aaea735c5c6d3487e94bc9c35b059f8591a858c55ebc7e217ef148ae247338295d427fe6e70fef51ddb3feec4c366b69a9d054e9c668db7c47c01be0ab5fc782f2764f5ec4089b37a855941fb0b6ab01b5f2b5a6f850ccad9a1108db7957bef8365d989578c30d4f9315b3d2d7f1f0597c6644c0921287e9d9c3cde745fb964e456140c504662075afadb597312afa464fcb93ce58fa0a58ae9f7d7e376ab298fa871cad1fa894abf9cb7eaba9909ecd25d96de8b7351c06b32f2123b3ddff8b79bbf8fa2c2b78cb2ac390f8b406cbd20faef56b9d89c684fa0971820a533fc5fd2bd99eda6d123395ac33d4c9e83c64a0a61d5befac1a064ffd0447bb9d08b3c2ffdf2f17000156488f07e30773d7588e245ef3e111c3fa9283aab36978252ccd3e607564d145e76f5ef732071d203c7068531710c3da157b6e1d6060ea780f3d9dfe00671d70bdc0717e2875b330f8427b37c42137f20d6386c72c30e0be4fdbb68cb5de76332ec5bdba2f1ba5e41a7084e2d2e01279aa34d3a5ff1bea324d02c00dd402883910a4ff3cf9968cc5e10d3be310865de1cd5248a930a628d0935d5f12372407357e0e7801cb4d284285e844a1f2737d59704524bbf589bc0b7d7b7eb0c10d52c3cbba014af772f5fad2b7a4750f2bba4fd4526d8e7ff43a13ab9a294b87c569702dea87442732bf3e18e7fdf9a56e90f5ef8379efa573b10f0512272c4173dedc2b149e7ec1fd899e770da5115a38e48ebe9fcdb8228d3a8bcd22d2684d5a713a32e9f61cbc057f8f92c3c3a251b54bdd00587e9b899ec306b6d26f372298b7a782811526b94dcdcd84070ff4ec78ab54daadb79ee348fec3ae370842c625dc444f6aee03e0bdad0b0d7ad5616d5c33058885644bdc305bb696bb7368efce5efa778a4c52e2ee5b7496735e8e40703d1c5581a774a6c9567d82d4fc2cf358b82289e0519d3f7123a99cfcb1deb85f9374088dad736865cd9126b672e8d8d4bf3498f705b667ef3c9e616be592c017087e0459aa9381e0520d9216843edff5ed750fc8e9a9aa48690928e9f022381e8f658cb92e597bf446d5fd15e891fa3cc23b1b201c61e2f948cb4e93a9997a19cbc745defcee17ad181c7d6127af65f9f0a2802ba36f4a0d84d8aed3d94972ae4e5c65dae69cc3cdc69a2103d7a70ad6e3698810213ad7d347cb750cb737bcde8335946898c73596c8a133b9c7ac26b9140d44089bcd3e525c88850c346fdeff740ce0248bcf3332583af2c1d5504571e44db7f8dcd92e2d658518dcad1ab5e3e9f79ecbbabd5b5c63fb4f86ee63afcdc3cfc1e4d3f04c2c93c1adebae202fa1629e837324f5f42f832f26fdac38c3484a9c5ae3101459b75d50f751487017f792c349e3ec9d44ec2e3ad27049dfa3bee8edc5eb4935d202c03643e20ea82505faa282d59a9e364f4f4064e0ecf61298c82bcd9dec4761278151f1b4c8f47540dac8be1b87cd7abcf87d8ddd626c5e31a872ed32ed498962db04c80851e99608d48dc1aeb47ae8892265b482f32dfef4f0f3680ce75ba3ca1de4fba5df70c8b56969375a42b017a09687cdc526d8a28dfa7e4879ca8ae71052a5a37b70c692b313602caf3d115247080a56aa44114ae581d2c025f4d4136daf384be074c3a9af654374704bc1bc7b6ccb2d3f4c4cb2782720ba49b8343f66a0ac38489162cc2a77a62e9bd603cff2d41fff06a8e52ba7e3707bee008c99324250e02e72e470029c470afd641576808271414622548113e89a4dcc4ea4cb32bd0ecdf3716c6f5cd4427ba52426c6eab8178f657782d9914012a4467f1eff6377c75108f0bd36ecf4a68a8eeb05f499fbc73de4292d4cdc3f1dd14485161ec28a57646b3f783cb3ee3b17bdc287125ff5c130103cc5ba039520bcb2c4ca8f4ccfe8f3dbb9f118fa3481febc263fdaf40c2759f0016b78f7f1368221793e4c46f637c5ff71573d81864961bbc1b528c3cbc4f798f8b7bc3df7e80a3fab6a1882701b8c75ca54833f4128e9c0fa147b471583e71c1ae1474f5db8cf791b5057c82150df885731dd583e69c3043240ee1942b12f9844bd85e9d389216708cf47cdc1f0fe8497b18dd60b4a189f62dd3f9bb0a69eba9256661af1924c7a2e15179548845e6ac4d688cc90827f3ee9b5634d264d966ac08f508f668f664b8dcac2724cd758d25f645542c0ecae199affcaf581cec5d5da1cd65b3c0518f3fe45f7db5f1990ea46c0cbbd8c322658254f5b76169ea4edb24117c5db65471c28bc8200c1e60c7573e17a2ea8c93c1bf979888414bb54da12df71b49dcfe10e9f17f46c3b92cfe350d4065d4dd739f8be8d3865875eec01f6376447e159e31354d5d0657915dd53e2cb02a19e9e20cdea7d7b398adb48ec0f552f64259f58aea1f20661de365f377483a3bdccdfbf87af74961c6201696c08ba6febdb816e5739841c541c50758d5e3ef49ed1885210884e3d16965e8c5339a24e72671555448fd02b54519ba69cc700337ad6e603acb2c9faec827aa800af401a23daa1d237aa6f3ccf521e4144d960b62d56e3425527ea17ab8779fc12282cc17156bba18bb01bbb908f864b84cd8a6350bc24bff40be03a3973cd1e906cf3aaee78981c38449ae547afb46bcc07c2b4d586c405098c2a11625fe1d07fb8d9d9cd8e87ff19e39e3f8abeb32fda4e5992bbe8cf4172e5c89a63e79e307f12dfe01a5fd86a9c2b898e1d9b2661da6856895ac8656dd61a850f6e8c9685036a77ba0c978509f6176279453db4b10ad6d5804791a2d5ac0ca9dba6efaace5ddcba7d52155d65f824044c04cf8093bccff544ef491e6fec9cbcdf02bd002d909101c24a19e12f99b427eaae82cebca3281384e9a0c5e6d882d0f71a9e1b0612546b85bdd0ba5283cd8b0ea34474a2735ebbc268ccf27007cb8b6eb66c9efa7a41fd0571278ca039f79709b198ee39b616050194de5915092c37bcf7bf95299156151a424e5e3deb97f71a6282ea456d54a054afebfe19690bbc25f692b96ceddedc1fcc92639e5c929261df80b24ebdd9b72bd29463d8b57eeaee35f206cd5d8afec2c993d888d36e951388b828b867394d37ac4a6a4cd4781a36430deb265e2063a85e7c8245657568a217c694940c89fbbb0d14374dc883abacce4ae8332bae1111b71c6d42c058f13f4c7afc20558305dddead313fd8e3737cf5eec8b7f6fcc3d6f581fc676b3250cb804787353cf7b1ef18a6a6826f3cb74385783f011c6aeff575cde7b282268a52c50f2077a24f55166677d3b1bcc25bc6078ac296abef1aeee444de73ab51f5c317505d02348dbab35fc25c9aa7b4786ba66e4e9910d97479e0fef53711f86791d7edee43fa30a2b547dc1dc6c9777d3e89dc7608e9b65a6b14157ced902a9af0b4dd353e0d6c61e09a844991af1fad170135d721aa960f258ae0f897ea8307c95d4d9c6823070c518c9884ea2c8d04340a146425da47b4711b84972c991f7e2b3b9d54aeb2b3468ea8d078857160033e6182ff1af40c800ae585d6ebc73fa9ddab8edfb9c99d47f57733078099c51b61ed5cc1f5bc0c200a25462174ea3facd80a239e15ba8527c6c440b6178d9875a8e4132c36c068478628a5d57814d66398f88af24b8414fdd3903c09a8a61d7c7a2f452a90fbd6e273cc20e71551ec7955e09ca99db253b7e12e491ea963c8288104938b76e3e925735cfe19742409277c3f66b8a9cac48f87a1dfe4dba85220e0b709067536e2e990d3b1395e14b228d8dbe0159b7b49f4cfae48b0ecacdf4da1983d8dd7c99d513dcc36da4e00e712590dbc1a2e30d63c475f16e9600172cf56c84b6f188c04a31eaac0792e7d9dcb046e8a2a0518d23488c33aebf180b83b2a23dacd5f849c287500d39a7591ab04d121f3baa5292f1b3a6ec4e5906fb0ffb352251db56665e16daf3af6d8156b0e022dad8cd30d80d5bc9fd272e23c43586224ba109a801c7d11ecaf3f25f95d280d14ec65372d19277f62b820d58a6f78a08941a71616f4b3688557fbca5ab22feb37440b8c90c6ccf320d75a1314345327a3d4f8b9ea76e5689a7ed49565e29f3916288232cb0a15d2af638e6be89a8210cae64c6acfbbe44f071152f6c67ba0a62283f52430b7de201e11e09207b9e8d8949cec9c46ca93d2f5f2d08f512ff64906a80ee90daaa1b804851e62c34f1f839c33e126fee3f12dc9f723e23ee6f5a593c89b43e9aeb26c85007c3c6c9c92e8f5d500d136e500b94e8d17bed480714b06548cb1590bedbff1c75c784e549620eb2eb978c98e27fd375b9db315d32e19b22948a66a57ac42cf33e19157eeecba1ed204d01f6390ddddd20692d67d1ce458776a6085f446fab3d01ab5efcf79e68d705a2419e4eb9aacf76a391341f0d85f25a83b2a8a2fb3b9f0782eaaf311db2c5f17c8052f705666007b6ebacb1e0c062654dfd303c817562597d7a03b72af5e53848336e806a7dd17b4caa2af9dc5ef1fd05649ff2bbd510c0412b55bff79124562832906c6e45ae3b8f09f723be4e84a3de5f9bbefcc49a8df2ef74cdd9786aad53e2b0335fd34b778f85b61b0fd79050095f2aa509d1bb5e4845c1d28010c9fb8f8168ef47bf98b82bbd1207722f4bc46796d351bc219e92631018d4baa5189b28f8111bfe6871910a65c6c7babda793aa28a766682ce67137b2fad1135b599e04c61e5ed4b3eb8f72fc3d79dc52b69f682ef4bc5fc27ed6f9c9fd1cdca43424a5e59249fe01123c1e7ab71e2179319aded4b46a707858167afdc6419e689b743143d349babcc8cbf036b04cfb7c8f3db76ba9f17d82d02352f087a60e3d908f74174b550574cd661185ca1d9c6afa2f8d7a56842f77eef827eec4e90a2bb61db7ab34be9d88478ded158b6031da15abcb8988908f728cbfb470af7859b4f69d8d3c601292e4f8bb7823c87b671a26cd6ee7c6ab77c7abd8f773c83cf7e6beedab70b12d57e578a7d6cd1cfe25d02c502094d7d3c4ca13781f529944cc83491a44a6c513b5e6abf721abaefb2ac71e5cdf27153b673f73e8466908f8afc898eb7b46073de9ceef58ef8f457c9bd3798b5825a71dd4b4abd3cf3b2b99c5a8a004288723c597316fa9679e2cbc22b642aec9343cdf96c2990bdec6adcd415ed952c24be82091d544a3d310e289e0baecd2c99503a0d311ea865afbf04a3c9dfab5e8031001630e34c57b3fdd64acb1c2bbd5c6a1fbfbad0051060bb6473cfe34d6cac10a42f98654c6b1f4d3083a31c2956d613e03b4c6a0b25fd984e1d0a82806774b2d7528f0bd8bd7e8810ef3d834573b8166265c16cf6bb69a614378ed4b41586102b8566437d1dd0cbe887fc85dae80afa750f2ac372966901476a91de8cf38654dc32d50ca00e771dceda257252bf84997b18c22324c71561d4ca09d6bb90b7953a035210e5b06e342d097ea1edb92246ab8d81ec73cc856f4459634d5b0f0d28a61acea1bc30cb65c7020e2981343ec87269e90cd2fa150df2379e75e64449c39059137f69e72560af765fb140c2e767d28069ee60b059387ad85c0f0e9589be9f99950e7b9808b1bef6ba672047b8dc148c9c4d650139d978002ab0ac566b6e7eb4fc56f8864f3d599e1ddd85f0f75f9341058c8f0ee40920030304fedefb4ee3c8a85d0458de65f27128257285b38addbe8698a9390f52f47e1e428c5484c5d6a39719a3969ee25633fb69abf257378f4a08625a2bf605fd7d74f5b64084f89f78efb7e55d336e6061875ad63debfec7229b07c11edd502228e6c12fb5a1e9fb199f7cad363a144019c93f0782c45d4c3d7ed5326b05781b2c1c48e4befaddd8cf876ddb634586f028fda7a4a5283494b5be33d979dcee1504a6d667d96fa16e161cf8be2e70e994283422f789c4dbc8740c9676820152a3ecf341b20bcd19d98f2c4378e73d6f131bcfb180dc31885b792228a42606f8cd4cd5fb21bde961f76a9d36df46ed404da5c9815fd805ce598185e923fcb728885c0d9afb005e1022eb7371dfd4a3ddf0dd08d4adb1af523d84dcd0a6f013c1e5fbae231877f1728804a2dc40903ce79dc7efcc27e167e0857530c001240661531a2672deac9fdbee3b6680babe200ddf17b39ba4a4ce3559fe529a605c9581c0cd158fe31afe97111bbbbcba428335448949ba08ff76824a10712a8686929e6e3e3ed1c8df60412e1add3e3e3f59710680a0e662a389d7b6c99854b3429770270593f3a7fccc7b359abcda422dd9e353c2df2af9b472ccc8d62fd5d3b77a7694a28def5c27b07ba58a66f64428e71b47308f535a7c4a829d2c918ba3578ff962f1a9f2d4d13ddb0b3e2cfec4b2ca580b4385e31946f7c09a23841b602db4d29ef892b6774a3aac1db38802d20f0d4fbf1c69ba995e2ab08cdf23a40f99371937687278f6baa8c9b69fe26251799389ca804248309b7e3334fa21ced78a715c3e04655bd1cd4580438579254bd54fbdd0d8d549273094d73ac640a6b7d44a3cdb9d2562e327d632886f8d6526955653b0b85902ad0faadb9b3c29e969e2bffd60461c2ef579fc717f873859b0ce6cce8f16ae6921b94b69ec1984173accd265b5a10436599c9e7438a2ff33a17697329fcd38cd8d71139ea6de44ce7480b90eee4cd65a82648a0c1c3d2b8f70d9a7759dec7677f8c6fbe86318ff44bba798546f70eb66c7da3617d89055f7f3b6d8a778a2badcdfab9068072117addc007146414497677b237a2b6b15b4be3d2833c01733c7c920acef9f3ba5dcc58d7af51557ccedf8bab4bc600df6cfd19f75140757444b1c980269bd86524de7c6608c411f2bca07027e585e0c9b1c8eeecb3ac50cdb0fdc4ecb3e17bd41154cc58f72a96022dce4e4f5221482d0016cff2b51a56cedb28c9515298a9c22620fa1e88f5827ab6b6786c8fc40605bcf051506b9a38ff01329be0efacb4e58a62d9da0e3f2387524e76e29825c864c58732ea56f9074c4977028473c9935e8061e5cd72bb45ba518b6b2c5f2a906ce9729d6d6cc8d3ccfaa3c12cb9547f779925b582edff1784247156dfe608d4e10d3f7f890a5add33d0b71eac01a0b53b0a416e51dd373a278f1c1f87ecadb215a24dd2dad0e5cc9a98bfbf4717ce108a2df3550d273773d193031384b326e2b0662a6eeefd87dc73b5636dd36f56df323ccd1f2affb6b2b3dff845812de597193fb730c39d447a647d535655e77bf6f8230b14533d587d0e3b50590e086bfe95b8329043f404a6e0f761ce4a4ddb375796fb5bf98c0bdea5028af95aba9f005a3818b0a5aaf40002bbca62a462d5330308f85299a2c863202e7f199f948f3f29cebc4402ca3cebf402665d16422c8c23d1cd4c29564c81438e67b8416e4120b2d5612b5abbd7efaa0a8159f282efcfb29b1311d953bab433ed5c6ef49224778c8285354cafaf254</script> <div class="hbe hbe-content"> <div class="hbe hbe-input hbe-input-default"> <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass"> <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass"> <span class="hbe hbe-input-label-content hbe-input-label-content-default">您好, 这里需要密码.</span> </label> </div> </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">
☑️ ⭐

动态规划 刷题记录

<h2 id="AT-DP-C-Vacation">AT_DP_C Vacation</h2><p><a href="https://www.luogu.com.cn/problem/AT_dp_c">洛谷 Link</a></p> <div class="fold"> <div class="fold-title fold-info collapsed" data-toggle="collapse" href="#collapse-4d3a3b55" role="button" aria-expanded="false" aria-controls="collapse-4d3a3b55"> <div class="fold-arrow">▶</div>题意 </div> <div class="fold-collapse collapse" id="collapse-4d3a3b55"> <div class="fold-content"> <p>有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span> 天,对于每一天 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>i</mi><mo>≤</mo><mi>N</mi></mrow><annotation encoding="application/x-tex">1 \leq i \leq N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7955em;vertical-align:-0.136em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span>),可以选择以下活动之一:</p><ul><li>A:在海里游泳,获得幸福度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a _ i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。</li><li>B:在山上抓虫,获得幸福度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>b</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">b _ i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。</li><li>C:在家做作业,获得幸福度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>c</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">c _ i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。</li></ul><p>不能连续两天以上做同样的活动,计算最大总幸福度。</p> </div> </div> </div><h3 id="Solution">Solution</h3><p>DP 板子题。设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示<strong>截止到第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 天时做第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 件事的幸福值总和</strong>。</p><p>则易得转移方程为:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo>=</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mn>2</mn></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mn>3</mn></mrow></msub><mo stretchy="false">)</mo><mspace linebreak="newline"></mspace><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mn>2</mn></mrow></msub><mo>=</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mn>3</mn></mrow></msub><mo stretchy="false">)</mo><mspace linebreak="newline"></mspace><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mn>3</mn></mrow></msub><mo>=</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mn>2</mn></mrow></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f_{i,1}=\max(f_{i-1,2},f_{i-1,3})\\f_{i,2}=\max(f_{i-1,1},f_{i-1,3})\\f_{i,3}=\max(f_{i-1,1},f_{i-1,2})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">max</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">max</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">max</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></p><h3 id="Core-Code">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++)<br>&#123;<br> f[i][<span class="hljs-number">1</span>]=<span class="hljs-built_in">max</span>(f[i<span class="hljs-number">-1</span>][<span class="hljs-number">2</span>],f[i<span class="hljs-number">-1</span>][<span class="hljs-number">3</span>])+a[i];<br> f[i][<span class="hljs-number">2</span>]=<span class="hljs-built_in">max</span>(f[i<span class="hljs-number">-1</span>][<span class="hljs-number">1</span>],f[i<span class="hljs-number">-1</span>][<span class="hljs-number">3</span>])+b[i];<br> f[i][<span class="hljs-number">3</span>]=<span class="hljs-built_in">max</span>(f[i<span class="hljs-number">-1</span>][<span class="hljs-number">1</span>],f[i<span class="hljs-number">-1</span>][<span class="hljs-number">2</span>])+c[i];<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="AT-DP-K-Stones">AT_DP_K Stones</h2><p><a href="https://www.luogu.com.cn/problem/AT_dp_k">洛谷 Link</a></p> <div class="fold"> <div class="fold-title fold-info collapsed" data-toggle="collapse" href="#collapse-0d7d7120" role="button" aria-expanded="false" aria-controls="collapse-0d7d7120"> <div class="fold-arrow">▶</div>题意 </div> <div class="fold-collapse collapse" id="collapse-0d7d7120"> <div class="fold-content"> <p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span> 个正整数组成的集合 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>=</mo><mo stretchy="false">{</mo><msub><mi>a</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>a</mi><mn>2</mn></msub><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>a</mi><mi>N</mi></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">A = \{ a _ 1, a _ 2, \ldots, a _ N \}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.10903em;">N</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span>。太郎君和次郎君将用以下游戏进行对决。</p><p>首先,准备一个有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span></span></span></span> 个石子的堆。两人依次进行以下操作。太郎君先手。</p><ul><li>从集合 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span></span></span></span> 中选择一个元素 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>,从石堆中恰好移除 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 个石子。</li></ul><p>不能进行操作的人输掉游戏。当两人都按照最优策略行动时,判断谁会获胜。</p> </div> </div> </div><h3 id="Solution-2">Solution</h3><p>显然当一名玩家操作完成后石子数量为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>,则这名玩家必胜。</p><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示剩余 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 枚石子当前操作的人的输赢情况 (<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mi mathvariant="normal">/</mi><mn>0</mn></mrow><annotation encoding="application/x-tex">1/0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1/0</span></span></span></span>),可以发现当且仅当<strong>当前操作的上一步操作必输,当前操作才可以必胜</strong>,即如果有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">a_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 使得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><msub><mi>a</mi><mi>j</mi></msub></mrow></msub><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">f_{i-a_j}=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0418em;vertical-align:-0.3473em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2819em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3473em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>,则 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">f_i=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。</p><p>初始化 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mn>0</mn></msub><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">f_0=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>,则有:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mn>1</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>a</mi><mi>j</mi></msub><mo>≤</mo><mi>i</mi><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><msub><mi>a</mi><mi>j</mi></msub></mrow></msub><mo>=</mo><mn>0</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mn>0</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mtext>otherwise.</mtext></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">f_i=\begin{cases}1,&amp;a_j\leq i,f_{i-a_j}=0\\0 ,&amp; \text{otherwise.}\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord">1</span><span class="mpunct">,</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord">0</span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">i</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2819em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3473em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">otherwise.</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><h3 id="Core-Code-2">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs cpp">f[<span class="hljs-number">0</span>]=<span class="hljs-number">0</span>;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=k;i++)<br>&#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">1</span>;j&lt;=n;j++)<br> &#123;<br> <span class="hljs-keyword">if</span>(i-a[j]&gt;=<span class="hljs-number">0</span> &amp;&amp; !f[i-a[j]]) f[i]=<span class="hljs-number">1</span>;<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="AT-DP-M-Candies">AT_DP_M Candies</h2><p><a href="https://www.luogu.com.cn/problem/AT_dp_m">Link</a></p><blockquote><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span></span></span></span> 颗糖分给 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个人,第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个人至少分得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 颗,至多分得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 颗,必须分完,求方案数,答案对 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>10</mn><mn>9</mn></msup><mo>+</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">10^9+7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span> 取模。</p></blockquote><p>tag: 背包 DP, 前缀和</p><h3 id="Solution-3">Solution</h3><p>类似背包的处理思路,设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个人分完后已经分了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 个糖,它可以由上一步的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>j</mi><mo>−</mo><msub><mi>a</mi><mi>i</mi></msub><mo stretchy="false">)</mo><mo>∼</mo><mi>j</mi></mrow><annotation encoding="application/x-tex">(j-a_i)\sim j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 转移得到,所以</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><munderover><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">(</mo><mn>0</mn><mo separator="true">,</mo><mi>j</mi><mo>−</mo><msub><mi>a</mi><mi>i</mi></msub><mo stretchy="false">)</mo></mrow><mi>j</mi></munderover><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>k</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,j}=\sum^j_{k=\max(0,j-a_i)}f_{i-1,k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:3.3748em;vertical-align:-1.516em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8588em;"><span style="top:-1.809em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mrel mtight">=</span><span class="mop mtight"><span class="mtight">m</span><span class="mtight">a</span><span class="mtight">x</span></span><span class="mopen mtight">(</span><span class="mord mtight">0</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mclose mtight">)</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3471em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.516em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span></span></p><p>考虑优化时间,滚动数组不可行。发现每一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 对应的值都由 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">i-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 中连续一段的值转移而来,想到用滚动的前缀和维护 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">i-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的所有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi></mrow><annotation encoding="application/x-tex">f</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span></span></span></span> 值。</p><h3 id="Core-Code-3">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">calc</span><span class="hljs-params">(<span class="hljs-type">int</span> l,<span class="hljs-type">int</span> r)</span> </span>&#123;<br> <span class="hljs-keyword">if</span>(l==<span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> sum[r];<br> <span class="hljs-keyword">return</span> sum[r]-sum[l<span class="hljs-number">-1</span>];<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> f[<span class="hljs-number">0</span>][<span class="hljs-number">0</span>]=<span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> sum[<span class="hljs-number">0</span>]=f[i<span class="hljs-number">-1</span>][<span class="hljs-number">0</span>];<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">1</span>;j&lt;=m;j++) &#123;<br> sum[j]=(sum[j<span class="hljs-number">-1</span>]+f[i<span class="hljs-number">-1</span>][j]+mod)%mod;<br> &#125;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">0</span>;j&lt;=m;j++) &#123;<br> f[i][j]=(<span class="hljs-built_in">calc</span>(<span class="hljs-built_in">max</span>(<span class="hljs-number">0ll</span>,j-a[i]),j)+mod)%mod;<br> &#125;<br> &#125;<br> <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;%lld\n&quot;</span>,f[n][m]%mod);<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="AT-DP-P-Independent-Set">AT_DP_P Independent Set</h2><p><a href="https://www.luogu.com.cn/problem/AT_dp_p">Link</a></p><blockquote><p>给一棵树,每一个点可以染成黑色或白色,任意两个相邻节点不能都是黑色,求方案数。</p></blockquote><p>tag: 树形 DP</p><h3 id="Solution-4">Solution</h3><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn><mi mathvariant="normal">/</mi><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{u,0/1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0496em;vertical-align:-0.3552em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.5198em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0/1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3552em;"><span></span></span></span></span></span></span></span></span></span> 表示 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 节点染成 W/B 颜色时的方案数。DFS 子树的方案数,可以得到:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><munder><mo>∏</mo><mrow><mi>v</mi><mo>∈</mo><mi>u</mi></mrow></munder><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub><mo>+</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><munder><mo>∏</mo><mrow><mi>v</mi><mo>∈</mo><mi>u</mi></mrow></munder><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}f_{u,0}&amp;=\prod_{v\in u}(f_{v,0}+f_{v,1})\\f_{u,1}&amp;=\prod_{v\in u}f_{v,0}\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:5.2548em;vertical-align:-2.3774em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.8774em;"><span style="top:-4.8774em;"><span class="pstrut" style="height:3.05em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.05em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.3774em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.8774em;"><span style="top:-4.8774em;"><span class="pstrut" style="height:3.05em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.05em;"><span style="top:-1.9em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mrel mtight">∈</span><span class="mord mathnormal mtight">u</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∏</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2774em;"><span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.05em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.05em;"><span style="top:-1.9em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mrel mtight">∈</span><span class="mord mathnormal mtight">u</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∏</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2774em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.3774em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>注意 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 号点为根,输入无序需建双向边。</p><h3 id="Core-Code-4">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs</span><span class="hljs-params">(<span class="hljs-type">int</span> u)</span> </span>&#123;<br> g.vis[u]=<span class="hljs-number">1</span>;<br> f[u][<span class="hljs-number">0</span>]=f[u][<span class="hljs-number">1</span>]=<span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">0</span>;i&lt;e[u].<span class="hljs-built_in">size</span>();i++) &#123;<br> <span class="hljs-type">int</span> v=e[u][i];<br> <span class="hljs-keyword">if</span>(!g.vis[v]) &#123;<br> <span class="hljs-built_in">dfs</span>(v);<br> f[u][<span class="hljs-number">0</span>]=(f[u][<span class="hljs-number">0</span>]*(f[v][<span class="hljs-number">0</span>]+f[v][<span class="hljs-number">1</span>]))%mod;<br> f[u][<span class="hljs-number">1</span>]=(f[u][<span class="hljs-number">1</span>]*f[v][<span class="hljs-number">0</span>])%mod;<br> &#125;<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="AT-DP-Q-Flowers">AT_DP_Q Flowers</h2><p><a href="https://www.luogu.com.cn/problem/AT_dp_q">Link</a></p><blockquote><p>有一排花,共 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个,第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个的高度是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>h</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">h_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,权值是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,保证高度互不相同。现在拿走一些花,使剩下的花高度单调递增,问剩下的花权值之和最大是多少。</p></blockquote><p>tag: 线段树优化 DP</p><h3 id="Solution-5">Solution</h3><p>带权的最长上升子序列,设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个元素结尾的最大答案,可以参照最长上升子序列写出转移方程</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub><mo>=</mo><munderover><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></munderover><mo stretchy="false">{</mo><msub><mi>f</mi><mi>j</mi></msub><mi mathvariant="normal">∣</mi><msub><mi>h</mi><mi>j</mi></msub><mo>&lt;</mo><msub><mi>h</mi><mi>i</mi></msub><mo stretchy="false">}</mo><mo>+</mo><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_{i}=\max_{j=1}^{i-1}\{f_{j}|h_j&lt;h_i\}+a_{i}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.056em;vertical-align:-0.8638em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1922em;"><span style="top:-2.3723em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span><span style="top:-3.6306em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8638em;"><span></span></span></span></span></span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mord">∣</span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">}</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span></p><p>考虑优化,观察到转移方程是区间最大值,想到用值域线段树优化。将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>h</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">h_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 作为线段树的下标,对应当前高度时的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。</p><h3 id="Core-Code-5">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">struct</span> <span class="hljs-title class_">node</span> &#123;<br> ll val;<br>&#125;t[N * <span class="hljs-number">4</span>];<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">tree</span> &#123;<br> <span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">pushup</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span> </span>&#123;<br> t[p].val = <span class="hljs-built_in">max</span>(t[p * <span class="hljs-number">2</span>].val, t[p * <span class="hljs-number">2</span> + <span class="hljs-number">1</span>].val);<br> &#125;<br> <span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">modify</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r, <span class="hljs-type">int</span> x, ll k)</span> </span>&#123;<br> <span class="hljs-keyword">if</span> (l == r) &#123;<br> t[p].val = k;<br> <span class="hljs-keyword">return</span>;<br> &#125;<br> <span class="hljs-type">int</span> mid = (l + r) &gt;&gt; <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">if</span> (x &lt;= mid) <span class="hljs-built_in">modify</span>(p * <span class="hljs-number">2</span>, l, mid, x, k);<br> <span class="hljs-keyword">else</span> <span class="hljs-built_in">modify</span>(p * <span class="hljs-number">2</span> + <span class="hljs-number">1</span>, mid + <span class="hljs-number">1</span>, r, x, k);<br> <span class="hljs-built_in">pushup</span>(p);<br> &#125;<br> <span class="hljs-function">ll <span class="hljs-title">query</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r, <span class="hljs-type">int</span> x, <span class="hljs-type">int</span> y)</span> </span>&#123;<br> <span class="hljs-keyword">if</span> (x &lt;= l &amp;&amp; r &lt;= y) &#123;<br> <span class="hljs-keyword">return</span> t[p].val;<br> &#125;<br> ll res = <span class="hljs-number">0</span>;<br> <span class="hljs-type">int</span> mid = (l + r) &gt;&gt; <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">if</span> (x &lt;= mid) res = <span class="hljs-built_in">max</span>(res, <span class="hljs-built_in">query</span>(p * <span class="hljs-number">2</span>, l, mid, x, y));<br> <span class="hljs-keyword">if</span> (y &gt;= mid + <span class="hljs-number">1</span>) res = <span class="hljs-built_in">max</span>(res, <span class="hljs-built_in">query</span>(p * <span class="hljs-number">2</span> + <span class="hljs-number">1</span>, mid + <span class="hljs-number">1</span>, r, x, y));<br> <span class="hljs-keyword">return</span> res;<br> &#125;<br>&#125;sgt;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> n = <span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> h[i] = <span class="hljs-built_in">read</span>();<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> a[i] = <span class="hljs-built_in">read</span>();<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> f[i] = sgt.<span class="hljs-built_in">query</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, <span class="hljs-number">1</span>, h[i]) + a[i];<br> sgt.<span class="hljs-built_in">modify</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, h[i], f[i]);<br> &#125;<br> cout &lt;&lt; sgt.<span class="hljs-built_in">query</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, <span class="hljs-number">1</span>, n) &lt;&lt; endl;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="AT-DP-T-Permutation">AT_DP_T Permutation</h2><p><a href="https://www.luogu.com.cn/problem/AT_dp_t">Link</a></p><blockquote><p>有一个长为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span> 的正整数排列。给定一个由 <code>&lt;</code> 和 <code>&gt;</code> 组成长为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">N-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的的字符串。对于任意满足 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>i</mi><mo>≤</mo><mi>N</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">1 \le i \le N-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7955em;vertical-align:-0.136em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的字符 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">s_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">s_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 是 <code>&lt;</code> 则 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>P</mi><mi>i</mi></msub><mo>&lt;</mo><msub><mi>P</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">P_i&lt;P_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em;">P</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8917em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em;">P</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span>、如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">s_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 是 <code>&gt;</code> 则 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>P</mi><mi>i</mi></msub><mo>&gt;</mo><msub><mi>P</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">P_i&gt;P_{i+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em;">P</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8917em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em;">P</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span>。求满足这样的性质的排列 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>P</mi></mrow><annotation encoding="application/x-tex">P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">P</span></span></span></span> 的方案数。</p></blockquote><h3 id="Solution-6">Solution</h3><p>由于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span> 是排列,我们不在意 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span> 中到底放了什么数,只需要关注当前一步放的数和上一步放的数的大小关系。可以得到状态 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i, j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个数形成的排列中,第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个数是第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 大的方案数。</p><p>在转移时,若当前填的数需大于前一个数,那么直接得到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mstyle scriptlevel="0" displaystyle="true"><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><munderover><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mrow><mi>j</mi><mo>−</mo><mn>1</mn></mrow></munderover><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>k</mi></mrow></msub></mstyle></mrow><annotation encoding="application/x-tex">\displaystyle f_{i,j}=\sum_{k=1}^{j-1}f_{i-1,k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:3.1609em;vertical-align:-1.3021em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8588em;"><span style="top:-1.8479em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3471em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.3021em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>。</p><p>若小于前一个数,有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mstyle scriptlevel="0" displaystyle="true"><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><munderover><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mi>j</mi></mrow><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></munderover><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>k</mi></mrow></msub></mstyle></mrow><annotation encoding="application/x-tex">\displaystyle f_{i,j}=\sum_{k=j}^{i-1}f_{i-1,k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:3.2499em;vertical-align:-1.4382em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8117em;"><span style="top:-1.8479em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mrel mtight">=</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.4382em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>。可以感性理解,由于前面一定有一个 rank 为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 的数,当前数扔进去的时候,相当于是扔到了原有排列(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>∼</mo><mi>i</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">1\sim i-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>)中 rank 为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">j-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 中间,所以说应该加上所有 rank 大于等于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 的贡献,即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi><mo>∼</mo><mi>i</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">j\sim i-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。</p><p>注意到转移是求连续一段的和,前缀和优化即可。</p><h3 id="Core-Code-6">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs cpp">sum[<span class="hljs-number">1</span>] = <span class="hljs-number">1</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">2</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j &lt;= n; j++) &#123;<br> <span class="hljs-keyword">if</span> (s[i - <span class="hljs-number">1</span>] == <span class="hljs-string">&#x27;&lt;&#x27;</span>) &#123;<br> f[j] = (sum[i - <span class="hljs-number">1</span>] - sum[j - <span class="hljs-number">1</span>] + mod) % mod;<br> &#125; <span class="hljs-keyword">else</span> &#123;<br> f[j] = sum[j - <span class="hljs-number">1</span>] % mod;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j &lt;= n; j++) &#123;<br> sum[j] = (sum[j - <span class="hljs-number">1</span>] + f[j]) % mod;<br> &#125;<br>&#125;<br><span class="hljs-type">int</span> ans = <span class="hljs-number">0</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> ans = (ans + f[i]) % mod;<br>&#125;<br>cout &lt;&lt; ans % mod &lt;&lt; <span class="hljs-string">&#x27;\n&#x27;</span>;<br></code></pre></td></tr></table></figure><h2 id="AT-DP-W-Intervals">AT_DP_W Intervals</h2><p><a href="https://www.luogu.com.cn/problem/AT_dp_w">Link</a></p><blockquote><p>给定 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span> 条规则形如 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><msub><mi>l</mi><mi>i</mi></msub><mo separator="true">,</mo><msub><mi>r</mi><mi>i</mi></msub><mo separator="true">,</mo><msub><mi>a</mi><mi>i</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(l_i,r_i,a_i)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>,对于一个 01 串,其分数的定义是:对于第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 条规则,若该串在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><msub><mi>l</mi><mi>i</mi></msub><mo separator="true">,</mo><msub><mi>r</mi><mi>i</mi></msub><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[l_i,r_i]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">]</span></span></span></span> 中至少有一个 1,则该串的分数增加 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。</p><p>你需要求出长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 的 01 串中的最大分数。</p></blockquote><p>tag: 线段树优化 DP, 区间右端点排序</p><h3 id="Solution-7">Solution</h3><p>首先将区间按右端点排序,在右端点处统计答案。</p><p>考虑 DP,设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个位置中最后一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的位置为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 的最大分数。</p><p>不难想到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mstyle scriptlevel="0" displaystyle="true"><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><munderover><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mi>j</mi></munderover><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>k</mi></mrow></msub><mo>+</mo><munder><mo>∑</mo><mrow><msub><mi>l</mi><mi>p</mi></msub><mo>≤</mo><mi>k</mi><mtext> and </mtext><msub><mi>r</mi><mi>p</mi></msub><mo>=</mo><mi>i</mi></mrow></munder><msub><mi>a</mi><mi>p</mi></msub></mstyle></mrow><annotation encoding="application/x-tex">\displaystyle f_{i,j}=\max_{k=1}^j f_{i-1,k}+\sum_{l_p\leq k\text{ and }r_p=i} a_p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.9914em;vertical-align:-0.7521em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.2393em;"><span style="top:-2.3479em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span><span style="top:-3.6777em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7521em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:2.5494em;vertical-align:-1.4994em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.05em;"><span style="top:-1.8479em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:-0.0197em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2819em;"><span></span></span></span></span></span></span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mord text mtight"><span class="mord mtight"> and </span></span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:-0.0278em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2819em;"><span></span></span></span></span></span></span><span class="mrel mtight">=</span><span class="mord mathnormal mtight">i</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.4994em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>。即使 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><mi>l</mi><mo separator="true">,</mo><mi>r</mi><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[l, r]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mclose">]</span></span></span></span> 覆盖到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 位置。</p><p>对上式进行优化,发现可以贪心的使 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的位置尽量靠后,才能最大化 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的数量,所以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mstyle scriptlevel="0" displaystyle="true"><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>+</mo><munder><mo>∑</mo><mrow><msub><mi>l</mi><mi>k</mi></msub><mo>≤</mo><mi>j</mi><mtext> and </mtext><msub><mi>r</mi><mi>k</mi></msub><mo>=</mo><mi>i</mi></mrow></munder><msub><mi>a</mi><mi>k</mi></msub></mstyle></mrow><annotation encoding="application/x-tex">\displaystyle f_{i,j}=f_{i-1,j}+\sum_{l_k\leq j\text{ and }r_k=i}a_k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:2.4882em;vertical-align:-1.4382em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.05em;"><span style="top:-1.8479em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3488em;margin-left:-0.0197em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1512em;"><span></span></span></span></span></span></span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mord text mtight"><span class="mord mtight"> and </span></span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3488em;margin-left:-0.0278em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1512em;"><span></span></span></span></span></span></span><span class="mrel mtight">=</span><span class="mord mathnormal mtight">i</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.4382em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。</p><p>优化后,会有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi><mo>=</mo><mi>i</mi></mrow><annotation encoding="application/x-tex">j=i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 的特殊情况,此时上一步选的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 可以在任意位置,取最大值即可。最终转移方程即为:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msubsup><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mrow><mi>j</mi><mo>−</mo><mn>1</mn></mrow></msubsup><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>k</mi></mrow></msub><mo>+</mo><msub><mo>∑</mo><mrow><msub><mi>r</mi><mi>p</mi></msub><mo>=</mo><mi>i</mi></mrow></msub><msub><mi>a</mi><mi>p</mi></msub><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>i</mi><mo>=</mo><mi>j</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>+</mo><msub><mo>∑</mo><mrow><msub><mi>l</mi><mi>k</mi></msub><mo>≤</mo><mi>j</mi><mtext> and </mtext><msub><mi>r</mi><mi>k</mi></msub><mo>=</mo><mi>i</mi></mrow></msub><msub><mi>a</mi><mi>k</mi></msub><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>i</mi><mo mathvariant="normal">≠</mo><mi>j</mi></mrow></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">f_{i,j}=\begin{cases}\max_{k=1}^{j-1} f_{i-1,k}+\sum_{r_p=i} a_p,&amp;i=j\\f_{i-1,j}+\sum_{l_k\leq j\text{ and }r_k=i} a_k,&amp;i\neq j\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.7244em;"><span style="top:-3.7244em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mop"><span class="mop">max</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9426em;"><span style="top:-2.3987em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.1809em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3013em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.162em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:-0.0278em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2819em;"><span></span></span></span></span></span></span><span class="mrel mtight">=</span><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.497em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span></span></span><span style="top:-2.2194em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1864em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3488em;margin-left:-0.0197em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1512em;"><span></span></span></span></span></span></span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mord text mtight"><span class="mord mtight"> and </span></span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3488em;margin-left:-0.0278em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1512em;"><span></span></span></span></span></span></span><span class="mrel mtight">=</span><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4358em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2244em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.7244em;"><span style="top:-3.7244em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span><span style="top:-2.2194em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2244em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>滚动掉一维后,发现枚举位置 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 时,如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>r</mi><mi>j</mi></msub><mo>=</mo><mi>i</mi></mrow><annotation encoding="application/x-tex">r_j=i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>,那么这段区间 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><msub><mi>l</mi><mi>j</mi></msub><mo separator="true">,</mo><msub><mi>r</mi><mi>j</mi></msub><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[l_j, r_j]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mopen">[</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">]</span></span></span></span> 会在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><msub><mi>l</mi><mi>j</mi></msub><mo separator="true">,</mo><mi>i</mi><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[l_j, i]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mopen">[</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">i</span><span class="mclose">]</span></span></span></span> 中做出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">a_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 的贡献。扔到线段树上区间加区间查询最大值即可。</p><h3 id="Core-Code-7">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">struct</span> <span class="hljs-title class_">query</span> &#123;<br> <span class="hljs-type">int</span> l, r, a;<br> <span class="hljs-type">bool</span> <span class="hljs-keyword">operator</span>&lt;(<span class="hljs-type">const</span> query &amp;x) <span class="hljs-type">const</span> &#123;<br> <span class="hljs-keyword">return</span> r &lt; x.r;<br> &#125;<br>&#125;q[N];<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">node</span> &#123;<br> <span class="hljs-type">int</span> val, tag;<br>&#125;;<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">tree</span> &#123;<br> node t[<span class="hljs-number">4</span> * N];<br> <span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">mktag</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> w)</span> </span>&#123;<br> t[p].val += w;<br> t[p].tag += w;<br> &#125;<br> <span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">pushdown</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span> </span>&#123;<br> <span class="hljs-keyword">if</span> (t[p].tag) &#123;<br> <span class="hljs-built_in">mktag</span>(p * <span class="hljs-number">2</span>, t[p].tag);<br> <span class="hljs-built_in">mktag</span>(p * <span class="hljs-number">2</span> + <span class="hljs-number">1</span>, t[p].tag);<br> t[p].tag = <span class="hljs-number">0</span>;<br> &#125;<br> &#125;<br> <span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">pushup</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span> </span>&#123;<br> t[p].val = <span class="hljs-built_in">max</span>(t[p * <span class="hljs-number">2</span>].val, t[p * <span class="hljs-number">2</span> + <span class="hljs-number">1</span>].val);<br> &#125;<br> <span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">modify</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r, <span class="hljs-type">int</span> x, <span class="hljs-type">int</span> y, <span class="hljs-type">int</span> w)</span> </span>&#123;<br> <span class="hljs-keyword">if</span> (x &lt;= l &amp;&amp; r &lt;= y) &#123;<br> <span class="hljs-built_in">mktag</span>(p, w);<br> <span class="hljs-keyword">return</span>;<br> &#125;<br> <span class="hljs-built_in">pushdown</span>(p);<br> <span class="hljs-type">int</span> mid = (l + r) &gt;&gt; <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">if</span> (x &lt;= mid) <span class="hljs-built_in">modify</span>(p * <span class="hljs-number">2</span>, l, mid, x, y, w);<br> <span class="hljs-keyword">if</span> (y &gt;= mid + <span class="hljs-number">1</span>) <span class="hljs-built_in">modify</span>(p * <span class="hljs-number">2</span> + <span class="hljs-number">1</span>, mid + <span class="hljs-number">1</span>, r, x, y, w);<br> <span class="hljs-built_in">pushup</span>(p);<br> &#125;<br> <span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">query</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r, <span class="hljs-type">int</span> x, <span class="hljs-type">int</span> y)</span> </span>&#123;<br> <span class="hljs-keyword">if</span> (x &lt;= l &amp;&amp; r &lt;= y) &#123;<br> <span class="hljs-keyword">return</span> t[p].val;<br> &#125;<br> <span class="hljs-built_in">pushdown</span>(p);<br> <span class="hljs-type">int</span> mid = (l + r) &gt;&gt; <span class="hljs-number">1</span>;<br> <span class="hljs-type">int</span> res = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">if</span> (x &lt;= mid) res = <span class="hljs-built_in">max</span>(res, <span class="hljs-built_in">query</span>(p * <span class="hljs-number">2</span>, l, mid, x, y));<br> <span class="hljs-keyword">if</span> (y &gt;= mid + <span class="hljs-number">1</span>) res = <span class="hljs-built_in">max</span>(res, <span class="hljs-built_in">query</span>(p * <span class="hljs-number">2</span> + <span class="hljs-number">1</span>, mid + <span class="hljs-number">1</span>, r, x, y));<br> <span class="hljs-keyword">return</span> res;<br> &#125;<br>&#125;sgt;<br><span class="hljs-function"><span class="hljs-type">signed</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> n = <span class="hljs-built_in">read</span>(); m = <span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= m; i++) &#123;<br> q[i].l = <span class="hljs-built_in">read</span>(), q[i].r = <span class="hljs-built_in">read</span>(), q[i].a = <span class="hljs-built_in">read</span>();<br> &#125;<br> <span class="hljs-built_in">sort</span>(q + <span class="hljs-number">1</span>, q + m + <span class="hljs-number">1</span>);<br> <span class="hljs-type">int</span> nw = <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">if</span> (i != <span class="hljs-number">1</span>) sgt.<span class="hljs-built_in">modify</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, i, i, sgt.<span class="hljs-built_in">query</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, <span class="hljs-number">1</span>, i - <span class="hljs-number">1</span>));<br> <span class="hljs-keyword">while</span> (q[nw].r == i &amp;&amp; nw &lt;= m) &#123;<br> sgt.<span class="hljs-built_in">modify</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, q[nw].l, i, q[nw].a);<br> nw++;<br> &#125;<br> &#125;<br> cout &lt;&lt; <span class="hljs-built_in">max</span>(<span class="hljs-number">0ll</span>, sgt.<span class="hljs-built_in">query</span>(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, n, <span class="hljs-number">1</span>, n)) &lt;&lt; endl;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="TDPC-IWI-イウィ">TDPC_IWI イウィ</h2><p><a href="https://www.luogu.com.cn/problem/AT_tdpc_iwi">洛谷 Link</a></p><blockquote><p>给定一个仅由字符 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext mathvariant="monospace">i</mtext></mrow><annotation encoding="application/x-tex">\texttt{i}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord text"><span class="mord texttt">i</span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext mathvariant="monospace">w</mtext></mrow><annotation encoding="application/x-tex">\texttt{w}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord text"><span class="mord texttt">w</span></span></span></span></span> 构成的字符串 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span>。你可以进行若干次操作,每次从串中选取连续的三个字符 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext mathvariant="monospace">iwi</mtext></mrow><annotation encoding="application/x-tex">\texttt{iwi}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord text"><span class="mord texttt">iwi</span></span></span></span></span> 并删除;每次操作后这三个字符的左侧和右侧会连接在一起,得到一个长度比原来小 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span> 的新串。求可能的最大操作次数。</p></blockquote><p>tag: 区间 DP</p><h3 id="Solution-8">Solution</h3><p>区间 DP,类似合并石子。</p><p>我们定义 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 记录 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 能删掉多少字符,显然最后答案应除以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span>。</p><p>因为答案计算的是最大的步数,那么对于一个大区间,在一般情况下的答案就应该是其分成的两个小区间的答案之和。考虑枚举这两个区间之间的分界点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span>,答案取最大值即可。</p><p>本题还需要特判一种特殊情况。如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">s_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">s_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 为 <code>i</code>,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mi>k</mi></msub></mrow><annotation encoding="application/x-tex">s_k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 为 <code>w</code>,且中间的两个小段可以被完全删除。那么,当中间的被删掉之后,左右的 <code>i</code> 和中间的 <code>w</code> 就会拼在一起,也可以删掉,那么这个区间的答案就应该是它的长度,但显然直接相加有可能会出错。</p><h3 id="Core-Code-8">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> a=<span class="hljs-number">2</span>;a&lt;=len;a++)<br>&#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;a+i<span class="hljs-number">-1</span>&lt;=len;i++)<br> &#123;<br> <span class="hljs-type">int</span> j=a+i<span class="hljs-number">-1</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> k=i;k&lt;j;k++)<br> &#123;<br> f[i][j]=<span class="hljs-built_in">max</span>(f[i][j],f[i][k]+f[k<span class="hljs-number">+1</span>][j]);<br> <span class="hljs-keyword">if</span>(s[i]==<span class="hljs-string">&#x27;i&#x27;</span> &amp;&amp; s[j]==<span class="hljs-string">&#x27;i&#x27;</span> &amp;&amp; s[k]==<span class="hljs-string">&#x27;w&#x27;</span> &amp;&amp; f[i<span class="hljs-number">+1</span>][k<span class="hljs-number">-1</span>] == k-i<span class="hljs-number">-1</span> &amp;&amp; f[k<span class="hljs-number">+1</span>][j<span class="hljs-number">-1</span>] == j<span class="hljs-number">-1</span>-k)<br> &#123;<br> f[i][j]=j-i<span class="hljs-number">+1</span>;<br> &#125;<br> &#125;<br> &#125;<br>&#125;<br><span class="hljs-built_in">write</span>(f[<span class="hljs-number">1</span>][len]/<span class="hljs-number">3</span>);<br></code></pre></td></tr></table></figure><h2 id="ABC247F-Cards">ABC247F Cards</h2><p><a href="https://www.luogu.com.cn/problem/AT_abc247_f">Link</a></p><blockquote><p>给定 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 张卡片,每张卡片正反面各有一个数,给定每张卡片正面和反面的数,保证正面的数构成的序列,和反面的数构成的,分别均为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 的排列,可以选择任意张卡片并获得其正反面的数,要求最终所有获得的数至少包含 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 每个数至少一次。求有多少种取法,对 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>998244353</mn></mrow><annotation encoding="application/x-tex">998244353</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">998244353</span></span></span></span> 取模。</p></blockquote><p>tag: 并查集</p><h3 id="Solution-9">Solution</h3><p>trick 题,记住。</p><p>想到在两个拥有相同数字的卡片连边,则一个边的两点中必须至少选一个。</p><p>由于每张卡有两个数,度数为二,则连完后必定会形成若干个简单环或自环。</p><p>根据乘法原理,对于每个环求出方案数后相乘后即为答案。</p><p>先上结论,设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示一个大小为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 的环的选择方案数,有如下转移:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub><mo>=</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>2</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_i=f_{i-1}+f_{i-2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span></span></p><p>考虑证明它,设一个如下图的环,其中 <code>others</code> 表示剩余的所有点。</p><p><img src="https://img.makerlife.top/data/qexo/2024-10-19-ABC247F-example1-55d47dfc3ed4f48d7f9fc830201bebdb.png" alt="ABC247F-example1.png"></p><p>分类讨论,如果选 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span></span></span></span> 点,那么 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi></mrow><annotation encoding="application/x-tex">B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>C</mi></mrow><annotation encoding="application/x-tex">C</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">C</span></span></span></span> 点可以任取。转化为剩余一条不含 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span></span></span></span> 的链,这样不好考虑,将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi></mrow><annotation encoding="application/x-tex">B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>C</mi></mrow><annotation encoding="application/x-tex">C</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">C</span></span></span></span> 连接起来,转化为少一个点的环,这个环的答案是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span>。但这样还少了一种 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi></mrow><annotation encoding="application/x-tex">B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>C</mi></mrow><annotation encoding="application/x-tex">C</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">C</span></span></span></span> 都不算的情况,考虑将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi></mrow><annotation encoding="application/x-tex">B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>C</mi></mrow><annotation encoding="application/x-tex">C</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">C</span></span></span></span> 缩为一点,将个大点不选的方案数位 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span>。</p><p>如果不选 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span></span></span></span> 点,那么还是上面的链,但 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi></mrow><annotation encoding="application/x-tex">B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>C</mi></mrow><annotation encoding="application/x-tex">C</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">C</span></span></span></span> 必选,按照上面的处理方式,同样将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi></mrow><annotation encoding="application/x-tex">B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>C</mi></mrow><annotation encoding="application/x-tex">C</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">C</span></span></span></span> 缩为一点,这个图的方案数是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>2</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i-2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span>。但这样多算了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi></mrow><annotation encoding="application/x-tex">B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>C</mi></mrow><annotation encoding="application/x-tex">C</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">C</span></span></span></span> 都不选的贡献,可以发现这部分贡献就是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span>。</p><p>所以可以得到:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub><mo>=</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><mi>k̸</mi><mo>+</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>2</mn></mrow></msub><mo>−</mo><mi>k̸</mi></mrow><annotation encoding="application/x-tex">f_i=f_{i-1}+\not k+f_{i-2}-\not k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mord">+</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mord">−</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span></span></p><p>用并查集存环即可。</p><h3 id="Core-Code-9">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><code class="hljs cpp">n = <span class="hljs-built_in">read</span>();<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) fa[i] = i;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> t[<span class="hljs-built_in">read</span>()] = i;<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> q[i] = <span class="hljs-built_in">read</span>();<br> <span class="hljs-built_in">merge</span>(i, t[ q[i] ]);<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> siz[<span class="hljs-built_in">find</span>(i)]++;<br>&#125;<br>f[<span class="hljs-number">1</span>] = <span class="hljs-number">1ll</span>, f[<span class="hljs-number">2</span>] = <span class="hljs-number">3ll</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">3</span>; i &lt; N; i++) &#123;<br> f[i] = (f[i - <span class="hljs-number">1</span>] + f[i - <span class="hljs-number">2</span>]) % mod;<br>&#125;<br><span class="hljs-type">int</span> ans = <span class="hljs-number">1ll</span>;<br>f[<span class="hljs-number">0</span>] = <span class="hljs-number">1ll</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> ans = (ans * f[ siz[i] ] % mod + mod) % mod;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="ABC336D-Pyramid">ABC336D Pyramid</h2><p><a href="https://www.luogu.com.cn/problem/AT_abc336_d">Link</a></p> <div class="fold"> <div class="fold-title fold-info collapsed" data-toggle="collapse" href="#collapse-30506d0a" role="button" aria-expanded="false" aria-controls="collapse-30506d0a"> <div class="fold-arrow">▶</div>题意 </div> <div class="fold-collapse collapse" id="collapse-30506d0a"> <div class="fold-content"> <p>对于正整数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span>,一个大小为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 的“金字塔数列”为一个长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi>k</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">2k-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的数列,里面的数字依次为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo separator="true">,</mo><mn>3</mn><mo separator="true">,</mo><mo>…</mo><mi>k</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>k</mi><mo separator="true">,</mo><mi>k</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mo>…</mo><mn>3</mn><mo separator="true">,</mo><mn>2</mn><mo separator="true">,</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">1,2,3,\dots k-1,k,k-1,\dots 3,2,1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span></span></span></span>。<br>现在给一个长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 的数列 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span></span></span></span>,你可以进行以下操作任意次,使得数列最后变为一个“金字塔数列”:</p><ul><li>选择一个数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo stretchy="false">(</mo><mn>1</mn><mo>≤</mo><mi>i</mi><mo>≤</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">i(1 \le i \le n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">i</span><span class="mopen">(</span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7955em;vertical-align:-0.136em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>,把 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>S</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">S_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0576em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 减少 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。</li><li>删除整个数列的第一个或最后一个数字。</li></ul><p>问最后生成的“金字塔数列”的最大的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 是多少。</p> </div> </div> </div><h3 id="Solution-10">Solution</h3><p>显然一个金字塔数列是由左右两部分拼接而成的。设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_{i}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个数能组成左半部分的最长长度,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">g_{i}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 为首的序列能组成右半部分的最长长度(差不多等价于后 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个数,但注意转移方程的写法)。一个明显的性质是如果满足可以构成长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 的序列,那么一定可以通过删掉元素构成长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">x-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的序列,所以可以发现以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 为中间项的最长长度即为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>min</mi><mo>⁡</mo><mo stretchy="false">{</mo><msub><mi>f</mi><mi>i</mi></msub><mo separator="true">,</mo><msub><mi>g</mi><mi>i</mi></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\min\{f_i, g_i\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">min</span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span>。</p><p>以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi></mrow><annotation encoding="application/x-tex">f</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span></span></span></span> 为例,假设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">s_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的所有值都是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>+</mo><mi mathvariant="normal">∞</mi></mrow><annotation encoding="application/x-tex">+\infty</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord">+</span><span class="mord">∞</span></span></span></span>,可以得到显然的转移方程 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub><mo>=</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">f_{i}=f_{i-1}+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。如果加上 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">s_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的限制条件,那么 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub><mo>=</mo><mi>min</mi><mo>⁡</mo><mo stretchy="false">{</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><mn>1</mn><mo separator="true">,</mo><msub><mi>s</mi><mi>i</mi></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">f_i=\min\{f_{i-1}+1, s_i\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">min</span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span>。同理可得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mi>i</mi></msub><mo>=</mo><mi>min</mi><mo>⁡</mo><mo stretchy="false">{</mo><msub><mi>g</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>+</mo><mn>1</mn><mo separator="true">,</mo><msub><mi>s</mi><mi>i</mi></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">g_i=\min\{g_{i+1}+1, s_i\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">min</span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span>。</p><h3 id="Core-Code-10">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs cpp">n = <span class="hljs-built_in">read</span>();<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> a[i] = <span class="hljs-built_in">read</span>();<br>&#125;<br>f[<span class="hljs-number">1</span>] = g[n] = <span class="hljs-number">1</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">2</span>; i &lt;= n; i++) &#123;<br> f[i] = <span class="hljs-built_in">min</span>(f[i<span class="hljs-number">-1</span>] + <span class="hljs-number">1</span>, a[i]);<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = n - <span class="hljs-number">1</span>; i &gt;= <span class="hljs-number">1</span>; i--) &#123;<br> g[i] = <span class="hljs-built_in">min</span>(g[i<span class="hljs-number">+1</span>] + <span class="hljs-number">1</span>, a[i]);<br>&#125;<br><span class="hljs-type">int</span> ans = <span class="hljs-number">0</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> ans = <span class="hljs-built_in">max</span>(ans, <span class="hljs-built_in">min</span>(f[i], g[i]));<br>&#125;<br>cout &lt;&lt; ans &lt;&lt; endl;<br></code></pre></td></tr></table></figure><h2 id="SP703-Mobile-Service">SP703 Mobile Service</h2><p><a href="https://www.luogu.com.cn/problem/SP703">Problem Link</a></p> <div class="fold"> <div class="fold-title fold-info collapsed" data-toggle="collapse" href="#collapse-b7b75332" role="button" aria-expanded="false" aria-controls="collapse-b7b75332"> <div class="fold-arrow">▶</div>题意 </div> <div class="fold-collapse collapse" id="collapse-b7b75332"> <div class="fold-content"> <p>有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span> 个流动员工,任何时刻只有一名员工可以移动,不允许同一位置上有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span> 个及以上员工。</p><p>从位置 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span> 移动到位置 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>q</mi></mrow><annotation encoding="application/x-tex">q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">q</span></span></span></span> 需要花费 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mo stretchy="false">(</mo><mi>p</mi><mo separator="true">,</mo><mi>q</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">c(p,q)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">c</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">q</span><span class="mclose">)</span></span></span></span> 的价钱,不移动不需要花费(即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mo stretchy="false">(</mo><mi>i</mi><mo separator="true">,</mo><mi>i</mi><mo stretchy="false">)</mo><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">c(i,i)=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">c</span><span class="mopen">(</span><span class="mord mathnormal">i</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">i</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> )但不保证 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mo stretchy="false">(</mo><mi>p</mi><mo separator="true">,</mo><mi>q</mi><mo stretchy="false">)</mo><mo>=</mo><mi>c</mi><mo stretchy="false">(</mo><mi>q</mi><mo separator="true">,</mo><mi>p</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">c(p,q)=c(q,p)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">c</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">q</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">c</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.03588em;">q</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">p</span><span class="mclose">)</span></span></span></span>。</p><p>现在给出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span> 个请求,第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个请求发生在位置 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">x_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。公司必须按照顺序,派一名员工到位置 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">x_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,过程中不能去其他地方,也就是必须直接过去。</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span> 个流动员工的初始位置分别为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo separator="true">,</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">1,2,3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">3</span></span></span></span>。</p><p>求公司的最小花费。</p> </div> </div> </div><p>tag: DP</p><h3 id="Solution-11">Solution</h3><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo separator="true">,</mo><mi>z</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,x,y,z}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">x</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.04398em;">z</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示处理到第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个请求,三个人分别在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo separator="true">,</mo><mi>z</mi></mrow><annotation encoding="application/x-tex">x,y,z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.04398em;">z</span></span></span></span> 位置上时的最小值。注意到三个人中一定会有一个人在上一个请求的位置,故状态可以优化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,x,y}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">x</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>,此时令 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>z</mi><mo>=</mo><msub><mi>q</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">z=q_{i-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.04398em;">z</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span> 则有</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow></msub><mo>=</mo><mi>min</mi><mo>⁡</mo><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow></msub><mo>+</mo><msub><mi>c</mi><mrow><mi>z</mi><mo separator="true">,</mo><msub><mi>q</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow></msub><mo stretchy="false">)</mo><mspace linebreak="newline"></mspace><msub><mi>f</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>z</mi></mrow></msub><mo>=</mo><mi>min</mi><mo>⁡</mo><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>z</mi></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow></msub><mo>+</mo><msub><mi>c</mi><mrow><mi>y</mi><mo separator="true">,</mo><msub><mi>q</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow></msub><mo stretchy="false">)</mo><mspace linebreak="newline"></mspace><msub><mi>f</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>y</mi><mo separator="true">,</mo><mi>z</mi></mrow></msub><mo>=</mo><mi>min</mi><mo>⁡</mo><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>y</mi><mo separator="true">,</mo><mi>z</mi></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow></msub><mo>+</mo><msub><mi>c</mi><mrow><mi>x</mi><mo separator="true">,</mo><msub><mi>q</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f_{i+1,x,y}=\min(f_{i+1,x,y},f_{i,x,y}+c_{z,q_{i+1}})\\f_{i+1,x,z}=\min(f_{i+1,x,z},f_{i,x,y}+c_{y,q_{i+1}})\\f_{i+1,y,z}=\min(f_{i+1,y,z},f_{i,x,y}+c_{x,q_{i+1}})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">x</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">min</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">x</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">x</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0418em;vertical-align:-0.2918em;"></span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.04398em;">z</span><span class="mpunct mtight">,</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:-0.0359em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2025em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2918em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">x</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.04398em;">z</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">min</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">x</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.04398em;">z</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">x</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0418em;vertical-align:-0.2918em;"></span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span><span class="mpunct mtight">,</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:-0.0359em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2025em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2918em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.04398em;">z</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">min</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.04398em;">z</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">x</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0418em;vertical-align:-0.2918em;"></span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mpunct mtight">,</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:-0.0359em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2025em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2918em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></p><p>初值 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>q</mi><mn>0</mn></msub><mo>=</mo><mn>1</mn><mo separator="true">,</mo><msub><mi>f</mi><mrow><mn>0</mn><mo separator="true">,</mo><mn>2</mn><mo separator="true">,</mo><mn>3</mn></mrow></msub><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">q_0=1, f_{0,2,3}=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span><span class="mpunct mtight">,</span><span class="mord mtight">2</span><span class="mpunct mtight">,</span><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。</p><h3 id="Core-Code-11">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">0</span>;i&lt;n;i++) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> x=<span class="hljs-number">1</span>;x&lt;=l;x++) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> y=<span class="hljs-number">1</span>;y&lt;=l;y++) &#123;<br> <span class="hljs-type">int</span> z=q[i];<br> <span class="hljs-keyword">if</span>(x==y || x==z || y==z) <span class="hljs-keyword">continue</span>;<br> f[i<span class="hljs-number">+1</span>][x][y]=<span class="hljs-built_in">min</span>(f[i<span class="hljs-number">+1</span>][x][y],f[i][x][y]+c[z][q[i<span class="hljs-number">+1</span>]]);<br> f[i<span class="hljs-number">+1</span>][z][y]=<span class="hljs-built_in">min</span>(f[i<span class="hljs-number">+1</span>][z][y],f[i][x][y]+c[x][q[i<span class="hljs-number">+1</span>]]);<br> f[i<span class="hljs-number">+1</span>][x][z]=<span class="hljs-built_in">min</span>(f[i<span class="hljs-number">+1</span>][x][z],f[i][x][y]+c[y][q[i<span class="hljs-number">+1</span>]]);<br> &#125;<br> &#125;<br>&#125;<br><span class="hljs-type">int</span> ans=INF;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> x=<span class="hljs-number">1</span>;x&lt;=l;x++) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> y=<span class="hljs-number">1</span>;y&lt;=l;y++) &#123;<br> <span class="hljs-type">int</span> z=q[n];<br> <span class="hljs-keyword">if</span>(x==y || x==z || y==z) <span class="hljs-keyword">continue</span>;<br> ans=<span class="hljs-built_in">min</span>(ans,f[n][x][y]);<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P4310-绝世好题">P4310 绝世好题</h2><p><a href="https://www.luogu.com.cn/problem/P4310">Link</a> 和同类题 <a href="https://www.luogu.com.cn/problem/CF264B">CF264B Good Sequences</a></p><blockquote><p>给定一个长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 的数列 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的子序列 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>b</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">b_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的最长长度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span>,满足 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>b</mi><mi>i</mi></msub><mtext> and </mtext><msub><mi>b</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msub><mo mathvariant="normal">≠</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">b_i\ \text{and}\ b_{i-1} \neq 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace"> </span><span class="mord text"><span class="mord">and</span></span><span class="mspace"> </span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>,其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mo>≤</mo><mi>i</mi><mo>≤</mo><mi>k</mi></mrow><annotation encoding="application/x-tex">2\leq i\leq k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7955em;vertical-align:-0.136em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span>。</p></blockquote><p>tag: 位运算, DP</p><h3 id="Solution-12">Solution</h3><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_{i}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示最后一个数为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的最长长度,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mtext>bit</mtext><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\text{bit}_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord text"><span class="mord">bit</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示遍历到当前数二进制位 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的数量。</p><p>可以注意到只要两个数同一二进制位都为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,那么他们与起来一定不等于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。同时可以注意到上面的结论还可以传递,比如 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1000</mn><msub><mo stretchy="false">)</mo><mn>2</mn></msub><mtext> and </mtext><mo stretchy="false">(</mo><mn>1010</mn><msub><mo stretchy="false">)</mo><mn>2</mn></msub><mtext> and </mtext><mo stretchy="false">(</mo><mn>0010</mn><msub><mo stretchy="false">)</mo><mn>2</mn></msub><mo mathvariant="normal">≠</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">(1000)_2\ \text{and}\ (1010)_2\ \text{and}\ (0010)_2\neq 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1000</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace"> </span><span class="mord text"><span class="mord">and</span></span><span class="mspace"> </span><span class="mopen">(</span><span class="mord">1010</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace"> </span><span class="mord text"><span class="mord">and</span></span><span class="mspace"> </span><span class="mopen">(</span><span class="mord">0010</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。</p><p>所以在每次循环时,先通过枚举 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 每一个二进制位更新 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,然后用当前情况的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 去更新 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 二进制为为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mtext>bit</mtext><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\text{bit}_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord text"><span class="mord">bit</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>f</mi><mi>i</mi></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>=</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">(</mo><msub><mi>f</mi><mi>i</mi></msub><mo separator="true">,</mo><msub><mtext>bit</mtext><mi>j</mi></msub><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mtext>bit</mtext><mi>j</mi></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>=</mo><msub><mi>f</mi><mi>i</mi></msub></mrow></mstyle></mtd></mtr></mtable></mrow><mo separator="true">,</mo><msub><mi>a</mi><mi>i</mi></msub><mtext> and </mtext><mo stretchy="false">(</mo><mn>1</mn><mo>&lt;</mo><mo>&lt;</mo><mi>j</mi><mo stretchy="false">)</mo><mo mathvariant="normal">≠</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">\begin{cases}f_i&amp;=\max(f_i, \text{bit}_j)\\\text{bit}_j&amp;=f_i\end{cases}, a_i\ \text{and}\ (1&lt;&lt;j)\neq 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord text"><span class="mord">bit</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop">max</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord text"><span class="mord">bit</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace"> </span><span class="mord text"><span class="mord">and</span></span><span class="mspace"> </span><span class="mopen">(</span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></span></p><h3 id="Core-Code-12">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">0</span>;j&lt;=<span class="hljs-number">32</span>;j++) &#123;<br> <span class="hljs-keyword">if</span>((<span class="hljs-number">1</span>&lt;&lt;j)&amp;a[i]) f[i]=<span class="hljs-built_in">max</span>(f[i],bit[j]<span class="hljs-number">+1</span>);<br> &#125;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">0</span>;j&lt;=<span class="hljs-number">32</span>;j++) &#123;<br> <span class="hljs-keyword">if</span>((<span class="hljs-number">1</span>&lt;&lt;j)&amp;a[i]) bit[j]=f[i];<br> &#125;<br>&#125;<br><span class="hljs-type">int</span> ans=<span class="hljs-number">0</span>;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> ans=<span class="hljs-built_in">max</span>(ans,f[i]);<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P1944-最长括号匹配">P1944 最长括号匹配</h2><p><a href="https://www.luogu.com.cn/problem/P1944">Problem Link</a></p> <div class="fold"> <div class="fold-title fold-info collapsed" data-toggle="collapse" href="#collapse-ed62f92c" role="button" aria-expanded="false" aria-controls="collapse-ed62f92c"> <div class="fold-arrow">▶</div>题意 </div> <div class="fold-collapse collapse" id="collapse-ed62f92c"> <div class="fold-content"> <p>对一个由 (,),[,] 括号组成的字符串,求出其中最长的括号匹配子串。</p><ol><li>(),[] 是括号匹配的字符串。</li><li>若 A 是括号匹配的串,则 (A),[A] 是括号匹配的字符串。</li><li>若 A,B 是括号匹配的字符串,则 AB 也是括号匹配的字符串。</li></ol><p>例如:(),[],([]),()() 都是括号匹配的字符串,而 ][,[(]) 则不是。</p><p>字符串 A 的子串是指由 A 中连续若干个字符组成的字符串,包含空串。</p> </div> </div> </div><h3 id="Solution-13">Solution</h3><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">s_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 时最长括号匹配,从头开始线性扫描,扫到后半括号时判断是否能组成匹配。</p><p>显然,当且仅当在其 前面括号匹配长度(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span>)的前一个字符是同类型的前半括号(即类似<br><code>(xxx)</code>)。</p><p>由此可得式子 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub><mo>=</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>−</mo><mn>2</mn></mrow></msub><mo>+</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">f_i=f_{i-1}+f_{i-f_{i-1}-2}+2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9862em;vertical-align:-0.2918em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:-0.1076em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2025em;"><span></span></span></span></span></span></span><span class="mbin mtight">−</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2918em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>。其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>−</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>−</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">i-f_{i-1}-2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span> 表示前半括号。</p><h3 id="Core-Code-13">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> <span class="hljs-keyword">if</span>((s[i]==<span class="hljs-string">&#x27;)&#x27;</span> &amp;&amp; s[i-f[i<span class="hljs-number">-1</span>]<span class="hljs-number">-1</span>]==<span class="hljs-string">&#x27;(&#x27;</span>) || (s[i]==<span class="hljs-string">&#x27;]&#x27;</span> &amp;&amp; s[i-f[i<span class="hljs-number">-1</span>]<span class="hljs-number">-1</span>]==<span class="hljs-string">&#x27;[&#x27;</span>)) f[i]=f[i<span class="hljs-number">-1</span>]+f[i-f[i<span class="hljs-number">-1</span>]<span class="hljs-number">-2</span>]<span class="hljs-number">+2</span>;<br> <span class="hljs-keyword">if</span>(ans&lt;f[i]) &#123;<br> ans=f[i];<br> last=i;<br> &#125;<br>&#125;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=last-ans<span class="hljs-number">+1</span>;i&lt;=last;i++) &#123;<br> <span class="hljs-built_in">putchar</span>(s[i]);<br>&#125;<br>el;<br></code></pre></td></tr></table></figure><h2 id="P1284-三角形牧场">P1284 三角形牧场</h2><p><a href="https://www.luogu.com.cn/problem/P1284">Problem Link</a></p><blockquote><p>给定多个线段,求全部使用情况下最大能围成的三角形周长。</p></blockquote><p>tag: 背包</p><h3 id="Solution-14">Solution</h3><p>显然要用海伦公式求周长,那就需要枚举三角形三条边的长度。由于所有边都需要使用,可以优化为仅枚举两条边的长度。</p><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>k</mi><mo separator="true">,</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{k,i,j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 个边时,是否存在一个两边长为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow><annotation encoding="application/x-tex">i, j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">i</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 的三角形。</p><p>类似 01 背包思路,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>k</mi></msub></mrow><annotation encoding="application/x-tex">f_k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 可以由 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>k</mi><mo>−</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{k-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span> 转移而来,当前的边可以加在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow><annotation encoding="application/x-tex">i,j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">i</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 和第三条边上,也就可以由 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>k</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>i</mi><mo>−</mo><msub><mi>l</mi><mi>k</mi></msub><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>k</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi><mo>−</mo><msub><mi>l</mi><mi>k</mi></msub></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>k</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{k-1, i-l_k, j}, f_{k-1, i, j-l_k}, f_{k-1, i, j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3488em;margin-left:-0.0197em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1512em;"><span></span></span></span></span></span></span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3488em;margin-left:-0.0197em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1512em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 转移而来</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mrow><mi>k</mi><mo separator="true">,</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>true</mtext><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>k</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>i</mi><mo>−</mo><msub><mi>l</mi><mi>k</mi></msub><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><mtext>true or </mtext><msub><mi>f</mi><mrow><mi>k</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi><mo>−</mo><msub><mi>l</mi><mi>k</mi></msub></mrow></msub><mo>=</mo><mtext>true or </mtext><msub><mi>f</mi><mrow><mi>k</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><mtext>true</mtext></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>false</mtext><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mtext>otherwise.</mtext></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">f_{k,i,j}=\begin{cases}\text{true}, &amp;f_{k-1,i-l_k,j}=\text{true}\ \text{or}\ f_{k-1,i,j-l_k}=\text{true}\\text{or}\ f_{k-1,i,j}=\text{true}\\\text{false}, &amp;\text{otherwise.}\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">true</span></span><span class="mpunct">,</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">false</span></span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3488em;margin-left:-0.0197em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1512em;"><span></span></span></span></span></span></span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord text"><span class="mord">true</span></span><span class="mspace"> </span><span class="mord text"><span class="mord">or</span></span><span class="mspace"> </span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3488em;margin-left:-0.0197em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1512em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord text"><span class="mord">true</span></span><span class="mspace"> </span><span class="mord text"><span class="mord">or</span></span><span class="mspace"> </span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord text"><span class="mord">true</span></span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">otherwise.</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>同 01 背包一样,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 这一维可以滚动掉。</p><h3 id="Core-Code-14">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">bool</span> <span class="hljs-title">check</span><span class="hljs-params">(<span class="hljs-type">int</span> a,<span class="hljs-type">int</span> b,<span class="hljs-type">int</span> c)</span> </span>&#123;<br> <span class="hljs-keyword">if</span>(a+b&gt;c &amp;&amp; a+c&gt;b &amp;&amp; b+c&gt;a) <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">else</span> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">double</span> <span class="hljs-title">calc</span><span class="hljs-params">(<span class="hljs-type">double</span> a,<span class="hljs-type">double</span> b,<span class="hljs-type">double</span> c)</span> </span>&#123;<br> <span class="hljs-type">double</span> p=(a+b+c)/<span class="hljs-number">2.0</span>;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">100.0</span>*<span class="hljs-built_in">sqrt</span>(p*(p-a)*(p-b)*(p-c));<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> f[<span class="hljs-number">0</span>][<span class="hljs-number">0</span>]=<span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=p;j&gt;=<span class="hljs-number">0</span>;j--) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> k=p;k&gt;=<span class="hljs-number">0</span>;k--) &#123;<br> <span class="hljs-keyword">if</span>(j-l[i]&gt;=<span class="hljs-number">0</span> &amp;&amp; f[j-l[i]][k]) f[j][k]=<span class="hljs-number">1</span>;<br> <span class="hljs-keyword">if</span>(k-l[i]&gt;=<span class="hljs-number">0</span> &amp;&amp; f[j][k-l[i]]) f[j][k]=<span class="hljs-number">1</span>;<br> &#125;<br> &#125;<br> &#125;<br> <span class="hljs-type">int</span> ans=<span class="hljs-number">-1</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=p;i++) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">1</span>;j&lt;=p;j++) &#123;<br> <span class="hljs-keyword">if</span>(<span class="hljs-built_in">check</span>(i,j,p-i-j) &amp;&amp; f[i][j]) ans=<span class="hljs-built_in">max</span>(ans,(<span class="hljs-type">int</span>)<span class="hljs-built_in">calc</span>(i,j,p-i-j));<br> &#125;<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P4084-USACO17DEC-Barn-Painting-G">P4084 [USACO17DEC] Barn Painting G</h2><p><a href="https://www.luogu.com.cn/problem/P4084">Problem Link</a></p><blockquote><p>给定一颗 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span> 个节点组成的树,你要给每个点涂上三种颜色之一,其中有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span></span></span></span> 个节点已染色,要求任意两相邻节点颜色不同,求合法染色方案数。</p></blockquote><p>tag: 树形 dp</p><h3 id="Solution-15">Solution</h3><p>树形 DP,设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 节点颜色 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 的方案数。</p><p>若 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 已经被染色 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 了,那显然 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">f_{i,j}=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,其他为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>;若未被染色,则 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><mn>1</mn><mo separator="true">,</mo><mi>j</mi><mo>∈</mo><mo stretchy="false">[</mo><mn>1</mn><mo separator="true">,</mo><mn>3</mn><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">f_{i,j}=1, j\in [1,3]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">3</span><span class="mclose">]</span></span></span></span>。</p><p>从下向上转移:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo>=</mo><msub><mo>∏</mo><mrow><mi>v</mi><mo>∈</mo><mtext>son</mtext><mo stretchy="false">(</mo><mi>u</mi><mo stretchy="false">)</mo></mrow></msub><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>2</mn></mrow></msub><mo>+</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>3</mn></mrow></msub><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>2</mn></mrow></msub><mo>=</mo><msub><mo>∏</mo><mrow><mi>v</mi><mo>∈</mo><mtext>son</mtext><mo stretchy="false">(</mo><mi>u</mi><mo stretchy="false">)</mo></mrow></msub><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>3</mn></mrow></msub><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>3</mn></mrow></msub><mo>=</mo><msub><mo>∏</mo><mrow><mi>v</mi><mo>∈</mo><mtext>son</mtext><mo stretchy="false">(</mo><mi>u</mi><mo stretchy="false">)</mo></mrow></msub><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>2</mn></mrow></msub><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\begin{cases}f_{u,1}=\prod_{v\in \text{son}(u)} (f_{v,2}+f_{v,3})\\f_{u,2}=\prod_{v\in \text{son}(u)} (f_{v,1}+f_{v,3})\\f_{u,3}=\prod_{v\in \text{son}(u)} (f_{v,1}+f_{v,2})\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:4.4481em;vertical-align:-1.9741em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.35em;"><span style="top:-2.2em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎩</span></span></span><span style="top:-2.192em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.316em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.316em" style="width:0.8889em" viewBox="0 0 888.89 316" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V316 H384z M384 0 H504 V316 H384z"/></svg></span></span><span style="top:-3.15em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎨</span></span></span><span style="top:-4.292em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.316em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.316em" style="width:0.8889em" viewBox="0 0 888.89 316" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V316 H384z M384 0 H504 V316 H384z"/></svg></span></span><span style="top:-4.6em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎧</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.85em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.4741em;"><span style="top:-4.4741em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∏</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2253em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mrel mtight">∈</span><span class="mord text mtight"><span class="mord mtight">son</span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">u</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4747em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span><span style="top:-2.9914em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∏</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2253em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mrel mtight">∈</span><span class="mord text mtight"><span class="mord mtight">son</span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">u</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4747em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span><span style="top:-1.5086em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∏</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2253em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mrel mtight">∈</span><span class="mord text mtight"><span class="mord mtight">son</span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">u</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4747em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.9741em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><h3 id="Core-Code-15">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">define</span> int ll</span><br>vector&lt;<span class="hljs-type">int</span>&gt; e[N];<br><span class="hljs-type">int</span> n,k;<br><span class="hljs-type">int</span> f[N][<span class="hljs-number">5</span>];<br><span class="hljs-type">bool</span> is_colored[N];<br><span class="hljs-type">bool</span> vis[N];<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs</span><span class="hljs-params">(<span class="hljs-type">int</span> u)</span> </span>&#123;<br> vis[u]=<span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">0</span>;i&lt;e[u].<span class="hljs-built_in">size</span>();i++) &#123;<br> <span class="hljs-type">int</span> v=e[u][i];<br> <span class="hljs-keyword">if</span>(!vis[v]) &#123;<br> <span class="hljs-built_in">dfs</span>(v);<br> f[u][<span class="hljs-number">1</span>]=(f[u][<span class="hljs-number">1</span>]*((f[v][<span class="hljs-number">2</span>]+f[v][<span class="hljs-number">3</span>]+mod)%mod)+mod)%mod;<br> f[u][<span class="hljs-number">2</span>]=(f[u][<span class="hljs-number">2</span>]*((f[v][<span class="hljs-number">1</span>]+f[v][<span class="hljs-number">3</span>]+mod)%mod)+mod)%mod;<br> f[u][<span class="hljs-number">3</span>]=(f[u][<span class="hljs-number">3</span>]*((f[v][<span class="hljs-number">1</span>]+f[v][<span class="hljs-number">2</span>]+mod)%mod)+mod)%mod;<br> &#125;<br> &#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">signed</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> n=<span class="hljs-built_in">read</span>();k=<span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;n;i++) &#123;<br> <span class="hljs-type">int</span> u=<span class="hljs-built_in">read</span>(),v=<span class="hljs-built_in">read</span>();<br> e[u].<span class="hljs-built_in">push_back</span>(v);<br> e[v].<span class="hljs-built_in">push_back</span>(u);<br> &#125;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=k;i++) &#123;<br> <span class="hljs-type">int</span> b=<span class="hljs-built_in">read</span>(),c=<span class="hljs-built_in">read</span>();<br> f[b][c]=<span class="hljs-number">1</span>;<br> is_colored[b]=<span class="hljs-number">1</span>;<br> &#125;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> <span class="hljs-keyword">if</span>(!is_colored[i]) f[i][<span class="hljs-number">1</span>]=f[i][<span class="hljs-number">2</span>]=f[i][<span class="hljs-number">3</span>]=<span class="hljs-number">1</span>;<br> &#125;<br> <span class="hljs-built_in">dfs</span>(<span class="hljs-number">1</span>);<br> <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;%lld\n&quot;</span>,(f[<span class="hljs-number">1</span>][<span class="hljs-number">1</span>]+f[<span class="hljs-number">1</span>][<span class="hljs-number">2</span>]+f[<span class="hljs-number">1</span>][<span class="hljs-number">3</span>]+mod)%mod);<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P2458-SDOI2006-保安站岗">P2458 [SDOI2006] 保安站岗</h2><p><a href="https://www.luogu.com.cn/problem/P2458">Link</a></p><blockquote><p>给定一颗树,每个点有点权 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span>,要求一条边的两个端点至少有一个被占用,求占用整棵树的代价的最小值。</p></blockquote><p>tag: 树形 DP</p><p>与 <a href="#P2016-%E6%88%98%E7%95%A5%E6%B8%B8%E6%88%8F">P2016 战略游戏</a> 不同,本题为守点。如 <code>1-2-3-4</code> 本题可以选择 <code>1</code> 和 <code>4</code>,但战略游戏不可。所以本题需要设这三个状态。</p><p>本题守点,意味着如果一个点不选,那么只需要与这个点相连的任一点选择即可,而守边则就需要与这个点相连的所有点都选。</p><h3 id="Solution-16">Solution</h3><p>首先不能将状态设为一个点被占或不占,这样会造成向上转移时父节点无法影响子节点。</p><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>1</mn><mi mathvariant="normal">/</mi><mn>2</mn><mi mathvariant="normal">/</mi><mn>3</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{u,1/2/3}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0496em;vertical-align:-0.3552em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.5198em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">1/2/3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3552em;"><span></span></span></span></span></span></span></span></span></span> 表示 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 节点 自身被占用/被儿子覆盖/被父亲覆盖。</p><p>首先第一种情况显然 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo>=</mo><msub><mo>∑</mo><mrow><mi>v</mi><mo>∈</mo><mtext>son</mtext><mo stretchy="false">(</mo><mi>u</mi><mo stretchy="false">)</mo></mrow></msub><mi>min</mi><mo>⁡</mo><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>2</mn></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>3</mn></mrow></msub><mo stretchy="false">)</mo><mo>+</mo><msub><mi>k</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">f_{u,1}=\sum_{v\in \text{son}(u)}\min(f_{v,1}, f_{v,2}, f_{v,3})+k_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2247em;vertical-align:-0.4747em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2253em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mrel mtight">∈</span><span class="mord text mtight"><span class="mord mtight">son</span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">u</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4747em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">min</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0315em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。</p><p>对于第三种情况,由于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 被父亲覆盖,自身未被占用,那么就需要使 以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 的儿子 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span></span></span></span> 为根的子树中的点都被覆盖。问题转化后,只有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span></span></span></span> 自身被占用和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span></span></span></span> 被儿子覆盖可以满足条件,即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>3</mn></mrow></msub><mo>=</mo><msub><mo>∑</mo><mrow><mi>v</mi><mo>∈</mo><mtext>son</mtext><mo stretchy="false">(</mo><mi>u</mi><mo stretchy="false">)</mo></mrow></msub><mi>min</mi><mo>⁡</mo><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>2</mn></mrow></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f_{u,3}=\sum_{v\in \text{son}(u)}\min(f_{v,1}, f_{v,2})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2247em;vertical-align:-0.4747em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2253em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mrel mtight">∈</span><span class="mord text mtight"><span class="mord mtight">son</span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">u</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4747em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">min</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</p><p>对于第二种情况,分析方式类似第三种,首先要满足子树被覆盖。同时,要有至少一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span></span></span></span> 自身被占用,才能影响到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span>。可以在上面的式子的基础上略加更改,若最小值全部被 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>2</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{v,2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 取到,那么最后再加上所有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span></span></span></span> 中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{v,1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 最小的一个即可。</p><p>最终答案即为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>min</mi><mo>⁡</mo><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mtext>root</mtext><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mtext>root</mtext><mo separator="true">,</mo><mn>2</mn></mrow></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\min(f_{\text{root},1}, f_{\text{root},2})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">min</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">root</span></span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">root</span></span><span class="mpunct mtight">,</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</p><h3 id="Core-Code-16">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs</span><span class="hljs-params">(<span class="hljs-type">int</span> u,<span class="hljs-type">int</span> fa)</span> </span>&#123;<br> <span class="hljs-type">int</span> minn=INF;<br> <span class="hljs-type">bool</span> flag=<span class="hljs-number">0</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-keyword">auto</span> v:e[u]) &#123;<br> <span class="hljs-keyword">if</span>(v==fa) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-built_in">dfs</span>(v,u);<br> f[u][<span class="hljs-number">1</span>]+=<span class="hljs-built_in">min</span>(f[v][<span class="hljs-number">1</span>],<span class="hljs-built_in">min</span>(f[v][<span class="hljs-number">2</span>],f[v][<span class="hljs-number">3</span>]));<br> f[u][<span class="hljs-number">2</span>]+=<span class="hljs-built_in">min</span>(f[v][<span class="hljs-number">1</span>],f[v][<span class="hljs-number">2</span>]);<br> f[u][<span class="hljs-number">3</span>]+=<span class="hljs-built_in">min</span>(f[v][<span class="hljs-number">1</span>],f[v][<span class="hljs-number">2</span>]);<br> minn=<span class="hljs-built_in">min</span>(minn,f[v][<span class="hljs-number">1</span>]-f[v][<span class="hljs-number">2</span>]);<br> <span class="hljs-keyword">if</span>(f[v][<span class="hljs-number">1</span>]&lt;f[v][<span class="hljs-number">2</span>]) flag=<span class="hljs-number">1</span>;<br> &#125;<br> <span class="hljs-keyword">if</span>(!flag) f[u][<span class="hljs-number">2</span>]+=minn;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> n=<span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> <span class="hljs-type">int</span> u=<span class="hljs-built_in">read</span>();<br> k[u]=<span class="hljs-built_in">read</span>();<br> <span class="hljs-type">int</span> m=<span class="hljs-built_in">read</span>();<br> f[u][<span class="hljs-number">1</span>]=k[u];<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">1</span>;j&lt;=m;j++) &#123;<br> <span class="hljs-type">int</span> v=<span class="hljs-built_in">read</span>();<br> e[u].<span class="hljs-built_in">push_back</span>(v);<br> e[v].<span class="hljs-built_in">push_back</span>(u);<br> &#125;<br> &#125;<br> <span class="hljs-built_in">dfs</span>(<span class="hljs-number">1</span>,<span class="hljs-number">0</span>);<br> cout&lt;&lt;<span class="hljs-built_in">min</span>(f[<span class="hljs-number">1</span>][<span class="hljs-number">1</span>],f[<span class="hljs-number">1</span>][<span class="hljs-number">2</span>])&lt;&lt;endl;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P2016-战略游戏">P2016 战略游戏</h2><p><a href="https://www.luogu.com.cn/problem/P2016">Link</a></p><blockquote><p>给定一颗树,一个节点可以看守相邻的所有边,求看守整棵树需要的最少的节点数。</p></blockquote><p>tag: 树形 DP</p><p>本题与上一题不用的是,本题可以转化为一个点可以看守与这个点相连的所有边。</p><p>本题守边,意味着如果一个点不选,那么就需要与这个点相连的所有点都选,而守点则只需要与这个点相连的任一点选择即可。</p><h3 id="Solution-17">Solution</h3><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn><mi mathvariant="normal">/</mi><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{u,0/1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0496em;vertical-align:-0.3552em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.5198em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0/1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3552em;"><span></span></span></span></span></span></span></span></span></span> 表示 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 节点选 / 不选。</p><p>如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 不选,那么他的所有儿子必选,因为需要满足看守所有的边,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub><mo>=</mo><msub><mo>∑</mo><mrow><mi>v</mi><mo>∈</mo><mtext>son</mtext><mo stretchy="false">(</mo><mi>u</mi><mo stretchy="false">)</mo></mrow></msub><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{u,0}=\sum_{v\in \text{son}(u)} f_{v,1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2247em;vertical-align:-0.4747em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2253em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mrel mtight">∈</span><span class="mord text mtight"><span class="mord mtight">son</span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">u</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4747em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>;</p><p>如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 选,那么他的儿子选不选并不重要,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub><mo>=</mo><msub><mo>∑</mo><mrow><mi>v</mi><mo>∈</mo><mtext>son</mtext><mo stretchy="false">(</mo><mi>u</mi><mo stretchy="false">)</mo></mrow></msub><mi>min</mi><mo>⁡</mo><mo stretchy="false">{</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">f_{u,0}=\sum_{v\in \text{son}(u)}\min\{f_{v,0}, f_{v,1}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2247em;vertical-align:-0.4747em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2253em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mrel mtight">∈</span><span class="mord text mtight"><span class="mord mtight">son</span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">u</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4747em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">min</span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span>。</p><h3 id="Core-Code-17">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs</span><span class="hljs-params">(<span class="hljs-type">int</span> u,<span class="hljs-type">int</span> fa)</span> </span>&#123;<br> f[u][<span class="hljs-number">1</span>]=<span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-keyword">auto</span> v:e[u]) &#123;<br> <span class="hljs-keyword">if</span>(v==fa) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-built_in">dfs</span>(v,u);<br> f[u][<span class="hljs-number">0</span>]+=f[v][<span class="hljs-number">1</span>];<br> f[u][<span class="hljs-number">1</span>]+=<span class="hljs-built_in">min</span>(f[v][<span class="hljs-number">0</span>],f[v][<span class="hljs-number">1</span>]);<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P3478-POI2008-STA-Station">P3478 [POI2008] STA-Station</h2><p><a href="https://www.luogu.com.cn/problem/P3478">Link</a></p><blockquote><p>给出一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个点的树,找出一个点,使以这个点为根的树所有点的深度之和最大</p></blockquote><p>tag: 树形 DP, 换根 DP</p><h3 id="Solution-18">Solution</h3><p>换根板子。</p><p>首先考虑如何暴力,显然是以每个点为根都跑一边 dfs,时间复杂度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\mathcal O(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathcal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</p><p>一般换根 DP 题的处理思路是:</p><ol><li>先指定一个根节点,一次 dfs 自下而上,用子节点的值更新父节点;</li><li>从上一步的根出发,dfs 转移父节点对子节点的贡献。</li></ol><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">f_{u}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 为以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 为根的深度和。运用人类智慧可以注意到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 节点的值可以通过其父亲转移。如下图,我们已经处理好了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span> 号节点的答案,那么发现以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4</mn></mrow><annotation encoding="application/x-tex">4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span> 为根的时,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4</mn></mrow><annotation encoding="application/x-tex">4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span> 的子树(包括自己)的相对深度都减少了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,而 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4</mn></mrow><annotation encoding="application/x-tex">4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span> 上面的三个点深度都增加了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。</p><p><img src="https://img.makerlife.top/data/qexo/2024-09-25-P3478a-a5711b39e88ee72f413fca33403c4858.png" alt="P3478a.png"></p><p>可以得到转移方程:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mi>v</mi></msub><mo>=</mo><msub><mi>f</mi><mi>u</mi></msub><mo>−</mo><msub><mtext>siz</mtext><mi>v</mi></msub><mo>×</mo><mn>1</mn><mo>+</mo><mo stretchy="false">(</mo><mi>n</mi><mo>−</mo><msub><mtext>siz</mtext><mi>v</mi></msub><mo stretchy="false">)</mo><mo>×</mo><mn>1</mn><mo>=</mo><msub><mi>f</mi><mi>u</mi></msub><mo>+</mo><mi>n</mi><mo>−</mo><mn>2</mn><mo>×</mo><msub><mtext>siz</mtext><mi>v</mi></msub></mrow><annotation encoding="application/x-tex">f_{v}=f_{u}-\text{siz}_{v}\times 1+(n-\text{siz}_{v})\times 1=f_u+n-2\times \text{siz}_v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8179em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8179em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span></p><p>其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mtext>siz</mtext><mi>v</mi></msub><mo>×</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">\text{siz}_v\times 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8179em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 表示 <em><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4</mn></mrow><annotation encoding="application/x-tex">4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span> 的子树</em>,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><msub><mtext>siz</mtext><mi>v</mi></msub></mrow><annotation encoding="application/x-tex">n-\text{siz}_v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8179em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示 <em><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4</mn></mrow><annotation encoding="application/x-tex">4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span> 上面的点</em>。</p><h3 id="Core-Code-18">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs1</span><span class="hljs-params">(<span class="hljs-type">int</span> u,<span class="hljs-type">int</span> fa)</span> </span>&#123;<br> g.siz[u]=<span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-keyword">auto</span> v:e[u]) &#123;<br> <span class="hljs-keyword">if</span>(v==fa) <span class="hljs-keyword">continue</span>;<br> g.dep[v]=g.dep[u]<span class="hljs-number">+1</span>;<br> <span class="hljs-built_in">dfs1</span>(v,u);<br> g.siz[u]+=g.siz[v];<br> &#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs2</span><span class="hljs-params">(<span class="hljs-type">int</span> u,<span class="hljs-type">int</span> fa)</span> </span>&#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-keyword">auto</span> v:e[u]) &#123;<br> <span class="hljs-keyword">if</span>(v==fa) <span class="hljs-keyword">continue</span>;<br> f[v]=f[u]+n<span class="hljs-number">-2ll</span>*g.siz[v];<br> <span class="hljs-built_in">dfs2</span>(v,u);<br> &#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> <span class="hljs-built_in">dfs1</span>(<span class="hljs-number">1</span>,<span class="hljs-number">0</span>);<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">2</span>;i&lt;=n;i++) &#123;<br> f[<span class="hljs-number">1</span>]+=g.dep[i];<br> &#125;<br> <span class="hljs-built_in">dfs2</span>(<span class="hljs-number">1</span>,<span class="hljs-number">0</span>);<br> ll ans=-INF,maxn=-INF;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> <span class="hljs-keyword">if</span>(maxn&lt;f[i]) &#123;<br> maxn=f[i];<br> ans=i;<br> &#125;<br> &#125;<br> cout&lt;&lt;ans&lt;&lt;endl;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P3047-USACO12FEB-Nearby-Cows-G">P3047 [USACO12FEB] Nearby Cows G</h2><p><a href="https://www.luogu.com.cn/problem/P3047">Link</a></p><blockquote><p>给你一棵 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个点的树,点带权,对于每个节点求出距离它不超过 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 的所有节点权值和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>m</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">m_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。</p></blockquote><p>tag: 换根 DP</p><h3 id="Solution-19">Solution</h3><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mi>d</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{u,d}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">d</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 为与 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 节点距离小于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 的权值和。</p><p>两边 dfs,第一遍向上转移,计算子树对当前节点的贡献。注意到与 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 节点距离小于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 的节点数可以由它的左右子树转移而来,等价于其与所有子节点距离小于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">k-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的节点数之和,得到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mi>d</mi></mrow></msub><mo>=</mo><msub><mo>∑</mo><mrow><mi>v</mi><mo>∈</mo><mtext>son</mtext><mo stretchy="false">(</mo><mi>u</mi><mo stretchy="false">)</mo></mrow></msub><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mi>d</mi><mo>−</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{u,d}=\sum_{v\in \text{son}(u)} f_{v,d-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">d</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2247em;vertical-align:-0.4747em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2253em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mrel mtight">∈</span><span class="mord text mtight"><span class="mord mtight">son</span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">u</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4747em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">d</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>。</p><p>第二遍时计算父亲对当前节点的贡献。同样可以由一的思路 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mi>d</mi></mrow></msub><mo>=</mo><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mi>d</mi><mo>−</mo><mn>1</mn></mrow></msub><mo stretchy="false">(</mo><mi>v</mi><mo>∈</mo><mtext>son</mtext><mo stretchy="false">(</mo><mi>u</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f_{v,d}=f_{u,d-1}(v\in \text{son}(u))</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">d</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">d</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord text"><span class="mord">son</span></span><span class="mopen">(</span><span class="mord mathnormal">u</span><span class="mclose">))</span></span></span></span>,但是注意到这样会重复计算子树中一部分的节点,因为到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 距离为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi></mrow><annotation encoding="application/x-tex">d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span></span></span></span> 的点包含到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span></span></span></span> 距离为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">d-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的点,如下图的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mn>2</mn><mo separator="true">,</mo><mn>2</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{2,2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mpunct mtight">,</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 就包含了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mn>3</mn><mo separator="true">,</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{3,1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 的贡献,所以我们简单容斥一下减去 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mi>d</mi><mo>−</mo><mn>2</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{v,d-2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">d</span><span class="mbin mtight">−</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 的部分。</p><p>注意在进行第二遍 dfs 时,要注意循环顺序,防止容斥后的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi></mrow><annotation encoding="application/x-tex">f</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span></span></span></span> 影响未更新的。</p><p><img src="https://img.makerlife.top/data/qexo/2024-09-25-P3047a-bca7efde9d8e4b73d4a8d5b89a9536c3.png" alt="P3047a.png"></p><h3 id="Core-Code-19">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs1</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> fa)</span> </span>&#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : e[u]) &#123;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-built_in">dfs1</span>(v, u);<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> d = <span class="hljs-number">1</span>; d &lt;= k; d++) &#123;<br> f[u][d] += f[v][d<span class="hljs-number">-1</span>];<br> &#125;<br> &#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs2</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> fa)</span> </span>&#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : e[u]) &#123;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> d = <span class="hljs-number">1</span>; d &lt;= k; d++) &#123;<br> f[v][d] += f[u][d<span class="hljs-number">-1</span>];<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> d = k; d &gt;= <span class="hljs-number">2</span>; d--) &#123;<br> f[v][d] -= f[v][d<span class="hljs-number">-2</span>];<br> &#125;<br> <span class="hljs-built_in">dfs2</span>(v, u);<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="CF474E-Pillars">CF474E Pillars</h2><p><a href="https://www.luogu.com.cn/problem/CF474E">Link</a></p><blockquote><ul><li>给定序列长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 的序列 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span>,和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi></mrow><annotation encoding="application/x-tex">d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span></span></span></span>。</li><li>找出一个最长的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span> 的子序列 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span>(设其长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span>),使得对于任意的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>i</mi><mo>&lt;</mo><mi>m</mi></mrow><annotation encoding="application/x-tex">1\le i\lt m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6986em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span>,有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><msub><mi>b</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>−</mo><msub><mi>b</mi><mi>i</mi></msub><mi mathvariant="normal">∣</mi><mo>≥</mo><mi>d</mi></mrow><annotation encoding="application/x-tex">|b_{i+1}-b_i|\ge d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">∣</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span></span></span></span>。</li><li>输出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span> 和序列 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span> 在序列 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span> 中每个数的下标。</li></ul></blockquote><p>tag: 动态开点线段树, 线段树优化 DP</p><h3 id="Solution-20">Solution</h3><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 位的最大长度,可以得到一个显然的转移方程</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><msub><mi>f</mi><mi>i</mi></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><munder><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mo stretchy="false">∣</mo><msub><mi>b</mi><mi>i</mi></msub><mo>−</mo><msub><mi>b</mi><mi>j</mi></msub><mo stretchy="false">∣</mo><mo>≥</mo><mi>d</mi></mrow></munder><mo stretchy="false">{</mo><msub><mi>f</mi><mi>j</mi></msub><mo stretchy="false">}</mo><mo>+</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><munder><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mn>1</mn><mo>≤</mo><mi>j</mi><mo>≤</mo><msub><mi>a</mi><mi>i</mi></msub><mo>−</mo><mi>d</mi><mtext> or </mtext><msub><mi>a</mi><mi>i</mi></msub><mo>+</mo><mi>d</mi><mo>≤</mo><mi>j</mi><mo>≤</mo><mi>n</mi></mrow></munder><mo stretchy="false">{</mo><msub><mi>f</mi><mi>j</mi></msub><mo stretchy="false">}</mo><mo>+</mo><mn>1</mn></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}f_i &amp;= \max_{\lvert b_i - b_j\rvert \geq d}\{f_j\} + 1\\&amp;=\max_{1\leq j\leq a_i - d\ \text{or}\ a_i + d\leq j\leq n}\{f_j\} + 1\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:4.1565em;vertical-align:-1.8283em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.3283em;"><span style="top:-4.4883em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.3599em;"><span class="pstrut" style="height:3em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.8283em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.3283em;"><span style="top:-4.4883em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4306em;"><span style="top:-2.309em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mopen mtight">∣</span><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2819em;"><span></span></span></span></span></span></span><span class="mclose mtight">∣</span><span class="mrel mtight">≥</span><span class="mord mathnormal mtight">d</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.9883em;"><span></span></span></span></span></span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">}</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-2.3599em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4306em;"><span style="top:-2.3479em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mrel mtight">≤</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">−</span><span class="mord mathnormal mtight">d</span><span class="mspace mtight"><span class="mtight"> </span></span><span class="mord text mtight"><span class="mord mtight">or</span></span><span class="mspace mtight"><span class="mtight"> </span></span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">d</span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8882em;"><span></span></span></span></span></span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">}</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.8283em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>考虑线段树优化掉两部分区间最值。使用权值线段树,每次计算完 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 后把 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 放到对应的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的位置即可。</p><p>数据范围过大,需动态开点或离散化。</p><h3 id="Core-Code-20">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-type">int</span> n, d;<br><span class="hljs-type">int</span> tot = <span class="hljs-number">0</span>;<br><span class="hljs-type">int</span> rt;<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">pr</span> &#123;<br> <span class="hljs-type">int</span> val, id;<br> <span class="hljs-type">bool</span> <span class="hljs-keyword">operator</span> &lt; (pr <span class="hljs-type">const</span>&amp; x) &#123;<br> <span class="hljs-keyword">return</span> val &lt; x.val;<br> &#125;<br>&#125;a[N], f[N], pre[N];<br><span class="hljs-function">pr <span class="hljs-title">max</span><span class="hljs-params">(pr x, pr y)</span> </span>&#123;<br> <span class="hljs-keyword">if</span> (x &lt; y) <span class="hljs-keyword">return</span> y;<br> <span class="hljs-keyword">else</span> <span class="hljs-keyword">return</span> x;<br>&#125;<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">node</span> &#123;<br> pr val;<br> <span class="hljs-type">int</span> l, r;<br>&#125;t[<span class="hljs-number">40</span> * N];<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">tree</span> &#123;<br> <span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">pushup</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span> </span>&#123;<br> t[p].val = <span class="hljs-built_in">max</span>(t[t[p].l].val, t[t[p].r].val);<br> &#125;<br> <span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">modify</span><span class="hljs-params">(<span class="hljs-type">int</span> &amp;p, <span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r, <span class="hljs-type">int</span> x, pr w)</span> </span>&#123;<br> <span class="hljs-keyword">if</span> (!p) p = ++tot;<br> <span class="hljs-keyword">if</span> (l == r) &#123;<br> <span class="hljs-keyword">if</span> (t[p].val &lt; w) t[p].val = w;<br> <span class="hljs-keyword">return</span>;<br> &#125;<br> <span class="hljs-type">int</span> mid = (l + r) &gt;&gt; <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">if</span> (x &lt;= mid) <span class="hljs-built_in">modify</span>(t[p].l, l, mid, x, w);<br> <span class="hljs-keyword">else</span> <span class="hljs-built_in">modify</span>(t[p].r, mid + <span class="hljs-number">1</span>, r, x, w);<br> <span class="hljs-built_in">pushup</span>(p);<br> &#125;<br> <span class="hljs-function">pr <span class="hljs-title">query</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r, <span class="hljs-type">int</span> x, <span class="hljs-type">int</span> y)</span> </span>&#123;<br> <span class="hljs-keyword">if</span> (!p || y &lt; x) <span class="hljs-keyword">return</span> &#123;<span class="hljs-number">0</span>, <span class="hljs-number">0</span>&#125;;<br> <span class="hljs-keyword">if</span> (x &lt;= l &amp;&amp; r &lt;= y) &#123;<br> <span class="hljs-keyword">return</span> t[p].val;<br> &#125;<br> <span class="hljs-type">int</span> mid = (l + r) &gt;&gt; <span class="hljs-number">1</span>;<br> pr res = &#123;-INF, <span class="hljs-number">0</span>&#125;;<br> <span class="hljs-keyword">if</span> (x &lt;= mid) res = <span class="hljs-built_in">max</span>(res, <span class="hljs-built_in">query</span>(t[p].l, l, mid, x, y));<br> <span class="hljs-keyword">if</span> (y &gt;= mid + <span class="hljs-number">1</span>) res = <span class="hljs-built_in">max</span>(res, <span class="hljs-built_in">query</span>(t[p].r, mid + <span class="hljs-number">1</span>, r, x, y));<br> <span class="hljs-keyword">return</span> res;<br> &#125;<br>&#125;sgt;<br><span class="hljs-function"><span class="hljs-type">signed</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> n = <span class="hljs-built_in">read</span>(); d = <span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> a[i].val = <span class="hljs-built_in">read</span>();<br> a[i].id = i;<br> &#125;<br> pr maxn = &#123;<span class="hljs-number">0</span>, <span class="hljs-number">0</span>&#125;;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> f[i] = <span class="hljs-built_in">max</span>(sgt.<span class="hljs-built_in">query</span>(rt, <span class="hljs-number">1</span>, MAXN, <span class="hljs-number">1</span>, a[i].val - d),<br> sgt.<span class="hljs-built_in">query</span>(rt, <span class="hljs-number">1</span>, MAXN, a[i].val + d, MAXN));<br> <span class="hljs-built_in">bug</span>(f[i].id);<br> f[i].val += <span class="hljs-number">1</span>;<br> maxn = <span class="hljs-built_in">max</span>(maxn, &#123;f[i].val, i&#125;);<br> sgt.<span class="hljs-built_in">modify</span>(rt, <span class="hljs-number">1</span>, MAXN, a[i].val, &#123;f[i].val, i&#125;);<br> &#125;<br> cout &lt;&lt; maxn.val &lt;&lt; endl;<br> stack&lt;<span class="hljs-type">int</span>&gt; st;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = maxn.id; i &gt;= <span class="hljs-number">1</span>; i = f[i].id) &#123;<br> <span class="hljs-built_in">bug</span>(f[i].id);<br> st.<span class="hljs-built_in">push</span>(i);<br> &#125;<br> <span class="hljs-keyword">while</span> (!st.<span class="hljs-built_in">empty</span>()) &#123;<br> cout &lt;&lt; st.<span class="hljs-built_in">top</span>() &lt;&lt; <span class="hljs-string">&quot; &quot;</span>;<br> st.<span class="hljs-built_in">pop</span>();<br> &#125;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="CF708C-Centroids">CF708C Centroids</h2><p><a href="https://www.luogu.com.cn/problem/CF708C">Link</a></p><blockquote><p>给定一颗树,你有一次将树改造的机会,改造的意思是删去一条边,再加入一条边,保证改造后还是一棵树。</p><p>请问有多少点可以通过改造,成为这颗树的重心?(如果以某个点为根,每个子树的大小都不大于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mstyle displaystyle="true" scriptlevel="0"><mfrac><mi>n</mi><mn>2</mn></mfrac></mstyle></mrow><annotation encoding="application/x-tex">\dfrac{n}{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>,则称某个点为重心)</p></blockquote><p>tag: 树形 DP, 换根 DP</p><h3 id="Solution-21">Solution</h3><p>根据重心的定义,如果一个点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 不是重心,那么它的子树中一定有且仅有一个的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>i</mi><mi>z</mi><mo>&gt;</mo><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">siz &gt; \lfloor\frac{n}{2}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6986em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.04398em;">z</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span>。如果想要把 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 变成重心,那么就需要在这个子树中找到一个更小的子树,把它接到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 上,要解决的是是否存在一个这样的子树可以满足条件。</p><ol><li>如果先将一个不需要操作即可满足条件的节点钦定为根,那么这棵树的所有子树都满足 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>i</mi><mi>z</mi><mo>≤</mo><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">siz\leq \lfloor\frac{n}{2}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7955em;vertical-align:-0.136em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.04398em;">z</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span>。</li><li>所以,若在这棵新树上进行 DP,对于任何一个节点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span>,如果它不是重心,只能因为除了它的子树以外的点数不满足要求,即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><mi>s</mi><mi>i</mi><msub><mi>z</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">n - siz_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">i</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.04398em;">z</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.044em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。我们记录一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">g_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示除了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 子树以外的,不超过 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">\lfloor\frac{n}{2}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span> 的最大子树大小,这个子树就是用来切下来挂到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 上的。</li><li>那么,只需要判断除了上面这两部分一定合法的,剩下的那些点是否合法,即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><mi>s</mi><mi>i</mi><msub><mi>z</mi><mi>u</mi></msub><mo>−</mo><msub><mi>g</mi><mi>u</mi></msub><mo>≤</mo><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">n - siz_u - g_u \leq \lfloor\frac{n}{2}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">i</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.04398em;">z</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.044em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8304em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span> 是否成立。</li></ol><p><img src="https://img.makerlife.top/data/qexo/2024-10-15-CF708C-example1-d77c8ffd31db446d48e595d27e79c134.png" alt="CF708C-example1.png" style="zoom:90%;" /> <img src="https://img.makerlife.top/data/qexo/2024-10-15-CF708C-example2-68cff3730489a9851ded1c2cf779d985.png" alt="CF708C-example2.png" style="zoom:80%;" /></p><p>也就是说,问题转化为求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">g_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。</p><p>考虑自上而下转移,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">g_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 可能来自于(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><msub><mi>a</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">fa_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的子树)/(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mrow><mi>f</mi><msub><mi>a</mi><mi>u</mi></msub></mrow></msub></mrow><annotation encoding="application/x-tex">g_{fa_u}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.10764em;">f</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>)/(除了子树以外所有)。由于第一种情况,还要记录一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">f_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 为根的子树中,不超过 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">\lfloor\frac{n}{2}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span> 的最大子树大小。我们还可以发现,在转移 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">g_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 时,可能 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>f</mi><msub><mi>a</mi><mi>u</mi></msub></mrow></msub></mrow><annotation encoding="application/x-tex">f_{fa_u}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.10764em;">f</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 就表示 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 的子树,为了解决这种情况,需要记录最大值 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{u, 0}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 和次大值 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{u, 1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>。</p><p>显然 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{u, 0}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 需要自下而上转移:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mtext>siz</mtext><mi>v</mi></msub><mo>&gt;</mo><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo stretchy="false">⌋</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mtext>siz</mtext><mi>u</mi></msub><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mtext>siz</mtext><mi>v</mi></msub><mo>≤</mo><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo stretchy="false">⌋</mo></mrow></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">f_{u, 0}=\begin{cases}f_{v, 0}, &amp;\text{siz}_v &gt;\lfloor\frac{n}{2}\rfloor\\\text{siz}_u, &amp;\text{siz}_v \leq\lfloor\frac{n}{2}\rfloor\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>可以按下面的 trick 维护次大值,为了表示方便,用 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 表示需要被更新的数:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo>=</mo><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub><mo>=</mo><mi>x</mi><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub><mo>&lt;</mo><mi>x</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo>=</mo><mi>x</mi><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub><mo>≤</mo><mi>x</mi><mo>&lt;</mo><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\begin{cases}f_{u, 1} = f_{u, 0}, f_{u, 0} = x, &amp;f_{u, 0} &lt; x\\f_{u, 1} = x, &amp;f_{u, 0}\leq x &lt; f_{u, 1}\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">x</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>然后即可自上而下转移 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">g_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>g</mi><mi>v</mi></msub><mo>=</mo><mi>max</mi><mo>⁡</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub><mo>=</mo><msub><mtext>siz</mtext><mi>v</mi></msub></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mn>0</mn></mrow></msub><mo mathvariant="normal">≠</mo><msub><mtext>siz</mtext><mi>v</mi></msub></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>g</mi><mi>u</mi></msub></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>n</mi><mo>−</mo><msub><mtext>siz</mtext><mi>v</mi></msub><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>n</mi><mo>−</mo><msub><mtext>siz</mtext><mi>v</mi></msub><mo>≤</mo><mo stretchy="false">⌊</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo stretchy="false">⌋</mo></mrow></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">g_v=\max\begin{cases}f_{u, 1}, &amp;f_{u, 0} = \text{siz}_v\\f_{u, 0}, &amp;f_{u, 0} \neq \text{siz}_v\\g_u\\n - \text{siz}_v, &amp;n - \text{siz}_v \leq \lfloor\frac{n}{2}\rfloor\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:5.76em;vertical-align:-2.63em;"></span><span class="mop">max</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.95em;"><span style="top:-1.6em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎩</span></span></span><span style="top:-1.592em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.916em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.916em" style="width:0.8889em" viewBox="0 0 888.89 916" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V916 H384z M384 0 H504 V916 H384z"/></svg></span></span><span style="top:-3.15em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎨</span></span></span><span style="top:-4.292em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.916em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.916em" style="width:0.8889em" viewBox="0 0 888.89 916" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V916 H384z M384 0 H504 V916 H384z"/></svg></span></span><span style="top:-5.2em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎧</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.45em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.13em;"><span style="top:-5.13em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span></span></span><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-0.81em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.63em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.13em;"><span style="top:-5.13em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-0.81em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.63em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><h3 id="Core-Code-21">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">findrt</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> fa)</span> </span>&#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : e[u]) &#123;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-built_in">findrt</span>(v, u);<br> siz[u] += siz[v];<br> <span class="hljs-keyword">if</span> (siz[v] &gt; n / <span class="hljs-number">2</span>) <span class="hljs-keyword">return</span>;<br> &#125;<br> <span class="hljs-keyword">if</span> (n - siz[u] &gt; n / <span class="hljs-number">2</span>) <span class="hljs-keyword">return</span>;<br> root = u;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs1</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> fa)</span> </span>&#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : e[u]) &#123;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-built_in">dfs1</span>(v, u);<br> siz[u] += siz[v];<br> <span class="hljs-keyword">if</span> (siz[v] &gt; n / <span class="hljs-number">2</span>) &#123;<br> <span class="hljs-keyword">if</span> (f[v][<span class="hljs-number">0</span>] &gt; f[u][<span class="hljs-number">0</span>]) &#123;<br> f[u][<span class="hljs-number">1</span>] = f[u][<span class="hljs-number">0</span>];<br> f[u][<span class="hljs-number">0</span>] = f[v][<span class="hljs-number">0</span>];<br> &#125; <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (f[v][<span class="hljs-number">0</span>] &gt; f[u][<span class="hljs-number">1</span>]) &#123;<br> f[u][<span class="hljs-number">1</span>] = f[v][<span class="hljs-number">0</span>];<br> &#125;<br> &#125; <span class="hljs-keyword">else</span> &#123;<br> <span class="hljs-keyword">if</span> (siz[v] &gt; f[u][<span class="hljs-number">0</span>]) &#123;<br> f[u][<span class="hljs-number">1</span>] = f[u][<span class="hljs-number">0</span>];<br> f[u][<span class="hljs-number">0</span>] = siz[v];<br> &#125; <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (siz[v] &gt; f[u][<span class="hljs-number">1</span>]) &#123;<br> f[u][<span class="hljs-number">1</span>] = siz[v];<br> &#125;<br> &#125;<br> &#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs2</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> fa)</span> </span>&#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : e[u]) &#123;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> g[v] = <span class="hljs-built_in">max</span>(g[v], g[u]);<br> <span class="hljs-keyword">if</span> (n - siz[v] &lt;= n / <span class="hljs-number">2</span>) &#123;<br> g[v] = <span class="hljs-built_in">max</span>(g[v], n - siz[v]);<br> &#125;<br> <span class="hljs-keyword">if</span> (f[u][<span class="hljs-number">0</span>] == siz[v]) &#123;<br> g[v] = <span class="hljs-built_in">max</span>(g[v], f[u][<span class="hljs-number">1</span>]);<br> &#125; <span class="hljs-keyword">else</span> &#123;<br> g[v] = <span class="hljs-built_in">max</span>(g[v], f[u][<span class="hljs-number">0</span>]);<br> &#125;<br> <span class="hljs-built_in">dfs2</span>(v, u);<br> &#125;<br> <span class="hljs-keyword">if</span> (n - siz[u] - g[u] &lt;= n / <span class="hljs-number">2</span> || u == root) ans[u] = <span class="hljs-number">1</span>;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> n = <span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt; n; i++) &#123;<br> <span class="hljs-type">int</span> u = <span class="hljs-built_in">read</span>(), v = <span class="hljs-built_in">read</span>();<br> e[u].<span class="hljs-built_in">push_back</span>(v);<br> e[v].<span class="hljs-built_in">push_back</span>(u);<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) siz[i] = <span class="hljs-number">1</span>;<br> <span class="hljs-built_in">findrt</span>(<span class="hljs-number">1</span>, <span class="hljs-number">0</span>);<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) siz[i] = <span class="hljs-number">1</span>;<br> <span class="hljs-built_in">dfs1</span>(root, <span class="hljs-number">0</span>);<br> <span class="hljs-built_in">dfs2</span>(root, <span class="hljs-number">0</span>);<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> cout &lt;&lt; ans[i] &lt;&lt; <span class="hljs-string">&quot; &quot;</span>;<br> &#125;<br> el;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="AT-joi2015ho-b-Cake-2">AT_joi2015ho_b Cake 2</h2><p><a href="https://www.luogu.com.cn/problem/AT_joi2015ho_b">Link</a></p><blockquote><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 围成环,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi></mrow><annotation encoding="application/x-tex">B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span></span></span></span> 两人轮流取数,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span></span></span></span> 先取,两人都将采取最优策略,求最大化 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span></span></span></span> 取到的数的和。</p></blockquote><p>tag: 区间 DP, 环</p><h3 id="Solution-22">Solution</h3><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i, j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示剩余的蛋糕区间为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[i, j]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord mathnormal">i</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose">]</span></span></span></span> 时最大的答案,把 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span> 断环为链。</p><p>考虑如何转移,由于两人轮流取,需要分类讨论:</p><ol><li>当前轮 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span></span></span></span> 取,剩余区间为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><mi>l</mi><mo separator="true">,</mo><mi>r</mi><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[l, r]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mclose">]</span></span></span></span>,显然一定满足的前提条件是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>remain</mtext><mo>≡</mo><mi>n</mi><mspace></mspace><mspace width="0.4444em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mn>2</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\text{remain}\equiv n \pmod 2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6679em;"></span><span class="mord text"><span class="mord">remain</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:0.4444em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord">2</span><span class="mclose">)</span></span></span></span>,其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>remain</mtext></mrow><annotation encoding="application/x-tex">\text{remain}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6679em;"></span><span class="mord text"><span class="mord">remain</span></span></span></span></span> 表示的是剩余蛋糕区间长度(简单手玩即可得证)。此时,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span></span></span></span> 可以取 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>l</mi></msub></mrow><annotation encoding="application/x-tex">a_l</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 或 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>r</mi></msub></mrow><annotation encoding="application/x-tex">a_r</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,此时 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>l</mi><mo separator="true">,</mo><mi>r</mi></mrow></msub><mo>=</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">{</mo><msub><mi>f</mi><mrow><mi>l</mi><mo separator="true">,</mo><mi>r</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>a</mi><mi>r</mi></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>l</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>r</mi></mrow></msub><mo>+</mo><msub><mi>a</mi><mi>l</mi></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">f_{l, r}=\max\{f_{l, r-1}+a_r, f_{l+1, r}+a_l\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">max</span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span>。</li><li>当前轮 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi></mrow><annotation encoding="application/x-tex">B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span></span></span></span> 取,变量定义同上,前提条件为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>remain</mtext></mrow><annotation encoding="application/x-tex">\text{remain}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6679em;"></span><span class="mord text"><span class="mord">remain</span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 奇偶性不同。此时 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi></mrow><annotation encoding="application/x-tex">B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span></span></span></span> 一定取 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>max</mi><mo>⁡</mo><mo stretchy="false">{</mo><msub><mi>a</mi><mi>l</mi></msub><mo separator="true">,</mo><msub><mi>a</mi><mi>r</mi></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\max\{a_l, a_r\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">max</span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span>,那么留给 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span></span></span></span> 的就是其中较小的一个。</li></ol><p>所以有如下方程:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mtext>len</mtext><mo><mi mathvariant="normal">≔</mi></mo><mi>l</mi><mo>−</mo><mi>r</mi><mo>+</mo><mn>1</mn><mspace linebreak="newline"></mspace><msub><mi>f</mi><mrow><mi>l</mi><mo separator="true">,</mo><mi>r</mi></mrow></msub><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>max</mi><mo>⁡</mo><mo stretchy="false">{</mo><msub><mi>f</mi><mrow><mi>l</mi><mo separator="true">,</mo><mi>r</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>a</mi><mi>r</mi></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>l</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>r</mi></mrow></msub><mo>+</mo><msub><mi>a</mi><mi>l</mi></msub><mo stretchy="false">}</mo><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mtext>len</mtext><mo>≡</mo><mi>n</mi><mspace></mspace><mspace width="0.4444em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mn>2</mn><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>l</mi><mo separator="true">,</mo><mi>r</mi><mo>−</mo><mn>1</mn></mrow></msub><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>a</mi><mi>l</mi></msub><mo>&lt;</mo><msub><mi>a</mi><mi>r</mi></msub><mtext> and len</mtext><mo>≢</mo><mi>n</mi><mspace></mspace><mspace width="0.4444em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mn>2</mn><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>f</mi><mrow><mi>l</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>r</mi></mrow></msub><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>a</mi><mi>l</mi></msub><mo>&gt;</mo><msub><mi>a</mi><mi>r</mi></msub><mtext> and len</mtext><mo>≢</mo><mi>n</mi><mspace></mspace><mspace width="0.4444em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mn>2</mn><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">\text{len}\coloneqq l-r+1\\f_{l, r}=\begin{cases}\max\{f_{l, r-1}+a_r, f_{l+1, r}+a_l\}, &amp;\text{len}\equiv n \pmod 2\\f_{l, r-1}, &amp;a_l&lt;a_r\ \text{and}\ \text{len}\not\equiv n \pmod 2\\f_{l+1, r}, &amp;a_l&gt;a_r\ \text{and}\ \text{len}\not\equiv n \pmod 2\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord text"><span class="mord">len</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mop" style="position:relative;top:-0.0347em;">:</span></span><span class="mrel"><span class="mspace" style="margin-right:-0.0667em;"></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span><span class="mspace newline"></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:4.32em;vertical-align:-1.91em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.35em;"><span style="top:-2.2em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎩</span></span></span><span style="top:-2.192em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.316em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.316em" style="width:0.8889em" viewBox="0 0 888.89 316" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V316 H384z M384 0 H504 V316 H384z"/></svg></span></span><span style="top:-3.15em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎨</span></span></span><span style="top:-4.292em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.316em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.316em" style="width:0.8889em" viewBox="0 0 888.89 316" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V316 H384z M384 0 H504 V316 H384z"/></svg></span></span><span style="top:-4.6em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎧</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.85em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.41em;"><span style="top:-4.41em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mop">max</span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">}</span><span class="mpunct">,</span></span></span><span style="top:-2.97em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span></span></span><span style="top:-1.53em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.91em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.41em;"><span style="top:-4.41em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord text"><span class="mord">len</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">n</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:0.4444em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord">2</span><span class="mclose">)</span></span></span><span style="top:-2.97em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace"> </span><span class="mord text"><span class="mord">and</span></span><span class="mspace"> </span><span class="mord text"><span class="mord">len</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">n</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:0.4444em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord">2</span><span class="mclose">)</span></span></span><span style="top:-1.53em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace"> </span><span class="mord text"><span class="mord">and</span></span><span class="mspace"> </span><span class="mord text"><span class="mord">len</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">n</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:0.4444em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord">2</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.91em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>最后考虑边界,如果最后一轮是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span></span></span></span> 取的,也就是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 为奇数时,对于任意位置 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>,贡献都为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>;反之由 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi></mrow><annotation encoding="application/x-tex">B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span></span></span></span> 取,那么贡献为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。</p><h3 id="Core-Code-22">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><code class="hljs cpp">n = <span class="hljs-built_in">read</span>();<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> a[i] = <span class="hljs-built_in">read</span>();<br> a[i + n] = a[i];<br>&#125;<br>a[<span class="hljs-number">0</span>] = a[n];<br><span class="hljs-keyword">if</span> (n &amp; <span class="hljs-number">1</span>) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n * <span class="hljs-number">2</span>; i++) &#123;<br> f[i][i] = a[i];<br> &#125;<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> len = <span class="hljs-number">2</span>; len &lt;= n; len++) &#123; <span class="hljs-comment">// len := remain cakes</span><br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> l = <span class="hljs-number">1</span>; l + len - <span class="hljs-number">1</span> &lt;= n * <span class="hljs-number">2</span>; l++) &#123;<br> <span class="hljs-type">int</span> r = l + len - <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">if</span> ((len &amp; <span class="hljs-number">1</span>) == (n &amp; <span class="hljs-number">1</span>)) &#123; <span class="hljs-comment">// JOI</span><br> f[l][r] = <span class="hljs-built_in">max</span>(&#123;f[l][r], f[l + <span class="hljs-number">1</span>][r] + a[l], f[l][r - <span class="hljs-number">1</span>] + a[r]&#125;);<br> &#125; <span class="hljs-keyword">else</span> &#123; <span class="hljs-comment">// IOI</span><br> <span class="hljs-keyword">if</span> (a[l] &lt; a[r]) f[l][r] = <span class="hljs-built_in">max</span>(f[l][r], f[l][r - <span class="hljs-number">1</span>]);<br> <span class="hljs-keyword">else</span> f[l][r] = <span class="hljs-built_in">max</span>(f[l][r], f[l + <span class="hljs-number">1</span>][r]);<br> &#125;<br> &#125;<br>&#125;<br><span class="hljs-type">int</span> ans = <span class="hljs-number">0</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>;i &lt;= n; i++) &#123;<br> ans = <span class="hljs-built_in">max</span>(ans, f[i][i + n - <span class="hljs-number">1</span>]);<br>&#125;<br>cout &lt;&lt; ans &lt;&lt; endl;<br></code></pre></td></tr></table></figure><h2 id="P9759-COCI2022-2023-3-Bomboni">P9759 [COCI2022-2023#3] Bomboni</h2><p><a href="https://www.luogu.com.cn/problem/P9759">Link</a></p> <div class="fold"> <div class="fold-title fold-info collapsed" data-toggle="collapse" href="#collapse-025c5f07" role="button" aria-expanded="false" aria-controls="collapse-025c5f07"> <div class="fold-arrow">▶</div>题意 </div> <div class="fold-collapse collapse" id="collapse-025c5f07"> <div class="fold-content"> <p>有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>×</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">n\times n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 的方格。目前在左上角。通过向右或向下移动,要前往右下角。目前所在的格子没有障碍。</p><p>在每个格子中写了一个数字表示此地为糖果或障碍。Iva 会吃掉所有经过的糖果(包括起点和终点的糖果)并且将糖果对应的数字相乘。Iva 知道她自己最喜欢的数字是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span>,所以她希望这个乘积结果能被 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 整除。她想知道一共有多少条这样的路径。由于答案可能很大,她只想知道答案模 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>998244353</mn></mrow><annotation encoding="application/x-tex">998244353</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">998244353</span></span></span></span> 的结果。</p> </div> </div> </div><p>tag: trick</p><h3 id="Solution-23">Solution</h3><p>考虑从因数角度分析,发现只要一条路径上覆盖了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 的因数,这条路径就是合法的。</p><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi><mo separator="true">,</mo><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i, j, t}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">t</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 为前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(i, j)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">i</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose">)</span></span></span></span> 位置时 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 的因数剩余 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span></span></span></span> 的路径数量。那么每次转移,从上一步去掉 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(i, j)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">i</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose">)</span></span></span></span> 能贡献的因数,作为这次的答案。</p><p>最终答案即为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>n</mi><mo separator="true">,</mo><mi>n</mi><mo separator="true">,</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">f_{n, n, 1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">n</span><span class="mpunct mtight">,</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>。</p><h3 id="Core-Code-23">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><code class="hljs cpp">f[<span class="hljs-number">1</span>][<span class="hljs-number">1</span>][k / __gcd(a[<span class="hljs-number">1</span>][<span class="hljs-number">1</span>], k)] = <span class="hljs-number">1</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j &lt;= n; j++) &#123;<br> <span class="hljs-keyword">if</span> (i - <span class="hljs-number">1</span> &gt;= <span class="hljs-number">1</span> &amp;&amp; a[i][j] != <span class="hljs-number">-1</span>) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> x : f[i - <span class="hljs-number">1</span>][j]) &#123;<br> <span class="hljs-type">int</span> nw = x.first / __gcd(x.first, a[i][j]);<br> f[i][j][nw] = (f[i][j][nw] + x.second + mod) % mod;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">if</span> (j - <span class="hljs-number">1</span> &gt;= <span class="hljs-number">1</span> &amp;&amp; a[i][j] != <span class="hljs-number">-1</span>) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> x : f[i][j - <span class="hljs-number">1</span>]) &#123;<br> <span class="hljs-type">int</span> nw = x.first / __gcd(x.first, a[i][j]);<br> f[i][j][nw] = (f[i][j][nw] + x.second + mod) % mod;<br> &#125;<br> &#125;<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="CF360B-Levko-and-Array">CF360B Levko and Array</h2><p><a href="https://www.luogu.com.cn/problem/CF360B">Link</a></p><blockquote><p>给定一个数列 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span>,可以对其中的元素做<strong>至多</strong> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 次修改,每次修改可以将数列中的一个数改成另一个。</p><p>求经过修改后,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mi>i</mi><mo>=</mo><mn>2</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">∣</mo><msub><mi>a</mi><mi>i</mi></msub><mo>−</mo><msub><mi>a</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msub><mo fence="true">∣</mo></mrow></mrow><annotation encoding="application/x-tex">\max\limits^n_{i=2}\left|a_i-a_{i-1}\right|</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.7596em;vertical-align:-0.7277em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.032em;"><span style="top:-2.3723em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">2</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span><span style="top:-3.6306em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7277em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">∣</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;">∣</span></span></span></span></span> 的最小值。</p></blockquote><p>tag: 二分, trick</p><h3 id="Solution-24">Solution</h3><p>注意到答案具有单调性,二分答案 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>。</p><p>考虑 <code>check()</code> 函数的写法,首先可以将题目中要求的最多 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 次修改转化为至少保留 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><mi>k</mi></mrow><annotation encoding="application/x-tex">n-k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 个数。</p><p>不妨进行 DP,设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个数中在保留 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的情况下最多能保留的数量。两个数可以被保留,当且仅当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">∣</mo><msub><mi>a</mi><mi>j</mi></msub><mo>−</mo><msub><mi>a</mi><mi>i</mi></msub><mo stretchy="false">∣</mo><mo>≤</mo><mo stretchy="false">(</mo><mi>j</mi><mo>−</mo><mi>i</mi><mo stretchy="false">)</mo><mo>×</mo><mi>x</mi></mrow><annotation encoding="application/x-tex">\lvert a_j-a_i\rvert\leq (j-i)\times x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mopen">∣</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">∣</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">i</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>。这个比较好感性理解,两个位置 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(i,j)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">i</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose">)</span></span></span></span> 之间有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi><mo>−</mo><mi>i</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">j-i+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 个数,也就意味着有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi><mo>−</mo><mi>i</mi></mrow><annotation encoding="application/x-tex">j-i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个间隔,而这 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi><mo>−</mo><mi>i</mi></mrow><annotation encoding="application/x-tex">j-i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个间隔中每个间隔最大的符合条件的差是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>。</p><p>那么式子就很显然了:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub><mo>=</mo><munder><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mn>1</mn><mo>≤</mo><mi>j</mi><mo>&lt;</mo><mi>i</mi></mrow></munder><mo stretchy="false">{</mo><msub><mi>f</mi><mi>j</mi></msub><mo>+</mo><mn>1</mn><mo fence="false" stretchy="true" minsize="1.2em" maxsize="1.2em">∣</mo><mo stretchy="false">∣</mo><msub><mi>a</mi><mi>j</mi></msub><mo>−</mo><msub><mi>a</mi><mi>i</mi></msub><mo stretchy="false">∣</mo><mo>≤</mo><mo stretchy="false">(</mo><mi>j</mi><mo>−</mo><mi>i</mi><mo stretchy="false">)</mo><mo>×</mo><mi>x</mi><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">f_i=\max_{1\leq j&lt;i}\{f_j+1 \big| \lvert a_j-a_i\rvert\leq (j-i)\times x\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.6138em;vertical-align:-0.8638em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4306em;"><span style="top:-2.3723em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mrel mtight">&lt;</span><span class="mord mathnormal mtight">i</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8638em;"><span></span></span></span></span></span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mord">1</span><span class="mord"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.85em;"><span style="top:-2.85em;"><span class="pstrut" style="height:3.2em;"></span><span style="width:0.333em;height:1.200em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.333em" height="1.200em" viewBox="0 0 333 1200"><path d="M145 15 v585 v0 v585 c2.667,10,9.667,15,21,15c10,0,16.667,-5,20,-15 v-585 v0 v-585 c-2.667,-10,-9.667,-15,-21,-15c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v0 v585 h43z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.35em;"><span></span></span></span></span></span></span><span class="mopen">∣</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">∣</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">i</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">x</span><span class="mclose">}</span></span></span></span></span></p><h3 id="Core-Code-24">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-type">const</span> <span class="hljs-type">int</span> N = <span class="hljs-number">2e3</span> + <span class="hljs-number">10</span>;<br><span class="hljs-type">const</span> <span class="hljs-type">int</span> MAXN = <span class="hljs-number">2e9</span>;<br><span class="hljs-type">int</span> n, k;<br><span class="hljs-type">int</span> a[N];<br><span class="hljs-type">int</span> f[N];<br><span class="hljs-function"><span class="hljs-type">bool</span> <span class="hljs-title">check</span><span class="hljs-params">(<span class="hljs-type">int</span> x)</span> </span>&#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) f[i] = <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j &lt; i; j++) &#123;<br> <span class="hljs-keyword">if</span> (<span class="hljs-built_in">abs</span>(a[i] - a[j]) &lt;= (i - j) * x) &#123;<br> f[i] = <span class="hljs-built_in">max</span>(f[i], f[j] + <span class="hljs-number">1</span>);<br> &#125;<br> &#125;<br> <span class="hljs-keyword">if</span> (f[i] &gt;= n - k) <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;<br> &#125;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">signed</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> n = <span class="hljs-built_in">read</span>(); k = <span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> a[i] = <span class="hljs-built_in">read</span>();<br> &#125;<br> <span class="hljs-type">int</span> l = <span class="hljs-number">0</span>, r = MAXN;<br> <span class="hljs-keyword">while</span> (l &lt; r) &#123;<br> <span class="hljs-type">int</span> mid = (l + r) &gt;&gt; <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">if</span> (<span class="hljs-built_in">check</span>(mid)) r = mid;<br> <span class="hljs-keyword">else</span> l = mid + <span class="hljs-number">1</span>;<br> &#125;<br> cout &lt;&lt; l &lt;&lt; endl;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P4158-SCOI2009-粉刷匠">P4158 [SCOI2009] 粉刷匠</h2><p><a href="https://www.luogu.com.cn/problem/P4158">Link</a></p><blockquote><p>有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span> 条木板需要被粉刷。每条木板被分为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>M</mi></mrow><annotation encoding="application/x-tex">M</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">M</span></span></span></span> 个格子。 每个格子要被刷成 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mi mathvariant="normal">/</mi><mn>1</mn></mrow><annotation encoding="application/x-tex">0/1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0/1</span></span></span></span>。每次粉刷只能选择一条木板上一段连续的格子,然后涂上一种颜色。每个格子最多只能被粉刷一次。只能粉刷 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi></mrow><annotation encoding="application/x-tex">T</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span></span></span></span> 次,他最多能正确粉刷多少格子?</p></blockquote><p>tag: 背包</p><h3 id="Solution-25">Solution</h3><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 行刷 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 次最多正确的格子数,发现这是一个背包,容易得到下面的转移:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><munder><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mn>1</mn><mo>≤</mo><mi>k</mi><mo>≤</mo><mi>j</mi></mrow></munder><mo stretchy="false">{</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>j</mi><mo>−</mo><mi>k</mi></mrow></msub><mo>+</mo><msub><mi>g</mi><mrow><mi>n</mi><mo separator="true">,</mo><mi>k</mi></mrow></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">f_{i,j}=\max_{1\leq k\leq j}\{f_{i-1,j-k}+g_{n, k}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.6382em;vertical-align:-0.8882em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4306em;"><span style="top:-2.3479em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8882em;"><span></span></span></span></span></span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span></span></p><p>其中,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">g_{i, j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示当前行前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 格刷 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 次最多正确的格子数。它可以在每次枚举行的时候更新,有转移:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>g</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><munder><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mn>0</mn><mo>≤</mo><mi>l</mi><mo>&lt;</mo><mi>i</mi></mrow></munder><mo stretchy="false">{</mo><msub><mi>g</mi><mrow><mi>l</mi><mo separator="true">,</mo><mi>j</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>h</mi><mrow><mi>l</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>i</mi></mrow></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">g_{i,j}=\max_{0\leq l&lt;i}\{g_{l, j-1}+h_{l+1,i}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.5973em;vertical-align:-0.8473em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4306em;"><span style="top:-2.3479em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mrel mtight">&lt;</span><span class="mord mathnormal mtight">i</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8473em;"><span></span></span></span></span></span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span></span></p><p>其中,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>h</mi><mrow><mi>l</mi><mo separator="true">,</mo><mi>r</mi></mrow></msub></mrow><annotation encoding="application/x-tex">h_{l, r}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示当前行刷 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><mi>l</mi><mo separator="true">,</mo><mi>r</mi><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[l, r]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mclose">]</span></span></span></span> 时刷一次最多刷对的格子数,也就是区间中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 数量的最大值。</p><p>只需要在背包的转移前维护一下 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>g</mi></mrow><annotation encoding="application/x-tex">g</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>h</mi></mrow><annotation encoding="application/x-tex">h</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">h</span></span></span></span> 即可。</p><h3 id="Core-Code-25">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-built_in">memset</span>(g, <span class="hljs-number">0</span>, <span class="hljs-built_in">sizeof</span>(g));<br> <span class="hljs-built_in">memset</span>(maxn, <span class="hljs-number">0</span>, <span class="hljs-built_in">sizeof</span>(maxn));<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> l = <span class="hljs-number">1</span>; l &lt;= m; l++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> r = l; r &lt;= m; r++) &#123;<br> <span class="hljs-type">int</span> cnt0 = <span class="hljs-number">0</span>, cnt1 = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> p = l; p &lt;= r; p++) &#123;<br> <span class="hljs-keyword">if</span> (s[i][p] == <span class="hljs-string">&#x27;0&#x27;</span>) cnt0++;<br> <span class="hljs-keyword">else</span> cnt1++;<br> &#125;<br> maxn[l][r] = <span class="hljs-built_in">max</span>(cnt0, cnt1);<br> &#125;<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j &lt;= m; j++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> k = <span class="hljs-number">1</span>; k &lt;= t; k++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> l = <span class="hljs-number">0</span>; l &lt; j; l++) &#123;<br> g[j][k] = <span class="hljs-built_in">max</span>(g[j][k], g[l][k - <span class="hljs-number">1</span>] + maxn[l + <span class="hljs-number">1</span>][j]);<br> &#125;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = t; j &gt;= <span class="hljs-number">1</span>; j--) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> k = <span class="hljs-number">1</span>; k &lt;= j; k++) &#123;<br> f[j] = <span class="hljs-built_in">max</span>(f[j], f[j - k] + g[m][k]);<br> &#125;<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P1156-垃圾陷阱">P1156 垃圾陷阱</h2><p><a href="https://www.luogu.com.cn/problem/P1156">Link</a></p><blockquote><p>卡门掉进深度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>D</mi></mrow><annotation encoding="application/x-tex">D</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">D</span></span></span></span> 英尺的垃圾井。她需要堆满垃圾,使垃圾高度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>≥</mo><mi>D</mi></mrow><annotation encoding="application/x-tex">\geq D</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">D</span></span></span></span> 才能逃出。每个垃圾有扔下时间 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span></span></span></span>、堆放高度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>h</mi></mrow><annotation encoding="application/x-tex">h</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">h</span></span></span></span> 和食用后维持生命时间 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi></mrow><annotation encoding="application/x-tex">l</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span></span></span></span>。卡门起始有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>10</mn></mrow><annotation encoding="application/x-tex">10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span></span></span></span> 小时的能量,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>10</mn></mrow><annotation encoding="application/x-tex">10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span></span></span></span> 小时内若不进食将饿死。若体力为 0,吃垃圾或逃出井不会饿死。求卡门最早能逃出井的时间。</p></blockquote><p>tag: 背包</p><h3 id="Solution-26">Solution</h3><p>看到两种选择,想到背包。用 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i, j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个物品堆放高度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 时的最大体力。</p><p>本题与普通 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mi mathvariant="normal">/</mi><mn>1</mn></mrow><annotation encoding="application/x-tex">0/1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0/1</span></span></span></span> 背包不同的地方在于,本题有两种情况的成立条件和贡献不同,需要分类讨论:</p><ol><li>如果选择吃掉,那么 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>+</mo><msub><mi>l</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_{i,j}=f_{i-1,j}+l_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。需要满足转移前一步剩余的体力能够等到当前垃圾扔下,即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>≥</mo><msub><mi>t</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_{i-1,j}\geq t_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7651em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>;</li><li>如果选择不吃,那么 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>j</mi><mo>−</mo><msub><mi>h</mi><mi>i</mi></msub></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,j}=f_{i-1,j-h_i}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>。需要满足转移前一步剩余的体力能够等到当前垃圾仍下,即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>j</mi><mo>−</mo><msub><mi>h</mi><mi>i</mi></msub></mrow></msub><mo>≥</mo><msub><mi>t</mi><mi>i</mi></msub><mtext> </mtext><mo stretchy="false">(</mo><mi>j</mi><mo>≥</mo><msub><mi>h</mi><mi>i</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f_{i-1,j-h_i}\geq t_i\ (j\geq h_i)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3281em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace"> </span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</li></ol><p>需要特判 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>h</mi><mi>i</mi></msub><mo>&gt;</mo><mi>d</mi></mrow><annotation encoding="application/x-tex">h_i&gt;d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span></span></span></span> 的情况。</p><h3 id="Core-Code-26">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-built_in">memset</span>(f, -INF, <span class="hljs-built_in">sizeof</span>(f));<br>f[<span class="hljs-number">0</span>] = <span class="hljs-number">10</span>;<br>d = <span class="hljs-built_in">read</span>(), g = <span class="hljs-built_in">read</span>();<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= g; i++) &#123;<br> a[i].t = <span class="hljs-built_in">read</span>(), a[i].f = <span class="hljs-built_in">read</span>(), a[i].h = <span class="hljs-built_in">read</span>();<br> maxn = <span class="hljs-built_in">max</span>(maxn, a[i].h);<br>&#125;<br><span class="hljs-built_in">sort</span>(a + <span class="hljs-number">1</span>, a + g + <span class="hljs-number">1</span>);<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= g; i++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-built_in">max</span>(d, maxn); j &gt;= <span class="hljs-number">0</span>; j--) &#123;<br> <span class="hljs-keyword">if</span> (f[j] &gt;= a[i].t) &#123;<br> f[j] = <span class="hljs-built_in">max</span>(f[j], f[j] + a[i].f);<br> &#125;<br> <span class="hljs-keyword">if</span> (j &gt;= a[i].h &amp;&amp; f[j - a[i].h] &gt;= a[i].t) &#123;<br> f[j] = <span class="hljs-built_in">max</span>(f[j], f[j - a[i].h]);<br> &#125;<br> &#125;<br> <span class="hljs-keyword">if</span> (d &gt; maxn) &#123;<br> <span class="hljs-keyword">if</span> (f[d] &gt;= <span class="hljs-number">0</span>) &#123;<br> cout &lt;&lt; a[i].t &lt;&lt; endl;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br> &#125;<br> &#125; <span class="hljs-keyword">else</span> &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = d; j &lt;= maxn; j++) &#123;<br> <span class="hljs-keyword">if</span> (f[j] &gt;= <span class="hljs-number">0</span>) &#123;<br> cout &lt;&lt; a[i].t &lt;&lt; endl;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br> &#125;<br> &#125;<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P1772-ZJOI2006-物流运输">P1772 [ZJOI2006] 物流运输</h2><p><a href="https://www.luogu.com.cn/problem/P1772">Link</a></p><blockquote><p>物流公司要把一批货物从码头 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 运到码头 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>。由于货物量比较大,需要 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span></span></span></span> 天才能运完。货物运输过程中一般要转停好几个码头。</p><ol><li>每日会从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 港口发货;</li><li>每日有可能会有港口封锁,封锁处不可走,需要换航线并加上换航线的成本。</li></ol></blockquote><p>tag: 最短路</p><h3 id="Solution-27">Solution</h3><p>首先想到可以对于每一天跑一遍最短路来预处理。</p><p>考虑 DP,设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_{i}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 天的最小成本。对于新的一天,有继续沿用之前的路线和走新的路线两种情况。所以设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mtext>minn</mtext><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">\text{minn}_{i, j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.954em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord text"><span class="mord">minn</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 天走同一条路线的最短路径,显然可以对于每一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow><annotation encoding="application/x-tex">i, j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">i</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span>,跑一遍最短路预处理。此时有转移方程:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub><mo>=</mo><munder><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mn>1</mn><mo>≤</mo><mi>i</mi><mo>&lt;</mo><mi>j</mi></mrow></munder><mo stretchy="false">{</mo><msub><mi>f</mi><mi>j</mi></msub><mo>+</mo><msub><mtext>minn</mtext><mrow><mi>j</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>i</mi></mrow></msub><mo>×</mo><mo stretchy="false">(</mo><mi>i</mi><mo>−</mo><mi>j</mi><mo stretchy="false">)</mo><mo>+</mo><mi>k</mi><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">f_{i}=\max_{1\leq i&lt;j}\{f_{j}+\text{minn}_{j+1, i}\times (i-j)+k\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.6138em;vertical-align:-0.8638em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4306em;"><span style="top:-2.3723em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight">i</span><span class="mrel mtight">&lt;</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8638em;"><span></span></span></span></span></span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.954em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord text"><span class="mord">minn</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mclose">}</span></span></span></span></span></p><p>另外还有前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 天都走同一条路的情况,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub><mo>=</mo><msub><mtext>minn</mtext><mrow><mn>1</mn><mo separator="true">,</mo><mi>i</mi></mrow></msub><mo>×</mo><mi>i</mi></mrow><annotation encoding="application/x-tex">f_{i}=\text{minn}_{1,i}\times i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.954em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord text"><span class="mord">minn</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>。</p><h3 id="Core-Code-27">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= d; i++) &#123;<br> p = <span class="hljs-built_in">read</span>(), a = <span class="hljs-built_in">read</span>(), b = <span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = a; j &lt;= b; j++) &#123;<br> block[p][j] = <span class="hljs-number">1</span>;<br> &#125;<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= t; i++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = i; j &lt;= t; j++) &#123;<br> mp.<span class="hljs-built_in">reset</span>();<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> p = <span class="hljs-number">1</span>; p &lt;= n; p++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> l = i; l &lt;= j; l++) &#123;<br> <span class="hljs-keyword">if</span> (block[p][l]) &#123;<br> mp[p] = <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">break</span>;<br> &#125;<br> &#125;<br> &#125;<br> minn[i][j] = <span class="hljs-built_in">dij</span>();<br> &#125;<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= t; i++) &#123;<br> f[i] = minn[<span class="hljs-number">1</span>][i] * i;<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= t; i++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j &lt; i; j++) &#123;<br> f[i] = <span class="hljs-built_in">min</span>(f[i], f[j] + minn[j + <span class="hljs-number">1</span>][i] * (i - j) + k);<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P3174-HAOI2009-毛毛虫">P3174 [HAOI2009] 毛毛虫</h2><p><a href="https://www.luogu.com.cn/problem/P3174">Link</a></p><blockquote><p>给定一颗 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个节点的多叉树,找出包含分支最多的一条链,输出节点数。其中分支只计算与链直连的节点。</p></blockquote><p>tag: 树形 DP, 树的直径</p><h3 id="Solution-28">Solution</h3><p><img src="https://img.makerlife.top/data/qexo/2024-11-13-p3174-92eb33fb3b122776f11c6ba98ddfe438.png" alt="p3174.png"></p><p>考虑从当前节点能控制的下一层节点入手,如果当前节点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 在链中,那么它所能控制的下一层节点数即为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mtext>deg</mtext><mi>u</mi></msub><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">\text{deg}_u-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9386em;vertical-align:-0.2441em;"></span><span class="mord"><span class="mord text"><span class="mord">deg</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.0573em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mtext>deg</mtext><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">\text{deg}_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9386em;vertical-align:-0.2441em;"></span><span class="mord"><span class="mord text"><span class="mord">deg</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.0573em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span></span></span></span> 表示 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 的度。也就是说,可以按树的直径的思路,两遍 dfs,在递归的过程中统计答案。</p><p>注意需要考虑根节点没有父亲所带来的影响,和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">n=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的特殊情况。</p><h3 id="Core-Code-28">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> fa, <span class="hljs-type">int</span> sum)</span> </span>&#123;<br> <span class="hljs-keyword">if</span> (sum &gt; maxd) &#123;<br> maxd = sum;<br> maxpos = u;<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : e[u]) &#123;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-built_in">dfs</span>(v, u, sum + deg[u] - <span class="hljs-number">1</span>);<br> &#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> n = <span class="hljs-built_in">read</span>(), m = <span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">if</span> (n == <span class="hljs-number">1</span>) &#123;<br> cout &lt;&lt; <span class="hljs-number">1</span> &lt;&lt; endl;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= m; i++) &#123;<br> <span class="hljs-type">int</span> u = <span class="hljs-built_in">read</span>(), v = <span class="hljs-built_in">read</span>();<br> e[u].<span class="hljs-built_in">push_back</span>(v);<br> e[v].<span class="hljs-built_in">push_back</span>(u);<br> deg[u]++, deg[v]++;<br> &#125;<br> <span class="hljs-built_in">dfs</span>(<span class="hljs-number">1</span>, <span class="hljs-number">0</span>, deg[<span class="hljs-number">1</span>] - <span class="hljs-number">1</span>);<br> maxd = <span class="hljs-number">0</span>;<br> <span class="hljs-built_in">dfs</span>(maxpos, <span class="hljs-number">0</span>, deg[maxpos] - <span class="hljs-number">1</span>);<br> cout &lt;&lt; maxd + <span class="hljs-number">2</span> &lt;&lt; <span class="hljs-string">&#x27;\n&#x27;</span>;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P1131-ZJOI2007-时态同步">P1131 [ZJOI2007] 时态同步</h2><p><a href="https://www.luogu.com.cn/problem/P1131">Link</a></p><blockquote><p>给定一颗 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个节点带边权的树,需要对于每颗子树调整根到叶子节点的路径<br>长度相等。每次操作可以对任意边权 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">+</span><span class="mord">1</span></span></span></span>。求最小操作次数。</p></blockquote><p>tag: 树形 DP</p><h3 id="Solution-29">Solution</h3><p><img src="https://img.makerlife.top/data/202411131454736.webp" alt=""></p><p>要使操作次数最小,对于每个子树,就要操作根节点下的第一条边。所以从下向上递归更新答案,对于每个节点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 记录一个以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 为根的子树到叶节点的最大距离。遍历个儿子,累加缺少的距离。</p><h3 id="Core-Code-29">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> fa)</span> </span>&#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> x : e[u]) &#123;<br> <span class="hljs-type">int</span> v = x.v, w = x.w;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-built_in">dfs</span>(v, u);<br> f[u] = <span class="hljs-built_in">max</span>(f[u], f[v] + w);<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> x : e[u]) &#123;<br> <span class="hljs-type">int</span> v = x.v, w = x.w;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> ans += f[u] - (f[v] + w);<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="CF1324F-Maximum-White-Subtree">CF1324F Maximum White Subtree</h2><p><a href="https://www.luogu.com.cn/problem/CF1324F">Link</a></p><blockquote><p>给定一棵 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个节点无根树,每个节点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 有一个颜色 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">a_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,若 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">a_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 则 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 是黑点,若 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">a_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 则 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 是白点。</p><p>对于每个节点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span>,选出一个<strong>包含</strong> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 的连通子图,设子图中白点个数为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mi>n</mi><msub><mi>t</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">cnt_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7651em;vertical-align:-0.15em;"></span><span class="mord mathnormal">c</span><span class="mord mathnormal">n</span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,黑点个数为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mi>n</mi><msub><mi>t</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">cnt_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7651em;vertical-align:-0.15em;"></span><span class="mord mathnormal">c</span><span class="mord mathnormal">n</span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,请最大化 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mi>n</mi><msub><mi>t</mi><mn>1</mn></msub><mo>−</mo><mi>c</mi><mi>n</mi><msub><mi>t</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">cnt_1 - cnt_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7651em;vertical-align:-0.15em;"></span><span class="mord mathnormal">c</span><span class="mord mathnormal">n</span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7651em;vertical-align:-0.15em;"></span><span class="mord mathnormal">c</span><span class="mord mathnormal">n</span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。并输出这个值。</p></blockquote><p>tag: 换根 DP</p><h3 id="Solution-30">Solution</h3><p>记 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mtext>color</mtext><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">\text{color}_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord text"><span class="mord">color</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 节点的颜色,黑白为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>1</mn><mi mathvariant="normal">/</mi><mn>1</mn></mrow><annotation encoding="application/x-tex">-1/1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">−</span><span class="mord">1/1</span></span></span></span>。</p><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">f_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 为根时 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 子树的贡献。自下向上转移,容易得到</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mi>u</mi></msub><mo>=</mo><msub><mtext>color</mtext><mi>u</mi></msub><mo>+</mo><munder><mo>∑</mo><mrow><mi>v</mi><mo>∈</mo><mtext>son</mtext><mo stretchy="false">(</mo><mi>u</mi><mo stretchy="false">)</mo></mrow></munder><mi>max</mi><mo>⁡</mo><mo stretchy="false">{</mo><mn>0</mn><mo separator="true">,</mo><msub><mi>f</mi><mi>v</mi></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">f_u=\text{color}_u+\sum_{v\in \text{son}(u)}\max\{0, f_{v}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord text"><span class="mord">color</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:2.566em;vertical-align:-1.516em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.05em;"><span style="top:-1.809em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mrel mtight">∈</span><span class="mord text mtight"><span class="mord mtight">son</span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">u</span><span class="mclose mtight">)</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.516em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">max</span><span class="mopen">{</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span></span></p><p>考虑换根,设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">g_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 为根时的答案,答案分为两部分:以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 为根的子树的贡献和剩余部分的贡献。第一部分显然为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">f_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,第二部分可以通过父亲的答案转移,也就是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mrow><mi>f</mi><msub><mi>a</mi><mi>u</mi></msub></mrow></msub><mo>−</mo><msub><mi>f</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">g_{fa_u}-f_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8694em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.10764em;">f</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。通过前面的式子可以知道,如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>u</mi></msub><mo>&lt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">f_u&lt;0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">f_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 不会被记录到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>f</mi><msub><mi>a</mi><mi>u</mi></msub></mrow></msub></mrow><annotation encoding="application/x-tex">f_{fa_u}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.10764em;">f</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 中,也就是说,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mrow><mi>f</mi><msub><mi>a</mi><mi>u</mi></msub></mrow></msub></mrow><annotation encoding="application/x-tex">g_{fa_u}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.10764em;">f</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 的答案不包含 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">f_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。所以最终的式子</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>g</mi><mi>u</mi></msub><mo>=</mo><msub><mi>f</mi><mi>u</mi></msub><mo>+</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">{</mo><mn>0</mn><mo separator="true">,</mo><msub><mi>g</mi><mrow><mi>f</mi><msub><mi>a</mi><mi>u</mi></msub></mrow></msub><mo>−</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">{</mo><mn>0</mn><mo separator="true">,</mo><msub><mi>f</mi><mi>u</mi></msub><mo stretchy="false">}</mo><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">g_u=f_u+\max\{0, g_{fa_u}-\max\{0, f_u\}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">max</span><span class="mopen">{</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.10764em;">f</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">max</span><span class="mopen">{</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">}}</span></span></span></span></span></p><h3 id="Core-Code-30">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs1</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> fa)</span> </span>&#123;<br> f[u] = a[u];<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : e[u]) &#123;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-built_in">dfs1</span>(v, u);<br> f[u] += <span class="hljs-built_in">max</span>(<span class="hljs-number">0</span>, f[v]);<br> &#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs2</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> fa)</span> </span>&#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : e[u]) &#123;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> g[v] = f[v] + <span class="hljs-built_in">max</span>(<span class="hljs-number">0</span>, g[u] - <span class="hljs-built_in">max</span>(<span class="hljs-number">0</span>, f[v]));<br> <span class="hljs-built_in">dfs2</span>(v, u);<br> &#125;<br>&#125;<br>g[<span class="hljs-number">1</span>]=f[<span class="hljs-number">1</span>]<br></code></pre></td></tr></table></figure><h2 id="CF607B-Zuma">CF607B Zuma</h2><p><a href="https://www.luogu.com.cn/problem/CF607B">Link</a></p><blockquote><p>给定一个序列,每次可删除任意长度的回文子串,最小化将序列清空的删除次数。</p></blockquote><p>tag: 区间 DP</p><h3 id="Solution-31">Solution</h3><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>l</mi><mo separator="true">,</mo><mi>r</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{l,r}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示清空 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><mi>l</mi><mo separator="true">,</mo><mi>r</mi><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[l,r]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mclose">]</span></span></span></span> 的最小操作次数。</p><p>最朴素的情况是枚举中间点,分成两部分来求,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>l</mi><mo separator="true">,</mo><mi>r</mi></mrow></msub><mo>=</mo><mi mathvariant="normal">min</mi><mo>⁡</mo><mo stretchy="false">{</mo><msub><mi>f</mi><mrow><mi>l</mi><mo separator="true">,</mo><mi>i</mi></mrow></msub><mo>+</mo><msub><mi>f</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>r</mi></mrow></msub><mo stretchy="false">}</mo><mo stretchy="false">(</mo><mi>i</mi><mo>∈</mo><mo stretchy="false">[</mo><mi>l</mi><mo separator="true">,</mo><mi>r</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f_{l,r}=\operatorname{min}\{f_{l,i}+f_{i+1,r}\}(i\in[l,r))</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop"><span class="mord mathrm">min</span></span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">}</span><span class="mopen">(</span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mclose">))</span></span></span></span>。</p><p>当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>l</mi></msub><mo>=</mo><msub><mi>a</mi><mi>r</mi></msub></mrow><annotation encoding="application/x-tex">a_l=a_r</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 时, 有另外的情况:</p><ul><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><mi>l</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>r</mi><mo>−</mo><mn>1</mn><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[l+1,r-1]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">]</span></span></span></span> 回文串,此时加上两端相等的值还是回文串;</li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><mi>l</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>r</mi><mo>−</mo><mn>1</mn><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[l+1, r-1]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">]</span></span></span></span> 不是回文串,此时内部随便删,删到内部只剩一个的时候,又可以与两端构成回文串。</li></ul><p>所以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>l</mi><mo separator="true">,</mo><mi>r</mi></mrow></msub><mo>=</mo><mi mathvariant="normal">min</mi><mo>⁡</mo><mo stretchy="false">{</mo><msub><mi>f</mi><mrow><mi>l</mi><mo separator="true">,</mo><mi>r</mi></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>l</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>r</mi><mo>−</mo><mn>1</mn></mrow></msub><mo stretchy="false">}</mo><mo stretchy="false">(</mo><msub><mi>a</mi><mi>l</mi></msub><mo>=</mo><msub><mi>a</mi><mi>r</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f_{l,r}=\operatorname{min}\{f_{l,r},f_{l+1,r-1}\}(a_l=a_r)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop"><span class="mord mathrm">min</span></span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">}</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</p><p>两情况取最小值即可。</p><h3 id="Core-Code-31">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-built_in">memset</span>(f, INF, <span class="hljs-built_in">sizeof</span>(f));<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> a[i] = <span class="hljs-built_in">read</span>();<br> f[i][i] = <span class="hljs-number">1</span>;<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> len = <span class="hljs-number">2</span>; len &lt;= n; len++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> l = <span class="hljs-number">1</span>; l + len - <span class="hljs-number">1</span> &lt;= n; l++) &#123;<br> <span class="hljs-type">int</span> r = l + len - <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">if</span> (a[l] == a[r]) &#123;<br> <span class="hljs-keyword">if</span> (len == <span class="hljs-number">2</span>) &#123;<br> f[l][r] = <span class="hljs-number">1</span>;<br> &#125; <span class="hljs-keyword">else</span> &#123;<br> f[l][r] = f[l + <span class="hljs-number">1</span>][r - <span class="hljs-number">1</span>];<br> &#125;<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = l; i &lt; r; i++) &#123;<br> f[l][r] = <span class="hljs-built_in">min</span>(f[l][r], f[l][i] + f[i + <span class="hljs-number">1</span>][r]);<br> &#125;<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P1896-SCOI2005-互不侵犯">P1896 [SCOI2005] 互不侵犯</h2><p><a href="https://www.luogu.com.cn/problem/P1896">Link</a></p><blockquote><p>在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi><mo>×</mo><mi>N</mi></mrow><annotation encoding="application/x-tex">N \times N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span> 的棋盘里面放 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span></span></span></span> 个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>8</mn></mrow><annotation encoding="application/x-tex">8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span> 个格子。</p></blockquote><p>tag: 状压 DP</p><h3 id="Solution-32">Solution</h3><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>S</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i, S, j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05764em;">S</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示前 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 行,当前行状态为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span></span></span></span>,棋盘已经安排了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 个国王的方案数。</p><p>首先看每行的约束条件,即若 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 位置有国王,那么 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>x</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">x-1, x, x+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 位置不能有国王。写为位运算形式即为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi><mi mathvariant="normal">&amp;</mi><mo stretchy="false">(</mo><mi>S</mi><mo>≪</mo><mn>1</mn><mo stretchy="false">)</mo><mo>=</mo><mn>0</mn><mo>∧</mo><mi>S</mi><mi mathvariant="normal">&amp;</mi><mo stretchy="false">(</mo><mi>S</mi><mo>≫</mo><mn>1</mn><mo stretchy="false">)</mo><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">S \&amp; (S \ll 1) = 0 \land S \&amp; (S \gg 1) = 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord">&amp;</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≪</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∧</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord">&amp;</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≫</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></p><p>其次看行与行之间的约束条件,若 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 位置有国王,那么上一行的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>x</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">x-1, x, x+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 位置不能有国王。若本行状态为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span></span></span></span>,上一行状态为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi></mrow><annotation encoding="application/x-tex">T</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span></span></span></span>,则写为位运算形式为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi><mi mathvariant="normal">&amp;</mi><mo stretchy="false">(</mo><mi>T</mi><mo>≪</mo><mn>1</mn><mo stretchy="false">)</mo><mo>=</mo><mn>0</mn><mo>∧</mo><mi>S</mi><mi mathvariant="normal">&amp;</mi><mi>T</mi><mo>=</mo><mn>0</mn><mo>∧</mo><mi>S</mi><mi mathvariant="normal">&amp;</mi><mo stretchy="false">(</mo><mi>T</mi><mo>≫</mo><mn>1</mn><mo stretchy="false">)</mo><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">S \&amp; (T \ll 1) = 0 \land S \&amp; T = 0 \land S \&amp; (T \gg 1) = 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord">&amp;</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≪</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∧</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord">&amp;</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∧</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord">&amp;</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≫</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。</p><p>最后,容易得到转移方程:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>S</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><munder><mo>∑</mo><mi>T</mi></munder><msub><mi>f</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>T</mi><mo separator="true">,</mo><mi>j</mi><mo>−</mo><mtext>popcount</mtext><mo stretchy="false">(</mo><mi>S</mi><mo stretchy="false">)</mo></mrow></msub><mspace width="1em"/><mo stretchy="false">(</mo><mi>S</mi><mi mathvariant="normal">&amp;</mi><mo stretchy="false">(</mo><mi>T</mi><mo>≪</mo><mn>1</mn><mo stretchy="false">)</mo><mo>=</mo><mn>0</mn><mo>∧</mo><mi>S</mi><mi mathvariant="normal">&amp;</mi><mi>T</mi><mo>=</mo><mn>0</mn><mo>∧</mo><mi>S</mi><mi mathvariant="normal">&amp;</mi><mo stretchy="false">(</mo><mi>T</mi><mo>≫</mo><mn>1</mn><mo stretchy="false">)</mo><mo>=</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f_{i, S, j} = \sum_{T} f_{i-1, T, j - \text{popcount}(S)} \quad (S \&amp; (T \ll 1) = 0 \land S \&amp; T = 0 \land S \&amp; (T \gg 1) = 0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05764em;">S</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.3443em;vertical-align:-1.2943em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.05em;"><span style="top:-1.8557em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.13889em;">T</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2943em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.5198em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.13889em;">T</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord text mtight"><span class="mord mtight">popcount</span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight" style="margin-right:0.05764em;">S</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3552em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:1em;"></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord">&amp;</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≪</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∧</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord">&amp;</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">∧</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord">&amp;</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≫</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span></span></p><h3 id="Core-Code-32">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><code class="hljs cpp">vector&lt;vector&lt;vector&lt;<span class="hljs-type">int</span>&gt;&gt;&gt; <span class="hljs-built_in">f</span>(n + <span class="hljs-number">10</span>, vector&lt;vector&lt;<span class="hljs-type">int</span>&gt;&gt;((<span class="hljs-number">1</span> &lt;&lt; n) + <span class="hljs-number">10</span>, <span class="hljs-built_in">vector</span>&lt;<span class="hljs-type">int</span>&gt;(k + <span class="hljs-number">10</span>, <span class="hljs-number">0</span>)));<br>f[<span class="hljs-number">0</span>][<span class="hljs-number">0</span>][<span class="hljs-number">0</span>] = <span class="hljs-number">1</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">0</span>; j &lt; (<span class="hljs-number">1</span> &lt;&lt; n); j++) &#123; <span class="hljs-comment">// now</span><br> <span class="hljs-keyword">if</span> ((j &amp; (j &lt;&lt; <span class="hljs-number">1</span>)) || (j &amp; (j &gt;&gt; <span class="hljs-number">1</span>))) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> l = <span class="hljs-number">0</span>; l &lt; (<span class="hljs-number">1</span> &lt;&lt; n); l++) &#123; <span class="hljs-comment">// last</span><br> <span class="hljs-keyword">if</span> ((l &amp; (l &lt;&lt; <span class="hljs-number">1</span>)) || (l &amp; (l &gt;&gt; <span class="hljs-number">1</span>))) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-keyword">if</span> ((l &amp; j) || (l &amp; (j &gt;&gt; <span class="hljs-number">1</span>)) || (l &amp; (j &lt;&lt; <span class="hljs-number">1</span>))) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> cnt = __builtin_popcount(j); cnt &lt;= k; cnt++) &#123;<br> f[i][j][cnt] += f[i - <span class="hljs-number">1</span>][l][cnt - __builtin_popcount(j)];<br> &#125;<br> &#125;<br> &#125;<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>; i &lt; (<span class="hljs-number">1</span> &lt;&lt; n); i++) &#123;<br> ans += f[n][i][k];<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P2014-CTSC1997-选课">P2014 [CTSC1997] 选课</h2><p><a href="https://www.luogu.com.cn/problem/P2014">Link</a></p><blockquote><p>有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 门课程,每门课程有学分 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">s_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,每门课程有零门或一门先修课,有先修课的课程需要先学完其先修课,才能学习该课程。</p><p>一位学生要学习 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span> 门课程,求其能获得的最多学分数。</p></blockquote><p>tag: 树上背包</p><h3 id="Solution-33">Solution</h3><p>首先可以将课程关系建树。发现如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 也算一个节点,那么这就是一棵以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 为根的树。但这样会导致选择的课程数变成 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">m+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">m</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。</p><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mi>i</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{u, i}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 为根的子树选择 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 门课程时的最大学分数。对于每个儿子 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span></span></span></span>,可以枚举从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span></span></span></span> 子树中选择 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 门课程,那么有转移:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mi>i</mi></mrow></msub><mo>=</mo><munder><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mn>0</mn><mo>≤</mo><mi>k</mi><mo>&lt;</mo><mi>i</mi></mrow></munder><mo stretchy="false">{</mo><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mi>i</mi><mo>−</mo><mi>k</mi></mrow></msub><mo>+</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mi>k</mi></mrow></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">f_{u, i}=\max_{0\leq k&lt;i}\{f_{u, i-k}+f_{v, k}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.5973em;vertical-align:-0.8473em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4306em;"><span style="top:-2.3479em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mrel mtight">&lt;</span><span class="mord mathnormal mtight">i</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8473em;"><span></span></span></span></span></span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span></span></p><p>意思是从以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 为根的前半部分遍历过的子树中选择 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>−</mo><mi>k</mi></mrow><annotation encoding="application/x-tex">i-k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 门课程,加上从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span></span></span></span> 为根的子树中选择 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 门课程。注意由于如果要选择一个节点,那么它到根节点路径上的所有节点都必须被选择,也就是说父节点必须要被选,所以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 不能取到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>。</p><h3 id="Core-Code-33">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> m)</span> </span>&#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : e[u]) &#123;<br> <span class="hljs-built_in">dfs</span>(v, m);<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = m; i &gt; <span class="hljs-number">0</span>; i--) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> k = <span class="hljs-number">0</span>; k &lt; i; k++) &#123;<br> f[u][i] = <span class="hljs-built_in">max</span>(f[u][i], f[u][i - k] + f[v][k]);<br> &#125;<br> &#125;<br> &#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> <span class="hljs-type">int</span> n = <span class="hljs-built_in">read</span>(), m = <span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-type">int</span> k = <span class="hljs-built_in">read</span>();<br> f[i][<span class="hljs-number">1</span>] = <span class="hljs-built_in">read</span>();<br> e[k].<span class="hljs-built_in">emplace_back</span>(i);<br> &#125;<br> <span class="hljs-built_in">dfs</span>(<span class="hljs-number">0</span>, m + <span class="hljs-number">1</span>);<br> cout &lt;&lt; f[<span class="hljs-number">0</span>][m + <span class="hljs-number">1</span>] &lt;&lt; <span class="hljs-string">&#x27;\n&#x27;</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P3177-HAOI2015-树上染色">P3177 [HAOI2015] 树上染色</h2><p><a href="https://www.luogu.com.cn/problem/P3177">Link</a></p><blockquote><p>有一棵点数为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 的树,树边有边权。给你一个在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mo>∼</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">0 \sim n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 之内的正整数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> ,你要在这棵树中选择 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 个点,将其染成黑色,并将其他的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><mi>k</mi></mrow><annotation encoding="application/x-tex">n-k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 个点染成白色。将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间的距离的和的收益。问收益最大值是多少。</p></blockquote><p>tag: 树上背包</p><h3 id="Solution-34">Solution</h3><p>可以发现,一条边 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi><mo separator="true">,</mo><mi>v</mi></mrow><annotation encoding="application/x-tex">u, v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">u</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span></span></span></span> 经过的次数等于边的两侧同色点个数的乘积,即为:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mtext>contrib</mtext><mrow><mi>u</mi><mo separator="true">,</mo><mi>v</mi></mrow></msub><mo>=</mo><mi>j</mi><mo>×</mo><mo stretchy="false">(</mo><mi>k</mi><mo>−</mo><mi>j</mi><mo stretchy="false">)</mo><mo>+</mo><mo stretchy="false">(</mo><msub><mtext>siz</mtext><mi>v</mi></msub><mo>−</mo><mi>j</mi><mo stretchy="false">)</mo><mo>×</mo><mrow><mo fence="true">(</mo><mi>n</mi><mo>−</mo><mi>k</mi><mo>−</mo><mrow><mo fence="true">(</mo><msub><mtext>siz</mtext><mi>v</mi></msub><mo>−</mo><mi>j</mi><mo fence="true">)</mo></mrow><mo fence="true">)</mo></mrow><mspace linebreak="newline"></mspace></mrow><annotation encoding="application/x-tex">\text{contrib}_{u,v}=j\times (k-j) + (\text{siz}_v-j) \times \left(n-k-\left(\text{siz}_v-j\right)\right)\\</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord text"><span class="mord">contrib</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mclose delimcenter" style="top:0em;">)</span></span></span><span class="mspace newline"></span></span></span></span></p><p>其中,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 表示以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span></span></span></span> 为根的子树中黑点的个数。</p><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mi>i</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{u, i}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 为根的子树中选择 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个黑点时的最大收益。那么有转移:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><munderover><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mi>j</mi><mo>=</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>i</mi><mo>−</mo><msub><mtext>siz</mtext><mi>u</mi></msub><mo>+</mo><msub><mtext>siz</mtext><mi>v</mi></msub><mo stretchy="false">)</mo></mrow><mrow><mi>min</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>i</mi><mo separator="true">,</mo><msub><mtext>siz</mtext><mi>v</mi></msub><mo stretchy="false">)</mo></mrow></munderover><mrow><mo fence="true">(</mo><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mi>i</mi><mo>−</mo><mi>j</mi></mrow></msub><mo>+</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>+</mo><msub><mtext>contrib</mtext><mrow><mi>u</mi><mo separator="true">,</mo><mi>v</mi></mrow></msub><mo>×</mo><msub><mi>w</mi><mi>i</mi></msub><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">f_{u,j}=\max_{j=\max(i-\text{siz}_u+\text{siz}_v)}^{\min(i, \text{siz}_v)}\left(f_{u,i-j}+f_{v,j}+\text{contrib}_{u,v}\times w_i\right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.3076em;vertical-align:-0.966em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3416em;"><span style="top:-2.309em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mrel mtight">=</span><span class="mop mtight"><span class="mtight">m</span><span class="mtight">a</span><span class="mtight">x</span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mclose mtight">)</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span><span style="top:-3.7166em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mtight">m</span><span class="mtight">i</span><span class="mtight">n</span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.966em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord text"><span class="mord">contrib</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0269em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span></span></span></p><p>这里 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mtext>siz</mtext><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">\text{siz}_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8179em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord text"><span class="mord">siz</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示的是目前枚举到的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 子树的大小,注意限上下界防止复杂度退化,<a href="https://www.luogu.com.cn/discuss/708044">具体分析</a>。</p><h3 id="Core-Code-34">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">auto</span> dfs = [&amp;](<span class="hljs-keyword">auto</span>&amp;&amp; self, <span class="hljs-type">int</span> u, <span class="hljs-type">int</span> fa) -&gt; <span class="hljs-type">void</span> &#123;<br> siz[u] = <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> x : e[u]) &#123;<br> <span class="hljs-type">int</span> v = x.v, w = x.w;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-built_in">self</span>(self, v, u);<br> siz[u] += siz[v];<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-built_in">min</span>(k, siz[u]); i &gt;= <span class="hljs-number">0</span>; i--) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-built_in">max</span>(<span class="hljs-number">0ll</span>, i - siz[u] + siz[v]); j &lt;= <span class="hljs-built_in">min</span>(i, siz[v]); j++) &#123;<br> <span class="hljs-type">int</span> tot = j * (k - j) + (siz[v] - j) * (n - k - siz[v] + j);<br> f[u][i] = <span class="hljs-built_in">max</span>(f[u][i], f[u][i - j] + f[v][j] + w * tot);<br> &#125;<br> &#125;<br> &#125;<br></code></pre></td></tr></table></figure><h2 id="P10982-Connected-Graph">P10982 Connected Graph</h2><p><a href="https://www.luogu.com.cn/problem/P10982">Link</a></p><blockquote><p>求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个结点的有标号无向连通图个数,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>≤</mo><mn>1000</mn></mrow><annotation encoding="application/x-tex">n\leq 1000</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1000</span></span></span></span>。</p></blockquote><p>tag: 容斥, 计数</p><h3 id="Solution-35">Solution</h3><p>将题意转化为求 有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个节点的无向图总数 减去 不连通的无向图数量。</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个点的无向图总数显然为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mn>2</mn></mfrac><mo fence="true">)</mo></mrow></msup></mrow><annotation encoding="application/x-tex">2^{\binom{n}{2}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.3078em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:1.3078em;"><span style="top:-3.5103em;margin-right:0.05em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mopen sizing reset-size3 size6 mtight delimcenter" style="top:0.075em;"><span class="delimsizing size1 mtight"><span class="mtight">(</span></span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7785em;"><span style="top:-2.156em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-2.971em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.344em;"><span></span></span></span></span></span><span class="mclose sizing reset-size3 size6 mtight delimcenter" style="top:0.075em;"><span class="delimsizing size1 mtight"><span class="mtight">)</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>。因为一个简单无向图最多有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mn>2</mn></mfrac><mo fence="true">)</mo></mrow><annotation encoding="application/x-tex">\binom{n}{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span></span></span></span> 条边,每条边可以选或不选。</p><p>考虑不连通的无向图数量。一个不连通的无向图可以分解为若干个连通块。我们可以枚举节点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 所在的连通块大小为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span>,从剩余的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">n-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 个节点中选择 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">k-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 个节点与节点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 组成一个连通块,然后剩余的节点可以组合成任意的简单无向图。我们设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">f_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 表示 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个节点的连通图数量,则:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mi>i</mi></msub><mo>=</mo><msup><mn>2</mn><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>i</mi><mn>2</mn></mfrac><mo fence="true">)</mo></mrow></msup><mo>−</mo><munderover><mo>∑</mo><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow><mrow><mi>j</mi><mo>−</mo><mn>1</mn></mrow></mfrac><mo fence="true">)</mo></mrow><mo>×</mo><msub><mi>f</mi><mi>j</mi></msub><mo>×</mo><msup><mn>2</mn><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mrow><mi>i</mi><mo>−</mo><mi>j</mi></mrow><mn>2</mn></mfrac><mo fence="true">)</mo></mrow></msup></mrow><annotation encoding="application/x-tex">f_i=2^{\binom{i}{2}} - \sum_{j=1}^{i-1} \binom{i-1}{j-1}\times f_j\times 2^{\binom{i-j}{2}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.3911em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:1.3078em;"><span style="top:-3.5103em;margin-right:0.05em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mopen sizing reset-size3 size6 mtight delimcenter" style="top:0.075em;"><span class="delimsizing size1 mtight"><span class="mtight">(</span></span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9421em;"><span style="top:-2.156em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-2.971em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.344em;"><span></span></span></span></span></span><span class="mclose sizing reset-size3 size6 mtight delimcenter" style="top:0.075em;"><span class="delimsizing size1 mtight"><span class="mtight">)</span></span></span></span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:3.2254em;vertical-align:-1.4138em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8117em;"><span style="top:-1.8723em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.4138em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3365em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.3078em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:1.3078em;"><span style="top:-3.5103em;margin-right:0.05em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mopen sizing reset-size3 size6 mtight delimcenter" style="top:0.075em;"><span class="delimsizing size1 mtight"><span class="mtight">(</span></span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9421em;"><span style="top:-2.156em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-2.971em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.344em;"><span></span></span></span></span></span><span class="mclose sizing reset-size3 size6 mtight delimcenter" style="top:0.075em;"><span class="delimsizing size1 mtight"><span class="mtight">)</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p><h3 id="Core-Code-35">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> f[i] = <span class="hljs-built_in">ksm</span>(<span class="hljs-number">2</span>, i * (i - <span class="hljs-number">1</span>) / <span class="hljs-number">2</span>) % mod;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j &lt;= i - <span class="hljs-number">1</span>; j++) &#123;<br> f[i] = (f[i] - (c[i - <span class="hljs-number">1</span>][j - <span class="hljs-number">1</span>] * f[j] % mod) * <span class="hljs-built_in">ksm</span>(<span class="hljs-number">2</span>, (i - j) * (i - j - <span class="hljs-number">1</span>) / <span class="hljs-number">2</span>) % mod + mod) % mod;<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure>
☑️ ⭐

杂题乱记

<div class="note note-warning"> <p>本页所有动态规划内容已迁移至 <a href="/post/dp-problems">动态规划 刷题记录</a>。</p> </div><h2 id="P8186-USACO22FEB-Redistributing-Gifts-S">P8186 [USACO22FEB] Redistributing Gifts S</h2><p><a href="https://www.luogu.com.cn/problem/P8186">Problem Link</a></p><blockquote><p>有一群人收到了礼物,每个人都有对每个礼物的喜爱度列表。他们商量后决定重新分配礼物,每个人都希望可以拿到他更喜爱的礼物,至少不能差于他原来的礼物。现在需要找到每个人重新分配后,他可以拿到的最喜欢的礼物是哪一个。所有人的答案可以不是同一轮中的。</p></blockquote><p>tag: Floyd, 传递闭包</p><h3 id="Solution">Solution</h3><p>可以发现礼物的分配是由交换产生的,所以从自身向他希望得到的所有礼物连一条边。由于一开始礼物的编号和人的编号一一对应,所以连边等价于连他可以和谁交换。如果多个人 (<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>≥</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">\geq 2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>) 处于同一个环,那么说明这样交换是成立的。</p><p>如下面的数据:</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs text">5 4 3 2 1<br>1 2 5 4 3<br>2 3 4 1 5<br>5 1 4 2 3<br>4 5 2 1 3<br></code></pre></td></tr></table></figure><p>可以建出如下的图:</p><p><img src="https://img.makerlife.top/data/qexo/2024-09-24-P8186-29bcf25bd288019f649260414cf8912d.png" alt="样例解释图片" title="样例解释图片"></p><p>其中 <code>1 2 3</code> 与 <code>1 5 4</code> 均成环,有两种方案。</p><p>在图中,可以通过 Floyd 传递闭包判环,设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{i,j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>→</mo><mi>j</mi></mrow><annotation encoding="application/x-tex">i\to j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 是否有边,特别的,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>i</mi></mrow></msub><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">f_{i,i}=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。那么可以轻易写出转移方程 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mtext> or </mtext><mo stretchy="false">(</mo><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>k</mi></mrow></msub><mtext> and </mtext><msub><mi>f</mi><mrow><mi>k</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f_{i,j}=f_{i,j}\ \text{or}\ (f_{i,k}\ \text{and}\ f_{k,j})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace"> </span><span class="mord text"><span class="mord">or</span></span><span class="mspace"> </span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace"> </span><span class="mord text"><span class="mord">and</span></span><span class="mspace"> </span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>,考虑 <code>bitset</code> 优化。</p><p>传递闭包部分代码:</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs cpp">bitset&lt;N&gt; f[N];<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> k=<span class="hljs-number">1</span>;k&lt;=<span class="hljs-number">3</span>;k++) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">1</span>;j&lt;=n;j++) &#123;<br> <span class="hljs-keyword">if</span>(f[i][j]) f[i]|=f[j];<br> &#125;<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><p>循环 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span> 次避免顺序问题。</p><p>若 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>u</mi><mo separator="true">,</mo><mi>v</mi></mrow></msub><mo>=</mo><msub><mi>f</mi><mrow><mi>v</mi><mo separator="true">,</mo><mi>u</mi></mrow></msub><mo>=</mo><mtext>true</mtext></mrow><annotation encoding="application/x-tex">f_{u,v}=f_{v,u}=\text{true}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">u</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">u</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord text"><span class="mord">true</span></span></span></span></span>,则说明 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi><mo separator="true">,</mo><mi>v</mi></mrow><annotation encoding="application/x-tex">u, v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">u</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span></span></span></span> 在一个环上。</p><h3 id="Core-Code">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs cpp">bitset&lt;N&gt; f[N];<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">1</span>;j&lt;=n;j++) &#123;<br> <span class="hljs-keyword">if</span>(a[i][j<span class="hljs-number">-1</span>]==i) <span class="hljs-keyword">break</span>;<br> f[i][a[i][j]]=<span class="hljs-number">1</span>;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> k=<span class="hljs-number">1</span>;k&lt;=<span class="hljs-number">3</span>;k++) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">1</span>;j&lt;=n;j++) &#123;<br> <span class="hljs-keyword">if</span>(f[i][j]) f[i]|=f[j];<br> &#125;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">1</span>;j&lt;=n;j++) &#123;<br> <span class="hljs-keyword">if</span>(f[i][a[i][j]] &amp;&amp; f[a[i][j]][i]) &#123;<br> <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;%d\n&quot;</span>,a[i][j]);<br> <span class="hljs-keyword">break</span>;<br> &#125;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P1485-火枪打怪">P1485 火枪打怪</h2><p><a href="https://www.luogu.com.cn/problem/P1485">Link</a></p><blockquote><p>有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 只怪物排成一排,每只怪物的血量为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>m</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">m_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 发子弹,每发子弹的威力为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>。射击第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 只怪物时,除了这个怪物受到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span> 点伤害,它<strong>左边</strong>的怪物也可能受到溅射伤害,溅射伤害为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>max</mi><mo>⁡</mo><mo stretchy="false">(</mo><mn>0</mn><mo separator="true">,</mo><mi>p</mi><mo>−</mo><mo stretchy="false">(</mo><mi>i</mi><mo>−</mo><mi>j</mi><msup><mo stretchy="false">)</mo><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\max(0, p - (i - j)^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">max</span><span class="mopen">(</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>,求最小的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>。</p></blockquote><p>tag: 二分答案, 前缀和</p><h3 id="Solution-2">Solution</h3><p>考虑二分答案。</p><ul><li><p>注意到操作右边要比操作左边优,check 时从后往前循环。</p></li><li><p>设当前位置为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span>,操作 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 时能对 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 产生影响当且仅当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>−</mo><mi>j</mi><mo>&lt;</mo><msqrt><mi>p</mi></msqrt></mrow><annotation encoding="application/x-tex">i-j&lt;\sqrt{p}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.3369em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7031em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">p</span></span></span><span style="top:-2.6631em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3369em;"><span></span></span></span></span></span></span></span></span>。也就是说,只需要考虑 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><mi>j</mi><mo>+</mo><mn>1</mn><mo separator="true">,</mo><mi>j</mi><mo>+</mo><msqrt><mi>p</mi></msqrt><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[j+1, j+\sqrt{p}]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0869em;vertical-align:-0.3369em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7031em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">p</span></span></span><span style="top:-2.6631em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"/></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3369em;"><span></span></span></span></span></span><span class="mclose">]</span></span></span></span> 区间操作的影响,这样的时间复杂度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\mathcal{O}(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathcal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</p></li><li><p>考虑优化,设区间内共操作了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>u</mi><mi>m</mi></mrow><annotation encoding="application/x-tex">sum</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span></span></span></span> 次,每次操作的位置为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>r</mi><mi>i</mi></msub><mo stretchy="false">(</mo><mn>1</mn><mo>≤</mo><mi>i</mi><mo>≤</mo><mi>s</mi><mi>u</mi><mi>m</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">r_i(1\leq i\leq sum)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7955em;vertical-align:-0.136em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mclose">)</span></span></span></span>。那么对于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 受到的伤害,满足下面的式子</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mrow><mi>s</mi><mi>u</mi><mi>m</mi></mrow></munderover><mo stretchy="false">[</mo><mi>p</mi><mo>−</mo><mo stretchy="false">(</mo><msub><mi>r</mi><mi>i</mi></msub><mo separator="true">,</mo><mi>j</mi><msup><mo stretchy="false">)</mo><mn>2</mn></msup><mo stretchy="false">]</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mo lspace="0em" rspace="0em">=</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mi>s</mi><mi>u</mi><mi>m</mi><mo>×</mo><mi>p</mi><mo>−</mo><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mrow><mi>s</mi><mi>u</mi><mi>m</mi></mrow></munderover><msubsup><mi>r</mi><mi>i</mi><mn>2</mn></msubsup><mo>+</mo><mn>2</mn><mi>j</mi><mo>×</mo><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mrow><mi>s</mi><mi>u</mi><mi>m</mi></mrow></munderover><msub><mi>r</mi><mi>i</mi></msub><mo>−</mo><mi>s</mi><mi>u</mi><mi>m</mi><mo>×</mo><msup><mi>j</mi><mn>2</mn></msup></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}&amp;\sum_{i=1}^{sum}[p-(r_i, j)^2]\\=&amp;sum\times p-\sum_{i=1}^{sum}r_i^2+2j\times \sum_{i=1}^{sum}r_i-sum\times j^2\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:6.4581em;vertical-align:-2.9791em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.4791em;"><span style="top:-5.4791em;"><span class="pstrut" style="height:3.6514em;"></span><span class="mord"></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.6514em;"></span><span class="mord"><span class="mrel">=</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.9791em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.4791em;"><span style="top:-5.4791em;"><span class="pstrut" style="height:3.6514em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6514em;"><span style="top:-1.8723em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">s</span><span class="mord mathnormal mtight">u</span><span class="mord mathnormal mtight">m</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2777em;"><span></span></span></span></span></span><span class="mopen">[</span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">]</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.6514em;"></span><span class="mord"><span class="mord"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6514em;"><span style="top:-1.8723em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">s</span><span class="mord mathnormal mtight">u</span><span class="mord mathnormal mtight">m</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2777em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-2.453em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.247em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6514em;"><span style="top:-1.8723em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">s</span><span class="mord mathnormal mtight">u</span><span class="mord mathnormal mtight">m</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2777em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.9791em;"><span></span></span></span></span></span></span></span></span></span></span></span></p></li><li><p>这样的复杂度仍为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\mathcal{O}(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathcal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>,考虑预处理其中的变量。首先 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>u</mi><mi>m</mi></mrow><annotation encoding="application/x-tex">sum</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span></span></span></span> 可以用后缀和优化(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>u</mi><msubsup><mi>m</mi><mi>j</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msubsup></mrow><annotation encoding="application/x-tex">sum^{\prime}_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1467em;vertical-align:-0.3948em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-2.4413em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3948em;"><span></span></span></span></span></span></span></span></span></span> 表示使 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi><mo>∼</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">j\sim n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 血量清零需要的操作数)。观察到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>r</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">r_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi>r</mi><mi>j</mi><mn>2</mn></msubsup></mrow><annotation encoding="application/x-tex">r_j^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2089em;vertical-align:-0.3948em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-2.4413em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3948em;"><span></span></span></span></span></span></span></span></span></span> 都需要求和,仍然考虑后缀和优化,令 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi>r</mi><mi>j</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msubsup></mrow><annotation encoding="application/x-tex">r^{\prime}_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1467em;vertical-align:-0.3948em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-2.4413em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3948em;"><span></span></span></span></span></span></span></span></span></span> 表示 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi><mo>∼</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">j\sim n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 所有操作位置的和,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi>r</mi><mi>j</mi><mrow><mo mathvariant="normal">′</mo><mn>2</mn></mrow></msubsup></mrow><annotation encoding="application/x-tex">r^{\prime 2}_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2089em;vertical-align:-0.3948em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-2.4413em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3948em;"><span></span></span></span></span></span></span></span></span></span> 同理。优化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\mathcal{O}(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathcal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>。</p></li></ul><h3 id="Core-Code-2">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">bool</span> <span class="hljs-title">check</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span> </span>&#123;<br> <span class="hljs-type">int</span> maxd = <span class="hljs-built_in">sqrt</span>(p);<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> hp[i] = m[i];<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = n; j &gt;= <span class="hljs-number">1</span>; j--) &#123;<br> sum[j] = sum[j + <span class="hljs-number">1</span>];<br> ri2[j] = ri2[j + <span class="hljs-number">1</span>];<br> ri[j] = ri[j + <span class="hljs-number">1</span>];<br> <span class="hljs-type">int</span> nowsum = sum[j] - sum[j + maxd + <span class="hljs-number">1</span>];<br> hp[j] -= nowsum * p<br> - (ri2[j] - ri2[j + maxd + <span class="hljs-number">1</span>])<br> + <span class="hljs-number">2</span> * j * (ri[j] - ri[j + maxd + <span class="hljs-number">1</span>])<br> - nowsum * j * j;<br> <span class="hljs-keyword">while</span> (hp[j] &gt;= <span class="hljs-number">0</span>) &#123;<br> hp[j] -= p;<br> sum[j]++;<br> ri2[j] += j * j;<br> ri[j] += j;<br> <span class="hljs-keyword">if</span> (sum[j] &gt; k) <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P6600-「EZEC-2」字母">P6600 「EZEC-2」字母</h2><p><a href="https://www.luogu.com.cn/problem/P6600">Link</a></p><blockquote><p>在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mi mathvariant="normal">/</mi><mn>1</mn></mrow><annotation encoding="application/x-tex">0/1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0/1</span></span></span></span> 矩阵中,找到有多少个满足下面要求的横长 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi></mrow><annotation encoding="application/x-tex">w</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.02691em;">w</span></span></span></span> 竖长 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>h</mi></mrow><annotation encoding="application/x-tex">h</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">h</span></span></span></span> 的 T 字形</p><ul><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi><mo>≥</mo><mi>a</mi></mrow><annotation encoding="application/x-tex">w\geq a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span></li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>h</mi><mo>≥</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">h\geq b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8304em;vertical-align:-0.136em;"></span><span class="mord mathnormal">h</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span></li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi><mo>×</mo><mi>h</mi><mo>≥</mo><mi>s</mi></mrow><annotation encoding="application/x-tex">w\times h\geq s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8304em;vertical-align:-0.136em;"></span><span class="mord mathnormal">h</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span></li><li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi><mo>+</mo><mi>h</mi><mo>≥</mo><mi>x</mi></mrow><annotation encoding="application/x-tex">w+h\geq x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8304em;vertical-align:-0.136em;"></span><span class="mord mathnormal">h</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span></li></ul></blockquote><p>tag: 二维前缀和</p><h3 id="Solution-3">Solution</h3><p>一眼非常像 NOIP2022 T1。</p><p>首先想如何 brute,先枚举矩阵中每个为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的点作为 T 的中心点,用前缀和记录它的左、右、下各有多少个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,不妨分别设为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>u</mi><mi>m</mi><mi>l</mi><mo separator="true">,</mo><mi>s</mi><mi>u</mi><mi>m</mi><mi>r</mi><mo separator="true">,</mo><mi>s</mi><mi>u</mi><mi>m</mi><mi>d</mi></mrow><annotation encoding="application/x-tex">suml, sumr, sumd</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mord mathnormal">d</span></span></span></span>。然后暴力判断这些 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 能组成多少个中心点重叠的符合条件的 T。</p><p>考虑优化掉判断符合条件部分的算法,暴力枚举横长竖长,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>w</mi><mo separator="true">,</mo><mi>h</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{w, h}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.02691em;">w</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">h</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示横长 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi></mrow><annotation encoding="application/x-tex">w</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.02691em;">w</span></span></span></span> 竖长 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>h</mi></mrow><annotation encoding="application/x-tex">h</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">h</span></span></span></span> 的 T 字形是否满足条件。时间复杂度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\mathcal{O}(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathcal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</p><p>计算答案时,对于每个位置 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(i,j)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">i</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose">)</span></span></span></span>,枚举它可能的横长竖长,显然对于这个位置 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>w</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub><mo>=</mo><mi>min</mi><mo>⁡</mo><mo stretchy="false">{</mo><mi>s</mi><mi>u</mi><mi>m</mi><msub><mi>l</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo separator="true">,</mo><mi>s</mi><mi>u</mi><mi>m</mi><msub><mi>r</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo stretchy="false">}</mo><mo>×</mo><mn>2</mn><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mtext> </mtext><msub><mi>h</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub><mo>=</mo><mi>s</mi><mi>u</mi><mi>m</mi><msub><mi>d</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">w_{max} = \min\{suml_{i, j}, sumr_{i, j}\}\times 2 - 1,\ h_{max} = sumd_{i, j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0269em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">min</span><span class="mopen">{</span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">}</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace"> </span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>。即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mi>n</mi><msub><mi>s</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>w</mi><mo>=</mo><mn>3</mn></mrow><msub><mi>w</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></msubsup><msubsup><mo>∑</mo><mrow><mi>h</mi><mo>=</mo><mn>2</mn></mrow><msub><mi>h</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></msubsup><msub><mi>f</mi><mrow><mi>w</mi><mo separator="true">,</mo><mi>h</mi></mrow></msub></mrow><annotation encoding="application/x-tex">ans_{i, j} = \sum_{w = 3}^{w_{max}}\sum_{h = 2}^{h_{max}} f_{w, h}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord mathnormal">an</span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2887em;vertical-align:-0.2997em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.02691em;">w</span><span class="mrel mtight">=</span><span class="mord mtight">3</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.02691em;">w</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:-0.0269em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.989em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">h</span><span class="mrel mtight">=</span><span class="mord mtight">2</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.02691em;">w</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">h</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>,时间复杂度过高。</p><p>继续优化掉这一部分,注意到是统计区间和,想到二维前缀和,用 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>u</mi><msub><mi>m</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow><annotation encoding="application/x-tex">sum_{i, j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 表示 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mo>∑</mo><mrow><mi>w</mi><mo>=</mo><mn>3</mn></mrow><mi>i</mi></msubsup><msubsup><mo>∑</mo><mrow><mi>h</mi><mo>=</mo><mn>2</mn></mrow><mi>j</mi></msubsup><msub><mi>f</mi><mrow><mi>w</mi><mo separator="true">,</mo><mi>h</mi></mrow></msub></mrow><annotation encoding="application/x-tex">\sum_{w = 3}^{i}\sum_{h = 2}^{j} f_{w, h}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2643em;vertical-align:-0.2997em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9646em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.02691em;">w</span><span class="mrel mtight">=</span><span class="mord mtight">3</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9646em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">h</span><span class="mrel mtight">=</span><span class="mord mtight">2</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.02691em;">w</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">h</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>。简单容斥一下得到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>u</mi><msub><mi>m</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>=</mo><mi>s</mi><mi>u</mi><msub><mi>m</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>+</mo><mi>s</mi><mi>u</mi><msub><mi>m</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub><mo>−</mo><mi>s</mi><mi>u</mi><msub><mi>m</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mi>j</mi><mo>−</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">sum_{i, j} = sum_{i - 1, j} + sum_{i, j - 1} + f_{i, j} - sum_{i - 1, j - 1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8694em;vertical-align:-0.2861em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8694em;vertical-align:-0.2861em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>。</p><p>这样总体复杂度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\mathcal{O}(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathcal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</p><h3 id="Core-Code-3">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j &lt;= m; j++) &#123;<br> <span class="hljs-keyword">if</span> (in[i][j] == <span class="hljs-string">&#x27;0&#x27;</span>) suml[i][j] = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">else</span> suml[i][j] = suml[i][j - <span class="hljs-number">1</span>] + <span class="hljs-number">1</span>;<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = m; j &gt;= <span class="hljs-number">1</span>; j--) &#123;<br> <span class="hljs-keyword">if</span> (in[i][j] == <span class="hljs-string">&#x27;0&#x27;</span>) sumr[i][j] = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">else</span> sumr[i][j] = sumr[i][j + <span class="hljs-number">1</span>] + <span class="hljs-number">1</span>;<br> &#125;<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j &lt;= m; j++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = n; i &gt;= <span class="hljs-number">1</span>; i--) &#123;<br> <span class="hljs-keyword">if</span> (in[i][j] == <span class="hljs-string">&#x27;0&#x27;</span>) sumd[i][j] = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">else</span> sumd[i][j] = sumd[i + <span class="hljs-number">1</span>][j] + <span class="hljs-number">1</span>;<br> &#125;<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> w = <span class="hljs-number">3</span>; w &lt;= m; w++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> h = <span class="hljs-number">2</span>; h &lt;= n; h++) &#123;<br> <span class="hljs-keyword">if</span> ((w &amp; <span class="hljs-number">1</span>) &amp;&amp; w &gt;= a &amp;&amp; h &gt;= b &amp;&amp; w * h &gt;= s &amp;&amp; w + h &gt;= x) &#123;<br> f[w][h] = <span class="hljs-number">1</span>;<br> &#125;<br> sum[w][h] = sum[w - <span class="hljs-number">1</span>][h] + sum[w][h - <span class="hljs-number">1</span>] + f[w][h] - sum[w - <span class="hljs-number">1</span>][h - <span class="hljs-number">1</span>];<br> &#125;<br>&#125;<br><span class="hljs-type">int</span> ans = <span class="hljs-number">0</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j &lt;= m; j++) &#123;<br> <span class="hljs-type">int</span> w = <span class="hljs-built_in">min</span>(suml[i][j], sumr[i][j]) * <span class="hljs-number">2</span> - <span class="hljs-number">1</span>;<br> <span class="hljs-type">int</span> h = sumd[i][j];<br> <span class="hljs-keyword">if</span> (in[i][j] == <span class="hljs-string">&#x27;1&#x27;</span>) ans += sum[w][h];<br> &#125;<br>&#125;<br>cout &lt;&lt; ans &lt;&lt; endl;<br></code></pre></td></tr></table></figure><h2 id="P7915-CSP-S-2021-回文">P7915 [CSP-S 2021] 回文</h2><p><a href="https://www.luogu.com.cn/problem/P7915">Link</a></p><p>给定一个整数序列 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>a</mi><mn>2</mn></msub><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>a</mi><mrow><mn>2</mn><mi>n</mi></mrow></msub></mrow><annotation encoding="application/x-tex">a_1, a_2,\dots, a_{2n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,保证包含 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>∼</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1\sim n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 的数各两次。可以在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span> 序列的首或尾选择一个数 push_back 到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span> 序列中并删除 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span> 中的这个数,使得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span> 为一个回文串。每次操作记为 <code>L</code> 或 <code>R</code>,表示从开头或结尾选择元素,输出操作串字典序最小的方案。</p><p>tag: 双端队列</p><h3 id="Solution-4">Solution</h3><p>以下以第一步取 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">a_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 为例,取 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mrow><mn>2</mn><mi>n</mi></mrow></msub></mrow><annotation encoding="application/x-tex">a_{2n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 同理。</p><p>由于要构成回文串,对于有且仅有的一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 使得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>=</mo><msub><mi>a</mi><mi>k</mi></msub></mrow><annotation encoding="application/x-tex">a_1=a_k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>k</mi></msub></mrow><annotation encoding="application/x-tex">a_k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 一定最后取到。</p><p>所以题目可以转化为,对于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mn>2</mn></msub><mo>…</mo><msub><mi>a</mi><mrow><mi>k</mi><mo>−</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">a_2\dots a_{k-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span>,从前向后取元素,而对于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mrow><mi>k</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>…</mo><msub><mi>a</mi><mrow><mn>2</mn><mi>n</mi></mrow></msub></mrow><annotation encoding="application/x-tex">a_{k+1}\dots a_{2n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,从后向前取元素。</p><p>即可以把这两部分看作一个栈,从第二次操作开始,每次从栈顶取元素,那么应该从哪边取呢?</p><p>可以从最后的操作开始分析,倒数第二次操作只能取 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mrow><mi>k</mi><mo>−</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">a_{k-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span> 或 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mrow><mi>k</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">a_{k+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span>,由于要构成回文串,就需要满足栈顶等于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>k</mi></msub></mrow><annotation encoding="application/x-tex">a_k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 两侧的元素。那么想到可以将两侧转化为双端队列,每次满足有其中一个队列的队首等于任意一个的队尾,如下图</p><p><img src="https://img.makerlife.top/data/qexo/2024-10-18-P7915-example-331a3f968ee7e137207edbeb88c2667e.png" alt="P7915-example.png"></p><p>一个 string 需要注意的点,每次 <code>s = &quot;L&quot; + s</code> 的复杂度是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\mathcal{O}(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathcal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> 的,可以通过 <code>s.push_back(&quot;L&quot;)</code> 最后 <code>reverse(s.begin(), s.end())</code> 来解决。</p><h3 id="Core-Code-4">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">bool</span> <span class="hljs-title">check_l</span><span class="hljs-params">()</span> </span>&#123;<br> <span class="hljs-type">int</span> k;<br> ans = <span class="hljs-string">&quot;L&quot;</span>;<br> revans = <span class="hljs-string">&quot;L&quot;</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">2</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">if</span> (a[i] == a[<span class="hljs-number">1</span>]) &#123;<br> k = i;<br> <span class="hljs-keyword">break</span>;<br> &#125;<br> &#125;<br> deque&lt;<span class="hljs-type">int</span>&gt; st1, st2;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">2</span>; i &lt; k; i++) st<span class="hljs-number">1.</span><span class="hljs-built_in">push_back</span>(a[i]);<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = k + <span class="hljs-number">1</span>; i &lt;= n; i++) st<span class="hljs-number">2.</span><span class="hljs-built_in">push_front</span>(a[i]);<br> <span class="hljs-keyword">while</span> (!st<span class="hljs-number">1.</span><span class="hljs-built_in">empty</span>() || !st<span class="hljs-number">2.</span><span class="hljs-built_in">empty</span>()) &#123;<br> <span class="hljs-keyword">if</span> (st<span class="hljs-number">1.</span><span class="hljs-built_in">size</span>() &gt; <span class="hljs-number">1</span> &amp;&amp; st<span class="hljs-number">1.f</span>ront() == st<span class="hljs-number">1.</span><span class="hljs-built_in">back</span>()) &#123;<br> ans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;L&#x27;</span>);<br> revans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;L&#x27;</span>);<br> st<span class="hljs-number">1.</span><span class="hljs-built_in">pop_front</span>(); st<span class="hljs-number">1.</span><span class="hljs-built_in">pop_back</span>();<br> &#125; <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (st<span class="hljs-number">1.</span><span class="hljs-built_in">size</span>() &amp;&amp; st<span class="hljs-number">2.</span><span class="hljs-built_in">size</span>() &amp;&amp; st<span class="hljs-number">1.f</span>ront() == st<span class="hljs-number">2.</span><span class="hljs-built_in">back</span>()) &#123;<br> ans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;L&#x27;</span>);<br> revans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;R&#x27;</span>);<br> st<span class="hljs-number">1.</span><span class="hljs-built_in">pop_front</span>(); st<span class="hljs-number">2.</span><span class="hljs-built_in">pop_back</span>();<br> &#125; <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (st<span class="hljs-number">1.</span><span class="hljs-built_in">size</span>() &amp;&amp; st<span class="hljs-number">2.</span><span class="hljs-built_in">size</span>() &amp;&amp; st<span class="hljs-number">2.f</span>ront() == st<span class="hljs-number">1.</span><span class="hljs-built_in">back</span>()) &#123;<br> ans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;R&#x27;</span>);<br> revans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;L&#x27;</span>);<br> st<span class="hljs-number">2.</span><span class="hljs-built_in">pop_front</span>(); st<span class="hljs-number">1.</span><span class="hljs-built_in">pop_back</span>();<br> &#125; <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (st<span class="hljs-number">2.</span><span class="hljs-built_in">size</span>() &gt; <span class="hljs-number">1</span> &amp;&amp; st<span class="hljs-number">2.f</span>ront() == st<span class="hljs-number">2.</span><span class="hljs-built_in">back</span>()) &#123;<br> ans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;R&#x27;</span>);<br> revans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;R&#x27;</span>);<br> st<span class="hljs-number">2.</span><span class="hljs-built_in">pop_front</span>(); st<span class="hljs-number">2.</span><span class="hljs-built_in">pop_back</span>();<br> &#125; <span class="hljs-keyword">else</span> &#123;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">bool</span> <span class="hljs-title">check_r</span><span class="hljs-params">()</span> </span>&#123;<br> <span class="hljs-type">int</span> k;<br> ans = <span class="hljs-string">&quot;R&quot;</span>;<br> revans = <span class="hljs-string">&quot;L&quot;</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt; n; i++) &#123;<br> <span class="hljs-keyword">if</span> (a[i] == a[n]) &#123;<br> k = i;<br> <span class="hljs-keyword">break</span>;<br> &#125;<br> &#125;<br> deque&lt;<span class="hljs-type">int</span>&gt; st1, st2;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt; k; i++) st<span class="hljs-number">1.</span><span class="hljs-built_in">push_back</span>(a[i]);<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = k + <span class="hljs-number">1</span>; i &lt; n; i++) st<span class="hljs-number">2.</span><span class="hljs-built_in">push_front</span>(a[i]);<br> <span class="hljs-keyword">while</span> (!st<span class="hljs-number">1.</span><span class="hljs-built_in">empty</span>() || !st<span class="hljs-number">2.</span><span class="hljs-built_in">empty</span>()) &#123;<br> <span class="hljs-keyword">if</span> (st<span class="hljs-number">1.</span><span class="hljs-built_in">size</span>() &gt; <span class="hljs-number">1</span> &amp;&amp; st<span class="hljs-number">1.f</span>ront() == st<span class="hljs-number">1.</span><span class="hljs-built_in">back</span>()) &#123;<br> ans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;L&#x27;</span>);<br> revans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;L&#x27;</span>);<br> st<span class="hljs-number">1.</span><span class="hljs-built_in">pop_front</span>(); st<span class="hljs-number">1.</span><span class="hljs-built_in">pop_back</span>();<br> &#125; <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (st<span class="hljs-number">1.</span><span class="hljs-built_in">size</span>() &amp;&amp; st<span class="hljs-number">2.</span><span class="hljs-built_in">size</span>() &amp;&amp; st<span class="hljs-number">1.f</span>ront() == st<span class="hljs-number">2.</span><span class="hljs-built_in">back</span>()) &#123;<br> ans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;L&#x27;</span>);<br> revans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;R&#x27;</span>);<br> st<span class="hljs-number">1.</span><span class="hljs-built_in">pop_front</span>(); st<span class="hljs-number">2.</span><span class="hljs-built_in">pop_back</span>();<br> &#125; <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (st<span class="hljs-number">1.</span><span class="hljs-built_in">size</span>() &amp;&amp; st<span class="hljs-number">2.</span><span class="hljs-built_in">size</span>() &amp;&amp; st<span class="hljs-number">2.f</span>ront() == st<span class="hljs-number">1.</span><span class="hljs-built_in">back</span>()) &#123;<br> ans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;R&#x27;</span>);<br> revans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;L&#x27;</span>);<br> st<span class="hljs-number">2.</span><span class="hljs-built_in">pop_front</span>(); st<span class="hljs-number">1.</span><span class="hljs-built_in">pop_back</span>();<br> &#125; <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (st<span class="hljs-number">2.</span><span class="hljs-built_in">size</span>() &gt; <span class="hljs-number">1</span> &amp;&amp; st<span class="hljs-number">2.f</span>ront() == st<span class="hljs-number">2.</span><span class="hljs-built_in">back</span>()) &#123;<br> ans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;R&#x27;</span>);<br> revans.<span class="hljs-built_in">push_back</span>(<span class="hljs-string">&#x27;R&#x27;</span>);<br> st<span class="hljs-number">2.</span><span class="hljs-built_in">pop_front</span>(); st<span class="hljs-number">2.</span><span class="hljs-built_in">pop_back</span>();<br> &#125; <span class="hljs-keyword">else</span> &#123;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> T = <span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">while</span> (T--) &#123;<br> n = <span class="hljs-built_in">read</span>() * <span class="hljs-number">2</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> a[i] = <span class="hljs-built_in">read</span>();<br> &#125;<br> <span class="hljs-keyword">if</span> (<span class="hljs-built_in">check_l</span>()) &#123;<br> <span class="hljs-built_in">reverse</span>(revans.<span class="hljs-built_in">begin</span>(), revans.<span class="hljs-built_in">end</span>());<br> cout &lt;&lt; ans + revans &lt;&lt; endl;<br> &#125; <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-built_in">check_r</span>()) &#123;<br> <span class="hljs-built_in">reverse</span>(revans.<span class="hljs-built_in">begin</span>(), revans.<span class="hljs-built_in">end</span>());<br> cout &lt;&lt; ans + revans &lt;&lt; endl;<br> &#125;<br> <span class="hljs-keyword">else</span> &#123;<br> cout &lt;&lt; <span class="hljs-number">-1</span> &lt;&lt; endl;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P1053-NOIP2005-提高组-篝火晚会">P1053 [NOIP2005 提高组] 篝火晚会</h2><p><a href="https://www.luogu.com.cn/problem/P1053">Link</a></p> <div class="fold"> <div class="fold-title fold-info collapsed" data-toggle="collapse" href="#collapse-16b85f35" role="button" aria-expanded="false" aria-controls="collapse-16b85f35"> <div class="fold-arrow">▶</div>题意 </div> <div class="fold-collapse collapse" id="collapse-16b85f35"> <div class="fold-content"> <p>佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了“小教官”。在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会。一共有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo stretchy="false">(</mo><mn>3</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><mn>50000</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">n(3\le n \le 50000)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">n</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">50000</span><span class="mclose">)</span></span></span></span> 个同学,编号从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>。一开始,同学们按照 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo separator="true">,</mo><mo>⋯</mo><mtext> </mtext><mo separator="true">,</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1,2,\cdots ,n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span></span></span></span> 的顺序坐成一圈,而实际上每个人都有两个最希望相邻的同学。如何下命令调整同学的次序,形成新的一个圈,使之符合同学们的意愿,成为摆在佳佳面前的一大难题。</p><p>佳佳可向同学们下达命令,每一个命令的形式如下:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><msub><mi>b</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>b</mi><mn>2</mn></msub><mo separator="true">,</mo><mi mathvariant="normal">.</mi><mi mathvariant="normal">.</mi><mi mathvariant="normal">.</mi><msub><mi>b</mi><mrow><mi>m</mi><mo>−</mo><mn>1</mn></mrow></msub><mo separator="true">,</mo><msub><mi>b</mi><mi>m</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(b_1, b_2,... b_{m-1}, b_m)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">...</span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">m</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">m</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></p><p>这里 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span> 的值是由佳佳决定的,每次命令 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span> 的值都可以不同。这个命令的作用是移动编号是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>b</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>b</mi><mn>2</mn></msub><mo separator="true">,</mo><mo>⋯</mo><mtext> </mtext><mo separator="true">,</mo><msub><mi>b</mi><mi>m</mi></msub></mrow><annotation encoding="application/x-tex">b_1,b_2,\cdots, b_m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">m</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的这 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span> 个同学的位置。要求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>b</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">b_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 换到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>b</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">b_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的位置上,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>b</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">b_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 换到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>b</mi><mn>3</mn></msub></mrow><annotation encoding="application/x-tex">b_3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的位置上,……,要求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>b</mi><mi>m</mi></msub></mrow><annotation encoding="application/x-tex">b_m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">m</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 换到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>b</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">b_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的位置上。执行每个命令都需要一些代价。我们假定如果一个命令要移动 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span> 个人的位置,那么这个命令的代价就是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span>。我们需要佳佳用最少的总代价实现同学们的意愿,你能帮助佳佳吗?</p><p>选择的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span> 个人不必连续。</p> </div> </div> </div><p>tag: 环</p><h3 id="Solution-5">Solution</h3><p>发现如果有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 个人在初始环和目标环中位置相等,那么剩下的人只需要移动 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><mi>k</mi></mrow><annotation encoding="application/x-tex">n-k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 次即可,因为他们的移动一定可以组成环。</p><p><img src="https://img.makerlife.top/data/qexo/2024-10-21-p1053-example1-4a31e48f77e9ddcdf940c5626b635ac3.png" alt="p1053-example1.png"></p><p>但是建出来的环不一定能使 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 取到最大值,所以可以通过类似转一下的方式。</p><table><thead><tr><th>初始环</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th></tr></thead><tbody><tr><td>目标环</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>1</td></tr><tr><td>差值</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td></tr></tbody></table><p><img src="https://img.makerlife.top/data/qexo/2024-10-21-p1053-example2-3a571889e3f818f2b60a3ed47d12d209.png" alt="p1053-example2.png"></p><p>注意到相同差值的位置可以通过旋转变成 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>,所以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>k</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></mrow><annotation encoding="application/x-tex">k_{max}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0315em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 就是最多的相同差值的数量,答案即为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><msub><mi>k</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></mrow><annotation encoding="application/x-tex">n-k_{max}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0315em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。</p><p>考虑如何构造目标环,首先设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>l</mi><mi>i</mi></msub><mo separator="true">,</mo><msub><mi>r</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">l_i, r_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 分别表示第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 个要求的相邻的点,钦定 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>n</mi></msub><mo>=</mo><msub><mi>l</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>a</mi><mn>1</mn></msub><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">a_n=l_1, a_1=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。接下来,每次判断第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 点的相邻两数是否在环中,若不在则加入进去,然后继续寻找新加入的这个点额相邻两数,知道环中的节点数为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>。</p><p>注意计算差值时,不能直接 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub><mo>−</mo><mi>i</mi></mrow><annotation encoding="application/x-tex">a_i-i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>,需要加 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 后 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mi>n</mi></mrow><annotation encoding="application/x-tex">\bmod{n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span></span>。另外需要分别计算初始环顺时针和逆时针排列的方式。</p><h3 id="Core-Code-5">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">if</span> ((i != l[ l[i] ] &amp;&amp; i != r[ l[i] ]) || (i != l[ r[i] ] &amp;&amp; i != r[ r[i] ])) &#123;<br> cout &lt;&lt; <span class="hljs-number">-1</span> &lt;&lt; endl;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br> &#125;<br>&#125;<br>a.<span class="hljs-built_in">push_back</span>(<span class="hljs-number">0</span>);<br>a.<span class="hljs-built_in">push_back</span>(<span class="hljs-number">1</span>);a.<span class="hljs-built_in">push_back</span>(l[<span class="hljs-number">1</span>]);<br>vis[<span class="hljs-number">1</span>] = vis[l[<span class="hljs-number">1</span>]] = <span class="hljs-number">1</span>;<br><span class="hljs-type">int</span> now = l[<span class="hljs-number">1</span>];<br><span class="hljs-keyword">while</span> (a.<span class="hljs-built_in">size</span>() != n + <span class="hljs-number">1</span>) &#123;<br> <span class="hljs-keyword">if</span> (!vis[ l[now] ]) &#123;<br> a.<span class="hljs-built_in">push_back</span>(l[now]);<br> vis[l[now]] = <span class="hljs-number">1</span>;<br> now = l[now];<br> &#125; <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (!vis[ r[now] ]) &#123;<br> a.<span class="hljs-built_in">push_back</span>(r[now]);<br> vis[r[now]] = <span class="hljs-number">1</span>;<br> now = r[now];<br> &#125;<br>&#125;<br><span class="hljs-type">int</span> maxn = <span class="hljs-number">0</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> t[(a[i] + n - i) % n]++;<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>; i &lt; n; i++) &#123;<br> maxn = <span class="hljs-built_in">max</span>(maxn, t[i]);<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>; i &lt;= n; i++) t[i] = <span class="hljs-number">0</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> t[(a[i] + n - (n - i + <span class="hljs-number">1</span>)) % n]++;<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>; i &lt; n; i++) &#123;<br> maxn = <span class="hljs-built_in">max</span>(maxn, t[i]);<br>&#125;<br>cout &lt;&lt; n - maxn &lt;&lt; endl;<br></code></pre></td></tr></table></figure><h2 id="AT-joi2015ho-c-JOI-Park">AT_joi2015ho_c JOI Park</h2><p><a href="https://www.luogu.com.cn/problem/AT_joi2015ho_c">Link</a></p> <div class="fold"> <div class="fold-title fold-info collapsed" data-toggle="collapse" href="#collapse-4348a815" role="button" aria-expanded="false" aria-controls="collapse-4348a815"> <div class="fold-arrow">▶</div>题意 </div> <div class="fold-collapse collapse" id="collapse-4348a815"> <div class="fold-content"> <p>时值 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>20</mn><mtext>XX</mtext></mrow><annotation encoding="application/x-tex">20\text{XX}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord">20</span><span class="mord text"><span class="mord">XX</span></span></span></span></span> 年,IOI 国为了给办奥赛做准备,将要修缮 IOI 国中的 JOI 公园。JOI 公园里有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span> 个广场,这些广场从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span> 编号。有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>M</mi></mrow><annotation encoding="application/x-tex">M</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">M</span></span></span></span> 条道路连接各个广场,这些道路从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>M</mi></mrow><annotation encoding="application/x-tex">M</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">M</span></span></span></span> 编号。第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo stretchy="false">(</mo><mn>1</mn><mo>≤</mo><mi>i</mi><mo>≤</mo><mi>M</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">i(1 \leq i \leq M)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">i</span><span class="mopen">(</span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7955em;vertical-align:-0.136em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">M</span><span class="mclose">)</span></span></span></span> 条道路是一条连接第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>A</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">A_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">A</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 和第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>B</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">B_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 个广场的双向边,长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>D</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">D_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。任意两个广场间一定有道路(直接或间接)相连。</p><p>修缮计划如下:首先,选择一个<strong>自然数</strong> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>X</mi></mrow><annotation encoding="application/x-tex">X</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07847em;">X</span></span></span></span>,将和第一个广场距离等于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>X</mi></mrow><annotation encoding="application/x-tex">X</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07847em;">X</span></span></span></span> 或在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>X</mi></mrow><annotation encoding="application/x-tex">X</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07847em;">X</span></span></span></span> 以下的所有广场(含第一个广场)相互之间连结一条地下通道。广场 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 和广场 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 的距离指,从广场 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 到广场 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 经过的道路长度总和的最小值。定义 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>C</mi></mrow><annotation encoding="application/x-tex">C</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">C</span></span></span></span> 为一个与修筑地下通道花费有关的量(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>C</mi></mrow><annotation encoding="application/x-tex">C</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">C</span></span></span></span> 是整数)。修筑所有地下通道的花费为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>C</mi><mo>×</mo><mi>X</mi></mrow><annotation encoding="application/x-tex">C\times X</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">C</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07847em;">X</span></span></span></span>。</p><p>接下来,撤去已经通过地下通道连接的广场之间的道路。撤去道路的花费不计。</p><p>最后,将没有被撤去的道路进行修补,长为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi></mrow><annotation encoding="application/x-tex">d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span></span></span></span> 的道路修补的花费为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi></mrow><annotation encoding="application/x-tex">d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span></span></span></span>。</p><p>修缮计划实施之前,JOI 公园没有地下通道。请求出 JOI 公园修缮花费总和的最小值。</p> </div> </div> </div><p>需要注意的是删除的道路不只是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>→</mo><mi>u</mi></mrow><annotation encoding="application/x-tex">1\to u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span>,还包含 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>→</mo><mi>u</mi><mo>→</mo><mi>v</mi><mo stretchy="false">(</mo><mi>d</mi><mi>i</mi><msub><mi>s</mi><mi>u</mi></msub><mo>&lt;</mo><mi>d</mi><mi>i</mi><msub><mi>s</mi><mi>v</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">1\to u\to v(dis_u&lt;dis_v)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="mopen">(</span><span class="mord mathnormal">d</span><span class="mord mathnormal">i</span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mord mathnormal">i</span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">v</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</p><p>tag: 最短路</p><h3 id="Solution-6">Solution</h3><p>首先注意到选择的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>X</mi></mrow><annotation encoding="application/x-tex">X</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07847em;">X</span></span></span></span> 一定是某一个点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 节点的距离,所以先 Dijkstra 跑一遍预处理 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mi>i</mi><msub><mi>s</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">dis_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord mathnormal">d</span><span class="mord mathnormal">i</span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,然后从小到大排序后枚举每个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mi>i</mi><msub><mi>s</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">dis_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord mathnormal">d</span><span class="mord mathnormal">i</span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 来计算答案。比如样例中的遍历顺序为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo separator="true">,</mo><mn>3</mn><mo separator="true">,</mo><mn>2</mn><mo separator="true">,</mo><mn>4</mn><mo separator="true">,</mo><mn>5</mn></mrow><annotation encoding="application/x-tex">1, 3, 2, 4, 5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">5</span></span></span></span>,可以发现,在枚举到靠后的节点时,它前面的所有点之间的路径都要被拆掉,这些点到当前节点的路径也要被拆掉(如果存在),所以当前拆掉的边可以由上一步拆掉的边转移而来,这也是从小到大的排序的意义。</p><p>一个例子,计算完 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span> 后,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>→</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">1\to 2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span> 边会被删掉,按照上面的计算方法,下一步计算 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span>,此时应该拆掉 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>→</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">1\to 3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mo>→</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">2\to 3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span>。</p><p><img src="https://img.makerlife.top/data/qexo/2024-10-22-joi2015ho_c-example-e108701b4a3df6ede75535bfd4d554ff.png" alt="joi2015ho_c-example.png"></p><h3 id="Core-Code-6">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">define</span> int ll</span><br><span class="hljs-type">int</span> n, m, c;<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">node</span> &#123;<br> <span class="hljs-type">int</span> pos, dis;<br> <span class="hljs-type">bool</span> <span class="hljs-keyword">operator</span>&lt;(<span class="hljs-type">const</span> node&amp; x) <span class="hljs-type">const</span> &#123;<br> <span class="hljs-keyword">return</span> dis &gt; x.dis;<br> &#125;<br>&#125;;<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">edge</span> &#123;<br> <span class="hljs-type">int</span> v, w;<br>&#125;;<br>vector&lt;edge&gt; e[N];<br>bitset&lt;N&gt; vis;<br>node dis[N];<br><span class="hljs-type">int</span> sum = <span class="hljs-number">0ll</span>;<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dij</span><span class="hljs-params">(<span class="hljs-type">int</span> u)</span> </span>&#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> dis[i].dis = INF;<br> &#125;<br> dis[<span class="hljs-number">1</span>].dis = <span class="hljs-number">0ll</span>;<br> priority_queue&lt;node&gt; q;<br> q.<span class="hljs-built_in">push</span>(&#123;<span class="hljs-number">1</span>, <span class="hljs-number">0</span>&#125;);<br> <span class="hljs-keyword">while</span> (!q.<span class="hljs-built_in">empty</span>()) &#123;<br> <span class="hljs-type">int</span> u = q.<span class="hljs-built_in">top</span>().pos;<br> q.<span class="hljs-built_in">pop</span>();<br> <span class="hljs-keyword">if</span> (vis[u]) <span class="hljs-keyword">continue</span>;<br> vis[u] = <span class="hljs-number">1ll</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> x : e[u]) &#123;<br> <span class="hljs-type">int</span> v = x.v, w = x.w;<br> <span class="hljs-keyword">if</span> (dis[v].dis &gt; dis[u].dis + w) &#123;<br> dis[v].dis = dis[u].dis + w;<br> <span class="hljs-keyword">if</span> (!vis[v]) q.<span class="hljs-built_in">push</span>(&#123;v, dis[v].dis&#125;);<br> &#125;<br> &#125;<br> &#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">signed</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> n = <span class="hljs-built_in">read</span>(); m = <span class="hljs-built_in">read</span>(); c = <span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= m; i++) &#123;<br> <span class="hljs-type">int</span> u = <span class="hljs-built_in">read</span>(), v = <span class="hljs-built_in">read</span>(), w = <span class="hljs-built_in">read</span>();<br> e[u].<span class="hljs-built_in">push_back</span>(&#123;v, w&#125;);<br> e[v].<span class="hljs-built_in">push_back</span>(&#123;u, w&#125;);<br> sum += w;<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> dis[i].pos = i;<br> &#125;<br> <span class="hljs-built_in">dij</span>(<span class="hljs-number">1</span>);<br> <span class="hljs-built_in">sort</span>(dis + <span class="hljs-number">1</span>, dis + n + <span class="hljs-number">1</span>);<br> <span class="hljs-type">int</span> minn = INF;<br> <span class="hljs-type">int</span> last = <span class="hljs-number">0</span>;<br> vis.<span class="hljs-built_in">reset</span>();<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = n; i &gt;= <span class="hljs-number">1</span>; i--) &#123;<br> <span class="hljs-type">int</span> ans = dis[i].dis * c;<br> ans += sum;<br> vis[dis[i].pos] = <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> x : e[dis[i].pos]) &#123;<br> <span class="hljs-type">int</span> v = x.v, w = x.w;<br> <span class="hljs-keyword">if</span> (vis[v]) last += w;<br> &#125;<br> minn = <span class="hljs-built_in">min</span>(minn, ans - last);<br> &#125;<br> cout &lt;&lt; minn &lt;&lt; endl;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="AGC001C-Shorten-Diameter">AGC001C Shorten Diameter</h2><p>给定一颗 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个节点的树,你需要删除一些叶子使得树的直径小于等于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span>。求最少的删除的点的个数。</p><p>tag: 树的直径</p><h3 id="Solution-7">Solution</h3><p>将题目转化为寻找一个中心,使中心左右两边最多延伸 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mstyle displaystyle="true" scriptlevel="0"><mfrac><mi>k</mi><mn>2</mn></mfrac></mstyle></mrow><annotation encoding="application/x-tex">\dfrac{k}{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.0574em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3714em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 个节点,记能延伸到的节点数为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi><mi>o</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">tot</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span><span class="mord mathnormal">o</span><span class="mord mathnormal">t</span></span></span></span>。删除的点即为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><mi>t</mi><mi>o</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">n-tot</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span><span class="mord mathnormal">o</span><span class="mord mathnormal">t</span></span></span></span>。</p><p>如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 是偶数,一定有一个中点,枚举中点即可。</p><p>如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 是奇数,一定有相邻的两个中点,枚举即可。</p><h3 id="Core-Code-7">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-type">int</span> tot;<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> fa, <span class="hljs-type">int</span> step)</span> </span>&#123;<br> tot++;<br> <span class="hljs-keyword">if</span> (step == <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : e[u]) &#123;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-built_in">dfs</span>(v, u, step - <span class="hljs-number">1</span>);<br> &#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> <span class="hljs-type">int</span> ans = INF;<br> <span class="hljs-keyword">if</span> (!(k &amp; <span class="hljs-number">1</span>)) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> tot = <span class="hljs-number">0</span>;<br> <span class="hljs-built_in">dfs</span>(i, <span class="hljs-number">0</span>, k / <span class="hljs-number">2</span>);<br> ans = <span class="hljs-built_in">min</span>(ans, n - tot);<br> &#125;<br> &#125; <span class="hljs-keyword">else</span> &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> u = <span class="hljs-number">1</span>; u &lt;= n; u++) &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : e[u]) &#123;<br> tot = <span class="hljs-number">0</span>;<br> <span class="hljs-built_in">dfs</span>(v, u, k / <span class="hljs-number">2</span>);<br> <span class="hljs-built_in">dfs</span>(u, v, k / <span class="hljs-number">2</span>);<br> ans = <span class="hljs-built_in">min</span>(ans, n - tot);<br> &#125;<br> &#125;<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P8677-蓝桥杯-2018-国-A-采油">P8677 [蓝桥杯 2018 国 A] 采油</h2><p><a href="https://www.luogu.com.cn/problem/P8677">Link</a></p><p>tag: 贪心</p><h3 id="Solution-8">Solution</h3><p>第一问显然最优情况下答案为边权和的两倍。</p><p>考虑第二问,对于一个点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span>,至少需要耗费 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>S</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">S_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0576em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的人。</p><p>首先认为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>B</mi><mi>u</mi></msub><mo>≥</mo><msub><mi>S</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">B_u\geq S_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0576em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,因为即使 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>B</mi><mi>u</mi></msub><mo>&lt;</mo><msub><mi>S</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">B_u&lt;S_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0576em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,该节点也需要 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>S</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">S_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0576em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的人。</p><p>若只有一个节点,那么耗费的人显然为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>B</mi><mi>u</mi></msub></mrow><annotation encoding="application/x-tex">B_u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">u</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>;</p><p>若有两个节点,不妨设为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span></span></span></span>,且 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>B</mi><mi>x</mi></msub><mo>−</mo><msub><mi>S</mi><mi>x</mi></msub><mo>&gt;</mo><msub><mi>B</mi><mi>y</mi></msub><mo>−</mo><msub><mi>S</mi><mi>y</mi></msub></mrow><annotation encoding="application/x-tex">B_x-S_x&gt;B_y-S_y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0576em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0576em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>,即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 剩下的人数比 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span></span></span></span> 多,那么感性理解肯定要先走 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>,才能充分发挥剩余的人。试图证一下,先 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 后 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span></span></span></span> 的总花费为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>max</mi><mo>⁡</mo><mo stretchy="false">{</mo><msub><mi>B</mi><mi>x</mi></msub><mo separator="true">,</mo><msub><mi>B</mi><mi>x</mi></msub><mo>+</mo><msub><mi>B</mi><mi>y</mi></msub><mo>−</mo><mo stretchy="false">(</mo><msub><mi>B</mi><mi>x</mi></msub><mo>−</mo><msub><mi>S</mi><mi>x</mi></msub><mo stretchy="false">)</mo><mo stretchy="false">}</mo><mo>=</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">{</mo><msub><mi>B</mi><mi>x</mi></msub><mo separator="true">,</mo><msub><mi>B</mi><mi>y</mi></msub><mo>+</mo><msub><mi>S</mi><mi>x</mi></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\max\{B_x, B_x+B_y-(B_x-S_x)\}=\max\{B_x, B_y+S_x\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">max</span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0576em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)}</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">max</span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0576em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span>,则先 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span></span></span></span> 后 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 的总花费为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>max</mi><mo>⁡</mo><mo stretchy="false">{</mo><msub><mi>B</mi><mi>y</mi></msub><mo separator="true">,</mo><msub><mi>B</mi><mi>x</mi></msub><mo>+</mo><msub><mi>S</mi><mi>y</mi></msub><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\max\{B_y, B_x+S_y\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">max</span><span class="mopen">{</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0576em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">}</span></span></span></span>,将上面的式子移项可得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>B</mi><mi>y</mi></msub><mo>+</mo><msub><mi>S</mi><mi>x</mi></msub><mo>&lt;</mo><msub><mi>B</mi><mi>x</mi></msub><mo>+</mo><msub><mi>S</mi><mi>y</mi></msub></mrow><annotation encoding="application/x-tex">B_y+S_x&lt;B_x+S_y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0576em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0576em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>,结论得证;</p><p>将结论推广到同一层上有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span> 个节点,可以通过两两依次缩点的形式转化为两个节点。</p><p>再考虑更一般的情况,在满足第一问的限制下,即按照最短路径,一定是先遍历完每个子树最短。所以搜到一个点时,先将这个点为根的所有子树缩点,按照剩余人数排序,递归继续缩点。</p><p>注意搜索时需要从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi><mo>−</mo><mi>S</mi></mrow><annotation encoding="application/x-tex">B-S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span></span></span></span> 最大的点开搜。</p><h3 id="Core-Code-8">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">struct</span> <span class="hljs-title class_">node</span> &#123;<br> <span class="hljs-type">int</span> b, s;<br> <span class="hljs-type">bool</span> <span class="hljs-keyword">operator</span>&lt;(<span class="hljs-type">const</span> node &amp;x) <span class="hljs-type">const</span> &#123;<br> <span class="hljs-keyword">return</span> b - s &gt; x.b - x.s;<br> &#125;<br> node <span class="hljs-keyword">operator</span>+(<span class="hljs-type">const</span> node &amp;x) <span class="hljs-type">const</span> &#123;<br> node res;<br> res.b = <span class="hljs-built_in">max</span>(b, s + x.b), res.s = s + x.s;<br> <span class="hljs-keyword">return</span> res;<br> &#125;<br>&#125;a[N];<br><span class="hljs-function">node <span class="hljs-title">dfs</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> fa)</span> </span>&#123;<br> vector&lt;node&gt; p;<br> p.<span class="hljs-built_in">push_back</span>(a[u]);<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : e[u]) &#123;<br> <span class="hljs-keyword">if</span> (v == fa) <span class="hljs-keyword">continue</span>;<br> p.<span class="hljs-built_in">push_back</span>(<span class="hljs-built_in">dfs</span>(v, u));<br> &#125;<br> node res;<br> res.b = res.s = <span class="hljs-number">0</span>;<br> <span class="hljs-built_in">sort</span>(p.<span class="hljs-built_in">begin</span>(), p.<span class="hljs-built_in">end</span>());<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> v : p) res = res + v;<br> <span class="hljs-keyword">return</span> res;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> n = <span class="hljs-built_in">read</span>();<br> <span class="hljs-type">int</span> sum = <span class="hljs-number">0</span>;<br> <span class="hljs-type">int</span> maxn = <span class="hljs-number">0</span>, maxpos = <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> a[i].b = <span class="hljs-built_in">read</span>();<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> a[i].s = <span class="hljs-built_in">read</span>();<br> a[i].b = <span class="hljs-built_in">max</span>(a[i].b, a[i].s);<br> <span class="hljs-keyword">if</span> (a[i].b - a[i].s &gt; maxn) &#123;<br> maxn = a[i].b - a[i].s;<br> maxpos = i;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt; n; i++) &#123;<br> <span class="hljs-type">int</span> v = <span class="hljs-built_in">read</span>(), w = <span class="hljs-built_in">read</span>();<br> e[i + <span class="hljs-number">1</span>].<span class="hljs-built_in">push_back</span>(v);<br> e[v].<span class="hljs-built_in">push_back</span>(i + <span class="hljs-number">1</span>);<br> sum += w;<br> &#125;<br> cout &lt;&lt; sum * <span class="hljs-number">2</span> &lt;&lt; <span class="hljs-string">&quot; &quot;</span> &lt;&lt; <span class="hljs-built_in">dfs</span>(maxpos, <span class="hljs-number">0</span>).b &lt;&lt; <span class="hljs-string">&#x27;\n&#x27;</span>;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P2659-美丽的序列">P2659 美丽的序列</h2><p><a href="https://www.luogu.com.cn/problem/P2659">Link</a></p><blockquote><p>给定一个序列,找到一个区间使得区间最小值与区间长度的乘积最大,输出乘积。</p></blockquote><p>tag: 单调栈</p><h3 id="Solution-9">Solution</h3><p>维护区间最小值,想到用单调栈。</p><p>单调递增栈,当遍历后面的元素时,如果此时元素比之前元素最小值小,那么之前元素的最小值地位从当前元素开始失效,也就可以得到之前元素所管辖的区间右端点。同理,也可以找到当前元素管辖区间的左端点,即为弹栈后的栈顶,也就是前面第一个大于当前元素的位置。</p><h3 id="Core-Code-9">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> q[i].l = <span class="hljs-number">1</span>, q[i].r = n;<br> <span class="hljs-keyword">while</span> (!st.<span class="hljs-built_in">empty</span>() &amp;&amp; a[st.<span class="hljs-built_in">top</span>()] &gt; a[i]) &#123;<br> q[st.<span class="hljs-built_in">top</span>()].r = i - <span class="hljs-number">1</span>;<br> st.<span class="hljs-built_in">pop</span>();<br> &#125;<br> <span class="hljs-keyword">if</span> (!st.<span class="hljs-built_in">empty</span>()) q[i].l = st.<span class="hljs-built_in">top</span>() + <span class="hljs-number">1</span>;<br> st.<span class="hljs-built_in">push</span>(i);<br>&#125;<br><span class="hljs-type">int</span> ans = <span class="hljs-number">0</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> ans = <span class="hljs-built_in">max</span>(ans, (q[i].r - q[i].l + <span class="hljs-number">1</span>) * a[i]);<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P12177-蓝桥杯-2025-省-Python-B-异或和">P12177 [蓝桥杯 2025 省 Python B] 异或和</h2><p><a href="https://www.luogu.com.cn/problem/P12177">Link</a></p><blockquote><p>求:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><munderover><mo>∑</mo><mrow><mi>j</mi><mo>=</mo><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>n</mi></munderover><mo stretchy="false">(</mo><msub><mi>a</mi><mi>i</mi></msub><mo>⊕</mo><msub><mi>a</mi><mi>j</mi></msub><mo stretchy="false">)</mo><mo>×</mo><mo stretchy="false">(</mo><mi>j</mi><mo>−</mo><mi>i</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\sum_{i=1}^{n} \sum_{j=i+1}^{n} (a_i \oplus a_j) \times (j - i)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3.0652em;vertical-align:-1.4138em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6514em;"><span style="top:-1.8723em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2777em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6514em;"><span style="top:-1.8723em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mrel mtight">=</span><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.4138em;"><span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊕</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">i</span><span class="mclose">)</span></span></span></span></span></p></blockquote><p>tag: 二进制按位</p><h3 id="Solution-10">Solution</h3><p>按位考虑,注意到为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>⊕</mo><mn>0</mn><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">1\oplus0=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊕</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,也就是说只有两个数当前位不同才能产生贡献。</p><p>按位枚举,对于每一位的数正向扫,统计之前有多少个数可以产生贡献 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mi>u</mi><mi>m</mi></mrow><annotation encoding="application/x-tex">num</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span></span></span></span>,和产生贡献数的位置和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>s</mi><mi>u</mi><mi>m</mi></mrow><annotation encoding="application/x-tex">lsum</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span></span></span></span>。</p><p>当前枚举到第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 个数。</p><ul><li>如果当前位为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>,那么产生的贡献为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>i</mi></msup><mo>×</mo><mo stretchy="false">(</mo><mi>j</mi><mo>×</mo><mi>n</mi><mi>u</mi><mi>m</mi><mo>−</mo><mi>l</mi><mi>s</mi><mi>u</mi><mi>m</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">2^i\times (j\times num - lsum)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.908em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8247em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">s</span><span class="mord mathnormal">u</span><span class="mord mathnormal">m</span><span class="mclose">)</span></span></span></span>;</li><li>如果为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,各变量直接用总数减去 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的即可。</li></ul><p>时间复杂度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\mathcal{O}(n\log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathcal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>。</p><h3 id="Core-Code-10">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>; i &lt;= <span class="hljs-number">20</span>; i++) &#123;<br> <span class="hljs-type">int</span> lsum = <span class="hljs-number">0</span>, num = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j &lt;= n; j++) &#123;<br> <span class="hljs-type">int</span> v = ((a[j] &gt;&gt; i) &amp; <span class="hljs-number">1</span>);<br> <span class="hljs-keyword">if</span> (!v) &#123;<br> ans += (<span class="hljs-number">1</span> &lt;&lt; i) * (num * j - lsum);<br> &#125; <span class="hljs-keyword">else</span> &#123;<br> ans += (<span class="hljs-number">1</span> &lt;&lt; i) * ((j - <span class="hljs-number">1</span> - num) * j - ((j - <span class="hljs-number">1</span>) * j / <span class="hljs-number">2</span> - lsum));<br> num++, lsum += j;<br> &#125;<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P3831-SHOI2012-回家的路">P3831 [SHOI2012] 回家的路</h2><p><a href="https://www.luogu.com.cn/problem/P3831">Link</a></p><blockquote><p>有一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>×</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">n\times n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 的网格图,给定起点和终点,给定若干格点作为换乘站,非换乘站只能沿之前的方向行走,在换乘站可换向。</p><p>换乘花费为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,行走一格花费为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>,求最小花费。</p></blockquote><p>tag:分层图, 最短路</p><h3 id="Solution-11">Solution</h3><p>考虑将起点、终点和可换乘的格点作为节点,对两两直接可达的节点连边。</p><p>显然同一行或同一列内相邻两换乘站应当连边,想到分层图。</p><p>所有行为一层、所有列为一层建图。同时,上下两层对应相同的节点连边权为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的边表示可以换乘。在这个图上跑最短路即可。</p><h3 id="Core-Code-11">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">bool</span> <span class="hljs-title">cmpx</span><span class="hljs-params">(node a, node b)</span> </span>&#123;<br> <span class="hljs-keyword">if</span> (a.x != b.x) <span class="hljs-keyword">return</span> a.x &lt; b.x;<br> <span class="hljs-keyword">else</span> <span class="hljs-keyword">return</span> a.y &lt; b.y;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">bool</span> <span class="hljs-title">cmpy</span><span class="hljs-params">(node a, node b)</span> </span>&#123;<br> <span class="hljs-keyword">if</span> (a.y != b.y) <span class="hljs-keyword">return</span> a.y &lt; b.y;<br> <span class="hljs-keyword">else</span> <span class="hljs-keyword">return</span> a.x &lt; b.x;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> m = <span class="hljs-built_in">read</span>(), n = <span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-type">int</span> x = <span class="hljs-built_in">read</span>(), y = <span class="hljs-built_in">read</span>();<br> p[i].x = x, p[i].y = y, p[i].id = i;<br> e[i].<span class="hljs-built_in">push_back</span>(&#123;i + n + <span class="hljs-number">2</span>, <span class="hljs-number">1</span>&#125;);<br> e[i + n + <span class="hljs-number">2</span>].<span class="hljs-built_in">push_back</span>(&#123;i, <span class="hljs-number">1</span>&#125;);<br> &#125;<br> p[<span class="hljs-number">0</span>].x = <span class="hljs-built_in">read</span>(), p[<span class="hljs-number">0</span>].y = <span class="hljs-built_in">read</span>(), p[<span class="hljs-number">0</span>].id = <span class="hljs-number">0</span>;<br> p[n + <span class="hljs-number">1</span>].x = <span class="hljs-built_in">read</span>(), p[n + <span class="hljs-number">1</span>].y = <span class="hljs-built_in">read</span>(), p[n + <span class="hljs-number">1</span>].id = n + <span class="hljs-number">1</span>;<br> <span class="hljs-built_in">sort</span>(p, p + n + <span class="hljs-number">2</span>, cmpy);<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">if</span> (p[i].y == p[i + <span class="hljs-number">1</span>].y) &#123;<br> <span class="hljs-type">int</span> dis = <span class="hljs-built_in">abs</span>(p[i].x - p[i + <span class="hljs-number">1</span>].x);<br> e[p[i].id].<span class="hljs-built_in">push_back</span>(&#123;p[i + <span class="hljs-number">1</span>].id, <span class="hljs-number">2</span> * dis&#125;);<br> e[p[i + <span class="hljs-number">1</span>].id].<span class="hljs-built_in">push_back</span>(&#123;p[i].id, <span class="hljs-number">2</span> * dis&#125;);<br> &#125;<br> &#125;<br> <span class="hljs-built_in">sort</span>(p, p + n + <span class="hljs-number">2</span>, cmpx);<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">if</span> (p[i].x == p[i + <span class="hljs-number">1</span>].x) &#123;<br> <span class="hljs-type">int</span> dis = <span class="hljs-built_in">abs</span>(p[i].y - p[i + <span class="hljs-number">1</span>].y);<br> e[p[i].id + n + <span class="hljs-number">2</span>].<span class="hljs-built_in">push_back</span>(&#123;p[i + <span class="hljs-number">1</span>].id + n + <span class="hljs-number">2</span>, <span class="hljs-number">2</span> * dis&#125;);<br> e[p[i + <span class="hljs-number">1</span>].id + n + <span class="hljs-number">2</span>].<span class="hljs-built_in">push_back</span>(&#123;p[i].id + n + <span class="hljs-number">2</span>, <span class="hljs-number">2</span> * dis&#125;);<br> &#125;<br> &#125;<br> <span class="hljs-type">int</span> ans = INF;<br> w.s = <span class="hljs-number">0</span>;<br> w.<span class="hljs-built_in">dij</span>();<br> ans = <span class="hljs-built_in">min</span>(&#123;w.dis[n + <span class="hljs-number">1</span>], w.dis[n + <span class="hljs-number">1</span> + n + <span class="hljs-number">2</span>]&#125;);<br> w.s = n + <span class="hljs-number">2</span>;<br> w.vis.<span class="hljs-built_in">reset</span>();<br> w.<span class="hljs-built_in">dij</span>();<br> ans = <span class="hljs-built_in">min</span>(&#123;ans, w.dis[n + <span class="hljs-number">1</span>], w.dis[n + <span class="hljs-number">1</span> + n + <span class="hljs-number">2</span>]&#125;);<br> cout &lt;&lt; ans &lt;&lt; endl;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P3594-POI-2015-R3-狼坑-Trous-de-loup">P3594 [POI 2015 R3] 狼坑 Trous de loup</h2><p><a href="https://www.luogu.com.cn/problem/P3594">Link</a></p><blockquote><p>给定一个长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 的序列,你有一次机会选中一段连续的长度不超过 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi></mrow><annotation encoding="application/x-tex">d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span></span></span></span> 的区间,将里面所有数字全部修改为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。找到最长的一段连续区间,使得该区间内所有数字之和不超过 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>。</p></blockquote><p>tag: 双指针, 单调队列</p><h3 id="Solution-12">Solution</h3><p>首先容易得到,选择的区间长度一定为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi></mrow><annotation encoding="application/x-tex">d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span></span></span></span> 最优。</p><p>考虑暴力,枚举左右端点和选择的区间,时间复杂度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>3</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\mathcal{O}(n^3)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathcal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</p><p>考虑优化,不难想到双指针,可以把暴力的枚举左右端点部分优化掉,时间复杂度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\mathcal{O}(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathcal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</p><p>观察最终答案的式子:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><munder><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mi>l</mi><mo separator="true">,</mo><mi>r</mi></mrow></munder><mrow><mo fence="true">(</mo><mi>r</mi><mo>−</mo><mi>l</mi><mo>+</mo><mn>1</mn><mo fence="true">)</mo></mrow><mspace width="1em"/><mtext>s.t.</mtext><mspace width="1em"/><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mi>l</mi></mrow><mi>r</mi></munderover><msub><mi>w</mi><mi>i</mi></msub><mo>−</mo><munder><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mi>k</mi><mo>∈</mo><mrow><mo fence="true">[</mo><mi>l</mi><mo separator="true">,</mo><mi>r</mi><mo>−</mo><mi>d</mi><mo>+</mo><mn>1</mn><mo fence="true">]</mo></mrow></mrow></munder><munderover><mo>∑</mo><mrow><mi>j</mi><mo>=</mo><mi>k</mi></mrow><mrow><mi>k</mi><mo>+</mo><mi>d</mi><mo>−</mo><mn>1</mn></mrow></munderover><msub><mi>w</mi><mi>j</mi></msub><mo>≤</mo><mi>p</mi></mrow><annotation encoding="application/x-tex">\max_{l, r} \left(r - l + 1\right)\quad \text{s.t.} \quad\sum_{i=l}^r w_i - \max_{k\in \left[l, r - d + 1\right]}\sum_{j=k}^{k+d-1} w_j \leq p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.9535em;vertical-align:-1.3021em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4306em;"><span style="top:-2.3479em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8882em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:1em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord text"><span class="mord">s.t.</span></span><span class="mspace" style="margin-right:1em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6514em;"><span style="top:-1.8479em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.3021em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0269em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:3.2743em;vertical-align:-1.4382em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4306em;"><span style="top:-2.309em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mrel mtight">∈</span><span class="minner mtight"><span class="mopen mtight delimcenter" style="top:0em;"><span class="mtight">[</span></span><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight">d</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mclose mtight delimcenter" style="top:0em;"><span class="mtight">]</span></span></span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.966em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8361em;"><span style="top:-1.8479em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mrel mtight">=</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">d</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.4382em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0269em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span></span></p><p>注意到复杂度瓶颈在于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mi>k</mi><mo>∈</mo><mrow><mo fence="true">[</mo><mi>l</mi><mo separator="true">,</mo><mi>r</mi><mo>−</mo><mi>d</mi><mo>+</mo><mn>1</mn><mo fence="true">]</mo></mrow></mrow></msub><msubsup><mo>∑</mo><mrow><mi>j</mi><mo>=</mo><mi>k</mi></mrow><mrow><mi>k</mi><mo>+</mo><mi>d</mi><mo>−</mo><mn>1</mn></mrow></msubsup><msub><mi>w</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">\max_{k\in \left[l, r - d + 1\right]}\sum_{j=k}^{k+d-1} w_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.4248em;vertical-align:-0.4358em;"></span><span class="mop"><span class="mop">max</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.5198em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mrel mtight">∈</span><span class="minner mtight"><span class="mopen mtight delimcenter" style="top:0em;"><span class="mtight">[</span></span><span class="mord mathnormal mtight" style="margin-right:0.01968em;">l</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight">d</span><span class="mbin mtight">+</span><span class="mord mtight">1</span><span class="mclose mtight delimcenter" style="top:0em;"><span class="mtight">]</span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3552em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.989em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mrel mtight">=</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">d</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4358em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0269em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 的计算,发现可以用单调队列维护这个值。当右端点右移时,加入新的区间和,同时弹出不在区间内的区间和。</p><h3 id="Core-Code-12">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs cpp">deque&lt;<span class="hljs-type">int</span>&gt; q; <span class="hljs-comment">// [i - d + 1, i]</span><br>q.<span class="hljs-built_in">emplace_back</span>(d);<br><span class="hljs-type">int</span> ans = d;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> r = d + <span class="hljs-number">1</span>; r &lt;= n; r++) &#123;<br> <span class="hljs-keyword">while</span> (!q.<span class="hljs-built_in">empty</span>() &amp;&amp;<br> sum[q.<span class="hljs-built_in">back</span>()] - sum[q.<span class="hljs-built_in">back</span>()-d] &lt;= sum[r] - sum[r-d]) &#123;<br> q.<span class="hljs-built_in">pop_back</span>();<br> &#125;<br> q.<span class="hljs-built_in">emplace_back</span>(r);<br> <span class="hljs-keyword">while</span> (!q.<span class="hljs-built_in">empty</span>() &amp;&amp; q.<span class="hljs-built_in">front</span>() - d + <span class="hljs-number">1</span> &lt; l) q.<span class="hljs-built_in">pop_front</span>();<br> <span class="hljs-keyword">while</span> (!q.<span class="hljs-built_in">empty</span>() &amp;&amp; sum[r] - sum[l<span class="hljs-number">-1</span>] - (sum[q.<span class="hljs-built_in">front</span>()] - sum[q.<span class="hljs-built_in">front</span>()-d]) &gt; p) &#123;<br> l++;<br> <span class="hljs-keyword">while</span> (!q.<span class="hljs-built_in">empty</span>() &amp;&amp; q.<span class="hljs-built_in">front</span>() - d + <span class="hljs-number">1</span> &lt; l) q.<span class="hljs-built_in">pop_front</span>();<br> &#125;<br> ans = <span class="hljs-built_in">max</span>(ans, r - l + <span class="hljs-number">1</span>);<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P10957-环路运输">P10957 环路运输</h2><p><a href="https://www.luogu.com.cn/problem/P10957">Link</a></p><blockquote><p>在一条环形公路旁均匀地分布着 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span> 座仓库,编号为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>∼</mo><mi>N</mi></mrow><annotation encoding="application/x-tex">1 \sim N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span>,编号为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 的仓库与编号为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 的仓库之间的距离定义为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mi>i</mi><mi>s</mi><mi>t</mi><mo stretchy="false">(</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi><mo stretchy="false">)</mo><mo>=</mo><mi>min</mi><mo>⁡</mo><mtext>⁡</mtext><mo stretchy="false">(</mo><mi mathvariant="normal">∣</mi><mi>i</mi><mo>−</mo><mi>j</mi><mi mathvariant="normal">∣</mi><mo separator="true">,</mo><mi>N</mi><mo>−</mo><mi mathvariant="normal">∣</mi><mi>i</mi><mo>−</mo><mi>j</mi><mi mathvariant="normal">∣</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">dist(i,j)=\min⁡(|i-j|,N-|i-j|)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mord mathnormal">i</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span><span class="mopen">(</span><span class="mord mathnormal">i</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">min</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">⁡</span><span class="mopen">(</span><span class="mord">∣</span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mord">∣</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mord">∣</span><span class="mclose">)</span></span></span></span>,也就是逆时针或顺时针从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 中较近的一种。每座仓库都有权 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。</p><p>在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 两座仓库之间运送货物需要的代价为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub><mo>+</mo><msub><mi>a</mi><mi>j</mi></msub><mo>+</mo><mi>d</mi><mi>i</mi><mi>s</mi><mi>t</mi><mo stretchy="false">(</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">a_i+a_j+dist(i,j)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8694em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mord mathnormal">i</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span><span class="mopen">(</span><span class="mord mathnormal">i</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose">)</span></span></span></span>。求最大代价。</p></blockquote><p>tag: 单调队列</p><h3 id="Solution-13">Solution</h3><p>首先断环为链,考虑化简最终答案的式子:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left right left" columnspacing="0em 1em 0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msub><mi>a</mi><mi>i</mi></msub><mo>+</mo><msub><mi>a</mi><mi>j</mi></msub><mo>+</mo><mi>min</mi><mo>⁡</mo><mtext> ⁣</mtext><mrow><mo fence="true">(</mo><mi mathvariant="normal">∣</mi><mi>i</mi><mo>−</mo><mi>j</mi><mi mathvariant="normal">∣</mi><mo separator="true">,</mo><mtext>  </mtext><mi>n</mi><mo>−</mo><mi mathvariant="normal">∣</mi><mi>i</mi><mo>−</mo><mi>j</mi><mi mathvariant="normal">∣</mi><mo fence="true">)</mo></mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mrow><mo fence="true">(</mo><mn>1</mn><mo>≤</mo><mi>j</mi><mo>&lt;</mo><mi>i</mi><mo>≤</mo><mi>n</mi><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msub><mi>a</mi><mi>i</mi></msub><mo>+</mo><msub><mi>a</mi><mi>j</mi></msub><mo>+</mo><mo stretchy="false">(</mo><mi>i</mi><mo>−</mo><mi>j</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mrow><mo fence="true">(</mo><mn>1</mn><mo>≤</mo><mi>j</mi><mo>&lt;</mo><mi>i</mi><mo>≤</mo><mn>2</mn><mi>n</mi><mo separator="true">,</mo><mtext>  </mtext><mi>i</mi><mo>−</mo><mi>j</mi><mo>&lt;</mo><mrow><mo fence="true">⌊</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo fence="true">⌋</mo></mrow><mo fence="true">)</mo></mrow></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mtext>ans</mtext></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><munder><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mn>1</mn><mo>≤</mo><mi>j</mi><mo>&lt;</mo><mi>i</mi><mo>≤</mo><mn>2</mn><mi>n</mi></mrow></munder><msub><mi>f</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>j</mi></mrow></msub></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><munder><mrow><mi>max</mi><mo>⁡</mo></mrow><mrow><mn>1</mn><mo>≤</mo><mi>j</mi><mo>&lt;</mo><mi>i</mi><mo>≤</mo><mn>2</mn><mi>n</mi><mo separator="true">,</mo><mi>i</mi><mo>−</mo><mi>j</mi><mo>&lt;</mo><mrow><mo fence="true">⌊</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo fence="true">⌋</mo></mrow></mrow></munder><mrow><mo fence="true">(</mo><msub><mi>a</mi><mi>i</mi></msub><mo>+</mo><mi>i</mi><mo fence="true">)</mo></mrow><mo>+</mo><mrow><mo fence="true">(</mo><msub><mi>a</mi><mi>j</mi></msub><mo>−</mo><mi>j</mi><mo fence="true">)</mo></mrow><mi mathvariant="normal">.</mi></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}f_{i,j}&amp;= a_i + a_j + \min\!\left( |i-j|,\; n - |i-j| \right) &amp;&amp;\left(1 \leq j &lt; i \leq n\right) \\&amp;= a_i + a_j + (i-j) &amp;&amp;\left(1 \leq j &lt; i \leq 2n,\; i-j &lt; \left\lfloor \frac{n}{2} \right\rfloor \right)\\\text{ans}&amp;= \max_{1 \leq j &lt; i \leq 2n} f_{i,j} \\&amp;= \max_{1 \leq j &lt; i \leq 2n, i-j &lt; \left\lfloor \frac{n}{2} \right\rfloor} \left(a_i + i \right) + \left(a_j - j \right).\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:8.0458em;vertical-align:-3.7729em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.2729em;"><span style="top:-6.5829em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span><span style="top:-4.7729em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"></span></span><span style="top:-2.9469em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"><span class="mord text"><span class="mord">ans</span></span></span></span><span style="top:-0.9431em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.7729em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.2729em;"><span style="top:-6.5829em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mop">min</span><span class="mspace" style="margin-right:-0.1667em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">∣</span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mord">∣</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">∣</span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mord">∣</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span><span style="top:-4.7729em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose">)</span></span></span><span style="top:-2.9469em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4306em;"><span style="top:-2.3723em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mrel mtight">&lt;</span><span class="mord mathnormal mtight">i</span><span class="mrel mtight">≤</span><span class="mord mtight">2</span><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8638em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span><span style="top:-0.9431em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.4306em;"><span style="top:-2.1365em;margin-left:0em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span><span class="mrel mtight">≤</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mrel mtight">&lt;</span><span class="mord mathnormal mtight">i</span><span class="mrel mtight">≤</span><span class="mord mtight">2</span><span class="mord mathnormal mtight">n</span><span class="mpunct mtight">,</span><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mrel mtight">&lt;</span><span class="minner mtight"><span class="mopen sizing reset-size3 size6 mtight delimcenter" style="top:0.075em;"><span class="mtight">⌊</span></span><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6915em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.344em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span><span class="mclose sizing reset-size3 size6 mtight delimcenter" style="top:0.075em;"><span class="mtight">⌋</span></span></span></span></span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span><span class="mop">max</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.266em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">i</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">.</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.7729em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-r"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:4.2729em;"><span style="top:-6.5829em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"></span></span><span style="top:-4.7729em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"></span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:4.2729em;"><span style="top:-6.5829em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">n</span><span class="mclose delimcenter" style="top:0em;">)</span></span></span></span><span style="top:-4.7729em;"><span class="pstrut" style="height:3.15em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size2">(</span></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">2</span><span class="mord mathnormal">n</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size2">⌊</span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size2">⌋</span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size2">)</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p><p>注意到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><msub><mi>a</mi><mi>i</mi></msub><mo>+</mo><mi>i</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(a_i + i)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">i</span><span class="mclose">)</span></span></span></span> 与 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 无关,可以枚举 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>,然后在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo fence="true">[</mo><mi>i</mi><mo>−</mo><mrow><mo fence="true">⌊</mo><mstyle displaystyle="true" scriptlevel="0"><mfrac><mi>n</mi><mn>2</mn></mfrac></mstyle><mo fence="true">⌋</mo></mrow><mo separator="true">,</mo><mi>i</mi><mo>−</mo><mn>1</mn><mo fence="true">]</mo></mrow><annotation encoding="application/x-tex">\left[i - \left\lfloor\dfrac{n}{2}\right\rfloor, i - 1\right]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.836em;vertical-align:-0.686em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size2">[</span></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size2">⌊</span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size2">⌋</span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size2">]</span></span></span></span></span></span> 范围内寻找 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>j</mi></msub><mo>−</mo><mi>j</mi></mrow><annotation encoding="application/x-tex">a_j - j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8694em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 的最大值,可以用单调队列维护这个值。</p><h3 id="Core-Code-13">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= <span class="hljs-number">2</span> * n; i++) &#123;<br> <span class="hljs-keyword">while</span> (!q.<span class="hljs-built_in">empty</span>() &amp;&amp; i - q.<span class="hljs-built_in">front</span>() &gt; n / <span class="hljs-number">2</span>) &#123;<br> q.<span class="hljs-built_in">pop_front</span>();<br> &#125;<br> <span class="hljs-keyword">if</span> (!q.<span class="hljs-built_in">empty</span>()) ans = <span class="hljs-built_in">max</span>(ans, a[q.<span class="hljs-built_in">front</span>()] - q.<span class="hljs-built_in">front</span>() + a[i] + i);<br> <span class="hljs-keyword">while</span> (!q.<span class="hljs-built_in">empty</span>() &amp;&amp; a[q.<span class="hljs-built_in">back</span>()] - q.<span class="hljs-built_in">back</span>() &lt;= a[i] - i) &#123;<br> q.<span class="hljs-built_in">pop_back</span>();<br> &#125;<br> q.<span class="hljs-built_in">push_back</span>(i);<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P1948-USACO08JAN-Telephone-Lines-S">P1948 [USACO08JAN] Telephone Lines S</h2><p><a href="https://www.luogu.com.cn/problem/P1948">Link</a></p><blockquote><p>给定一个简单无向图,有边权。最小化 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>→</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1\to n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 路径上第 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">k + 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 大的边权。</p></blockquote><p>tag: 二分答案, 最短路</p><h3 id="Solution-14">Solution</h3><p>二分答案枚举答案 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>mid</mtext></mrow><annotation encoding="application/x-tex">\text{mid}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord text"><span class="mord">mid</span></span></span></span></span>,将边权大于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>mid</mtext></mrow><annotation encoding="application/x-tex">\text{mid}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord text"><span class="mord">mid</span></span></span></span></span> 的边权设为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,否则设为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>,然后跑最短路,判断 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>→</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1\to n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 最短路是否小于等于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span>。</p><h3 id="Core-Code-14">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">auto</span> check = [&amp;](<span class="hljs-type">int</span> mid) -&gt; <span class="hljs-type">bool</span>&#123;<br> vector&lt;<span class="hljs-type">int</span>&gt; <span class="hljs-built_in">dis</span>(n + <span class="hljs-number">1</span>, numeric_limits&lt;<span class="hljs-type">int</span>&gt;::<span class="hljs-built_in">max</span>() / <span class="hljs-number">2</span>);<br> <span class="hljs-function">vector&lt;<span class="hljs-type">char</span>&gt; <span class="hljs-title">vis</span><span class="hljs-params">(n + <span class="hljs-number">1</span>)</span></span>;<br> dis[<span class="hljs-number">1</span>] = <span class="hljs-number">0</span>;<br> priority_queue&lt;Node&gt; q;<br> q.<span class="hljs-built_in">push</span>(Node&#123;<span class="hljs-number">1</span>, <span class="hljs-number">0</span>&#125;);<br> <span class="hljs-keyword">while</span> (!q.<span class="hljs-built_in">empty</span>()) &#123;<br> <span class="hljs-type">int</span> u = q.<span class="hljs-built_in">top</span>().pos;<br> q.<span class="hljs-built_in">pop</span>();<br> <span class="hljs-keyword">if</span> (vis[u]) <span class="hljs-keyword">continue</span>;<br> vis[u] = <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> x : e[u]) &#123;<br> <span class="hljs-type">int</span> v = x.v, w = x.w;<br> <span class="hljs-keyword">if</span> (w &gt; mid) w = <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">else</span> w = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">if</span> (dis[v] &gt; dis[u] + w) &#123;<br> dis[v] = dis[u] + w;<br> <span class="hljs-keyword">if</span> (!vis[v]) q.<span class="hljs-built_in">push</span>(Node&#123;v, dis[v]&#125;);<br> &#125;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">if</span> (dis[n] &lt;= k) <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;<br> <span class="hljs-keyword">else</span> <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;<br>&#125;;<br><span class="hljs-type">int</span> l = <span class="hljs-number">0</span>, r = MAXN;<br><span class="hljs-keyword">while</span> (l &lt; r) &#123;<br> <span class="hljs-type">int</span> mid = (l + r) &gt;&gt; <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">if</span> (<span class="hljs-built_in">check</span>(mid)) r = mid;<br> <span class="hljs-keyword">else</span> l = mid + <span class="hljs-number">1</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P10454-奇数码问题">P10454 奇数码问题</h2><p><a href="https://www.luogu.com.cn/problem/P10454">Link</a></p><blockquote><p>给定一个初始矩阵和一个目标矩阵。其中的 <code>0</code> 可以与其四联通的块交换位置。通过若干次操作,判断是否能从初始矩阵变为目标矩阵。</p></blockquote><p>tag: 逆序对</p><h3 id="Solution-15">Solution</h3><p>考虑将矩阵按行展开为一维数组,忽略 <code>0</code>。</p><p>考虑两种操作:上下移动和左右移动。</p><ul><li>左右移动:注意到元素在忽略 <code>0</code> 后相对顺序不变,所以不会改变逆序对数量的奇偶性;</li><li>上下移动:考虑一个元素 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 向上移动一格,有:<figure class="highlight basic"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs basic"><span class="hljs-symbol">5 </span><span class="hljs-number">2</span> <span class="hljs-number">8</span> <span class="hljs-number">5</span> _ <span class="hljs-number">8</span><br><span class="hljs-symbol">1 </span>_ <span class="hljs-number">3</span> <span class="hljs-number">1</span> <span class="hljs-number">2</span> <span class="hljs-number">3</span><br><span class="hljs-symbol">4 </span><span class="hljs-number">6</span> <span class="hljs-number">7</span> <span class="hljs-number">4</span> <span class="hljs-number">6</span> <span class="hljs-number">7</span><br></code></pre></td></tr></table></figure>可以发现这样会对新位置与原位置之间的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">n-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 个数产生的贡献造成影响,即原来的逆序对和非逆序对都会变成相反的关系。由于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 是奇数,所以这样并不会改变逆序对数量的奇偶性。</li></ul><p>所以,两矩阵可互相转化和充要条件是两序列的逆序对数量奇偶性相同。</p><h2 id="P2512-HAOI2008-糖果传递">P2512 [HAOI2008] 糖果传递</h2><p>有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个小朋友坐成一圈,每人有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。求最小代价使得每人糖果数相同。</p><p>tag: 贪心, 推式子</p><h3 id="Solution-16">Solution</h3><p>我们设每人最终糖果数为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mover accent="true"><mi>x</mi><mo>ˉ</mo></mover></mrow><annotation encoding="application/x-tex">\bar x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5678em;"></span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.5678em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mathnormal">x</span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.2222em;"><span class="mord">ˉ</span></span></span></span></span></span></span></span></span></span>,每人向左边传递的糖果数为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">x_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,则有:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>a</mi><mi>i</mi></msub><mo>+</mo><msub><mi>x</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>−</mo><msub><mi>x</mi><mi>i</mi></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>=</mo><mover accent="true"><mi>x</mi><mo>ˉ</mo></mover><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mn>1</mn><mo>≤</mo><mi>i</mi><mo>&lt;</mo><mi>n</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><msub><mi>a</mi><mi>n</mi></msub><mo>+</mo><msub><mi>x</mi><mn>1</mn></msub><mo>−</mo><msub><mi>x</mi><mi>n</mi></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>=</mo><mover accent="true"><mi>x</mi><mo>ˉ</mo></mover><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>i</mi><mo>=</mo><mi>n</mi></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\begin{cases}a_i+x_{i+1}-x_i &amp;= \bar x ,&amp;&amp; 1\leq i&lt; n\\a_n+x_1-x_n &amp;= \bar x ,&amp;&amp; i=n\\\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.5678em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mathnormal">x</span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.2222em;"><span class="mord">ˉ</span></span></span></span></span></span></span><span class="mpunct">,</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.5678em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mathnormal">x</span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.2222em;"><span class="mord">ˉ</span></span></span></span></span></span></span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">n</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>对 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>i</mi><mo>&lt;</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1\leq i&lt;n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6986em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 简单变形,即有:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>x</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>=</mo><mover accent="true"><mi>x</mi><mo>ˉ</mo></mover><mo>+</mo><msub><mi>x</mi><mi>i</mi></msub><mo>−</mo><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">x_{i+1} = \bar x+x_i-a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6389em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.5678em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mathnormal">x</span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.2222em;"><span class="mord">ˉ</span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span></p><p>将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mi>i</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">x=i+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 带入到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mi>i</mi><mo>+</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">x=i+2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span> 的式子中,递推,化简可得:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>x</mi><mi>n</mi></msub><mo>=</mo><mo stretchy="false">(</mo><mi>n</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mover accent="true"><mi>x</mi><mo>ˉ</mo></mover><mo>+</mo><msub><mi>x</mi><mn>1</mn></msub><mo>−</mo><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow></munderover><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">x_n = (n-1)\bar x+x_1-\sum_{i=1}^{n-1}a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.5678em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mathnormal">x</span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.2222em;"><span class="mord">ˉ</span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:3.0788em;vertical-align:-1.2777em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8011em;"><span style="top:-1.8723em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2777em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span></p><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>c</mi><mi>i</mi></msub><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>i</mi></msubsup><msub><mi>a</mi><mi>j</mi></msub><mo>−</mo><mi>i</mi><mover accent="true"><mi>x</mi><mo>ˉ</mo></mover></mrow><annotation encoding="application/x-tex">c_i=\sum_{j=1}^{i} a_j-i\bar x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.4004em;vertical-align:-0.4358em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9646em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4358em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.5678em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mathnormal">x</span></span><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.2222em;"><span class="mord">ˉ</span></span></span></span></span></span></span></span></span></span>,则有:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>x</mi><mi>i</mi></msub><mo>=</mo><msub><mi>x</mi><mn>1</mn></msub><mo>−</mo><msub><mi>c</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">x_i=x_1-c_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span></p><p>题目要求最小化 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></msubsup><mi mathvariant="normal">∣</mi><msub><mi>x</mi><mi>i</mi></msub><mi mathvariant="normal">∣</mi></mrow><annotation encoding="application/x-tex">\sum_{i=1}^{n} |x_i|</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.104em;vertical-align:-0.2997em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">∣</span></span></span></span>,即最小化 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></msubsup><mi mathvariant="normal">∣</mi><msub><mi>x</mi><mn>1</mn></msub><mo>−</mo><msub><mi>c</mi><mi>i</mi></msub><mi mathvariant="normal">∣</mi></mrow><annotation encoding="application/x-tex">\sum_{i=1}^{n} |x_1-c_i|</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.104em;vertical-align:-0.2997em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">∣</span></span></span></span>。注意到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></msubsup><mi mathvariant="normal">∣</mi><msub><mi>x</mi><mn>1</mn></msub><mo>−</mo><msub><mi>c</mi><mi>i</mi></msub><mi mathvariant="normal">∣</mi></mrow><annotation encoding="application/x-tex">\sum_{i=1}^{n} |x_1-c_i|</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.104em;vertical-align:-0.2997em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">∣</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">∣</span></span></span></span> 在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">x_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 处取得最小值时,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">x_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>c</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">c_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的中位数。</p><h3 id="Core-Code-15">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function">vector&lt;<span class="hljs-type">int</span>&gt; <span class="hljs-title">sum</span><span class="hljs-params">(n + <span class="hljs-number">1</span>)</span></span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-type">int</span> a = <span class="hljs-built_in">read</span>();<br> sum[i] = sum[i - <span class="hljs-number">1</span>] + a;<br>&#125;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> c[i] = i * sum[n] / n - sum[i];<br>&#125;<br><span class="hljs-built_in">sort</span>(c.<span class="hljs-built_in">begin</span>() + <span class="hljs-number">1</span>, c.<span class="hljs-built_in">begin</span>() + n + <span class="hljs-number">1</span>);<br><span class="hljs-type">int</span> ans = <span class="hljs-number">0</span>;<br><span class="hljs-type">int</span> mid = c[(n + <span class="hljs-number">1</span>) &gt;&gt; <span class="hljs-number">1</span>];<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> ans += <span class="hljs-built_in">abs</span>(mid - c[i]);<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="P14401-JOISC-2016-电报-Telegraph">P14401 [JOISC 2016] 电报 / Telegraph</h2><p><a href="https://www.luogu.com.cn/problem/P14401">Link</a></p><blockquote><p>有一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个点的有向图,每个点的出度均为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。给出这 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个点初始指向的点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>A</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">A_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">A</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,和改变这个点指向的目标所需要的价值 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>C</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">C_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.07153em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>。求让所有点强连通的最小花费。</p></blockquote><p>tag: 贪心</p><h3 id="Solution-17">Solution</h3><p>首先题意可以转化为最小代价使得图变为包含所有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 个点的大环。</p><p>考虑证明这一点:若存在一点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span> 不在环上,则其一定指向环,但环上的点因为唯一出度已被占用而无法指回 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span>,所以图不连通。若存在多个环,环之间不连通。</p><p>将总代价转化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>∑</mo><msub><mi>C</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\sum C_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.07153em;">C</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 减去保留下来的边代价和,即最大化保留下来的边的权值和。</p><p>我们想保留一些原始边,并添加一些新边(修改后的边)将他们连成一个大环,那么保留下来的边集一定满足:</p><ul><li>不存在环。若存在一个环且环外有别的点,则该环无法通过加边与环外的点连通。</li><li>图中每个点入度不超过 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。因为在最终的大环中每个点入度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。</li></ul><p>考虑贪心删掉不满足条件的边,显然对于一个入边数量大于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的节点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span>,其所有入边中我们保留且一定保留权值最大的一条边。</p><p>经过上述操作,可以得到一个由若干个链和环构成的新图。我们仍需打破得到的环来满足要求。</p><p>仍然考虑贪心,对于每个环,可以干掉环上的一条边,或者其替换为原图中指向该点的次优边。对于环上的每个点,其换边的代价即为<em>当前最优入边的权值 减 次优入边的权值</em>。特别地,若仅有一条入边,代价即为该边权值。</p><p>特判初始即为一个大环的情况,因为此时我们无需将该环断掉重连。</p><h3 id="Core-Code-16">Core Code</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br></pre></td><td class="code"><pre><code class="hljs cpp">vector&lt;vector&lt;pair&lt;<span class="hljs-type">int</span>, <span class="hljs-type">int</span>&gt;&gt;&gt; <span class="hljs-built_in">in</span>(n + <span class="hljs-number">1</span>);<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-type">int</span> a = <span class="hljs-built_in">read</span>(), c = <span class="hljs-built_in">read</span>();<br> p[i] = Node&#123;a, c&#125;;<br> sumc += c;<br> in[a].<span class="hljs-built_in">emplace_back</span>(<span class="hljs-built_in">make_pair</span>(i, c));<br>&#125;<br><span class="hljs-keyword">auto</span> check = [&amp;]() -&gt; <span class="hljs-type">bool</span> &#123;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">if</span> (in[i].<span class="hljs-built_in">size</span>() != <span class="hljs-number">1</span>) <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br> &#125;<br> <span class="hljs-function">vector&lt;<span class="hljs-type">char</span>&gt; <span class="hljs-title">vis</span><span class="hljs-params">(n + <span class="hljs-number">1</span>, <span class="hljs-number">0</span>)</span></span>;<br> <span class="hljs-type">int</span> curr = <span class="hljs-number">1</span>, cnt = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">while</span> (!vis[curr]) &#123;<br> vis[curr] = <span class="hljs-number">1</span>;<br> curr = p[curr].a;<br> cnt++;<br> &#125;<br> <span class="hljs-keyword">if</span> (cnt == n) <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">else</span> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;;<br><span class="hljs-keyword">if</span> (<span class="hljs-built_in">check</span>()) &#123;<br> cout &lt;&lt; <span class="hljs-number">0</span> &lt;&lt; <span class="hljs-string">&#x27;\n&#x27;</span>;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br><span class="hljs-type">int</span> sum = <span class="hljs-number">0</span>;<br><span class="hljs-function">vector&lt;<span class="hljs-type">int</span>&gt; <span class="hljs-title">from</span><span class="hljs-params">(n + <span class="hljs-number">1</span>)</span></span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">if</span> (in[i].<span class="hljs-built_in">size</span>() &gt;= <span class="hljs-number">1</span>) &#123;<br> <span class="hljs-built_in">sort</span>(in[i].<span class="hljs-built_in">begin</span>(), in[i].<span class="hljs-built_in">end</span>(), [](<span class="hljs-type">const</span> pair&lt;<span class="hljs-type">int</span>, <span class="hljs-type">int</span>&gt;&amp; x, <span class="hljs-type">const</span> pair&lt;<span class="hljs-type">int</span>, <span class="hljs-type">int</span>&gt;&amp; y)&#123;<br> <span class="hljs-keyword">return</span> x.second &gt; y.second;<br> &#125;);<br> sum += in[i][<span class="hljs-number">0</span>].second;<br> from[i] = in[i][<span class="hljs-number">0</span>].first;<br> &#125;<br>&#125;<br><span class="hljs-function">vector&lt;<span class="hljs-type">int</span>&gt; <span class="hljs-title">vis</span><span class="hljs-params">(n + <span class="hljs-number">1</span>, <span class="hljs-number">0</span>)</span></span>; <span class="hljs-comment">// 0: not visited, 1: in current path, 2: have visited</span><br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> <span class="hljs-keyword">if</span> (vis[i] == <span class="hljs-number">2</span>) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-type">int</span> curr = i;<br> vector&lt;<span class="hljs-type">int</span>&gt; nodes;<br> nodes.<span class="hljs-built_in">reserve</span>(n);<br> <span class="hljs-keyword">while</span> (curr != <span class="hljs-number">0</span> &amp;&amp; vis[curr] == <span class="hljs-number">0</span>) &#123;<br> vis[curr] = <span class="hljs-number">1</span>;<br> nodes.<span class="hljs-built_in">emplace_back</span>(curr);<br> curr = from[curr];<br> &#125;<br> <span class="hljs-keyword">if</span> (curr != <span class="hljs-number">0</span> &amp;&amp; vis[curr] == <span class="hljs-number">1</span>) &#123;<br> <span class="hljs-type">int</span> minn = numeric_limits&lt;<span class="hljs-type">int</span>&gt;::<span class="hljs-built_in">max</span>() / <span class="hljs-number">2</span>;<br> <span class="hljs-type">bool</span> flag = <span class="hljs-number">0</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> nw : nodes) &#123;<br> <span class="hljs-keyword">if</span> (nw == curr) flag = <span class="hljs-number">1</span>;<br> <span class="hljs-keyword">if</span> (!flag) <span class="hljs-keyword">continue</span>;<br> <span class="hljs-type">int</span> diff = in[nw][<span class="hljs-number">0</span>].second;<br> <span class="hljs-keyword">if</span> (in[nw].<span class="hljs-built_in">size</span>() &gt; <span class="hljs-number">1</span>) diff -= in[nw][<span class="hljs-number">1</span>].second;<br> minn = <span class="hljs-built_in">min</span>(minn, diff);<br> &#125;<br> sum -= minn;<br> &#125;<br> <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> nw : nodes) &#123;<br> vis[nw] = <span class="hljs-number">2</span>;<br> &#125;<br>&#125;<br>cout &lt;&lt; sumc - sum &lt;&lt; <span class="hljs-string">&#x27;\n&#x27;</span>;<br></code></pre></td></tr></table></figure>
☑️ ⭐

AtCoder DP 系列刷题记录

AT_DP_C Vacation

洛谷 link

NN 天,对于每一天 ii1iN1 \leq i \leq N),可以选择以下活动之一:

  • A:在海里游泳,获得幸福度 aia _ i
  • B:在山上抓虫,获得幸福度 bib _ i
  • C:在家做作业,获得幸福度 cic _ i

不能连续两天以上做同样的活动,计算最大总幸福度。

DP 板子题。设 fi,jf_{i,j} 表示截止到第 ii 天时做第 jj 件事的幸福值总和

则易得转移方程为:

fi,1=max(fi1,2,fi1,3)fi,2=max(fi1,1,fi1,3)fi,3=max(fi1,1,fi1,2)f_{i,1}=\max(f_{i-1,2},f_{i-1,3})\\f_{i,2}=\max(f_{i-1,1},f_{i-1,3})\\f_{i,3}=\max(f_{i-1,1},f_{i-1,2})

Core Code:

1
2
3
4
5
6
for(int i=1;i<=n;i++)
{
f[i][1]=max(f[i-1][2],f[i-1][3])+a[i];
f[i][2]=max(f[i-1][1],f[i-1][3])+b[i];
f[i][3]=max(f[i-1][1],f[i-1][2])+c[i];
}

AT_DP_K Stones

洛谷 link

NN 个正整数组成的集合 A={a1,a2,,aN}A = \{ a _ 1, a _ 2, \ldots, a _ N \}。太郎君和次郎君将用以下游戏进行对决。

首先,准备一个有 KK 个石子的堆。两人依次进行以下操作。太郎君先手。

  • 从集合 AA 中选择一个元素 xx,从石堆中恰好移除 xx 个石子。

不能进行操作的人输掉游戏。当两人都按照最优策略行动时,判断谁会获胜。

显然当一名玩家操作完成后石子数量为 00,则这名玩家必胜。

fif_i 表示剩余 ii 枚石子当前操作的人的输赢情况 (1/01/0),可以发现当且仅当当前操作的上一步操作必输,当前操作才可以必胜,即如果有 aja_j 使得 fiaj=0f_{i-a_j}=0,则 fi=1f_i=1

初始化 f0=0f_0=0,则有:

fi={1,aji,fiaj=00,otherwise.f_i=\begin{cases}1,&a_j\leq i,f_{i-a_j}=0\\0 ,& \text{otherwise.}\end{cases}

Core Code:

1
2
3
4
5
6
7
8
f[0]=0;
for(int i=1;i<=k;i++)
{
for(int j=1;j<=n;j++)
{
if(i-a[j]>=0 && !f[i-a[j]]) f[i]=1;
}
}

AT_DP_M Candies

link

tag: 背包 DP, 前缀和

KK 颗糖分给 nn 个人,第 ii 个人至少分得 00 颗,至多分得 aia_i 颗,必须分完,求方案数,答案对 109+710^9+7 取模。

类似背包的处理思路,设 fi,jf_{i,j} 表示第 ii 个人分完后已经分了 jj 个糖,它可以由上一步的 (jai)j(j-a_i)\sim j 转移得到,所以

fi,j=k=max(0,jai)jfi1,kf_{i,j}=\sum^j_{k=\max(0,j-a_i)}f_{i-1,k}

考虑优化时间,滚动数组不可行。发现每一个 ii 对应的值都由 i1i-1 中连续一段的值转移而来,想到用滚动的前缀和维护 i1i-1 的所有 ff 值。

Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int calc(int l,int r) {
if(l==0) return sum[r];
return sum[r]-sum[l-1];
}
int main() {
f[0][0]=1;
for(int i=1;i<=n;i++) {
sum[0]=f[i-1][0];
for(int j=1;j<=m;j++) {
sum[j]=(sum[j-1]+f[i-1][j]+mod)%mod;
}
for(int j=0;j<=m;j++) {
f[i][j]=(calc(max(0ll,j-a[i]),j)+mod)%mod;
}
}
printf("%lld\n",f[n][m]%mod);
}

AT_DP_P Independent Set

link

tag: 树形 DP

给一棵树,每一个点可以染成黑色或白色,任意两个相邻节点不能都是黑色,求方案数。

fu,0/1f_{u,0/1} 表示 uu 节点染成 W/B 颜色时的方案数。DFS 子树的方案数,可以得到:

fu,0=vu(fv,0+fv,1)fu,1=vufv,0\begin{aligned}f_{u,0}&=\prod_{v\in u}(f_{v,0}+f_{v,1})\\f_{u,1}&=\prod_{v\in u}f_{v,0}\end{aligned}

注意 11 号点为根,输入无序需建双向边。

Code:

1
2
3
4
5
6
7
8
9
10
11
12
void dfs(int u) {
g.vis[u]=1;
f[u][0]=f[u][1]=1;
for(int i=0;i<e[u].size();i++) {
int v=e[u][i];
if(!g.vis[v]) {
dfs(v);
f[u][0]=(f[u][0]*(f[v][0]+f[v][1]))%mod;
f[u][1]=(f[u][1]*f[v][0])%mod;
}
}
}

AT_DP_Q Flowers

link

有一排花,共 nn 个,第 ii 个的高度是 hih_i ,权值是 aia_i ,保证高度互不相同。现在拿走一些花,使剩下的花高度单调递增,问剩下的花权值之和最大是多少。

tag: 线段树优化 DP

带权的最长上升子序列,设 fif_i 表示第 ii 个元素结尾的最大答案,可以参照最长上升子序列写出转移方程

fi=maxj=1i1{fjhj<hi}+aif_{i}=\max_{j=1}^{i-1}\{f_{j}|h_j<h_i\}+a_{i}

考虑优化,观察到转移方程是区间最大值,想到用值域线段树优化。将 hih_i 作为线段树的下标,对应当前高度时的 fif_i

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
struct node {
ll val;
}t[N * 4];
struct tree {
void pushup(int p) {
t[p].val = max(t[p * 2].val, t[p * 2 + 1].val);
}
void modify(int p, int l, int r, int x, ll k) {
if (l == r) {
t[p].val = k;
return;
}
int mid = (l + r) >> 1;
if (x <= mid) modify(p * 2, l, mid, x, k);
else modify(p * 2 + 1, mid + 1, r, x, k);
pushup(p);
}
ll query(int p, int l, int r, int x, int y) {
if (x <= l && r <= y) {
return t[p].val;
}
ll res = 0;
int mid = (l + r) >> 1;
if (x <= mid) res = max(res, query(p * 2, l, mid, x, y));
if (y >= mid + 1) res = max(res, query(p * 2 + 1, mid + 1, r, x, y));
return res;
}
}sgt;
int main() {
n = read();
for (int i = 1; i <= n; i++) {
h[i] = read();
}
for (int i = 1; i <= n; i++) {
a[i] = read();
}
for (int i = 1; i <= n; i++) {
f[i] = sgt.query(1, 1, n, 1, h[i]) + a[i];
sgt.modify(1, 1, n, h[i], f[i]);
}
cout << sgt.query(1, 1, n, 1, n) << endl;
return 0;
}

AT_DP_T Permutation

link

有一个长为 NN 的正整数排列。给定一个由 <> 组成长为 N1N-1 的的字符串。对于任意满足 1iN11 \le i \le N-1 的字符 sis_i,如果 sis_i<Pi<Pi+1P_i<P_{i+1}、如果 sis_i>Pi>Pi+1P_i>P_{i+1}。求满足这样的性质的排列 PP 的方案数。

由于 pp 是排列,我们不在意 pp 中到底放了什么数,只需要关注当前一步放的数和上一步放的数的大小关系。可以得到状态 fi,jf_{i, j} 表示前 ii 个数形成的排列中,第 ii 个数是第 jj 大的方案数。

在转移时,若当前填的数需大于前一个数,那么直接得到 fi=k=1j1fi1,kf_i=\sum_{k=1}^{j-1}f_{i-1,k}

若小于前一个数,可以将 p1pi1p_1\sim p_{i-1}j\geq j 的数全部加 11,保证组成的是排列,这等价于遍历的排名 kk 都减一(自行手玩样例),fi=k=ji1fi1,kf_{i}=\sum_{k=j}^{i-1}f_{i-1,k}

注意到转移是求连续一段的和,前缀和优化即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
f[1][1] = 1;
for (int i = 1; i <= n; i++) {
sum[i][1] = 1;
}
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= i; j++) {
if(s[i-1] == '>') {
f[i][j] = (f[i][j] + sum[i-1][i-1] - sum[i-1][j-1] + mod) % mod;
} else {
f[i][j] = (f[i][j] + sum[i-1][j-1] + mod) % mod;
}
sum[i][j] = (sum[i][j-1] + f[i][j] + mod) % mod;
}
}
int ans = 0;
for (int i = 1; i <= n; i++) {
ans = (ans + f[n][i] + mod) % mod;
}

TDPC_IWI イウィ

洛谷 link

tag: 区间 DP

给定一个仅由字符 i\texttt{i}w\texttt{w} 构成的字符串 ss。你可以进行若干次操作,每次从串中选取连续的三个字符 iwi\texttt{iwi} 并删除;每次操作后这三个字符的左侧和右侧会连接在一起,得到一个长度比原来小 33 的新串。求可能的最大操作次数。

区间 DP,类似合并石子。

我们定义 fi,jf_{i,j} 记录 iijj 能删掉多少字符,显然最后答案应除以 33

因为答案计算的是最大的步数,那么对于一个大区间,在一般情况下的答案就应该是其分成的两个小区间的答案之和。考虑枚举这两个区间之间的分界点 kk ,答案取最大值即可。

本题还需要特判一种特殊情况。如果 sis_isjs_jisks_kw,且中间的两个小段可以被完全删除。那么,当中间的被删掉之后,左右的 i 和中间的 w 就会拼在一起,也可以删掉,那么这个区间的答案就应该是它的长度,但显然直接相加有可能会出错。

Core Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for(int a=2;a<=len;a++)
{
for(int i=1;a+i-1<=len;i++)
{
int j=a+i-1;
for(int k=i;k<j;k++)
{
f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]);
if(s[i]=='i' && s[j]=='i' && s[k]=='w' && f[i+1][k-1] == k-i-1 && f[k+1][j-1] == j-1-k)
{
f[i][j]=j-i+1;
}
}
}
}
write(f[1][len]/3);

ABC247F Cards

并查集,待填坑。

ABC336D Pyramid

link

对于正整数 kk,一个大小为 kk 的“金字塔数列”为一个长度为 2k12k-1 的数列,里面的数字依次为 1,2,3,k1,k,k1,3,2,11,2,3,\dots k-1,k,k-1,\dots 3,2,1
现在给一个长度为 nn 的数列 SS,你可以进行以下操作任意次,使得数列最后变为一个“金字塔数列”:

  • 选择一个数 i(1in)i(1 \le i \le n),把 SiS_i 减少 11
  • 删除整个数列的第一个或最后一个数字。

问最后生成的“金字塔数列”的最大的 kk 是多少。

显然一个金字塔数列是由左右两部分拼接而成的。设 fif_{i} 表示前 ii 个数能组成左半部分的最长长度,gig_{i} 表示以 ii 为首的序列能组成右半部分的最长长度(差不多等价于后 ii 个数,但注意转移方程的写法)。一个明显的性质是如果满足可以构成长度为 xx 的序列,那么一定可以通过删掉元素构成长度为 x1x-1 的序列,所以可以发现以 ii 为中间项的最长长度即为 min{fi,gi}\min\{f_i, g_i\}

ff 为例,假设 sis_i 的所有值都是 ++\infty,可以得到显然的转移方程 fi=fi1+1f_{i}=f_{i-1}+1。如果加上 sis_i 的限制条件,那么 fi=min{fi1+1,si}f_i=\min\{f_{i-1}+1, s_i\}。同理可得 gi=min{gi+1+1,si}g_i=\min\{g_{i+1}+1, s_i\}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
n = read();
for (int i = 1; i <= n; i++) {
a[i] = read();
}
f[1] = g[n] = 1;
for (int i = 2; i <= n; i++) {
f[i] = min(f[i-1] + 1, a[i]);
}
for (int i = n - 1; i >= 1; i--) {
g[i] = min(g[i+1] + 1, a[i]);
}
int ans = 0;
for (int i = 1; i <= n; i++) {
ans = max(ans, min(f[i], g[i]));
}
cout << ans << endl;
🔲 ⭐

数论 学习笔记

<h2 id="欧几里得算法">欧几里得算法</h2><p>就是求最大公约数的辗转相除法。</p><h3 id="数学公式">数学公式</h3><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>gcd</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>gcd</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>b</mi><mo separator="true">,</mo><mi>a</mi><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mi>b</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo separator="true">,</mo><mi>b</mi><mo mathvariant="normal">≠</mo><mn>0</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi>a</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo separator="true">,</mo><mi>b</mi><mo>=</mo><mn>0</mn></mrow></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">\gcd(a, b)=\begin{cases}\gcd(b,a\bmod b) &amp;,b\neq 0\\a &amp;,b=0\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span style="margin-right:0.01389em;">g</span>cd</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mop"><span style="margin-right:0.01389em;">g</span>cd</span><span class="mopen">(</span><span class="mord mathnormal">b</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><h3 id="模板">模板</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">gcd</span><span class="hljs-params">(<span class="hljs-type">int</span> a,<span class="hljs-type">int</span> b)</span></span><br><span class="hljs-function"></span>&#123;<br> <span class="hljs-keyword">if</span>(b==<span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> a;<br> <span class="hljs-keyword">return</span> <span class="hljs-built_in">gcd</span>(b,a%b);<br>&#125;<br></code></pre></td></tr></table></figure><h2 id="拓展欧几里得-exgcd">拓展欧几里得(exgcd)</h2><h3 id="适用问题">适用问题</h3><p>给定正整数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a,b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span></span></span></span>,求出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mi>x</mi><mo>+</mo><mi>b</mi><mi>y</mi><mo>=</mo><mi>gcd</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">ax+by=\gcd(a,b)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span style="margin-right:0.01389em;">g</span>cd</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span></span> 的一组正整数解。</p><h3 id="算法思路">算法思路</h3><p>由欧几里得算法得出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mi>x</mi><mo>+</mo><mi>b</mi><mi>y</mi><mo>=</mo><mi>gcd</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo stretchy="false">)</mo><mo>=</mo><mi>gcd</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>b</mi><mo separator="true">,</mo><mi>a</mi><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mi>b</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">ax+by=\gcd(a,b)=\gcd(b,a\bmod b)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span style="margin-right:0.01389em;">g</span>cd</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span style="margin-right:0.01389em;">g</span>cd</span><span class="mopen">(</span><span class="mord mathnormal">b</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span></span>,代回原式,即为:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>b</mi><msup><mi>x</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo>+</mo><mi>a</mi><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mi>b</mi><mo>×</mo><msup><mi>y</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo>=</mo><mi>gcd</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>b</mi><mo separator="true">,</mo><mi>a</mi><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mi>b</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">bx^{\prime}+a\bmod b\times y^{\prime}=\gcd(b,a\bmod b)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8852em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">b</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9963em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span style="margin-right:0.01389em;">g</span>cd</span><span class="mopen">(</span><span class="mord mathnormal">b</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span></span></span></p><p>假设我们已知上式的一组解 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>x</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo separator="true">,</mo><msup><mi>y</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow><annotation encoding="application/x-tex">x^{\prime},y^{\prime}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9463em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span></span>,可以得到:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi>a</mi><mi>x</mi><mo>+</mo><mi>b</mi><mi>y</mi><mo>=</mo><mi>gcd</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mi>b</mi><msup><mi>x</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo>+</mo><mi>a</mi><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mi>b</mi><mo>×</mo><msup><mi>y</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mi>b</mi><msup><mi>x</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo>+</mo><mo stretchy="false">(</mo><mi>a</mi><mo>−</mo><mo stretchy="false">⌊</mo><mfrac><mi>a</mi><mi>b</mi></mfrac><mo stretchy="false">⌋</mo><mo>×</mo><mi>b</mi><mo stretchy="false">)</mo><msup><mi>y</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mi>a</mi><msup><mi>y</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo>+</mo><mi>b</mi><mo stretchy="false">(</mo><msup><mi>x</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo>−</mo><mo stretchy="false">⌊</mo><mfrac><mi>a</mi><mi>b</mi></mfrac><mo stretchy="false">⌋</mo><mo>×</mo><msup><mi>y</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}ax+by=\gcd(a, b) &amp;=b x^{\prime}+a \bmod b\times y^{\prime} \\&amp;=b x^{\prime}+(a-\lfloor \frac{a}{b} \rfloor \times b) y^{\prime}\\&amp;=a y^{\prime}+b(x^{\prime}-\lfloor \frac{a}{b}\rfloor \times y^{\prime})\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:5.6871em;vertical-align:-2.5936em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.0936em;"><span style="top:-5.3611em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop"><span style="margin-right:0.01389em;">g</span>cd</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span><span style="top:-3.5936em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"></span></span><span style="top:-1.5em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.5936em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.0936em;"><span style="top:-5.3611em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">b</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span><span style="top:-3.5936em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">b</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span><span style="top:-1.5em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">b</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.5936em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>所以</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi>a</mi><mi>x</mi><mo>+</mo><mi>b</mi><mi>y</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mi>a</mi><msup><mi>y</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo>+</mo><mi>b</mi><mo stretchy="false">(</mo><msup><mi>x</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo>−</mo><mo stretchy="false">⌊</mo><mfrac><mi>a</mi><mi>b</mi></mfrac><mo stretchy="false">⌋</mo><mo>×</mo><msup><mi>y</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mi>x</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msup><mi>y</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mi>y</mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msup><mi>x</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo>−</mo><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>×</mo><msup><mi>y</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}ax+by&amp;=ay^{\prime}+b(x^{\prime}-\lfloor \frac{a}{b}\rfloor \times y^{\prime})\\x&amp;=y^{\prime}\\y&amp;=x^{\prime}-\frac{a}{b}\times y^{\prime}\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:5.6871em;vertical-align:-2.5936em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.0936em;"><span style="top:-5.0936em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span></span></span><span style="top:-3.2676em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-1.5em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.5936em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.0936em;"><span style="top:-5.0936em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">b</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span><span style="top:-3.2676em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span><span style="top:-1.5em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.5936em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>我们发现,当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">b=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 时,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>×</mo><mn>1</mn><mo>+</mo><mi>b</mi><mo>×</mo><mn>0</mn><mo>=</mo><mi>a</mi></mrow><annotation encoding="application/x-tex">a\times 1+b\times 0=a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span>,有一组解</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>x</mi><mo>=</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>y</mi><mo>=</mo><mn>0</mn></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\begin{cases}x=1\\y=0\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><h3 id="模板-2">模板</h3><p><strong>直接递归求解即可</strong></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">exgcd</span><span class="hljs-params">(<span class="hljs-type">int</span> a,<span class="hljs-type">int</span> b,<span class="hljs-type">int</span> &amp;x,<span class="hljs-type">int</span> &amp;y)</span></span><br><span class="hljs-function"></span>&#123;<br> <span class="hljs-keyword">if</span>(b==<span class="hljs-number">0</span>)<br> &#123;<br> x=<span class="hljs-number">1</span>;<br> y=<span class="hljs-number">0</span>;<br> <span class="hljs-keyword">return</span> a;<br> &#125;<br> <span class="hljs-type">int</span> g=<span class="hljs-built_in">exgcd</span>(b,a%b,y,x);<br> y=y-a/b*x;<br> <span class="hljs-keyword">return</span> g;<br>&#125;<br></code></pre></td></tr></table></figure><p>这时,我们已经得到了一组解,下一步是求解 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mi>x</mi><mo>+</mo><mi>b</mi><mi>y</mi><mo>=</mo><mi>c</mi></mrow><annotation encoding="application/x-tex">ax+by=c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span></span></span></span>。</p><h3 id="求解-ax-by-c">求解 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mi>x</mi><mo>+</mo><mi>b</mi><mi>y</mi><mo>=</mo><mi>c</mi></mrow><annotation encoding="application/x-tex">ax+by=c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span></span></span></span></h3><p>接下来我们需要分类讨论。</p><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>g</mi><mo>=</mo><mi>gcd</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">g=\gcd(a,b)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span style="margin-right:0.01389em;">g</span>cd</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span></span>。</p><p>当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mi>b</mi><mo mathvariant="normal">≠</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">c\bmod b\neq0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 时,无解。</p><p>否则,令 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo>=</mo><mfrac><mi>c</mi><mi>g</mi></mfrac></mrow><annotation encoding="application/x-tex">k=\frac{c}{g}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1765em;vertical-align:-0.4811em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">g</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">c</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>,</p><p>则</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>a</mi><msup><mi>x</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mi>k</mi><mo>+</mo><mi>b</mi><msup><mi>y</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mi>k</mi><mo>=</mo><mi>g</mi><mo>×</mo><mi>k</mi><mo>=</mo><mi>c</mi></mrow><annotation encoding="application/x-tex">ax^{\prime}k+by^{\prime}k=g\times k=c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8852em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9963em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">b</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8019em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span></span></span></span></span></p><p>得</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>x</mi><mo>=</mo><msup><mi>x</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mi>k</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>y</mi><mo>=</mo><msup><mi>y</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mi>k</mi></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\begin{cases}x=x^{\prime}k\\y=y^{\prime}k\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 的周期 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo>=</mo><mfrac><mi>b</mi><mi>g</mi></mfrac></mrow><annotation encoding="application/x-tex">T=\frac{b}{g}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.3612em;vertical-align:-0.4811em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8801em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em;">g</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>,则最小正整数解为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mi>T</mi><mo>+</mo><mi>T</mi><mo stretchy="false">)</mo><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mi>T</mi></mrow><annotation encoding="application/x-tex">(x\bmod T+T)\bmod T</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span></span></span></span>。</p><h2 id="乘法逆元">乘法逆元</h2><h3 id="定义">定义</h3><p>已知 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>p</mi></mrow><annotation encoding="application/x-tex">a,p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">p</span></span></span></span>,求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mi>x</mi><mo>≡</mo><mn>1</mn><mspace></mspace><mspace width="0.4444em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mi>p</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">ax\equiv 1\pmod{p}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4637em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:0.4444em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord mathnormal">p</span><span class="mclose">)</span></span></span></span> 中的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span>,称 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span> 关于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span> 的逆元。</p><h3 id="求解">求解</h3><p>直接求解 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mi>x</mi><mo>+</mo><mi>p</mi><mi>y</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">ax+py=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 即可。</p><p>最终答案为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mi>p</mi><mo>+</mo><mi>p</mi><mo stretchy="false">)</mo><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mi>p</mi></mrow><annotation encoding="application/x-tex">(x\bmod p+p)\bmod p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">p</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span>。</p><h2 id="费马小定理">费马小定理</h2><p>当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span> 为素数时,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span> 关于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span> 的逆元是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mrow><mi>p</mi><mo>−</mo><mn>2</mn></mrow></msup></mrow><annotation encoding="application/x-tex">a^{p-2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span><span class="mbin mtight">−</span><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span>。</p><h2 id="数论分块">数论分块</h2><p>balabala</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mi>b</mi><mo>=</mo><mi>a</mi><mo>−</mo><mi>b</mi><mo>×</mo><mo stretchy="false">⌊</mo><mfrac><mi>a</mi><mi>b</mi></mfrac><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">a\bmod b=a-b\times\lfloor\frac{a}{b}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span></p><h2 id="一些题">一些题</h2><h3 id="P1516-青蛙的约会">P1516 青蛙的约会</h3><p><a href="https://www.luogu.com.cn/problem/P1516">Problem Link</a></p><p>这是一道比较裸的拓欧题。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">define</span> int ll</span><br><span class="hljs-type">int</span> x,y,m,n,l;<br><span class="hljs-type">int</span> p,q;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">exgcd</span><span class="hljs-params">(<span class="hljs-type">int</span> a,<span class="hljs-type">int</span> b,<span class="hljs-type">int</span> &amp;x,<span class="hljs-type">int</span> &amp;y)</span> </span>&#123;<br> <span class="hljs-keyword">if</span>(b==<span class="hljs-number">0</span>) &#123;<br> x=<span class="hljs-number">1</span>;<br> y=<span class="hljs-number">0</span>;<br> <span class="hljs-keyword">return</span> a;<br> &#125;<br> <span class="hljs-type">int</span> g=<span class="hljs-built_in">exgcd</span>(b,a%b,y,x);<br> y=y-a/b*x;<br> <span class="hljs-keyword">return</span> g;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">signed</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> x=<span class="hljs-built_in">read</span>();y=<span class="hljs-built_in">read</span>();m=<span class="hljs-built_in">read</span>();n=<span class="hljs-built_in">read</span>();l=<span class="hljs-built_in">read</span>();<br> <span class="hljs-type">int</span> a=n-m,b=x-y;<br> <span class="hljs-keyword">if</span>(a&lt;<span class="hljs-number">0</span>) &#123;<br> a=-a;<br> b=-b;<br> &#125;<br> <span class="hljs-type">int</span> ans=<span class="hljs-built_in">exgcd</span>(a,l);<br> <span class="hljs-keyword">if</span>(b%ans!=<span class="hljs-number">0</span>) &#123;<br> cout&lt;&lt;<span class="hljs-string">&quot;Impossible&quot;</span>&lt;&lt;endl;<br> &#125;<br> <span class="hljs-keyword">else</span> &#123;<br> cout&lt;&lt;((p*(b/ans))%(l/ans)+l/ans)%(l/ans)&lt;&lt;endl;<br> &#125;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h3 id="CF1114C-Trailing-Loves">CF1114C Trailing Loves</h3><p>首先从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>10</mn></mrow><annotation encoding="application/x-tex">10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span></span></span></span> 进制开始分析。求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span> 末尾 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 的数量即为求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span> 的因数中含有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span> 的数量的最小值。</p><p>例如设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mn>1</mn></msub><mo>=</mo><msup><mn>2</mn><mn>3</mn></msup><mo>×</mo><msup><mn>5</mn><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">x_1=2^3\times 5^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">5</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span>,则 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">x_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的末尾 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 的数量即为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>min</mi><mo>⁡</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>2</mn><mo stretchy="false">)</mo><mo>=</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">\min(3,2)=2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">min</span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>。</p><p>接下来考虑 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">!</mo><msub><mo stretchy="false">)</mo><mi>b</mi></msub></mrow><annotation encoding="application/x-tex">(n!)_b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">!</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的末尾 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 的数量。我们先枚举 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span> 的因数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi><mo>=</mo><msubsup><mi>p</mi><mn>1</mn><msub><mi>a</mi><mn>1</mn></msub></msubsup><mo>×</mo><msubsup><mi>p</mi><mn>2</mn><msub><mi>a</mi><mn>2</mn></msub></msubsup><mo>×</mo><mo>…</mo><mo>×</mo><msubsup><mi>p</mi><mi>k</mi><msub><mi>a</mi><mi>k</mi></msub></msubsup></mrow><annotation encoding="application/x-tex">b=p_1^{a_1}\times p_2^{a_2}\times \ldots \times p_k^{a_k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0126em;vertical-align:-0.2663em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7463em;"><span style="top:-2.4337em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span><span style="top:-3.1449em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2663em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0126em;vertical-align:-0.2663em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7463em;"><span style="top:-2.4337em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span><span style="top:-3.1449em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2663em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0534em;vertical-align:-0.3013em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7521em;"><span style="top:-2.3987em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span><span style="top:-3.1507em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3488em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1512em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3013em;"><span></span></span></span></span></span></span></span></span></span>,若 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mi>p</mi><mi>i</mi><mi>m</mi></msubsup></mrow><annotation encoding="application/x-tex">p_i^{m}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9231em;vertical-align:-0.2587em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-2.4413em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">m</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2587em;"><span></span></span></span></span></span></span></span></span></span> 是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo stretchy="false">!</mo></mrow><annotation encoding="application/x-tex">n!</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">n</span><span class="mclose">!</span></span></span></span> 的一个因数,则其对答案的贡献为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">⌊</mo><mstyle displaystyle="true" scriptlevel="0"><mfrac><mi>m</mi><msub><mi>a</mi><mi>i</mi></msub></mfrac></mstyle><mo stretchy="false">⌋</mo></mrow><annotation encoding="application/x-tex">\lfloor \dfrac{m}{a_i}\rfloor</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.9436em;vertical-align:-0.836em;"></span><span class="mopen">⌊</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">m</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.836em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌋</span></span></span></span>。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-type">const</span> <span class="hljs-type">int</span> N=<span class="hljs-number">2e6</span><span class="hljs-number">+10</span>;<br><span class="hljs-type">int</span> n,b;<br><span class="hljs-type">int</span> pri[N],cnt=<span class="hljs-number">0</span>;<br><span class="hljs-type">int</span> t[N];<br><span class="hljs-type">int</span> ans=INF;<br><span class="hljs-function"><span class="hljs-type">signed</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br> n=<span class="hljs-built_in">read</span>();b=<span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">2</span>;i*i&lt;=b;i++) &#123;<br> <span class="hljs-keyword">if</span>(b%i==<span class="hljs-number">0</span>) &#123;<br> pri[++cnt]=i;<br> <span class="hljs-keyword">while</span>(b%i==<span class="hljs-number">0</span>) b/=i,t[cnt]++;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">if</span>(b&gt;<span class="hljs-number">1</span>) pri[++cnt]=b,t[cnt]++;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=cnt;i++) &#123;<br> <span class="hljs-type">int</span> nt=n;<br> <span class="hljs-type">int</span> sum=<span class="hljs-number">0</span>;<br> <span class="hljs-keyword">while</span>(nt) &#123;<br> sum+=nt/pri[i];<br> nt/=pri[i];<br> &#125;<br> ans=<span class="hljs-built_in">min</span>(sum/t[i],ans);<br> &#125;<br> <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;%lld\n&quot;</span>,ans);<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h3 id="CF1493D-GCD-of-an-Array">CF1493D GCD of an Array</h3><p>由于一个集合的最大公因数的一个质因数的指数是这个集合中该质数指数的最小值,可以想到每次动态维护集合 gcd 时,考虑将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span></span></span></span> 分解质因数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi><mo>=</mo><msubsup><mi>p</mi><mn>1</mn><msub><mi>e</mi><mn>1</mn></msub></msubsup><mo>×</mo><msubsup><mi>p</mi><mn>2</mn><msub><mi>e</mi><mn>2</mn></msub></msubsup><mo>×</mo><mo>…</mo><mo>×</mo><msubsup><mi>p</mi><mi>k</mi><msub><mi>e</mi><mi>k</mi></msub></msubsup></mrow><annotation encoding="application/x-tex">y=p_1^{e_1}\times p_2^{e_2}\times \ldots \times p_k^{e_k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0126em;vertical-align:-0.2663em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7463em;"><span style="top:-2.4337em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span><span style="top:-3.1449em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">e</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2663em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0126em;vertical-align:-0.2663em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7463em;"><span style="top:-2.4337em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span><span style="top:-3.1449em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">e</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2663em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0534em;vertical-align:-0.3013em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7521em;"><span style="top:-2.3987em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span><span style="top:-3.1507em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">e</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3488em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1512em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3013em;"><span></span></span></span></span></span></span></span></span></span>,如果集合中除 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>x</mi></msub></mrow><annotation encoding="application/x-tex">a_x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 以外的其他元素均有可以对答案产生贡献的因数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">p_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,那么答案就可以加入 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">p_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 产生的贡献。</p><p>形式化的,如果我们定义 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>v</mi><mi>p</mi></msub><mo stretchy="false">(</mo><msub><mi>a</mi><mi>i</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">v_p(a_i)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span> 为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">a_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 中质因数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span> 的指数,那么若满足</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>min</mi><mo>⁡</mo><mo stretchy="false">(</mo><msub><mi>v</mi><mi>p</mi></msub><mo stretchy="false">(</mo><msub><mi>a</mi><mn>1</mn></msub><mo stretchy="false">)</mo><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>v</mi><mi>p</mi></msub><mo stretchy="false">(</mo><msub><mi>a</mi><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></msub><mo stretchy="false">)</mo><mo separator="true">,</mo><msub><mi>v</mi><mi>p</mi></msub><mo stretchy="false">(</mo><mi>y</mi><mo stretchy="false">)</mo><mo separator="true">,</mo><msub><mi>v</mi><mi>p</mi></msub><mo stretchy="false">(</mo><msub><mi>a</mi><mrow><mi>x</mi><mo>+</mo><mn>1</mn></mrow></msub><mo stretchy="false">)</mo><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>v</mi><mi>p</mi></msub><mo stretchy="false">(</mo><msub><mi>a</mi><mi>n</mi></msub><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo>&gt;</mo><mi>min</mi><mo>⁡</mo><mo stretchy="false">(</mo><msub><mi>v</mi><mi>p</mi></msub><mo stretchy="false">(</mo><msub><mi>a</mi><mn>1</mn></msub><mo stretchy="false">)</mo><mo separator="true">,</mo><msub><mi>v</mi><mi>p</mi></msub><mo stretchy="false">(</mo><msub><mi>a</mi><mn>2</mn></msub><mo stretchy="false">)</mo><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>v</mi><mi>p</mi></msub><mo stretchy="false">(</mo><msub><mi>a</mi><mi>n</mi></msub><mo stretchy="false">)</mo><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\min(v_p(a_1), \ldots, v_p(a_{x-1}), v_p(y), v_p(a_{x+1}), \ldots, v_p(a_n)) &gt; \min(v_p(a_1), v_p(a_2), \ldots, v_p(a_n))</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">min</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">))</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em;"></span><span class="mop">min</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">))</span></span></span></span></span></p><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span></span></span></span> 为上述两式的差值,则对答案的贡献为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>p</mi><mi>A</mi></msup></mrow><annotation encoding="application/x-tex">p^A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0358em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8413em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">A</span></span></span></span></span></span></span></span></span></span></span>。</p><p>接下来考虑如何求。可以用线性筛预处理质数,每次操作用预处理的最小质因子分解。</p><p>我们用 <code>multiset</code> 记录质数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span> 出现在的元素下标,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span></span></span></span> 数组记录 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</span></span></span></span> 在多少个不同的元素中出现。当执行一次操作时,判断是否能够给答案产生贡献。如果能,那么插入当前的下标,随后暴力将 <code>multiset</code> 中的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>∼</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1\sim n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 下标删除一次。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-type">const</span> <span class="hljs-type">int</span> N=<span class="hljs-number">2e5</span><span class="hljs-number">+10</span>;<br><span class="hljs-type">int</span> n,m;<br><span class="hljs-type">int</span> a[N];<br>multiset&lt;<span class="hljs-type">int</span>&gt; st[N];<br><span class="hljs-type">int</span> b[N];<br><span class="hljs-type">int</span> prime[N];<br><span class="hljs-type">int</span> cnt=<span class="hljs-number">0</span>;<br><span class="hljs-type">int</span> t[N];<br><span class="hljs-type">int</span> ans=<span class="hljs-number">1</span>;<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">pri</span><span class="hljs-params">(<span class="hljs-type">int</span> n)</span> </span>&#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">2</span>;i&lt;=n;i++) &#123; <br> <span class="hljs-keyword">if</span>(!b[i]) b[i]=i,prime[++cnt]=i;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">1</span>;j&lt;=cnt;j++) &#123;<br> <span class="hljs-keyword">if</span>(prime[j]&gt;b[i] || prime[j]&gt;n/i) <span class="hljs-keyword">break</span>;<br> b[i*prime[j]]=prime[j];<br> &#125;<br> &#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">modify</span><span class="hljs-params">(<span class="hljs-type">int</span> p,<span class="hljs-type">int</span> x)</span> </span>&#123;<br> <span class="hljs-keyword">while</span>(x!=<span class="hljs-number">1</span>) &#123;<br> <span class="hljs-type">int</span> minn=b[x];<br> <span class="hljs-keyword">if</span>(st[minn].<span class="hljs-built_in">find</span>(p)==st[minn].<span class="hljs-built_in">end</span>()) t[minn]++;<br> st[minn].<span class="hljs-built_in">insert</span>(p);<br> <span class="hljs-keyword">if</span>(t[minn]==n) &#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> st[minn].<span class="hljs-built_in">erase</span>(st[minn].<span class="hljs-built_in">find</span>(i));<br> <span class="hljs-keyword">if</span>(st[minn].<span class="hljs-built_in">find</span>(i)==st[minn].<span class="hljs-built_in">end</span>()) t[minn]--;<br> &#125;<br> ans=(ans*minn)%mod;<br> &#125;<br> x/=minn;<br> &#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">signed</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span><br><span class="hljs-function"></span>&#123;<br> <span class="hljs-built_in">pri</span>(N<span class="hljs-number">-1</span>);<br> n=<span class="hljs-built_in">read</span>();m=<span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> a[i]=<span class="hljs-built_in">read</span>();<br> &#125;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++) &#123;<br> <span class="hljs-built_in">modify</span>(i,a[i]);<br> &#125;<br> <span class="hljs-keyword">while</span>(m--) &#123;<br> <span class="hljs-type">int</span> p=<span class="hljs-built_in">read</span>(),x=<span class="hljs-built_in">read</span>();<br> <span class="hljs-built_in">modify</span>(p,x);<br> <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;%lld\n&quot;</span>,ans);<br> &#125;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure>
☑️ ⭐

CF 数论做题笔记

CF1114C Trailing Loves

首先从 1010 进制开始分析。求 pp 末尾 00 的数量即为求 pp 的因数中含有 2255 的数量的最小值。

例如设 x1=23×52x_1=2^3\times 5^2,则 x1x_1 的末尾 00 的数量即为 min(3,2)=2\min(3,2)=2

接下来考虑 (n!)b(n!)_b 的末尾 00 的数量。我们先枚举 bb 的因数 b=p1a1×p2a2××pkakb=p_1^{a_1}\times p_2^{a_2}\times \ldots \times p_k^{a_k},若 pimp_i^{m}n!n! 的一个因数,则其对答案的贡献为 mai\lfloor \dfrac{m}{a_i}\rfloor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const int N=2e6+10;
int n,b;
int pri[N],cnt=0;
int t[N];
int ans=INF;
signed main()
{
n=read();b=read();
for(int i=2;i*i<=b;i++)
{
if(b%i==0)
{
pri[++cnt]=i;
while(b%i==0) b/=i,t[cnt]++;
}
}
if(b>1) pri[++cnt]=b,t[cnt]++;
for(int i=1;i<=cnt;i++)
{
int nt=n;
int sum=0;
while(nt)
{
sum+=nt/pri[i];
nt/=pri[i];
}
ans=min(sum/t[i],ans);
}
printf("%lld\n",ans);
return 0;
}

CF1493D GCD of an Array

由于一个集合的最大公因数的一个质因数的指数是这个集合中该质数指数的最小值,可以想到每次动态维护集合 gcd 时,考虑将 yy 分解质因数 y=p1e1×p2e2××pkeky=p_1^{e_1}\times p_2^{e_2}\times \ldots \times p_k^{e_k},如果集合中除 axa_x 以外的其他元素均有可以对答案产生贡献的因数 pip_i,那么答案就可以加入 pip_i 产生的贡献。

形式化的,如果我们定义 vp(ai)v_p(a_i)aia_i 中质因数 pp 的指数,那么若满足

min(vp(a1),,vp(ax1),vp(y),vp(ax+1),,vp(an))>min(vp(a1),vp(a2),,vp(an))\min(v_p(a_1), \ldots, v_p(a_{x-1}), v_p(y), v_p(a_{x+1}), \ldots, v_p(a_n)) > \min(v_p(a_1), v_p(a_2), \ldots, v_p(a_n))

AA 为上述两式的差值,则对答案的贡献为 pAp^A

接下来考虑如何求。可以用线性筛预处理质数,每次操作用预处理的最小质因子分解。

我们用 multiset 记录质数 pp 出现在的元素下标,tt 数组记录 pp 在多少个不同的元素中出现。当执行一次操作时,判断是否能够给答案产生贡献。如果能,那么插入当前的下标,随后暴力将 multiset 中的 1n1\sim n 下标删除一次。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
const int N=2e5+10;
int n,m;
int a[N];
multiset<int> st[N];
int b[N];
int prime[N];
int cnt=0;
int t[N];
int ans=1;
void pri(int n)
{
for(int i=2;i<=n;i++)
{
if(!b[i]) b[i]=i,prime[++cnt]=i;
for(int j=1;j<=cnt;j++)
{
if(prime[j]>b[i] || prime[j]>n/i) break;
b[i*prime[j]]=prime[j];
}
}
}
void modify(int p,int x)
{
while(x!=1)
{
int minn=b[x];
if(st[minn].find(p)==st[minn].end()) t[minn]++;
st[minn].insert(p);
if(t[minn]==n)
{
for(int i=1;i<=n;i++)
{
st[minn].erase(st[minn].find(i));
if(st[minn].find(i)==st[minn].end()) t[minn]--;
}
ans=(ans*minn)%mod;
}
x/=minn;
}
}
signed main()
{
pri(N-1);
n=read();m=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
}
for(int i=1;i<=n;i++)
{
modify(i,a[i]);
}
while(m--)
{
int p=read(),x=read();
modify(p,x);
printf("%lld\n",ans);
}
return 0;
}
☑️ ⭐

12 月学习笔记

CF1114C Trailing Loves

首先从 1010 进制开始分析。求 pp 末尾 00 的数量即为求 pp 的因数中含有 2255 的数量的最小值。

例如设 x1=23×52x_1=2^3\times 5^2,则 x1x_1 的末尾 00 的数量即为 min(3,2)=2\min(3,2)=2

接下来考虑 (n!)b(n!)_b 的末尾 00 的数量。我们先枚举 bb 的因数 b=p1a1×p2a2××pkakb=p_1^{a_1}\times p_2^{a_2}\times \ldots \times p_k^{a_k},若 pimp_i^{m}n!n! 的一个因数,则其对答案的贡献为 mai\lfloor \dfrac{m}{a_i}\rfloor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const int N=2e6+10;
int n,b;
int pri[N],cnt=0;
int t[N];
int ans=INF;
signed main()
{
n=read();b=read();
for(int i=2;i*i<=b;i++)
{
if(b%i==0)
{
pri[++cnt]=i;
while(b%i==0) b/=i,t[cnt]++;
}
}
if(b>1) pri[++cnt]=b,t[cnt]++;
for(int i=1;i<=cnt;i++)
{
int nt=n;
int sum=0;
while(nt)
{
sum+=nt/pri[i];
nt/=pri[i];
}
ans=min(sum/t[i],ans);
}
printf("%lld\n",ans);
return 0;
}

CF1493D GCD of an Array 未完待续

由于一个集合的最大公因数的一个质因数的指数是这个集合中该质数指数的最小值,可以想到每次动态维护集合 gcd 时,考虑将 yy 分解质因数 y=p1e1×p2e2××pkeky=p_1^{e_1}\times p_2^{e_2}\times \ldots \times p_k^{e_k},如果集合中除 axa_x 以外的其他元素均有可以对答案产生贡献的因数 pip_i,那么答案就可以加入 pip_i 产生的贡献。

形式化的,如果我们定义 vp(ai)v_p(a_i)aia_i 中质因数 pp 的指数,那么若满足

min(vp(a1),,vp(ax1),vp(y),vp(ax+1),,vp(an))>min(vp(a1),vp(a2),,vp(an))\min(v_p(a_1), \ldots, v_p(a_{x-1}), v_p(y), v_p(a_{x+1}), \ldots, v_p(a_n)) > \min(v_p(a_1), v_p(a_2), \ldots, v_p(a_n))

AA 为上述两式的差值,则对答案的贡献为 pAp^A

接下来考虑如何求。可以用线性筛预处理质数,每次操作用预处理的最小质因子分解。

我们用 multiset 记录质数 pp 出现在的元素下标,tt 数组记录 pp 在多少个不同的元素中出现。当执行一次操作时,判断是否能够给答案产生贡献。如果能,那么插入当前的下标,随后暴力将 multiset 中的 1n1\sim n 下标删除一次。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
const int N=2e5+10;
int n,m;
int a[N];
multiset<int> st[N];
int b[N];
int prime[N];
int cnt=0;
int t[N];
int ans=1;
void pri(int n)
{
for(int i=2;i<=n;i++)
{
if(!b[i]) b[i]=i,prime[++cnt]=i;
for(int j=1;j<=cnt;j++)
{
if(prime[j]>b[i] || prime[j]>n/i) break;
b[i*prime[j]]=prime[j];
}
}
}
void modify(int p,int x)
{
while(x!=1)
{
int minn=b[x];
if(st[minn].find(p)==st[minn].end()) t[minn]++;
st[minn].insert(p);
if(t[minn]==n)
{
for(int i=1;i<=n;i++)
{
st[minn].erase(st[minn].find(i));
if(st[minn].find(i)==st[minn].end()) t[minn]--;
}
ans=(ans*minn)%mod;
}
x/=minn;
}
}
signed main()
{
pri(N-1);
n=read();m=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
}
for(int i=1;i<=n;i++)
{
modify(i,a[i]);
}
while(m--)
{
int p=read(),x=read();
modify(p,x);
printf("%lld\n",ans);
}
return 0;
}
☑️ ⭐

CF1000F One Occurrence 题解

<p><a href="https://www.luogu.com.cn/problem/CF1000F">Problem Link</a> | <a href="https://codeforces.com/problemset/problem/1000/F">CodeForces Link</a></p><p>一发线段树的做法。</p><h2 id="Solution">Solution</h2><p>最初的想法是维护每个元素上次出现的下标 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>a</mi><mi>s</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">last</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span></span></span></span> 数组,以样例 <code>1 1 2 3 2 4 </code> 为例,维护出来的结果即为 <code>0 1 0 0 3 0</code>,答案就是查找区间 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><mi>l</mi><mo separator="true">,</mo><mi>r</mi><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[l,r]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mclose">]</span></span></span></span> 内是否有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>a</mi><mi>s</mi><msub><mi>t</mi><mi>i</mi></msub><mo>&lt;</mo><mi>l</mi></mrow><annotation encoding="application/x-tex">last_i&lt;l</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">s</span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span></span></span></span> 的元素。</p><p>但这样会出现一个问题:当区间内有元素出现了多次,统计结果会变得不正确。以样例第二组询问为例,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>=</mo><msub><mi>a</mi><mn>2</mn></msub><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">a_1=a_2=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,而 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>a</mi><mi>s</mi><msub><mi>t</mi><mn>1</mn></msub><mo>=</mo><mn>0</mn><mo>&lt;</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">last_1=0&lt;1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">s</span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6835em;vertical-align:-0.0391em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,看上去可行但实际则出现了两个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。</p><p>一个可行的解决措施是只保留<strong>每个数最后一次出现的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>a</mi><mi>s</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">last</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span></span></span></span> 值</strong>,而将前面的值作废。经过这样的操作,样例处理结果即为(下标从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 开始):</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left right left right left right" columnspacing="0em 1em 0em 1em 0em 1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi>a</mi><mo>=</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo stretchy="false">{</mo><mn>1</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mn>1</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mn>2</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mn>3</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mn>2</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mn>4</mn><mo stretchy="false">}</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi>l</mi><mi>a</mi><mi>s</mi><mi>t</mi><mo>=</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo stretchy="false">{</mo><mtext>INF</mtext><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mn>1</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mtext>INF</mtext><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mn>0</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mn>3</mn><mo separator="true">,</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mn>0</mn><mo stretchy="false">}</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}a=&amp;\{1,&amp;1,&amp;2,&amp;3,&amp;2,&amp;4\}\\last=&amp;\{\text{INF},&amp;1,&amp;\text{INF},&amp;0,&amp;3,&amp;0\}\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.75em;"><span style="top:-3.91em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.25em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.75em;"><span style="top:-3.91em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"></span><span class="mopen">{</span><span class="mord">1</span><span class="mpunct">,</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"></span><span class="mopen">{</span><span class="mord text"><span class="mord">INF</span></span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.25em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.75em;"><span style="top:-3.91em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span><span class="mpunct">,</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.25em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.75em;"><span style="top:-3.91em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"></span><span class="mord">2</span><span class="mpunct">,</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"></span><span class="mord text"><span class="mord">INF</span></span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.25em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.75em;"><span style="top:-3.91em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span><span class="mpunct">,</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.25em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.75em;"><span style="top:-3.91em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"></span><span class="mord">2</span><span class="mpunct">,</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"></span><span class="mord">3</span><span class="mpunct">,</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.25em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.75em;"><span style="top:-3.91em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">4</span><span class="mclose">}</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">0</span><span class="mclose">}</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.25em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>由于在维护靠后的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>a</mi><mi>s</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">last</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span></span></span></span> 时会对前面已经维护的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>a</mi><mi>s</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">last</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span></span></span></span> 造成影响,故我们需要将询问离线,并按区间右端点排序。保证处理当前询问 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><mi>l</mi><mo separator="true">,</mo><mi>r</mi><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[l,r]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mclose">]</span></span></span></span> 区间时 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>a</mi><mi>s</mi><msub><mi>t</mi><mi>r</mi></msub></mrow><annotation encoding="application/x-tex">last_r</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">s</span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">r</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 没有被作废。</p><p>则程序为单点修改 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>a</mi><mi>s</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">last</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span></span></span></span> 区间查询 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>a</mi><mi>s</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">last</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span></span></span></span> 的最值。值得注意的是维护线段时应保存区间 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>a</mi><mi>s</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">last</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span></span></span></span> 的最小值和<strong>该值的下标</strong>。区间最小值是为了判断最小的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>a</mi><mi>s</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">last</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span></span></span></span> 是否在区间内,不是则证明区间内有最小值。最小值下标是为了输出结果。</p><p>相比其他做法码量稍大,但维护 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>a</mi><mi>s</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">last</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">a</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span></span></span></span> 的 trick 还是有些用处的。</p><h2 id="Core-Code">Core Code</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-type">const</span> <span class="hljs-type">int</span> N=<span class="hljs-number">5e5</span><span class="hljs-number">+10</span>;<br><span class="hljs-type">int</span> n,m;<br><span class="hljs-type">int</span> a[N];<br><span class="hljs-type">int</span> last[N];<br><span class="hljs-type">int</span> t[N];<br><span class="hljs-type">int</span> ans[N];<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">qs</span><br>&#123;<br> <span class="hljs-type">int</span> l,r,id;<br>&#125;q[N];<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">cmp</span><span class="hljs-params">(qs x,qs y)</span></span><br><span class="hljs-function"></span>&#123;<br> <span class="hljs-keyword">return</span> x.r&lt;y.r;<br>&#125;<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">tree</span><br>&#123;<br> <span class="hljs-type">int</span> val,pos;<br>&#125;;<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">node</span><br>&#123;<br> <span class="hljs-type">int</span> val[N*<span class="hljs-number">4</span>],pos[N*<span class="hljs-number">4</span>],siz[N*<span class="hljs-number">4</span>];<br> <span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">pushup</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span></span><br><span class="hljs-function"> </span>&#123;<br> <span class="hljs-keyword">if</span>(val[p*<span class="hljs-number">2</span>]&lt;val[p*<span class="hljs-number">2</span><span class="hljs-number">+1</span>]) val[p]=val[p*<span class="hljs-number">2</span>],pos[p]=pos[p*<span class="hljs-number">2</span>];<br> <span class="hljs-keyword">else</span> val[p]=val[p*<span class="hljs-number">2</span><span class="hljs-number">+1</span>],pos[p]=pos[p*<span class="hljs-number">2</span><span class="hljs-number">+1</span>];<br> &#125;<br> <span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">build</span><span class="hljs-params">(<span class="hljs-type">int</span> p,<span class="hljs-type">int</span> l,<span class="hljs-type">int</span> r)</span></span><br><span class="hljs-function"> </span>&#123;<br> <span class="hljs-keyword">if</span>(l==r)<br> &#123;<br> val[p]=INF;<br> pos[p]=l;<br> <span class="hljs-keyword">return</span> ;<br> &#125;<br> <span class="hljs-type">int</span> mid=(l+r)&gt;&gt;<span class="hljs-number">1</span>;<br> <span class="hljs-built_in">build</span>(p*<span class="hljs-number">2</span>,l,mid);<br> <span class="hljs-built_in">build</span>(p*<span class="hljs-number">2</span><span class="hljs-number">+1</span>,mid<span class="hljs-number">+1</span>,r);<br> <span class="hljs-built_in">pushup</span>(p);<br> &#125;<br> <span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">modify</span><span class="hljs-params">(<span class="hljs-type">int</span> p,<span class="hljs-type">int</span> l,<span class="hljs-type">int</span> r,<span class="hljs-type">int</span> x,<span class="hljs-type">int</span> w)</span></span><br><span class="hljs-function"> </span>&#123;<br> <span class="hljs-keyword">if</span>(l==r)<br> &#123;<br> val[p]=w;<br> <span class="hljs-keyword">return</span> ;<br> &#125;<br> <span class="hljs-type">int</span> mid=(l+r)&gt;&gt;<span class="hljs-number">1</span>;<br> <span class="hljs-keyword">if</span>(x&lt;=mid) <span class="hljs-built_in">modify</span>(p*<span class="hljs-number">2</span>,l,mid,x,w);<br> <span class="hljs-keyword">else</span> <span class="hljs-built_in">modify</span>(p*<span class="hljs-number">2</span><span class="hljs-number">+1</span>,mid<span class="hljs-number">+1</span>,r,x,w);<br> <span class="hljs-built_in">pushup</span>(p);<br> &#125;<br> <span class="hljs-function">tree <span class="hljs-title">query</span><span class="hljs-params">(<span class="hljs-type">int</span> p,<span class="hljs-type">int</span> l,<span class="hljs-type">int</span> r,<span class="hljs-type">int</span> x,<span class="hljs-type">int</span> y)</span></span><br><span class="hljs-function"> </span>&#123;<br> <span class="hljs-keyword">if</span>(x&lt;=l &amp;&amp; r&lt;=y)<br> &#123;<br> <span class="hljs-keyword">return</span> &#123;val[p],pos[p]&#125;;<br> &#125;<br> <span class="hljs-type">int</span> mid=(l+r)&gt;&gt;<span class="hljs-number">1</span>;<br> tree res=&#123;INF,<span class="hljs-number">0</span>&#125;;<br> <span class="hljs-keyword">if</span>(x&lt;=mid)<br> &#123;<br> tree tmp=<span class="hljs-built_in">query</span>(p*<span class="hljs-number">2</span>,l,mid,x,y);<br> <span class="hljs-keyword">if</span>(tmp.val&lt;res.val)<br> &#123;<br> res.val=tmp.val;<br> res.pos=tmp.pos;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">if</span>(y&gt;=mid<span class="hljs-number">+1</span>)<br> &#123;<br> tree tmp=<span class="hljs-built_in">query</span>(p*<span class="hljs-number">2</span><span class="hljs-number">+1</span>,mid<span class="hljs-number">+1</span>,r,x,y);<br> <span class="hljs-keyword">if</span>(tmp.val&lt;res.val)<br> &#123;<br> res.val=tmp.val;<br> res.pos=tmp.pos;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">return</span> res;<br> &#125;<br>&#125;g;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span><br><span class="hljs-function"></span>&#123;<br> n=<span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++)<br> &#123;<br> a[i]=<span class="hljs-built_in">read</span>();<br> last[i]=t[a[i]];<br> t[a[i]]=i;<br> &#125;<br> m=<span class="hljs-built_in">read</span>();<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=m;i++)<br> &#123;<br> q[i].l=<span class="hljs-built_in">read</span>();q[i].r=<span class="hljs-built_in">read</span>();q[i].id=i;<br> &#125;<br> <span class="hljs-built_in">sort</span>(q<span class="hljs-number">+1</span>,q+m<span class="hljs-number">+1</span>,cmp);<br> g.<span class="hljs-built_in">build</span>(<span class="hljs-number">1</span>,<span class="hljs-number">1</span>,n);<br> <span class="hljs-type">int</span> j=<span class="hljs-number">1</span>;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++)<br> &#123;<br> g.<span class="hljs-built_in">modify</span>(<span class="hljs-number">1</span>,<span class="hljs-number">1</span>,n,i,last[i]);<br> <span class="hljs-keyword">if</span>(last[i]!=<span class="hljs-number">0</span>) g.<span class="hljs-built_in">modify</span>(<span class="hljs-number">1</span>,<span class="hljs-number">1</span>,n,last[i],INF);<br> <span class="hljs-keyword">while</span>(q[j].r==i &amp;&amp; j&lt;=m)<br> &#123;<br> tree res=g.<span class="hljs-built_in">query</span>(<span class="hljs-number">1</span>,<span class="hljs-number">1</span>,n,q[j].l,q[j].r);<br> <span class="hljs-keyword">if</span>(res.val&lt;q[j].l) ans[q[j].id]=a[res.pos];<br> <span class="hljs-keyword">else</span> ans[q[j].id]=<span class="hljs-number">0</span>;<br> j++;<br> &#125;<br> &#125;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=m;i++)<br> &#123;<br> cout&lt;&lt;ans[i]&lt;&lt;endl;<br> &#125;<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure>
☑️ ⭐

P6878 [JOI 2020 Final] JJOOII 2 题解

<p><a href="https://www.luogu.com.cn/problem/P6878">Problem Link</a></p><h2 id="Explanation">Explanation</h2><p>给定一个只包含 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">J</mi></mrow><annotation encoding="application/x-tex">\tt J</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">J</span></span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">O</mi></mrow><annotation encoding="application/x-tex">\tt O</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">O</span></span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">I</mi></mrow><annotation encoding="application/x-tex">\tt I</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">I</span></span></span></span></span> 三种字符、长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span></span></span></span> 的字符串 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span></span></span></span> 和一个正整数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span></span></span></span>。定义 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span></span></span></span> 阶 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">J</mi><mi mathvariant="monospace">O</mi><mi mathvariant="monospace">I</mi></mrow><annotation encoding="application/x-tex">\tt JOI</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">JOI</span></span></span></span></span> 串为由恰好 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span></span></span></span> 个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">J</mi></mrow><annotation encoding="application/x-tex">\tt J</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">J</span></span></span></span></span> 、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span></span></span></span> 个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">O</mi></mrow><annotation encoding="application/x-tex">\tt O</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">O</span></span></span></span></span> 、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span></span></span></span> 个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">I</mi></mrow><annotation encoding="application/x-tex">\tt I</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">I</span></span></span></span></span> 依次拼接而成的字串。如 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span> 阶 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">J</mi><mi mathvariant="monospace">O</mi><mi mathvariant="monospace">I</mi></mrow><annotation encoding="application/x-tex">\tt JOI</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">JOI</span></span></span></span></span> 串为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">J</mi><mi mathvariant="monospace">J</mi><mi mathvariant="monospace">O</mi><mi mathvariant="monospace">O</mi><mi mathvariant="monospace">I</mi><mi mathvariant="monospace">I</mi></mrow><annotation encoding="application/x-tex">\tt JJOOII</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">JJOOII</span></span></span></span></span>。你可以对 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span></span></span></span> 进行任意次以下操作以将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span></span></span></span> 变为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span></span></span></span> 阶 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">J</mi><mi mathvariant="monospace">O</mi><mi mathvariant="monospace">I</mi></mrow><annotation encoding="application/x-tex">\tt JOI</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">JOI</span></span></span></span></span> 串:</p><ol><li>删除 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span></span></span></span> 的第一个字符</li><li>删除 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span></span></span></span> 的最后一个字符</li><li>删除 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span></span></span></span> 的任意一个字符</li></ol><p>要求最小化并输出第三种操作的次数。如果不能将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span></span></span></span> 变为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span></span></span></span> 阶 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">J</mi><mi mathvariant="monospace">O</mi><mi mathvariant="monospace">I</mi></mrow><annotation encoding="application/x-tex">\tt JOI</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">JOI</span></span></span></span></span> 串,输出 <code>-1</code>。</p><h2 id="Solution">Solution</h2><p>可以发现只要定位到了最前端的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">J</mi></mrow><annotation encoding="application/x-tex">\tt J</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">J</span></span></span></span></span> 的位置,那么就可以确定一个最短的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">J</mi><mi mathvariant="monospace">O</mi><mi mathvariant="monospace">I</mi></mrow><annotation encoding="application/x-tex">\tt JOI</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">JOI</span></span></span></span></span> 串。</p><p>即我们可以暴力从前向后扫 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">J</mi></mrow><annotation encoding="application/x-tex">\tt J</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">J</span></span></span></span></span> 的位置,然后依次找到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span></span></span></span> 个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">O</mi></mrow><annotation encoding="application/x-tex">\tt O</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">O</span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">I</mi></mrow><annotation encoding="application/x-tex">\tt I</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">I</span></span></span></span></span> 即可。</p><p>可以对上面的算法进行优化,我们记录每个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">J</mi></mrow><annotation encoding="application/x-tex">\tt J</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">J</span></span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">O</mi></mrow><annotation encoding="application/x-tex">\tt O</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">O</span></span></span></span></span>、<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">I</mi></mrow><annotation encoding="application/x-tex">\tt I</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">I</span></span></span></span></span> 的位置为 <code>cj</code>、<code>co</code>、<code>ci</code>,那么一段 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">J</mi></mrow><annotation encoding="application/x-tex">\tt J</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">J</span></span></span></span></span> 的开始位置即为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><msub><mi>j</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">cj_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9456em;vertical-align:-0.2861em;"></span><span class="mord mathnormal">c</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0572em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>,结束位置为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><msub><mi>j</mi><mrow><mi>j</mi><mo>+</mo><mi>k</mi><mo>−</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">cj_{j+k-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9456em;vertical-align:-0.2861em;"></span><span class="mord mathnormal">c</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0572em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">O</mi></mrow><annotation encoding="application/x-tex">\tt O</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">O</span></span></span></span></span>,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="monospace">I</mi></mrow><annotation encoding="application/x-tex">\tt I</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord"><span class="mord mathtt">I</span></span></span></span></span> 同理。</p><h2 id="Core-Code">Core Code</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-type">int</span> n,k;<br><span class="hljs-type">char</span> s[N];<br><span class="hljs-type">int</span> cj[N],co[N],ci[N];<br><span class="hljs-type">int</span> totj,toto,toti;<br><span class="hljs-type">int</span> ans=INF;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span><br><span class="hljs-function"></span>&#123;<br>n=<span class="hljs-built_in">read</span>();k=<span class="hljs-built_in">read</span>();<br><span class="hljs-built_in">scanf</span>(<span class="hljs-string">&quot;%s&quot;</span>,s<span class="hljs-number">+1</span>);<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++)<br>&#123;<br><span class="hljs-keyword">if</span>(s[i]==<span class="hljs-string">&#x27;J&#x27;</span>) cj[++totj]=i;<br> <span class="hljs-keyword">if</span>(s[i]==<span class="hljs-string">&#x27;O&#x27;</span>) co[++toto]=i;<br> <span class="hljs-keyword">if</span>(s[i]==<span class="hljs-string">&#x27;I&#x27;</span>) ci[++toti]=i;<br>&#125;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=totj;i++)<br> &#123;<br> <span class="hljs-keyword">if</span>(i+k<span class="hljs-number">-1</span>&gt;totj) <span class="hljs-keyword">break</span>;<span class="hljs-comment">//后面不足 k 个 j,下面 o,i 同理</span><br> <span class="hljs-type">int</span> ed=cj[i+k<span class="hljs-number">-1</span>];<span class="hljs-comment">//一段 j 的结束,下面 o,i 同理</span><br> <span class="hljs-type">int</span> pos=<span class="hljs-number">1</span>;<br> <span class="hljs-keyword">while</span>(co[pos]&lt;=ed &amp;&amp; pos&lt;=toto) pos++;<span class="hljs-comment">//o 的起始位置,下面 i 同理</span><br> <span class="hljs-keyword">if</span>(pos+k<span class="hljs-number">-1</span>&gt;toto) <span class="hljs-keyword">break</span>;<br> ed=co[pos+k<span class="hljs-number">-1</span>];<br> pos=<span class="hljs-number">1</span>;<br> <span class="hljs-keyword">while</span>(ci[pos]&lt;=ed &amp;&amp; pos&lt;=toti) pos++;<br> <span class="hljs-keyword">if</span>(pos+k<span class="hljs-number">-1</span>&gt;toti) <span class="hljs-keyword">break</span>;<br> ed=ci[pos+k<span class="hljs-number">-1</span>];<br> ans=<span class="hljs-built_in">min</span>(ans,ed-cj[i]<span class="hljs-number">+1</span><span class="hljs-number">-3</span>*k);<span class="hljs-comment">//答案为枚举的区间长度与 3*k 的差</span><br> &#125;<br> <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;%d\n&quot;</span>,(ans==INF)?<span class="hljs-number">-1</span>:ans);<br><span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure>
🔲 ☆

CSP2023 游寄

<p>省流:读错两道题。</p><!-- more --><p><img src="https://img.makerlife.top/data/qexo/2024-01-03-CSP2023RP++.png" alt="https://img.makerlife.top/data/qexo/2024-01-03-CSP2023RP++.png"></p><h2 id="Day-1">Day -1</h2><p>晚上写了点数据结构的板子。</p><h2 id="Day-0">Day 0</h2><p>早上去日照的路上跟在学校开运动会的同学聊了几句。</p><p>车上愣了 4hrs 的神。</p><p>下午打了几个板子,口胡了几个 tg 原题。</p><p>晚上去考场试机,各种原因不让进考场拖了 15min,进去以后还有 pj 的跟我抢座位。</p><p>发现机子分辨率不对,调了半天调不了,想着明天早上还有 pj 也没管,出考场见到教练说了几句。</p><p>机子配置很好啊,12 代 i5+32G 内存。</p><h2 id="Day-1-2">Day 1</h2><p>上午刚写了个最短路,看到 HL 群传出来了 pj 题,口胡了一遍 T1-T3,跟同学讨论 T2 可能是个原。</p><p>下午进考场看到分辨率还没调而且似乎看起来更难受了,趁着装英文输入法的空看了眼显示设置竟然能调了,调完之后 Dev-C++ 依旧很糊,rp--。</p><p>开考前打了个线段树。</p><p>发下来压缩包密码看到打样例盲猜一个图论,但没发现总司令,感觉今年样例强度格外小。</p><p>PDF 密码晚发了 10min,rp--。</p><p>(考试中)</p><p>开题。</p><p>扫了眼 T1 觉得是数学题,T2 暴力很好打,T3 大模拟,T4 神秘题。</p><p>然后就在推 T1 结论,推了半天发现情况貌似挺多,写了一种情况跑路看 T2。</p><p>打了个 25pts 的纯暴力,开 T3。</p><p>看了眼样例就觉得 2 操作只能是定义结构体元素,这样前 13 个点似乎都很好写?性质 A 全输出 <code>ERR</code>?(伏笔)</p><p>为什么样例解释错的这么明显都没人问。</p><p>定了 1hr 写 T3,写完操作 2 突然发现写不完了似乎,打了个总司令跑路看 T1,rp--。</p><p>直接扫似乎很快就能扫完,写了一会过了样例,手糊了几个 hack 过了。</p><p>还剩下半个小时。看到 右边 和 右边的右边的右边 正在玩小恐龙,右边的右边 在玩纸牌,监考说要检查 D 盘。</p><p>又看了眼 T4 貌似第一遍读错题了,但暴力还是可写的。写到 6:15 感觉写不完果断放弃,开始检查文件。</p><p>T2 竟然没删 <code>freopen</code> 的注释,幸好看了一眼。</p><p>期望得分 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mo>+</mo><mn>25</mn><mo>+</mo><mn>15</mn><mo>+</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">100+25+15+0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">100</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">25</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">15</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。</p><p>到 6:25 监考说把所有程序都关了停止答题,怎么还一场考试凭空缩减 15min。</p><p>(考试后)</p><p>一出考场就听人说 T1 空间 0.5M,突然想起来开了一堆过程数组没删,感觉很慌。</p><p>见到几个同学问了问都没看到 T1 空间到底多少,在想要是 CCF 这么出题今年不得被骂死。</p><p>在去吃饭的路上看到了原 PDF,听说 T2 是个 CF 原题。</p><p>吃完饭回酒店有了沙东程序,在云斗上测了一遍 T3 保龄,又读了一遍题发现读错了。</p><p>期望得分 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mo>+</mo><mn>25</mn><mo>+</mo><mn>0</mn><mo>+</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">100+25+0+0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">100</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">25</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。</p><p>每逢比赛模拟题都拿不到分,怎么回事呢。感觉要该练一练码力了。</p>
🔲 ☆

主定理

<p>主定理适用于递归复杂度计算。</p><span id="more"></span><h2 id="标准版:">标准版:</h2><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a,b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span></span></span></span> 是常数,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> 为额外附加值函数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> 为递归式 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>a</mi><mi>T</mi><mo stretchy="false">(</mo><mfrac><mi>n</mi><mi>b</mi></mfrac><mo stretchy="false">)</mo><mo>+</mo><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mtext> </mtext><mo stretchy="false">(</mo><mi>a</mi><mo>&gt;</mo><mn>0</mn><mo separator="true">,</mo><mi>b</mi><mo>&gt;</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T(n)=aT(\frac{n}{b})+f(n)\ (a&gt;0,b&gt;1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace"> </span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span>,就有:</p><ol><li>当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="script">O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><mo stretchy="false">(</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi><mo stretchy="false">)</mo><mo>−</mo><mi>ϵ</mi></mrow></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(n)=\mathcal{O}(n^{(\log_ba)-\epsilon})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.138em;vertical-align:-0.25em;"></span><span class="mord mathcal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.888em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mopen mtight">(</span><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span><span class="mclose mtight">)</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight">ϵ</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span> 其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϵ</mi><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">\epsilon&gt;0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">ϵ</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 是一个常数(相当于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi><mo>&gt;</mo><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\log_ba&gt;f(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9386em;vertical-align:-0.2441em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.242em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>),则有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T(n)=\Theta(n^{\log_ba})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>;</li><li>当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(n)=\Theta(n^{\log_ba})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>,则有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></msup><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T(n)=\Theta(n^{\log_ba}\log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>;</li><li>当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Ω</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><mo stretchy="false">(</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi><mo stretchy="false">)</mo><mo>+</mo><mi>ϵ</mi></mrow></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(n)=\Omega(n^{(\log_ba)+\epsilon})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.138em;vertical-align:-0.25em;"></span><span class="mord">Ω</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.888em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mopen mtight">(</span><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span><span class="mclose mtight">)</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">ϵ</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span> 其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϵ</mi><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">\epsilon&gt;0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">ϵ</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 是一个常数(相当于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi><mo>&lt;</mo><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\log_ba&lt;f(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9386em;vertical-align:-0.2441em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.242em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>),且对于一个常数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mo>&lt;</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">c&lt;1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 和所有足够大的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mi>f</mi><mo stretchy="false">(</mo><mfrac><mi>n</mi><mi>b</mi></mfrac><mo stretchy="false">)</mo><mo>≤</mo><mi>c</mi><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">af(\frac{n}{b})\leq cf(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">c</span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>(这一条件在这里可以暂时忽略不看,但在证明时起到至关重要的作用),则有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T(n)=\Theta(f(n))</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">))</span></span></span></span>.</li><li>当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></msup><msup><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>k</mi></msup><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(n)=\Theta(n^{\log_ba}\log^kn)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1834em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9334em;"><span style="top:-3.1473em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> 其中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo>≥</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">k\geq1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8304em;vertical-align:-0.136em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 是一个常数,则有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></msup><msup><mrow><mi>log</mi><mo>⁡</mo></mrow><mrow><mi>k</mi><mo>+</mo><mn>1</mn></mrow></msup><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T(n)=\Theta(n^{\log_ba}\log^{k+1}n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1834em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9334em;"><span style="top:-3.1473em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>;</li></ol><h3 id="举例:">举例:</h3><p>例一:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mn>4</mn><mi>T</mi><mo stretchy="false">(</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo stretchy="false">)</mo><mo>+</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">T(n)=4T(\frac{n}{2})+n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>,此时 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>=</mo><mn>4</mn><mo separator="true">,</mo><mi>b</mi><mo>=</mo><mn>2</mn><mo separator="true">,</mo><mi>ϵ</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">a=4,b=2,\epsilon=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">ϵ</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,那么 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi><mo>=</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mn>2</mn></msub><mn>4</mn><mo>=</mo><mn>2</mn><mo separator="true">,</mo><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="script">O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi><mo>−</mo><mi>ϵ</mi></mrow></msup><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="script">O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><mn>2</mn><mo>−</mo><mn>1</mn></mrow></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\log_ba=\log_24=2,f(n)=\mathcal{O}(n^{\log_ba-\epsilon})=\mathcal{O}(n^{2-1})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9386em;vertical-align:-0.2441em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.242em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9386em;vertical-align:-0.2441em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.207em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord mathcal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight">ϵ</span></span></span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathcal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> 成立,所以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></msup><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T(n)=\Theta(n^{\log_ba})=\Theta(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span></span></span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</p><p>例二:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mn>2</mn><mi>T</mi><mo stretchy="false">(</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo stretchy="false">)</mo><mo>+</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">T(n)=2T(\frac{n}{2})+n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>,此时 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>=</mo><mn>2</mn><mo separator="true">,</mo><mi>b</mi><mo>=</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">a=2,b=2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>,那么 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi><mo>=</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mn>2</mn></msub><mn>2</mn><mo>=</mo><mn>1</mn><mo separator="true">,</mo><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></msup><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\log_ba=\log_22=1,f(n)=\Theta(n^{\log_ba})=\Theta(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9386em;vertical-align:-0.2441em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.242em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9386em;vertical-align:-0.2441em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.207em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span></span></span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> 成立,所以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></msup><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T(n)=\Theta(n^{\log_ba}\log n)=\Theta(n\log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>。</p><p>例三:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mn>4</mn><mi>T</mi><mo stretchy="false">(</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo stretchy="false">)</mo><mo>+</mo><msup><mi>n</mi><mn>3</mn></msup></mrow><annotation encoding="application/x-tex">T(n)=4T(\frac{n}{2})+n^3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span>,此时 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>=</mo><mn>4</mn><mo separator="true">,</mo><mi>b</mi><mo>=</mo><mn>2</mn><mo separator="true">,</mo><mi>ϵ</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">a=4,b=2,\epsilon=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">ϵ</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,那么 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi><mo>=</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mn>2</mn></msub><mn>4</mn><mo>=</mo><mn>2</mn><mo separator="true">,</mo><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Ω</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi><mo>+</mo><mi>ϵ</mi></mrow></msup><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Ω</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><mn>2</mn><mo>+</mo><mn>1</mn></mrow></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\log_ba=\log_24=2,f(n)=\Omega(n^{\log_ba+\epsilon})=\Omega(n^{2+1})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9386em;vertical-align:-0.2441em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.242em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9386em;vertical-align:-0.2441em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.207em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord">Ω</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">ϵ</span></span></span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">Ω</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>,对于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mo>=</mo><mfrac><mn>2</mn><mn>3</mn></mfrac></mrow><annotation encoding="application/x-tex">c=\frac{2}{3}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 和够大的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mo fence="true">(</mo><mi>a</mi><mi>f</mi><mo stretchy="false">(</mo><mfrac><mi>n</mi><mi>b</mi></mfrac><mo stretchy="false">)</mo><mo>=</mo><mn>4</mn><mo stretchy="false">(</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><msup><mo stretchy="false">)</mo><mn>3</mn></msup><mo>=</mo><mn>4</mn><mo stretchy="false">(</mo><mfrac><msup><mi>n</mi><mn>3</mn></msup><mn>8</mn></mfrac><mo stretchy="false">)</mo><mo>=</mo><mfrac><msup><mi>n</mi><mn>3</mn></msup><mn>2</mn></mfrac><mo fence="true">)</mo></mrow><mo>≤</mo><mrow><mo fence="true">(</mo><mi>c</mi><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mfrac><mrow><mn>2</mn><msup><mi>n</mi><mn>3</mn></msup></mrow><mn>3</mn></mfrac><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\left(af(\frac{n}{b})=4(\frac{n}{2})^3=4(\frac{n^3}{8})=\frac{n^3}{2}\right)\leq \left(cf(n)=\frac{2n^3}{3}\right)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.8em;vertical-align:-0.65em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size2">(</span></span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">4</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">4</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0179em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">8</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0179em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size2">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.8em;vertical-align:-0.65em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size2">(</span></span><span class="mord mathnormal">c</span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0179em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size2">)</span></span></span></span></span></span>,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> 成立,所以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>3</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T(n)=\Theta(f(n))=\Theta(n^3)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">))</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</p><p>例四:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mn>2</mn><mi>T</mi><mo stretchy="false">(</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo stretchy="false">)</mo><mo>+</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">T(n)=2T(\frac{n}{2})+n\log n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span></span></span></span>,此时 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>=</mo><mn>2</mn><mo separator="true">,</mo><mi>b</mi><mo>=</mo><mn>2</mn><mo separator="true">,</mo><mi>k</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">a=2,b=2,k=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,那么 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi><mo>=</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mn>2</mn></msub><mn>2</mn><mo>=</mo><mn>1</mn><mo separator="true">,</mo><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></msup><msup><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>k</mi></msup><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\log_ba=\log_22=1,f(n)=\Theta(n^{\log_ba}\log^kn)=\Theta(n\log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9386em;vertical-align:-0.2441em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.242em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9386em;vertical-align:-0.2441em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.207em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1834em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9334em;"><span style="top:-3.1473em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> 成立,所以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></msup><msup><mrow><mi>log</mi><mo>⁡</mo></mrow><mrow><mi>k</mi><mo>+</mo><mn>1</mn></mrow></msup><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>n</mi><msup><mrow><mi>log</mi><mo>⁡</mo></mrow><mn>2</mn></msup><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T(n)=\Theta(n^{\log_ba}\log^{k+1}n)=\Theta(n\log^2 n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1834em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9334em;"><span style="top:-3.1473em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em;">k</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1484em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8984em;"><span style="top:-3.1473em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>。</p><h2 id="简化版">简化版</h2><p>将一个规模为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 的问题,通过分治得到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span> 个规模为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mstyle displaystyle="true" scriptlevel="0"><mfrac><mi>n</mi><mi>b</mi></mfrac></mstyle></mrow><annotation encoding="application/x-tex">\dfrac{n}{b}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 的子问题,每次递归进行的计算为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mi>d</mi></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n^d)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">d</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>,满足如下形式:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>a</mi><mo>⋅</mo><mi>T</mi><mo stretchy="false">(</mo><mfrac><mi>n</mi><mi>b</mi></mfrac><mo stretchy="false">)</mo><mo>+</mo><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mi>d</mi></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T(n)=a\cdot T(\dfrac{n}{b})+O(n^d)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4445em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.1491em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8991em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">d</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></p><p>则 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> 满足:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mi>d</mi></msup><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>d</mi><mo>&gt;</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mi>d</mi></msup><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>d</mi><mo>=</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></msup><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>d</mi><mo>&lt;</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mi>b</mi></msub><mi>a</mi></mrow></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">T(n)=\begin{cases}O(n^d) &amp; d&gt; \log_b a\\O(n^d\log n) &amp; d= \log_b a\\O(n^{\log_b a}) &amp; d&lt;\log_b a\\\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:4.32em;vertical-align:-1.91em;"></span><span class="minner"><span class="mopen"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.35em;"><span style="top:-2.2em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎩</span></span></span><span style="top:-2.192em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.316em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.316em" style="width:0.8889em" viewBox="0 0 888.89 316" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V316 H384z M384 0 H504 V316 H384z"/></svg></span></span><span style="top:-3.15em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎨</span></span></span><span style="top:-4.292em;"><span class="pstrut" style="height:3.15em;"></span><span style="height:0.316em;width:0.8889em;"><svg xmlns="http://www.w3.org/2000/svg" width="0.8889em" height="0.316em" style="width:0.8889em" viewBox="0 0 888.89 316" preserveAspectRatio="xMinYMin"><path d="M384 0 H504 V316 H384z M384 0 H504 V316 H384z"/></svg></span></span><span style="top:-4.6em;"><span class="pstrut" style="height:3.15em;"></span><span class="delimsizinginner delim-size4"><span>⎧</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.85em;"><span></span></span></span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.41em;"><span style="top:-4.41em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">d</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span><span style="top:-2.97em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">d</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span><span style="top:-1.53em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2302em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mathnormal mtight">a</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.91em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:2.41em;"><span style="top:-4.41em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.242em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">a</span></span></span><span style="top:-2.97em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.242em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">a</span></span></span><span style="top:-1.53em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.242em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.91em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><hr><p>例如:</p><p>有递归式:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>O</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mn>2</mn><mi>T</mi><mo stretchy="false">(</mo><mstyle displaystyle="true" scriptlevel="0"><mfrac><mi>n</mi><mn>2</mn></mfrac></mstyle><mo stretchy="false">)</mo><mo>+</mo><mi>n</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mtext>otherwise.</mtext></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">T(n)=\begin{cases}O(1) &amp; n=1\\2T(\dfrac{n}{2})+n &amp; \text{otherwise.}\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:3.2336em;vertical-align:-1.3668em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8668em;"><span style="top:-3.9663em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span><span style="top:-2.4268em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.3668em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8668em;"><span style="top:-3.9663em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span></span></span><span style="top:-2.4268em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord text"><span class="mord">otherwise.</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.3668em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>则有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>=</mo><mn>2</mn><mo separator="true">,</mo><mi>b</mi><mo>=</mo><mn>2</mn><mo separator="true">,</mo><mi>d</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">a=2,b=2,d=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.16em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>∵</mo><mn>1</mn><mo>=</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mn>2</mn></msub><mn>2</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>∴</mo><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>1</mn></msup><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{array}{ll}\because 1=\log_22\\\therefore T(n)=O(n^1\log n)=O(n\log n)\end{array}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.4em;vertical-align:-0.95em;"></span><span class="mord"><span class="mtable"><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.45em;"><span style="top:-3.61em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mrel amsrm">∵</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.207em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mrel amsrm">∴</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.95em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span></span></span></span></span></span></span></p><hr><p>另一例子:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>O</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mn>2</mn><mi>T</mi><mo stretchy="false">(</mo><mstyle displaystyle="true" scriptlevel="0"><mfrac><mi>n</mi><mn>2</mn></mfrac></mstyle><mo stretchy="false">)</mo><mo>+</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mtext>otherwise.</mtext></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">T(n)=\begin{cases}O(1) &amp; n=1\\2T(\dfrac{n}{2})+1 &amp; \text{otherwise.}\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:3.2336em;vertical-align:-1.3668em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8668em;"><span style="top:-3.9663em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span><span style="top:-2.4268em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.3668em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8668em;"><span style="top:-3.9663em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span></span></span><span style="top:-2.4268em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord text"><span class="mord">otherwise.</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.3668em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>则有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>=</mo><mn>2</mn><mo separator="true">,</mo><mi>b</mi><mo>=</mo><mn>2</mn><mo separator="true">,</mo><mi>d</mi><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a=2,b=2,d=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.16em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>∵</mo><mn>0</mn><mo>&lt;</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mn>2</mn></msub><mn>2</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>∴</mo><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mrow><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mn>2</mn></msub><mn>2</mn></mrow></msup><mo stretchy="false">)</mo><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{array}{ll}\because 0&lt;\log_22\\\therefore T(n)=O(n^{\log_2 2})=O(n)\end{array}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.4091em;vertical-align:-0.9546em;"></span><span class="mord"><span class="mtable"><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4546em;"><span style="top:-3.6146em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mrel amsrm">∵</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.207em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span></span></span><span style="top:-2.4054em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mrel amsrm">∴</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1944em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mspace mtight" style="margin-right:0.1952em;"></span><span class="mord mtight">2</span></span></span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.9546em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span></span></span></span></span></span></span></p><hr><p>例三:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>O</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mn>2</mn><mi>T</mi><mo stretchy="false">(</mo><mstyle displaystyle="true" scriptlevel="0"><mfrac><mi>n</mi><mn>2</mn></mfrac></mstyle><mo stretchy="false">)</mo><mo>+</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mtext>otherwise.</mtext></mstyle></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">T(n)=\begin{cases}O(1) &amp; n=1\\2T(\dfrac{n}{2})+n\log n &amp; \text{otherwise.}\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:3.2336em;vertical-align:-1.3668em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8668em;"><span style="top:-3.9663em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span><span style="top:-2.4268em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.3668em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.8668em;"><span style="top:-3.9663em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span></span></span><span style="top:-2.4268em;"><span class="pstrut" style="height:3.1076em;"></span><span class="mord"><span class="mord text"><span class="mord">otherwise.</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.3668em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>则有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>=</mo><mn>2</mn><mo separator="true">,</mo><mi>b</mi><mo>=</mo><mn>2</mn><mo separator="true">,</mo><mi>d</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">a=2,b=2,d=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.16em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>∵</mo><mn>1</mn><mo>=</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mn>2</mn></msub><mn>2</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>∴</mo><mi>T</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>1</mn></msup><mi>log</mi><mo>⁡</mo><mi>n</mi><mo>⋅</mo><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><msup><mrow><mi>log</mi><mo>⁡</mo></mrow><mn>2</mn></msup><mi>n</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{array}{ll}\because 1=\log_22\\\therefore T(n)=O(n^1\log n\cdot \log n)=O(n\log^2 n)\end{array}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.4584em;vertical-align:-0.9792em;"></span><span class="mord"><span class="mtable"><span class="arraycolsep" style="width:0.5em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4792em;"><span style="top:-3.6392em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mrel amsrm">∵</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.207em;"><span style="top:-2.4559em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2441em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span></span></span><span style="top:-2.3808em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mrel amsrm">∴</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop"><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8984em;"><span style="top:-3.1473em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.9792em;"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em;"></span></span></span></span></span></span></span></p>
☑️ ☆

CF1695C Zero Path 题解

<p><a href="https://www.luogu.com.cn/problem/CF1695C">Problem Link</a></p><h2 id="Explanation">Explanation</h2><p>给定一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>×</mo><mi>m</mi></mrow><annotation encoding="application/x-tex">n \times m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span> 的格点图,每个格子的值为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">1</span></span></span></span> 或 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。问题要求判断是否存在一条从起点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo separator="true">,</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(1, 1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span> 到终点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>n</mi><mo separator="true">,</mo><mi>m</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(n, m)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">m</span><span class="mclose">)</span></span></span></span> 的路径,使得路径上经过的格点值的和为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。路径只能向右或向下移动。</p><h2 id="Solution">Solution</h2><p>先上结论。设权值和最大的路径权值为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{max}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,最小权值为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>m</mi><mi>i</mi><mi>n</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{min}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">min</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,则如果满足 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>+</mo><mi>m</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">n+m-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">m</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 是偶数且 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>m</mi><mi>i</mi><mi>n</mi></mrow></msub><mo>≤</mo><mn>0</mn><mo>≤</mo><msub><mi>f</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{min}\leq 0 \leq f_{max}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">min</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,那么问题有解。</p><p>简单观察样例会发现路径的长度只能是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>+</mo><mi>m</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">n+m-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">m</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,又因为权值只能是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 或 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">1</span></span></span></span>,则如果最终有解,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">1</span></span></span></span> 的数量应当相等。所以如果路径长度是奇数,必然要输出 <code>NO</code>。</p><p>接下来要思考的是路径是怎么从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>m</mi><mi>i</mi><mi>n</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{min}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">min</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 变化到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{max}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 的。我们会发现可以通过改变路径转向处的访问位置来变化权值和,一次变化将可能会使权值和改变 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>+</mo><mn>2</mn><mo separator="true">,</mo><mo>−</mo><mn>2</mn><mo separator="true">,</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">+2,-2,0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">+</span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">−</span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">0</span></span></span></span>。</p><p>以样例为例,第一次转向时选择 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo separator="true">,</mo><mn>1</mn><mo stretchy="false">)</mo><mo>→</mo><mo stretchy="false">(</mo><mn>2</mn><mo separator="true">,</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(1,1)\to (2,1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span> 与 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo separator="true">,</mo><mn>1</mn><mo stretchy="false">)</mo><mo>→</mo><mo stretchy="false">(</mo><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(1,1)\to (1,2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mclose">)</span></span></span></span> 不会对结果造成影响。而第二次转向时,选择 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo stretchy="false">)</mo><mo>→</mo><mo stretchy="false">(</mo><mn>2</mn><mo separator="true">,</mo><mn>2</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(1,2)\to (2,2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mclose">)</span></span></span></span> 会比 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo stretchy="false">)</mo><mo>→</mo><mo stretchy="false">(</mo><mn>1</mn><mo separator="true">,</mo><mn>3</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(1,2)\to (1,3)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">3</span><span class="mclose">)</span></span></span></span> 的权值和多 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span>。</p><p>又因为路径的长度限制了为偶数,也就是说 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">1</span></span></span></span> 的数量要么都是偶数,要么都是奇数。这两种情况都会使得权值和为偶数,也就是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>m</mi><mi>i</mi><mi>n</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{min}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">min</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>f</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{max}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 都是偶数。</p><p>那么就可以看看权值和是怎么从最小值变化为最大值的了。因为我们限定了奇偶性和变化规律,所以其变化序列必将是:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>f</mi><mrow><mi>m</mi><mi>i</mi><mi>n</mi></mrow></msub><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>m</mi><mi>i</mi><mi>n</mi></mrow></msub><mo>+</mo><mn>2</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mn>0</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub><mo>−</mo><mn>2</mn><mo separator="true">,</mo><msub><mi>f</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></mrow><annotation encoding="application/x-tex">f_{min}, f_{min}+2, \dots,0 , \dots, f_{max}-2, f_{max}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">min</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">min</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">ma</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span></p><p>一定会在变化过程中经过权值和为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 的情况,所以结论得证。</p><h2 id="Core-Code">Core Code</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><code class="hljs cpp">T=<span class="hljs-built_in">read</span>();<br><span class="hljs-keyword">while</span>(T--)<br>&#123;<br>n=<span class="hljs-built_in">read</span>();m=<span class="hljs-built_in">read</span>();<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">0</span>;i&lt;=n;i++) minn[i][<span class="hljs-number">0</span>]=INF,maxn[i][<span class="hljs-number">0</span>]=-INF;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">0</span>;i&lt;=m;i++) minn[<span class="hljs-number">0</span>][i]=INF,maxn[<span class="hljs-number">0</span>][i]=-INF;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++)<br>&#123;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">1</span>;j&lt;=m;j++)<br>&#123;<br>a[i][j]=<span class="hljs-built_in">read</span>();<br>&#125;<br>&#125;<br><span class="hljs-keyword">if</span>((n+m<span class="hljs-number">-1</span>)%<span class="hljs-number">2</span>==<span class="hljs-number">1</span>)<br>&#123;<br><span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;NO\n&quot;</span>);<br><span class="hljs-keyword">continue</span>;<br>&#125;<br>minn[<span class="hljs-number">1</span>][<span class="hljs-number">1</span>]=maxn[<span class="hljs-number">1</span>][<span class="hljs-number">1</span>]=a[<span class="hljs-number">1</span>][<span class="hljs-number">1</span>];<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++)<br>&#123;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> j=<span class="hljs-number">1</span>;j&lt;=m;j++)<br>&#123;<br><span class="hljs-keyword">if</span>(i!=<span class="hljs-number">1</span> || j!=<span class="hljs-number">1</span>)<br>&#123;<br>maxn[i][j]=<span class="hljs-built_in">max</span>(maxn[i<span class="hljs-number">-1</span>][j],maxn[i][j<span class="hljs-number">-1</span>])+a[i][j];<br>minn[i][j]=<span class="hljs-built_in">min</span>(minn[i<span class="hljs-number">-1</span>][j],minn[i][j<span class="hljs-number">-1</span>])+a[i][j];<br>&#125;<br>&#125;<br>&#125;<br><span class="hljs-keyword">if</span>(maxn[n][m]&gt;=<span class="hljs-number">0</span> &amp;&amp; minn[n][m]&lt;=<span class="hljs-number">0</span>) <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;YES\n&quot;</span>);<br><span class="hljs-keyword">else</span> <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;NO\n&quot;</span>);<br>&#125;<br></code></pre></td></tr></table></figure>
☑️ ☆

字符串算法全家桶 学习笔记

<p>由字符串全家桶入门到字符串全家桶直僵僵地镶嵌在门框里。</p><span id="more"></span><h1 id="哈希">哈希</h1><blockquote><p>Hash 翻译为散列表或杂凑函数,音译为哈希,也称 Hash 表。</p><p>散列表一般由 Hash 函数和链表结构共同实现完成。</p><p>——我不知道来源。</p></blockquote><blockquote><p>哈希目的是把一些数据范围很大的数据(整数)或者描述保存比较复杂(字符串)利用 Hash 函数把信息映射到一个范围比较小容易维护的范围内(有点类似离散化),由于映射后的值域范围变小,有可能造成不同的原有不同信息映射为相同的值,造成冲突(映射中的多对一,一对一最理想但是有时候比较困难)。当然没有冲突是最理想的,但是关键在于 Hash 函数的选择,我们的目标是尽量减少冲突或没有冲突。</p><p>——我也不知道来源。</p></blockquote><h2 id="引入">引入</h2><p>一个简单的例子,我们要查找一个集合内的所有元素,朴素的做法是一个一个遍历,而我们通过按照每个数的个位数字分类保存,再使用链表查找,效率会更高。</p><p><img src="http://img.makerlife.top/data/202307111950657.png" alt="哈希表引入"></p><p>此时,按照个位数分类保存就是一个哈希函数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Hash</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mn>10</mn></mrow><annotation encoding="application/x-tex">\operatorname{Hash}(x)=x\bmod 10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span class="mord mathrm">Hash</span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span></span></span></span>。但是我们会发现,这种方式会发现多个数的哈希值相同,即存在很多冲突。如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Hash</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mn>11</mn></mrow><annotation encoding="application/x-tex">\operatorname{Hash}(x)=x\bmod 11</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span class="mord mathrm">Hash</span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">11</span></span></span></span>,就会发现冲突少了很多。</p><h2 id="哈希冲突的解决">哈希冲突的解决</h2><p>解决哈希冲突两种常见的方法是<strong>闭散列</strong>和<strong>开散列</strong>。</p><h3 id="闭散列">闭散列</h3><blockquote><p>也叫开放地址法,当发生哈希冲突时,如果哈希表未被装满,说明在哈希表中必然还有空位置(因为定义哈希表时大小肯定不能少于原始数据的个数),那么可以把 key 存放到冲突位置中的“下一个” 空位置中去。</p><p>——我还不知道来源。</p></blockquote><p>寻找下一个空位置的方法一般有两种,即线性探测和二次探测。</p><h4 id="线性探测">线性探测</h4><p>从哈希函数确定的位置依次向后移动 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1, 2, \dots , n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span></span></span></span> 个位置,直到找到空位置为止。</p><h4 id="二次探测">二次探测</h4><p>从哈希函数确定的位置依次向后移动 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>1</mn><mn>2</mn></msup><mo separator="true">,</mo><mo>−</mo><msup><mn>1</mn><mn>2</mn></msup><mo separator="true">,</mo><msup><mn>2</mn><mn>2</mn></msup><mo separator="true">,</mo><mo>−</mo><msup><mn>2</mn><mn>2</mn></msup><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1^2, -1^2, 2^2, -2^2, \dots , n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0085em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">−</span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">−</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">n</span></span></span></span> 个位置,直到找到空位置为止。</p><p><s>当然这些不是重点,重点在后面。</s></p><h3 id="开散列">开散列</h3><blockquote><p>开散列法又叫链地址法(开链法),首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中。这种方法类似图的邻接点存储,常用数组模拟。目前在实际应用中都是用这种方法。</p><p>——The Same…</p></blockquote><p>其实说人话就是通过像上面 <a href="#%E5%BC%95%E5%85%A5">引入</a> 部分的图一样,通过对于每个 Hash 冲突的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>Hash</mtext></mrow><annotation encoding="application/x-tex">\text{Hash}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord text"><span class="mord">Hash</span></span></span></span></span> 值建立链表。</p><p>如 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>=</mo><mo stretchy="false">{</mo><mn>1</mn><mo separator="true">,</mo><mn>5</mn><mo separator="true">,</mo><mn>11</mn><mo separator="true">,</mo><mn>15</mn><mo separator="true">,</mo><mn>20</mn><mo separator="true">,</mo><mn>21</mn><mo separator="true">,</mo><mn>25</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">A=\{1,5,11,15,20,21,25\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">11</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">15</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">20</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">21</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">25</span><span class="mclose">}</span></span></span></span>,哈希函数为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">hash</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi><mtext> </mtext><mo lspace="0.22em" rspace="0.22em"><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow></mo><mtext> </mtext><mn>10</mn></mrow><annotation encoding="application/x-tex">\operatorname{hash}(x)=x\bmod 10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span class="mord mathrm">hash</span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.0556em;"></span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">10</span></span></span></span>,则哈希表可用下图表示:</p><p><img src="http://img.makerlife.top/data/202307112010431.png" alt="Hash 表的表示"></p><h2 id="程序实现">程序实现</h2><h3 id="哈希表定义">哈希表定义</h3><p>哈希表通常使用结构体定义,要分别记录<strong>哈希值</strong>、<strong>每个哈希值对应的数的个数</strong>和<strong>链表中下一个的位置</strong>,与邻接表(链式前向星)基本一致。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-type">const</span> <span class="hljs-type">int</span> MOD=<span class="hljs-number">1e6</span><span class="hljs-number">+3</span>;<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">node</span>&#123;<br><span class="hljs-type">int</span> val;<br><span class="hljs-type">int</span> siz;<br><span class="hljs-type">int</span> nxt;<br>&#125;;<br>node e[N];<br><span class="hljs-type">int</span> h[MOD];<br></code></pre></td></tr></table></figure><hr><p>哈希的程序主要包含如下三个板块:哈希值计算、插入一个值、查找一个值。</p><p>哈希值的计算即为正常的取模运算。</p><h3 id="插入函数">插入函数</h3><p>也与邻接表加边操作基本一致,不同之处在于如果碰到哈希值相同,应该使 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>i</mi><msub><mi>z</mi><mi>i</mi></msub><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">siz_i+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">i</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.04398em;">z</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.044em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">Insert</span><span class="hljs-params">(<span class="hljs-type">int</span> x)</span></span><br><span class="hljs-function"></span>&#123;<br><span class="hljs-type">int</span> w=x%MOD;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=h[u];i;i=e[i].nxt)<br> &#123;<br> <span class="hljs-keyword">if</span>(e[i].val==x)<br> &#123;<br> e[i].siz++;<br> <span class="hljs-keyword">return</span>;<br> &#125;<br>&#125;<br>e[++tot].val=x;e[tot].siz=<span class="hljs-number">1</span>;<br>e[tot].nxt=h[u];h[u]=tot;<br>&#125;<br></code></pre></td></tr></table></figure><h3 id="查找函数">查找函数</h3><p>遍历链表,当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi><mi>a</mi><msub><mi>l</mi><mi>i</mi></msub><mo>=</mo><mi>x</mi></mrow><annotation encoding="application/x-tex">val_i=x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> 时,直接返回元素个数即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>i</mi><msub><mi>z</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">siz_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8095em;vertical-align:-0.15em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">i</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.04398em;">z</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.044em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,否则返回 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">int</span> <span class="hljs-title">Find</span><span class="hljs-params">(<span class="hljs-type">int</span> x)</span></span><br><span class="hljs-function"></span>&#123;<br><span class="hljs-type">int</span> w=x%MOD;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=h[u];i;i=e[i].nxt)<br> &#123;<br> <span class="hljs-keyword">if</span>(e[i].val==x) <span class="hljs-keyword">return</span> e[i].siz;<br> &#125;<br><span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h3 id="例题">例题</h3><p>已知方程如下:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>a</mi><mn>1</mn></msub><msub><mi>x</mi><mn>1</mn></msub><mo>−</mo><msub><mi>a</mi><mn>2</mn></msub><msub><mi>x</mi><mn>2</mn></msub><mo>+</mo><msub><mi>a</mi><mn>3</mn></msub><msub><mi>x</mi><mn>3</mn></msub><mo>−</mo><msub><mi>a</mi><mn>4</mn></msub><msub><mi>x</mi><mn>4</mn></msub><mo>+</mo><msub><mi>a</mi><mn>5</mn></msub><msub><mi>x</mi><mn>5</mn></msub><mo>−</mo><msub><mi>a</mi><mn>6</mn></msub><msub><mi>x</mi><mn>6</mn></msub><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a_1x_1-a_2x_2+a_3x_3-a_4x_4+a_5x_5-a_6x_6=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">6</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">6</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></span></p><p>其中:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>x</mi><mn>2</mn></msub><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>x</mi><mn>6</mn></msub></mrow><annotation encoding="application/x-tex">x_1, x_2,\dots , x_6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">6</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 是未知数,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>a</mi><mn>2</mn></msub><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>a</mi><mn>6</mn></msub></mrow><annotation encoding="application/x-tex">a_1, a_2,\dots , a_6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">6</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 是系数,且方程中的所有数均为正整数。</p><p>求这个方程的正整数解的个数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span>。</p><p>对于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">100\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8056em;vertical-align:-0.0556em;"></span><span class="mord">100%</span></span></span></span> 的数据,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><msub><mi>x</mi><mi>i</mi></msub><mo>≤</mo><mi>m</mi><mo>≤</mo><mn>100</mn><mo separator="true">,</mo><mn>1</mn><mo>≤</mo><msub><mi>a</mi><mi>i</mi></msub><mo>≤</mo><msup><mn>10</mn><mn>6</mn></msup><mo separator="true">,</mo><mi>s</mi><mo>≤</mo><msup><mn>10</mn><mn>15</mn></msup></mrow><annotation encoding="application/x-tex">1\leq x_i\leq m\leq 100, 1\leq a_i\leq 10^6, s\leq 10^{15}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7804em;vertical-align:-0.136em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.786em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em;"></span><span class="mord mathnormal">m</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">100</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.786em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0085em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">6</span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">s</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">15</span></span></span></span></span></span></span></span></span></span></span></span>。</p><h4 id="思路">思路</h4><p>考虑哈希。</p><p>将原式移项得:</p><p class="katex-block "><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>a</mi><mn>1</mn></msub><msub><mi>x</mi><mn>1</mn></msub><mo>+</mo><msub><mi>a</mi><mn>3</mn></msub><msub><mi>x</mi><mn>3</mn></msub><mo>+</mo><msub><mi>a</mi><mn>5</mn></msub><msub><mi>x</mi><mn>5</mn></msub><mo>=</mo><msub><mi>a</mi><mn>2</mn></msub><msub><mi>x</mi><mn>2</mn></msub><mo>+</mo><msub><mi>a</mi><mn>4</mn></msub><msub><mi>x</mi><mn>4</mn></msub><mo>+</mo><msub><mi>a</mi><mn>6</mn></msub><msub><mi>x</mi><mn>6</mn></msub></mrow><annotation encoding="application/x-tex">a_1x_1+a_3x_3+a_5x_5=a_2x_2+a_4x_4+a_6x_6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">6</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">6</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span></p><p>通过枚举左式所有可能的情况,并将左式的结果记录在一个哈希表中,然后枚举右式的所有可能情况,查找哈希表中是否有这种情况的结果。</p><p>时间复杂度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>m</mi><mn>3</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(m^3)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>。</p><h4 id="代码">代码</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">define</span> mod 1000007</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> int ll</span><br><span class="hljs-type">const</span> <span class="hljs-type">int</span> N=<span class="hljs-number">1e6</span><span class="hljs-number">+10</span>;<br><span class="hljs-type">int</span> m;<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">node</span><br>&#123;<br><span class="hljs-type">int</span> val,siz,nxt;<br>&#125;e[N];<br><span class="hljs-type">int</span> h[N],tot=<span class="hljs-number">0</span>;<br><span class="hljs-type">int</span> ans=<span class="hljs-number">0</span>;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">Hash</span><span class="hljs-params">(<span class="hljs-type">int</span> x)</span></span><br><span class="hljs-function"></span>&#123;<br><span class="hljs-keyword">return</span> x%mod;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">Insert</span><span class="hljs-params">(<span class="hljs-type">int</span> x)</span></span><br><span class="hljs-function"></span>&#123;<br><span class="hljs-type">int</span> w=<span class="hljs-built_in">Hash</span>(x);<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=h[w];i;i=e[i].nxt)<br>&#123;<br><span class="hljs-keyword">if</span>(e[i].val==x)<br>&#123;<br>e[i].siz++;<br><span class="hljs-keyword">return</span> ;<br>&#125;<br>&#125;<br>e[++tot].val=x;e[tot].siz++;<br>e[tot].nxt=h[w];h[w]=tot;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">Find</span><span class="hljs-params">(<span class="hljs-type">int</span> x)</span></span><br><span class="hljs-function"></span>&#123;<br><span class="hljs-type">int</span> w=<span class="hljs-built_in">Hash</span>(x);<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=h[w];i;i=e[i].nxt)<br>&#123;<br><span class="hljs-keyword">if</span>(e[i].val==x) <span class="hljs-keyword">return</span> e[i].siz;<br>&#125;<br><span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">signed</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span><br><span class="hljs-function"></span>&#123;<br>m=<span class="hljs-built_in">read</span>();<br><span class="hljs-type">int</span> a1=<span class="hljs-built_in">read</span>(),a2=<span class="hljs-built_in">read</span>(),a3=<span class="hljs-built_in">read</span>(),a4=<span class="hljs-built_in">read</span>(),a5=<span class="hljs-built_in">read</span>(),a6=<span class="hljs-built_in">read</span>();<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> x1=<span class="hljs-number">1</span>;x1&lt;=m;x1++)<br>&#123;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> x3=<span class="hljs-number">1</span>;x3&lt;=m;x3++)<br>&#123;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> x5=<span class="hljs-number">1</span>;x5&lt;=m;x5++)<br>&#123;<br><span class="hljs-built_in">Insert</span>(a1*x1+a3*x3+a5*x5);<br>&#125;<br>&#125;<br>&#125;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> x2=<span class="hljs-number">1</span>;x2&lt;=m;x2++)<br>&#123;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> x4=<span class="hljs-number">1</span>;x4&lt;=m;x4++)<br>&#123;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> x6=<span class="hljs-number">1</span>;x6&lt;=m;x6++)<br>&#123;<br>ans+=<span class="hljs-built_in">Find</span>(a2*x2+a4*x4+a6*x6);<br>&#125;<br>&#125;<br>&#125;<br><span class="hljs-built_in">write</span>(ans);el;<br><span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><hr><p>还有一道板子 <a href="https://www.luogu.com.cn/problem/P3370">P3370 【模板】字符串哈希</a><s>,太板了就不写了</s>。</p><h2 id="字符串哈希">字符串哈希</h2><p>未完待续……</p><h1 id="trie-树">Trie 树</h1><p>未完待续……</p><h1 id="kmp">KMP</h1><blockquote><p>KMP 算法是一种改进的字符串匹配算法,由 D.E.Knuth,J.H.Morris 和 V.R.Pratt 提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称 KMP 算法)。KMP 算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。</p><p>——Baidu Baike。</p></blockquote><h2 id="朴素的字符串匹配">朴素的字符串匹配</h2><p>设模式串 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span></span></span></span> 长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>,主串 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span> 长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span>。</p><p>最暴力的方法显然是遍历 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span>,逐位匹配 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span></span></span></span> 的前缀,当前缀长度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 时,即为成功匹配。</p><p>复杂度显然是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>m</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(nm)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord mathnormal">nm</span><span class="mclose">)</span></span></span></span>。</p><h2 id="KMP">KMP</h2><h3 id="算法思想">算法思想</h3><p>考虑这样一组匹配:</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs">模式串:abbc<br>文本串:abbabbc<br></code></pre></td></tr></table></figure><p>前四位均匹配成功,匹配第五位时发现失配。这时,我们直接将 <strong>模式串</strong> 向右移动三位,如下所示:</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs">模式串: abbc<br>文本串:abbabbc<br></code></pre></td></tr></table></figure><p>此时模式串完全匹配成功。</p><p>这种算法一定是快速的,所以算法关键部分就是移动位数的计算。</p><h3 id="Border-计算部分">Border 计算部分</h3><p>Border 在 KMP 算法的定义是:字符串 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span> 的一个<strong>非 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span> 本身</strong>的子串 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span></span></span></span>,满足 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span></span></span></span> 既是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span> 的前缀,又是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span> 的后缀的 <strong><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span></span></span></span> 的最大长度</strong>。</p><p>设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 为主串 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span> 的指针,从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 开始遍历;<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 为此时前后缀的长度。</p><p>先手算模拟大致过程,以主串为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext mathvariant="monospace">bbacbbb</mtext></mrow><annotation encoding="application/x-tex">\texttt{bbacbbb}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord text"><span class="mord texttt">bbacbbb</span></span></span></span></span> 为例:</p><table><thead><tr><th style="text-align:center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span></th><th style="text-align:center">子串</th><th style="text-align:center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span></th></tr></thead><tbody><tr><td style="text-align:center">1</td><td style="text-align:center">b</td><td style="text-align:center">0</td></tr><tr><td style="text-align:center">2</td><td style="text-align:center"><strong>b</strong> <strong>b</strong></td><td style="text-align:center">1</td></tr><tr><td style="text-align:center">3</td><td style="text-align:center">bba</td><td style="text-align:center">0</td></tr><tr><td style="text-align:center">4</td><td style="text-align:center">bbac</td><td style="text-align:center">0</td></tr><tr><td style="text-align:center">5</td><td style="text-align:center"><strong>b</strong> bac <strong>b</strong></td><td style="text-align:center">1</td></tr><tr><td style="text-align:center">6</td><td style="text-align:center"><strong>bb</strong> ac <strong>bb</strong></td><td style="text-align:center">2</td></tr><tr><td style="text-align:center">7</td><td style="text-align:center"><strong>bb</strong> acb <strong>bb</strong></td><td style="text-align:center">2</td></tr></tbody></table><p>Border 数组即为所有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span>。同时,不难发现,<strong><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 是后缀最后一位的下标(如果有),<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 是前缀最后一位的下标</strong>。</p><p>接下来就是 Border 数组应该如何计算的问题:</p><p>我们以 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>=</mo><mn>5</mn></mrow><annotation encoding="application/x-tex">i=5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span> 为例,此时子串末尾增加了一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext mathvariant="monospace">b</mtext></mrow><annotation encoding="application/x-tex">\texttt{b}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord text"><span class="mord texttt">b</span></span></span></span></span>,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mi>i</mi></msub><mo>=</mo><msub><mi>s</mi><mn>5</mn></msub><mo>=</mo><mi>b</mi><mo separator="true">,</mo><msub><mi>s</mi><mrow><mi>j</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>=</mo><msub><mi>s</mi><mn>1</mn></msub><mo>=</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">s_i=s_5=b, s_{j+1}=s_1=b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord mathnormal">b</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span>,即此时 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mi>i</mi></msub><mo>=</mo><msub><mi>s</mi><mrow><mi>j</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">s_i=s_{j+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span>。<strong>得出结论当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mi>i</mi></msub><mo>=</mo><msub><mi>s</mi><mrow><mi>j</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">s_{i}=s_{j+1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7167em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span><span class="mbin mtight">+</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 时,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi><mi>o</mi><mi>r</mi><mi>d</mi><mi>e</mi><msub><mi>r</mi><mi>i</mi></msub><mo>=</mo><mi>j</mi></mrow><annotation encoding="application/x-tex">border_i=j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.02778em;">or</span><span class="mord mathnormal">d</span><span class="mord mathnormal">e</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span>,同时 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">j+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></strong>;</p><p>当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>=</mo><mn>7</mn></mrow><annotation encoding="application/x-tex">i=7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span> 时,子串末尾增加了一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext mathvariant="monospace">b</mtext></mrow><annotation encoding="application/x-tex">\texttt{b}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord text"><span class="mord texttt">b</span></span></span></span></span>,根据上文的算法,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext mathvariant="monospace">bba</mtext></mrow><annotation encoding="application/x-tex">\texttt{bba}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord text"><span class="mord texttt">bba</span></span></span></span></span> 与 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext mathvariant="monospace">bbb</mtext></mrow><annotation encoding="application/x-tex">\texttt{bbb}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6111em;"></span><span class="mord text"><span class="mord texttt">bbb</span></span></span></span></span> 匹配失败。但此时 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 不能直接设为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>,因为整个字串的后缀还可能匹配其前缀(也就是<strong>后缀的后缀</strong>可以匹配到对应前缀)。</p><p>有一个性质 <strong>如果一个模式串的后缀匹配了一个前缀,那么这个后缀的后缀一定在这个前缀中出现了,因此对于某个等于后缀的前缀,它就出现在了这个前缀中。</strong> 即 Border 的 Border 还是 Border。</p><p>通过这个性质,我们可以发现,在这种情况下,我们可以通过将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 跳到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi><mi>o</mi><mi>r</mi><mi>d</mi><mi>e</mi><msub><mi>r</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">border_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.02778em;">or</span><span class="mord mathnormal">d</span><span class="mord mathnormal">e</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 上,继续向后查找。</p><p>这部分的代码,本质上是通过 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span> 串自己和自己匹配实现的:</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">2</span>,j=<span class="hljs-number">0</span>;i&lt;=len2;i++)<br>&#123;<br><span class="hljs-keyword">while</span>(j!=<span class="hljs-number">0</span> &amp;&amp; s2[i]!=s2[j<span class="hljs-number">+1</span>])<br>&#123;<br>j=border[j];<br>&#125;<br><span class="hljs-keyword">if</span>(s2[i]==s2[j<span class="hljs-number">+1</span>]) j++;<br>border[i]=j;<br>&#125;<br></code></pre></td></tr></table></figure><h3 id="匹配部分">匹配部分</h3><p>匹配的部分与 Border 计算一样,只不过 Border 是匹配 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span> 的前缀和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span> 后缀,而匹配则是比较 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">t</span></span></span></span>。</p><p>代码:</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>,j=<span class="hljs-number">0</span>;i&lt;=len1;i++)<br>&#123;<br><span class="hljs-keyword">while</span>(j!=<span class="hljs-number">0</span> &amp;&amp; (j==len2 || s1[i]!=s2[j<span class="hljs-number">+1</span>]))<br>&#123;<br>j=border[j];<br>&#125;<br><span class="hljs-keyword">if</span>(s1[i]==s2[j<span class="hljs-number">+1</span>]) j++;<br><span class="hljs-keyword">if</span>(j==len2) ans[++tot]=i-len2<span class="hljs-number">+1</span>; <br>&#125;<br></code></pre></td></tr></table></figure><h3 id="板子">板子</h3><p><a href="https://www.luogu.com.cn/problem/P3375">P3375 【模板】KMP 字符串匹配</a></p><p>模板题,上文两部分结合</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-type">const</span> <span class="hljs-type">int</span> N=<span class="hljs-number">1e6</span><span class="hljs-number">+10</span>;<br>string s1,s2;<br><span class="hljs-type">int</span> border[N],ans[N];<br><span class="hljs-type">int</span> tot=<span class="hljs-number">0</span>;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span><br><span class="hljs-function"></span>&#123;<br><span class="hljs-comment">//freopen(&quot;.in&quot;,&quot;r&quot;,stdin);</span><br><span class="hljs-comment">//freopen(&quot;.out&quot;,&quot;w&quot;,stdout);</span><br>cin&gt;&gt;s1&gt;&gt;s2;<br><span class="hljs-type">int</span> len1=s<span class="hljs-number">1.</span><span class="hljs-built_in">size</span>(),len2=s<span class="hljs-number">2.</span><span class="hljs-built_in">size</span>();<br>s1=<span class="hljs-string">&quot; &quot;</span>+s1;<br>s2=<span class="hljs-string">&quot; &quot;</span>+s2;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">2</span>,j=<span class="hljs-number">0</span>;i&lt;=len2;i++)<br>&#123;<br><span class="hljs-keyword">while</span>(j!=<span class="hljs-number">0</span> &amp;&amp; s2[i]!=s2[j<span class="hljs-number">+1</span>])<br>&#123;<br>j=border[j];<br>&#125;<br><span class="hljs-keyword">if</span>(s2[i]==s2[j<span class="hljs-number">+1</span>]) j++;<br>border[i]=j;<br>&#125;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>,j=<span class="hljs-number">0</span>;i&lt;=len1;i++)<br>&#123;<br><span class="hljs-keyword">while</span>(j!=<span class="hljs-number">0</span> &amp;&amp; (j==len2 || s1[i]!=s2[j<span class="hljs-number">+1</span>]))<br>&#123;<br>j=border[j];<br>&#125;<br><span class="hljs-keyword">if</span>(s1[i]==s2[j<span class="hljs-number">+1</span>]) j++;<br><span class="hljs-keyword">if</span>(j==len2) ans[++tot]=i-len2<span class="hljs-number">+1</span>; <br>&#125;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=tot;i++)<br>&#123;<br><span class="hljs-built_in">write</span>(ans[i]);el; <br>&#125;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=len2;i++)<br>&#123;<br><span class="hljs-built_in">write</span>(border[i]);sp;<br>&#125;<br><span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h3 id="时间复杂度">时间复杂度</h3><blockquote><p>匹配时当前匹配位置每次增加 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,也就是说一共的增加量就到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>+</mo><mi>m</mi></mrow><annotation encoding="application/x-tex">n+m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">m</span></span></span></span>,跳 Border 的减少也只能减少这么多,所以就是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>m</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n+m)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">m</span><span class="mclose">)</span></span></span></span>。</p><p>——zrz</p></blockquote><h3 id="参考链接">参考链接</h3><p><a href="https://www.bilibili.com/video/BV1hW411a7ys">KMP字符串匹配算法 2 - Bilibili</a></p><h1 id="ac-自动机">AC 自动机</h1><p><s>是的它不能让你直接 AC 但能让你自动 WA。</s></p><h2 id="前置知识">前置知识</h2><ol><li>[Trie 字典树](#Trie 树)</li><li><a href="#KMP">KMP</a></li></ol><h2 id="算法思想-2">算法思想</h2><p>AC 自动机其实可以理解成在字典树上运用 KMP 的思想进行字符串匹配。</p><p>KMP 是求单字符串的匹配,而 AC 自动机是求多字符串匹配一个字符串。</p><p>暴力的方法显然是有多少个字符串跑多少遍 KMP,但明显效率极低。而 AC 自动机,则是将所有的模式串构建成一颗 Trie 树。</p><p>比如模式串为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi><mo>=</mo><mo stretchy="false">{</mo><mtext mathvariant="monospace">he</mtext><mo separator="true">,</mo><mtext mathvariant="monospace">she</mtext><mo separator="true">,</mo><mtext mathvariant="monospace">hers</mtext><mo separator="true">,</mo><mtext mathvariant="monospace">his</mtext><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">S=\{\texttt{he},\texttt{she},\texttt{hers},\texttt{his}\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord text"><span class="mord texttt">he</span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord text"><span class="mord texttt">she</span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord text"><span class="mord texttt">hers</span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord text"><span class="mord texttt">his</span></span><span class="mclose">}</span></span></span></span>,则可以构建如下图的一棵 Trie 树。</p><p><img src="http://img.makerlife.top/data/202307132005127.png" alt="Trie"></p><h2 id="Fail-指针">Fail 指针</h2><p>如果一个模式串的后缀是任何一个模式串的前缀,则将该后缀的 Fail 指针指向该前缀。</p><p>形式化的,即若 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mi>a</mi><mi>i</mi><msub><mi>l</mi><mi>i</mi></msub><mo>=</mo><mi>j</mi></mrow><annotation encoding="application/x-tex">fail_i=j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mord mathnormal">ai</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span>,则 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>∼</mo><mi>j</mi></mrow><annotation encoding="application/x-tex">1\sim j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 节点的字符串是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>∼</mo><mi>i</mi></mrow><annotation encoding="application/x-tex">1\sim i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 节点的字符串的一个后缀。</p><p>也就是说,Fail 指针是指 <strong>最长的</strong>/<strong>可以在树上找到的</strong>/<strong>当前字符串的后缀</strong>/<strong>的末尾</strong>/<strong>的下标</strong>。例如,在上图中,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mi>a</mi><mi>i</mi><msub><mi>l</mi><mn>9</mn></msub><mo>=</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">fail_9=4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mord mathnormal">ai</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">9</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span>。</p><p>其实看起来与 KMP 中 Border 类似,只不过 AC 自动机是查找所有模式串中的 Border。</p><h3 id="构建-Fail">构建 Fail</h3><p>接下来看如何求 Fail。</p><p>首先可以确定的一点是,所有第二层的节点的 Fail 一定指向 root,因为没有长度比 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 还小的字符串。</p><p>另外,如果一个点的父亲的 Fail 指针(即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mi>a</mi><mi>f</mi><mi>a</mi><mi>i</mi><mi>l</mi></mrow><annotation encoding="application/x-tex">fafail</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mord mathnormal">ai</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span></span></span></span>)指向的节点有与当前点相同的字符 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>,则当前点的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mi>a</mi><mi>i</mi><mi>l</mi></mrow><annotation encoding="application/x-tex">fail</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mord mathnormal">ai</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span></span></span></span> 直接指向 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>,因为每次求出的 Fail 都是最长的,那最长的 Fail 加一个节点也是最长的。</p><p>而上文就表现出来一个问题,就是当求 Fail 时,需要知道当前节点父亲的 Fail,也就是说,我们需要 BFS 层次遍历来求 Fail。</p><p>我们可以建立一个 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 号节点,将其所有儿子指向 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>,然后将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 的 Fail 指向 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">build_fail</span><span class="hljs-params">()</span></span><br><span class="hljs-function"></span>&#123;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">0</span>;i&lt;<span class="hljs-number">26</span>;i++) t[<span class="hljs-number">0</span>].c[i]=<span class="hljs-number">1</span>;<br>queue&lt;<span class="hljs-type">int</span>&gt; q;<br>q.<span class="hljs-built_in">push</span>(<span class="hljs-number">1</span>);<br>t[<span class="hljs-number">1</span>].fail=<span class="hljs-number">0</span>;<br><span class="hljs-keyword">while</span>(!q.<span class="hljs-built_in">empty</span>())<br>&#123;<br><span class="hljs-type">int</span> u=q.<span class="hljs-built_in">front</span>();<br>q.<span class="hljs-built_in">pop</span>();<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">0</span>;i&lt;<span class="hljs-number">26</span>;i++)<br>&#123;<br><span class="hljs-type">int</span> fafail=t[u].fail;<br><span class="hljs-keyword">if</span>(!t[u].c[i])<br>&#123;<br>t[u].c[i]=t[fafail].c[i];<br><span class="hljs-keyword">continue</span>;<br>&#125;<br>t[t[u].c[i]].fail=t[fafail].c[i];<br>q.<span class="hljs-built_in">push</span>(t[u].c[i]);<br>&#125;<br>&#125;<br>&#125;<br></code></pre></td></tr></table></figure><h3 id="查询-Fail">查询 Fail</h3><p>还是像 KMP 一样,如果可以匹配那就继续,如果不能匹配就跳 Fail。同时,我们可以把所有经过节点的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mi>n</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">cnt</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6151em;"></span><span class="mord mathnormal">c</span><span class="mord mathnormal">n</span><span class="mord mathnormal">t</span></span></span></span> 设为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">−</span><span class="mord">1</span></span></span></span>,表示已经经过该节点。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">query</span><span class="hljs-params">(<span class="hljs-type">char</span> *s)</span></span><br><span class="hljs-function"></span>&#123;<br><span class="hljs-type">int</span> len=<span class="hljs-built_in">strlen</span>(s<span class="hljs-number">+1</span>),u=<span class="hljs-number">1</span>,ans=<span class="hljs-number">0</span>;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=len;i++)<br>&#123;<br><span class="hljs-type">int</span> now=t[u].c[s[i]-<span class="hljs-string">&#x27;a&#x27;</span>];<br><span class="hljs-keyword">while</span>(now!=<span class="hljs-number">1</span> &amp;&amp; t[now].cnt!=<span class="hljs-number">-1</span>)<br>&#123;<br>ans+=t[now].cnt;<br>t[now].cnt=<span class="hljs-number">-1</span>;<br>now=t[now].fail;<br>&#125;<br>u=t[u].c[s[i]-<span class="hljs-string">&#x27;a&#x27;</span>];<br>&#125;<br><span class="hljs-keyword">return</span> ans;<br>&#125;<br></code></pre></td></tr></table></figure><h3 id="板子-2">板子</h3><p><a href="https://www.luogu.com.cn/problem/P3808">P3808 【模板】AC 自动机(简单版)</a></p><p>模板题,上文两部分结合</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string">&lt;map&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string">&lt;cmath&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string">&lt;stack&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string">&lt;queue&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string">&lt;vector&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string">&lt;cstdio&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string">&lt;string&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string">&lt;iomanip&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string">&lt;cstdlib&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string">&lt;cstring&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string">&lt;iostream&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string">&lt;algorithm&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> ll long long</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> ull unsigned long long</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> INF 0x3f3f3f3f</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> mod 1000000007</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> bug(x) cout&lt;&lt;<span class="hljs-string">&quot;Bug &quot;</span>&lt;&lt;(x)&lt;&lt;endl</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> el putchar(<span class="hljs-string">&#x27;\n&#x27;</span>)</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> sp putchar(<span class="hljs-string">&#x27; &#x27;</span>)</span><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">int</span> <span class="hljs-title">read</span><span class="hljs-params">()</span></span><br><span class="hljs-function"></span>&#123;<br><span class="hljs-type">int</span> s=<span class="hljs-number">0</span>,w=<span class="hljs-number">1</span>;<br><span class="hljs-type">char</span> ch=<span class="hljs-built_in">getchar</span>();<br><span class="hljs-keyword">while</span>(ch&lt;<span class="hljs-string">&#x27;0&#x27;</span> || ch&gt;<span class="hljs-string">&#x27;9&#x27;</span>)&#123;<span class="hljs-keyword">if</span>(ch==<span class="hljs-string">&#x27;-&#x27;</span>)w=<span class="hljs-number">-1</span>;ch=<span class="hljs-built_in">getchar</span>();&#125;<br><span class="hljs-keyword">while</span>(ch&gt;=<span class="hljs-string">&#x27;0&#x27;</span> &amp;&amp; ch&lt;=<span class="hljs-string">&#x27;9&#x27;</span>) s=s*<span class="hljs-number">10</span>+ch-<span class="hljs-string">&#x27;0&#x27;</span>,ch=<span class="hljs-built_in">getchar</span>();<br><span class="hljs-keyword">return</span> s*w;<br>&#125;<br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">write</span><span class="hljs-params">(<span class="hljs-type">int</span> x)</span></span><br><span class="hljs-function"></span>&#123;<br><span class="hljs-keyword">if</span>(x&lt;<span class="hljs-number">0</span>) <span class="hljs-built_in">putchar</span>(<span class="hljs-string">&#x27;-&#x27;</span>),x=-x;<br><span class="hljs-keyword">if</span>(x&gt;<span class="hljs-number">9</span>) <span class="hljs-built_in">write</span>(x/<span class="hljs-number">10</span>);<br><span class="hljs-built_in">putchar</span>(x%<span class="hljs-number">10</span>+<span class="hljs-string">&#x27;0&#x27;</span>);<br><span class="hljs-keyword">return</span>;<br>&#125;<br><span class="hljs-type">const</span> <span class="hljs-type">int</span> N=<span class="hljs-number">1e6</span><span class="hljs-number">+10</span>;<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">node</span><br>&#123;<br><span class="hljs-type">int</span> fail;<br><span class="hljs-type">int</span> c[<span class="hljs-number">26</span>];<br><span class="hljs-type">int</span> cnt;<br>&#125;t[N];<br><span class="hljs-type">int</span> tot=<span class="hljs-number">1</span>;<br><span class="hljs-comment">// int bro[N],son[N];</span><br><span class="hljs-type">int</span> n;<br><span class="hljs-type">char</span> s[N];<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">insert</span><span class="hljs-params">(<span class="hljs-type">char</span> *s)</span></span><br><span class="hljs-function"></span>&#123;<br><span class="hljs-type">int</span> len=<span class="hljs-built_in">strlen</span>(s<span class="hljs-number">+1</span>),now=<span class="hljs-number">1</span>;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=len;i++)<br>&#123;<br><span class="hljs-keyword">if</span>(t[now].c[s[i]-<span class="hljs-string">&#x27;a&#x27;</span>]==<span class="hljs-number">0</span>)<br>&#123;<br>t[now].c[s[i]-<span class="hljs-string">&#x27;a&#x27;</span>]=++tot;<br>&#125;<br>now=t[now].c[s[i]-<span class="hljs-string">&#x27;a&#x27;</span>];<br>&#125;<br>t[now].cnt++;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">build_fail</span><span class="hljs-params">()</span></span><br><span class="hljs-function"></span>&#123;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">0</span>;i&lt;<span class="hljs-number">26</span>;i++) t[<span class="hljs-number">0</span>].c[i]=<span class="hljs-number">1</span>;<br>queue&lt;<span class="hljs-type">int</span>&gt; q;<br>q.<span class="hljs-built_in">push</span>(<span class="hljs-number">1</span>);<br>t[<span class="hljs-number">1</span>].fail=<span class="hljs-number">0</span>;<br><span class="hljs-keyword">while</span>(!q.<span class="hljs-built_in">empty</span>())<br>&#123;<br><span class="hljs-type">int</span> u=q.<span class="hljs-built_in">front</span>();<br>q.<span class="hljs-built_in">pop</span>();<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">0</span>;i&lt;<span class="hljs-number">26</span>;i++)<br>&#123;<br><span class="hljs-type">int</span> fafail=t[u].fail;<br><span class="hljs-keyword">if</span>(!t[u].c[i])<br>&#123;<br>t[u].c[i]=t[fafail].c[i];<br><span class="hljs-keyword">continue</span>;<br>&#125;<br>t[t[u].c[i]].fail=t[fafail].c[i];<br>q.<span class="hljs-built_in">push</span>(t[u].c[i]);<br>&#125;<br>&#125;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">query</span><span class="hljs-params">(<span class="hljs-type">char</span> *s)</span></span><br><span class="hljs-function"></span>&#123;<br><span class="hljs-type">int</span> len=<span class="hljs-built_in">strlen</span>(s<span class="hljs-number">+1</span>),u=<span class="hljs-number">1</span>,ans=<span class="hljs-number">0</span>;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=len;i++)<br>&#123;<br><span class="hljs-type">int</span> now=t[u].c[s[i]-<span class="hljs-string">&#x27;a&#x27;</span>];<br><span class="hljs-keyword">while</span>(now!=<span class="hljs-number">1</span> &amp;&amp; t[now].cnt!=<span class="hljs-number">-1</span>)<br>&#123;<br>ans+=t[now].cnt;<br>t[now].cnt=<span class="hljs-number">-1</span>;<br>now=t[now].fail;<br>&#125;<br>u=t[u].c[s[i]-<span class="hljs-string">&#x27;a&#x27;</span>];<br>&#125;<br><span class="hljs-keyword">return</span> ans;<br>&#125;<br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span><br><span class="hljs-function"></span>&#123;<br>n=<span class="hljs-built_in">read</span>();<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">1</span>;i&lt;=n;i++)<br>&#123;<br><span class="hljs-built_in">scanf</span>(<span class="hljs-string">&quot;%s&quot;</span>,s<span class="hljs-number">+1</span>);<br><span class="hljs-built_in">insert</span>(s);<br>&#125;<br><span class="hljs-built_in">build_fail</span>();<br><span class="hljs-built_in">scanf</span>(<span class="hljs-string">&quot;%s&quot;</span>,s<span class="hljs-number">+1</span>);<br><span class="hljs-built_in">write</span>(<span class="hljs-built_in">query</span>(s));el;<br><span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h3 id="参考链接-2">参考链接</h3><p><a href="https://www.bilibili.com/video/BV1uJ411Y7Eg">[算法]轻松掌握ac自动机 - Bilibili</a></p><p><a href="https://www.luogu.com.cn/blog/juruohyfhaha/solution-p3808">题解 P3808 【【模板】AC自动机(简单版)】</a></p><h1 id="manacher">Manacher</h1><p>用于在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> 的时间复杂度内寻找字符串 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span></span></span></span> 中最长回文子串的长度。</p><h2 id="朴素算法">朴素算法</h2><p>从 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>∼</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1\sim n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span> 枚举一个中间点 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span></span></span></span>,然后以此枚举最大可行的回文串长度,最后计算答案。</p><p>这样做法的时间复杂度显然是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span> 的,并不够优秀。</p><h2 id="Manacher-算法">Manacher 算法</h2><h3 id="过程">过程</h3><p>不难发现,在上文的定义中,回文串长度的奇偶性可能会对算法造成一定影响, 为了统一和方便计算,需要在字符串两两字符之间插入不属于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span></span></span></span> 字符集的字符。易证此时回文子串长度(包含插入的间隔字符)长度一定为奇数。下文的回文串均默认长度为奇数。</p><p>定义一个回文串的半径 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo>=</mo><mo stretchy="false">⌈</mo><mstyle displaystyle="true" scriptlevel="0"><mfrac><mi>n</mi><mn>2</mn></mfrac></mstyle><mo stretchy="false">⌉</mo></mrow><annotation encoding="application/x-tex">d=\lceil \dfrac{n}{2}\rceil</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.7936em;vertical-align:-0.686em;"></span><span class="mopen">⌈</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.1076em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">⌉</span></span></span></span>,左右端点下标分别为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mo separator="true">,</mo><mi>r</mi></mrow><annotation encoding="application/x-tex">l, r</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span></span></span></span>。</p><p>参照朴素算法的思路,对于每一个位置 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>,我们仍需要计算极大的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">d_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,例如,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>S</mi><mo mathvariant="normal">′</mo></msup><mo>=</mo><mtext> #a#b#b#a</mtext></mrow><annotation encoding="application/x-tex">S^\prime=\text{~\#a\#b\#b\#a}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord text"><span class="mord nobreak"> </span><span class="mord">#a#b#b#a</span></span></span></span></span> 的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi></mrow><annotation encoding="application/x-tex">d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span></span></span></span> 序列如下:</p><table><thead><tr><th>i</th><th>0</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7</th><th>8</th><th>9</th></tr></thead><tbody><tr><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>S</mi><mo mathvariant="normal">′</mo></msup></mrow><annotation encoding="application/x-tex">S^\prime</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span></td><td>~</td><td>#</td><td>a</td><td>#</td><td>b</td><td>#</td><td>b</td><td>#</td><td>a</td><td>#</td></tr><tr><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi></mrow><annotation encoding="application/x-tex">d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span></span></span></span></td><td>1</td><td>1</td><td>2</td><td>1</td><td>2</td><td>5</td><td>2</td><td>1</td><td>2</td><td>1</td></tr></tbody></table><p>如果已经计算出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi></mrow><annotation encoding="application/x-tex">d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span></span></span></span>,其中最大的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mi>i</mi></msub><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">d_i-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 即为答案。</p><p>现在问题转化为如何高效地计算 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi></mrow><annotation encoding="application/x-tex">d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span></span></span></span>。注意到回文串具有一个极其优美的性质:若我们已知 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span></span></span></span> 是一个回文串的中心,<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 也是一个回文串的中心,由于回文的对称,我们可以知道 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 也是一个合法的回文串(如图)。通过这一操作可以减少重复检查。</p><p><img src="https://img.makerlife.top/data/qexo/2025-03-28-Snipaste_2025-03-28_11-40-43-4997e571ecc8380989dfd93e0359a66a.png" alt=""></p><p>现在假设下一步将计算 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">d_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,而 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mn>1</mn></msub><mo>∼</mo><msub><mi>d</mi><mrow><mi>i</mi><mo>−</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">d_1\sim d_{i-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span> 已经被计算完成,同时维护已找到的最靠右的回文子串的边界 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><msub><mi>l</mi><mi>c</mi></msub><mo separator="true">,</mo><msub><mi>r</mi><mi>c</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(l_c,r_c)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>(即具有最大 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>r</mi></mrow><annotation encoding="application/x-tex">r</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span></span></span></span> 值的回文串,称此回文串 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span></span></span></span> 是极大的)。容易想到可以通过下面的方式实现:</p><ul><li>如果 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 位于当前极大的回文串外,即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>&gt;</mo><msub><mi>r</mi><mi>c</mi></msub></mrow><annotation encoding="application/x-tex">i&gt;r_c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6986em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,由于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>r</mi><mi>c</mi></msub></mrow><annotation encoding="application/x-tex">r_c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 右侧的字符未被检查过,只能用朴素算法求得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">d_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>;</li><li>若 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>≤</mo><msub><mi>r</mi><mi>c</mi></msub></mrow><annotation encoding="application/x-tex">i\leq r_c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7955em;vertical-align:-0.136em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,就希望通过之前求得的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi></mrow><annotation encoding="application/x-tex">d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">d</span></span></span></span> 获取一些信息。由于上面的结论,似乎与 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span> 关于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span></span></span></span> 对称的回文串 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 的 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">d_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span></span></span></span> 是可以转移到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">d_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>,思路如图 xxx 所示。然而,有可能 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 区间的左端点在区间 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span></span></span></span> 外,也就是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>l</mi><mi>j</mi></msub><mo>&lt;</mo><msub><mi>l</mi><mi>c</mi></msub></mrow><annotation encoding="application/x-tex">l_j&lt;l_c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9805em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>(如图)。此时串 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.854em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.05724em;">j</span></span></span></span> 在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>l</mi><mi>c</mi></msub></mrow><annotation encoding="application/x-tex">l_c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0197em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 外的部分是否回文无法保证,正确的做法是应当尝试截断回文串,即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">d_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 只取确定回文的长度 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>r</mi><mi>c</mi></msub><mo>−</mo><mi>i</mi></mrow><annotation encoding="application/x-tex">r_c-i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>,然后继续用朴素算法尝试将其扩展至回文串外<br><img src="https://img.makerlife.top/data/qexo/2025-03-28-Snipaste_2025-03-28_13-17-39-029f368760b2645a1783b9a3629dad75.png" alt=""></li></ul><h3 id="时间复杂度分析">时间复杂度分析</h3><p>注意到每次计算时 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>r</mi><mi>c</mi></msub></mrow><annotation encoding="application/x-tex">r_c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> 是单调不降的,且每个字符扩展比较的成本是常数。可以证明整个扫描过程中右边界最多只会被更新 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Θ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Theta(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">Θ</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> 次,因此总体比较次数是线性的。</p><h3 id="核心代码">核心代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs cpp">n = <span class="hljs-built_in">strlen</span>(ss<span class="hljs-number">+1</span>);<br>s[<span class="hljs-number">0</span>] = <span class="hljs-string">&#x27;~&#x27;</span>;<br>s[<span class="hljs-number">1</span>] = <span class="hljs-string">&#x27;#&#x27;</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++) &#123;<br> s[++m] = ss[i];<br> s[++m] = <span class="hljs-string">&#x27;#&#x27;</span>;<br>&#125;<br>maxr = <span class="hljs-number">0</span>, mid = <span class="hljs-number">0</span>, r[<span class="hljs-number">1</span>] = <span class="hljs-number">1</span>;<br><span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i = <span class="hljs-number">2</span>; i &lt;= m; i++) &#123;<br> <span class="hljs-keyword">if</span> (i &lt;= maxr) &#123;<br> r[i] = <span class="hljs-built_in">min</span>(r[mid * <span class="hljs-number">2</span> - i], maxr - i + <span class="hljs-number">1</span>);<br>&#125;<br> <span class="hljs-keyword">while</span> (s[i - r[i]] == s[i + r[i]]) &#123;<br> r[i]++;<br>&#125;<br> <span class="hljs-keyword">if</span> (i + r[i] - <span class="hljs-number">1</span> &gt; maxr) &#123;<br> maxr = i + r[i] - <span class="hljs-number">1</span>;<br>mid = i;<br>&#125;<br>&#125;<br><span class="hljs-type">int</span> ans = <span class="hljs-number">0</span>;<br><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= m; i++) &#123;<br> ans = <span class="hljs-built_in">max</span>(ans, r[i]);<br>&#125;<br>cout &lt;&lt; ans - <span class="hljs-number">1</span> &lt;&lt; endl;<br></code></pre></td></tr></table></figure>
❌