<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Dai Chao</title>
    <link>https://daichao1997.github.io/posts/</link>
    <description>Recent content in Posts on Dai Chao</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sat, 06 May 2023 22:19:27 +0800</lastBuildDate>
    <atom:link href="https://daichao1997.github.io/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>爱因斯坦与诺贝尔奖</title>
      <link>https://daichao1997.github.io/posts/life/%E6%8E%A8%E9%80%81%E7%88%B1%E5%9B%A0%E6%96%AF%E5%9D%A6%E4%B8%8E%E8%AF%BA%E8%B4%9D%E5%B0%94%E5%A5%96/</link>
      <pubDate>Sat, 06 May 2023 22:19:27 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/%E6%8E%A8%E9%80%81%E7%88%B1%E5%9B%A0%E6%96%AF%E5%9D%A6%E4%B8%8E%E8%AF%BA%E8%B4%9D%E5%B0%94%E5%A5%96/</guid>
      <description>&lt;p&gt;今天看爱因斯坦传又发现一些趣事。很多人都知道，爱因斯坦获得诺贝尔奖的官方理由并不是相对论，而是“光电效应定律”，但是这背后还隐藏着一段富有黑色幽默的故事。&lt;/p&gt;</description>
    </item>
    <item>
      <title>数字证书体系</title>
      <link>https://daichao1997.github.io/posts/life/%E6%8E%A8%E9%80%81%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6%E4%BD%93%E7%B3%BB/</link>
      <pubDate>Sat, 06 May 2023 22:19:27 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/%E6%8E%A8%E9%80%81%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6%E4%BD%93%E7%B3%BB/</guid>
      <description>&lt;p&gt;相信大家都知道下载正版软件的重要性。盗版软件可能被恶意篡改过，而且可能带有病毒，窃取你电脑里的信息。但是我们怎么验证软件是正版还是盗版呢？有人肯定会说：“在官网下载的肯定就是正版啦！”确实，那么我们怎么验证一个网站是真正的“官网”呢？这就要用到一个叫做“证书”的东西。&lt;/p&gt;</description>
    </item>
    <item>
      <title>谈罗永浩瞬间给杨笠爆灯一事</title>
      <link>https://daichao1997.github.io/posts/life/%E6%8E%A8%E9%80%81%E8%B0%88%E7%BD%97%E6%B0%B8%E6%B5%A9%E7%9E%AC%E9%97%B4%E7%BB%99%E6%9D%A8%E7%AC%A0%E7%88%86%E7%81%AF%E4%B8%80%E4%BA%8B/</link>
      <pubDate>Sat, 06 May 2023 22:19:27 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/%E6%8E%A8%E9%80%81%E8%B0%88%E7%BD%97%E6%B0%B8%E6%B5%A9%E7%9E%AC%E9%97%B4%E7%BB%99%E6%9D%A8%E7%AC%A0%E7%88%86%E7%81%AF%E4%B8%80%E4%BA%8B/</guid>
      <description>&lt;p&gt;听说最近《脱口秀大会》整了个节目效果，可把我逗笑了。&lt;/p&gt;
&lt;p&gt;什么节目效果呢？杨笠刚上场还没开始说话，罗永浩就拍灯了，然后直接起立给她鼓掌。&lt;/p&gt;
&lt;p&gt;罗永浩拍完了灯，大张伟装作自己也要拍的样子，然后李诞开玩笑地劝他说“别拍了，你拍我也得拍了”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2023.05</title>
      <link>https://daichao1997.github.io/posts/life/2023.05/</link>
      <pubDate>Mon, 01 May 2023 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2023.05/</guid>
      <description>&lt;p&gt;一年一度的总结记事多少有些慢了，很多发生在年初的事情等到年末再回忆会有些困难，所以我决定从今年起，尽量在三个长假（五一、十一、春节）都写一篇记事，恰好将一年划分为冬去春来、炎炎夏日和凛冽寒冬的三个阶段。如果春节还有多的时间，可能还会再推出一篇偏抽象的思考。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2023</title>
      <link>https://daichao1997.github.io/posts/life/2023/</link>
      <pubDate>Sun, 01 Jan 2023 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2023/</guid>
      <description>&lt;h2 id=&#34;prologue&#34;&gt;Prologue&lt;/h2&gt;
&lt;p&gt;OK兄弟们，全体目光向我看齐嗷，看我看我，我宣布个事儿：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我是个废物！&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;part-a&#34;&gt;Part A&lt;/h2&gt;
&lt;p&gt;时至今日，我终于可以毫无负担地说出这句话了。如果说我2022年取得了什么“进步”，这大概就是最大的进步。&lt;/p&gt;</description>
    </item>
    <item>
      <title>巴彦淖尔隔离之旅</title>
      <link>https://daichao1997.github.io/posts/life/2022.05%E5%B7%B4%E5%BD%A6%E6%B7%96%E5%B0%94%E9%9A%94%E7%A6%BB%E4%B9%8B%E6%97%85/</link>
      <pubDate>Sun, 01 May 2022 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2022.05%E5%B7%B4%E5%BD%A6%E6%B7%96%E5%B0%94%E9%9A%94%E7%A6%BB%E4%B9%8B%E6%97%85/</guid>
      <description>&lt;h1 id=&#34;随便聊聊&#34;&gt;随便聊聊&lt;/h1&gt;
&lt;p&gt;昨天我收到了居家隔离的通知，下周二才放出来，现在还剩68小时。虽然被限制人身自由很不爽，但和上次去内蒙隔离相比根本不算什么。正好现在周末了，我又不能出门，不如一边隔离一边给大家讲讲上次隔离的故事吧。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2022</title>
      <link>https://daichao1997.github.io/posts/life/2022/</link>
      <pubDate>Sat, 01 Jan 2022 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2022/</guid>
      <description>&lt;h1 id=&#34;2022&#34;&gt;2022&lt;/h1&gt;
&lt;p&gt;从2013年第一篇年记的萌芽开始，到2014年的第二篇，到2015年的第三篇，…，到2022年的第十篇，我已经历许多。现在，结束我最摆烂的一年吧：从一开始的慷慨激昂到现在的无话可说。[1]&lt;/p&gt;</description>
    </item>
    <item>
      <title>自省</title>
      <link>https://daichao1997.github.io/posts/life/2022.01%E8%87%AA%E7%9C%81/</link>
      <pubDate>Sat, 01 Jan 2022 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2022.01%E8%87%AA%E7%9C%81/</guid>
      <description>&lt;p&gt;昨天跟广宇吃晚饭，深入交流了我现在这个岗位的发展规划。&lt;/p&gt;
&lt;p&gt;我一个很大的缺点是喜欢让人推着走，多一事不如少一事。issue分配给我，我不会想着主动监测进度，也不会顺着issue去学习不懂的东西，而是浅尝辄止，等着vendor把问题解决，只要不找我我就不管。&lt;/p&gt;</description>
    </item>
    <item>
      <title>OSDI 2020论文摘要</title>
      <link>https://daichao1997.github.io/posts/tech/2021-11-05-osdi2020%E8%AE%BA%E6%96%87%E6%8F%90%E8%A6%81/</link>
      <pubDate>Fri, 05 Nov 2021 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2021-11-05-osdi2020%E8%AE%BA%E6%96%87%E6%8F%90%E8%A6%81/</guid>
      <description>&lt;p&gt;完整版链接：https://www.usenix.org/sites/default/files/osdi20-full_proceedings.pdf&lt;/p&gt;</description>
    </item>
    <item>
      <title>该不该允许涉毒艺人复出</title>
      <link>https://daichao1997.github.io/posts/life/2021.10%E8%AF%A5%E4%B8%8D%E8%AF%A5%E5%85%81%E8%AE%B8%E6%B6%89%E6%AF%92%E8%89%BA%E4%BA%BA%E5%A4%8D%E5%87%BA/</link>
      <pubDate>Fri, 01 Oct 2021 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2021.10%E8%AF%A5%E4%B8%8D%E8%AF%A5%E5%85%81%E8%AE%B8%E6%B6%89%E6%AF%92%E8%89%BA%E4%BA%BA%E5%A4%8D%E5%87%BA/</guid>
      <description>&lt;p&gt;这次我的意见不仅和官媒相左，还跟不少熟悉的同学相左，但我还是想说出来。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;“艺人购买毒品的钱会变成子弹打在缉毒警察的身上”，这句话很感人，但它把“艺人吸毒”和“缉毒警察身亡”的联系暗示得过于紧密。这两者有关系吗？肯定是有的，但是全国有多少吸毒人士，艺人才占百分之几？诚然，无论毒品多少，只要买了就要为此负责，但是这跟复出的联系在哪儿呢？现有的解释并不能说服我。&lt;/li&gt;
&lt;li&gt;“吸毒艺人复出会给社会带来负面影响”，我不完全同意。还记得薛之谦、陈赫等明星数不清的丑闻吗？还记得范冰冰漏税8亿吗？有人因为看到他们复出而学会出轨、逼女友打胎或者偷税漏税吗？如果有，为什么他们没有被封杀？如果没有，为什么唯独毒品是个例外？更何况，一些有吸毒史的海外艺人在中国依然有大批粉丝。你听过Eminem的《Not Afraid》吗？这首歌是他戒毒后写的，很多中学生都喜欢听，要不要封杀一下？&lt;/li&gt;
&lt;li&gt;“毒品在中国是不能碰的底线”，这句话一点错都没有，但它的含义很模糊，你可以从中理解出各种含义。它是想说“吸了毒该坐牢”、“吸了毒该遭受唾弃”吗？那确实没问题。可不可以理解成“吸了毒该枪毙”、“吸了毒该被驱逐出境”、“吸了毒该被抹去存在的痕迹”？不一定吧，至少还有一些可商榷的空间吧？&lt;/li&gt;
&lt;li&gt;那么这些商榷的空间为什么被挤压干净了呢？为什么我感觉只要一提“也可以复出试试”，就会被十亿人的口水淹没呢？这样不容商榷的舆论环境，是人民自发形成的，还是……？我不知道。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;总而言之，我不是很反对吸毒艺人复出，重点在于他们复出的方式和姿态。只要他们能弥补曾经犯下的过错，我觉得后果并不会像很多人说的那样严重。&lt;/p&gt;</description>
    </item>
    <item>
      <title>成都49中</title>
      <link>https://daichao1997.github.io/posts/life/2021.05%E6%88%90%E9%83%BD49%E4%B8%AD/</link>
      <pubDate>Sat, 01 May 2021 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2021.05%E6%88%90%E9%83%BD49%E4%B8%AD/</guid>
      <description>&lt;p&gt;成都49中的事情尘埃落定后，我的愤怒也随之消退。这次事件引起这么大的风波是我意料之外的，有很多人（包括我在内）这几天都在持续地质疑官方公布的消息，尤其是通告里“排除刑事案件”、“家属表示无异议”等暧昧不清的用词更让人浮想联翩。从警方公布的结果来看，很多质疑都落了空，例如校方故意销毁监控、尸体直接火化、抢占留学名额等。同时，有人开始劝导其他人要相信通告，相信警方，相信政府。&lt;/p&gt;</description>
    </item>
    <item>
      <title>告别是为了更好的遇见</title>
      <link>https://daichao1997.github.io/posts/life/2021.05%E5%91%8A%E5%88%AB%E6%98%AF%E4%B8%BA%E4%BA%86%E6%9B%B4%E5%A5%BD%E7%9A%84%E9%81%87%E8%A7%81/</link>
      <pubDate>Sat, 01 May 2021 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2021.05%E5%91%8A%E5%88%AB%E6%98%AF%E4%B8%BA%E4%BA%86%E6%9B%B4%E5%A5%BD%E7%9A%84%E9%81%87%E8%A7%81/</guid>
      <description>&lt;p&gt;一年一度的五一小长假就这样过去了。说是五天的小长假，实际上有两天是周末，还有两天是通过国务院的“调休”政策、把另外两个周日设为工作日换来的。众所周知，周末是用来躺的。既然这五天假有四天都取自周末，那我岂有不躺的道理？&lt;/p&gt;</description>
    </item>
    <item>
      <title>礼物</title>
      <link>https://daichao1997.github.io/posts/life/2021.02%E7%A4%BC%E7%89%A9/</link>
      <pubDate>Mon, 01 Feb 2021 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2021.02%E7%A4%BC%E7%89%A9/</guid>
      <description>&lt;p&gt;我们的消费原则就是，不需要原则。&lt;/p&gt;
&lt;p&gt;我和女朋友在一起七个月，感情比较稳定，平时经常一起看生活组的家常话题，也被一些奇葩的送礼故事逗笑过。看到经常有豆友纠结对象送的礼物够不够用心，红包够不够大，或者要不要扶贫，我也想分享一下我俩的消费情况，看看礼物和红包是不是真的那么重要。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《算法导论》的翻译真叫一个垃圾！</title>
      <link>https://daichao1997.github.io/posts/tech/2020-09-01-itoa-ch14-translation/</link>
      <pubDate>Tue, 01 Sep 2020 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2020-09-01-itoa-ch14-translation/</guid>
      <description>&lt;p&gt;其实不只是这一本教材，国内对英文计算机文献的翻译质量普遍不高，以至于我直接读英文原著都要比读这种狗屁不通的汉语句子流畅许多。下面这个例子是第14章开头的第一段话，我来试试把原版翻译改良一下，你们品评一下有没有好读许多。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《算法导论》第14章：数据结构的扩张 (Augmenting Data Structures)</title>
      <link>https://daichao1997.github.io/posts/tech/2020-09-01-itoa-ch14-augment/</link>
      <pubDate>Tue, 01 Sep 2020 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2020-09-01-itoa-ch14-augment/</guid>
      <description>&lt;p&gt;本章提及了数据结构的“扩张”概念。当我们需要支持一种特殊操作的时候，应该优先考虑去扩展现有的数据结构，而不是自创一种。扩展的方法就是“加信息”，然后用原有的基本操作去维护它。作为例子，本章讲了“顺序统计树”和“区间树”，并给出了扩展数据结构的一般方法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《算法导论》第21章：并查集</title>
      <link>https://daichao1997.github.io/posts/tech/2020-08-31-itoa-ch21-disjoint_set/</link>
      <pubDate>Mon, 31 Aug 2020 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2020-08-31-itoa-ch21-disjoint_set/</guid>
      <description>&lt;h3 id=&#34;并查集的基本操作&#34;&gt;并查集的基本操作&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;并查集&lt;/strong&gt;是一种由不相交集合组成的数据结构，它可以用 &lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mo stretchy=&#34;false&#34;&gt;{&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;.&lt;/mi&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;/msub&gt;&lt;mo stretchy=&#34;false&#34;&gt;}&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;S=\{S_1,S_2,...,S_k\}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt; 表示，其中 &lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;S_i&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt; 是由若干元素组成的集合，任意两个集合之间的交集都为 &lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;∅&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;\empty&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;，每个集合都有一个元素作为它的&lt;strong&gt;代表&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;并查集需要支持以下操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MAKE-SET(x)&lt;/code&gt;创建一个仅含 x 的新集合（x 不得同时属于其他集合）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UNION(x,y)&lt;/code&gt;将集合 x、y 合并到一起，形成新的集合&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FIND-SET(x)&lt;/code&gt;返回集合 x 的代表&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一般来说，每个元素都会先通过 MAKE-SET 形成只包含自己的集合，然后通过 UNION 相互兼并。MAKE-SET 和 UNION的运行次数是有限的，不会超过所有元素的总数 &lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;n&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;。与此同时，外部会通过FIND-SET查询某个元素当前属于哪个集合，该操作的次数没有上限。所以，一个并查集的运行效率可以通过两个变量衡量——MAKE-SET 的运行次数 &lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;n&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;，以及上述所有三种操作的总次数 &lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;m&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;。这里假设了每个元素都会先形成自己的集合。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《算法导论》第9章：中位数与顺序统计量 (Medians and Order Statistics)</title>
      <link>https://daichao1997.github.io/posts/tech/2020-08-31-itoa-ch09-order_statistics/</link>
      <pubDate>Mon, 31 Aug 2020 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2020-08-31-itoa-ch09-order_statistics/</guid>
      <description>&lt;p&gt;这一章主要研究这几个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;怎么求最大/最小&lt;/li&gt;
&lt;li&gt;怎么同时求最大&amp;amp;最小&lt;/li&gt;
&lt;li&gt;怎么求第二大/小（习题9.1-1）&lt;/li&gt;
&lt;li&gt;怎么求第k小&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些问题的算法并不难，本质上我们是想探讨它们所需要的最小比较次数，所以希望大家把重点放在理解证明过程上，学习证明思路，理解排序的本质。下文中，数据规模都用 &lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;n&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt; 表示。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《算法导论》第13章：红黑树</title>
      <link>https://daichao1997.github.io/posts/tech/2020-08-30-itoa-ch13-rbtree/</link>
      <pubDate>Sun, 30 Aug 2020 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2020-08-30-itoa-ch13-rbtree/</guid>
      <description>&lt;p&gt;今天来讲个有挑战性的内容——红黑树。这是我从本科开始一直没敢去碰的东西，主要是嫌麻烦，实际编程中又不怎么用，但最近就想看着玩。本文只能让你了解红黑树大概的样子，真要理解并形成深刻印象，还得去看《算法导论》的第12、13章。第12章（平衡二叉树）的笔记在上一篇文章里。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《算法导论》第12章：二叉搜索树</title>
      <link>https://daichao1997.github.io/posts/tech/2020-08-28-itoa-ch12-bst/</link>
      <pubDate>Fri, 28 Aug 2020 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2020-08-28-itoa-ch12-bst/</guid>
      <description>&lt;p&gt;本文简单介绍二叉搜索树，为下一篇文章讲红黑树作铺垫。&lt;/p&gt;
&lt;h3 id=&#34;二叉搜索树&#34;&gt;二叉搜索树&lt;/h3&gt;
&lt;p&gt;二叉搜索树(Binary Search Tree, BST)是一棵二叉树，每个结点都记录着左子left、右子right、父结点p、关键字key。BST里的关键字总是满足&lt;strong&gt;二叉搜索树性质&lt;/strong&gt;：对于每个结点，其关键字都大于或等于它的任意左子，小于或等于它的任意右子。简单来说，就是“左小右大”。下面比较结点大小时，指的就是比较结点关键字的大小。&lt;/p&gt;</description>
    </item>
    <item>
      <title>记一次愚蠢的Leetcode刷题</title>
      <link>https://daichao1997.github.io/posts/tech/2020-07-13-median-of-two-sorted-arrays/</link>
      <pubDate>Mon, 13 Jul 2020 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2020-07-13-median-of-two-sorted-arrays/</guid>
      <description>&lt;p&gt;一道并不怎么难的题，提交了N次才成功，究其原因是边缘情况特别多，所以一定得好好复盘，练好我一直写不清楚的二分法——我经常绕不清楚奇偶两种情况，也常常照顾不好数组越界。&lt;/p&gt;</description>
    </item>
    <item>
      <title>跟着OSDev学习搭建操作系统（四）</title>
      <link>https://daichao1997.github.io/posts/tech/2020-05-13-meaty-skeleton-2/</link>
      <pubDate>Wed, 13 May 2020 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2020-05-13-meaty-skeleton-2/</guid>
      <description>&lt;p&gt;上次我们编译并成功运行了myOS，这次我们来仔细看看这个简单的操作系统有哪些构成要素，要以怎样的方法去安装它。&lt;/p&gt;
&lt;h3 id=&#34;编译环境的建立&#34;&gt;编译环境的建立&lt;/h3&gt;
&lt;p&gt;源代码的编译是靠shell脚本而不是Makefile总控的，不过这并不影响我们学习。大致来讲：&lt;/p&gt;</description>
    </item>
    <item>
      <title>跟着OSDev学习搭建操作系统（三）</title>
      <link>https://daichao1997.github.io/posts/tech/2020-05-09-meaty-skeleton-1/</link>
      <pubDate>Sat, 09 May 2020 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2020-05-09-meaty-skeleton-1/</guid>
      <description>&lt;p&gt;前几天跑通了一个空空如也的内核（教程里叫做Bare Bone），只能说是搭建好了环境，接下来要搭建的myOS会稍微正式一点。如同&lt;a href=&#34;https://wiki.osdev.org/Meaty_Skeleton&#34;&gt;教程&lt;/a&gt;标题“Meaty Skeleton”所说的那样，myOS虽然有一点“meat”，但依然只是一具“skeleton”，没有实际功能。我们既可以从中学到一个科学的OS源代码的结构，也可以直接以myOS为基础，向里面添加新的功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>跟着OSDev网站搭建个人操作系统（二）</title>
      <link>https://daichao1997.github.io/posts/tech/2020-05-05-osdev-barebone-2/</link>
      <pubDate>Tue, 05 May 2020 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2020-05-05-osdev-barebone-2/</guid>
      <description>&lt;p&gt;上回我们讲（翻译）了一些预备知识，并准备好了交叉编译器和其他工具链，现在开始动手写代码吧！我们的“空内核”需要三个源文件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;boot.S，作为内核的入口，用于初始化运行环境&lt;/li&gt;
&lt;li&gt;kernel.c，作为内核的主函数&lt;/li&gt;
&lt;li&gt;linker.ld，作为链接上面两个文件的脚本&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;booting-the-operating-system&#34;&gt;&lt;a href=&#34;https://wiki.osdev.org/Bare_Bones#Booting_the_Operating_System&#34;&gt;Booting the Operating System&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;当你编译好一个内核后，它是存储于磁盘上的，然而一个没有内核的机器该如何把磁盘上的内核读进内存，从而去运行里面的指令呢？这就要用到一个内核之外的东西，叫做&lt;strong&gt;bootloader&lt;/strong&gt;。原文提到了GNU有一个叫做&lt;a href=&#34;https://wiki.osdev.org/GRUB&#34;&gt;GRUB&lt;/a&gt;的现成工具可以直接用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>跟着OSDev网站搭建个人操作系统（一）</title>
      <link>https://daichao1997.github.io/posts/tech/2020-05-05-osdev-barebone/</link>
      <pubDate>Tue, 05 May 2020 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2020-05-05-osdev-barebone/</guid>
      <description>&lt;p&gt;发现一个宝藏网站：osdev.org（我没火星吧），这是我见过的内容最丰富最全面的操作系统开发者社区，里面的wiki不仅教你从零开始搭建内核与操作系统，还传授了一些人生经验，给刚准备起航的newbie指路（或是劝退），可以说是OS新手开发者的福地了。我今天也没干什么，就按照它给的教程一步步走，在QEMU上跑通了一个空空如也的内核，然后准备把大致的步骤记录在这里。当然，我现在是个纯newbie，最多只能做个概括+翻译而已。如果你有兴趣，可以直接去读原文，我会把每篇文章的链接附上。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2019.07</title>
      <link>https://daichao1997.github.io/posts/life/2019.07/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2019.07/</guid>
      <description>&lt;h1 id=&#34;the-end&#34;&gt;The End&lt;/h1&gt;
&lt;h3 id=&#34;ashim-global-premier-vip-fan-club-ii&#34;&gt;Ashim Global Premier VIP Fan Club II&lt;/h3&gt;
&lt;p&gt;这里是阿西木全球粉丝后援团高端vip二群&lt;/p&gt;
&lt;p&gt;最开始，我们的称号是&lt;em&gt;磁福の圆桌骑士&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;但后来我跟你们征战四方&lt;/p&gt;
&lt;p&gt;跟你们吃过西门烤翅、平娃三宝、北华涮肉、老丁西门、重庆火锅，还有神秘消失的川菜馆&lt;/p&gt;</description>
    </item>
    <item>
      <title>《全球通史》读书笔记</title>
      <link>https://daichao1997.github.io/posts/life/%E5%85%A8%E7%90%83%E9%80%9A%E5%8F%B2%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/</link>
      <pubDate>Mon, 20 May 2019 02:20:29 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/%E5%85%A8%E7%90%83%E9%80%9A%E5%8F%B2%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/</guid>
      <description>&lt;h2 id=&#34;人类食物采集者&#34;&gt;人类——食物采集者&lt;/h2&gt;
&lt;p&gt;现代人对历史的了解比古代人还多。&lt;/p&gt;
&lt;h3 id=&#34;从类人猿到人类&#34;&gt;从类人猿到人类&lt;/h3&gt;
&lt;p&gt;从最宏观的视角来看，地球发展进程有两大转折点。第一，生命的诞生，生物改变基因以适应环境。第二，人类的诞生，人类改变环境以适应基因。（作者的畅想）第三，基因技术，人类同时能够改变基因和环境。&lt;/p&gt;</description>
    </item>
    <item>
      <title>最后的寒假</title>
      <link>https://daichao1997.github.io/posts/life/%E6%9C%80%E5%90%8E%E7%9A%84%E5%AF%92%E5%81%87/</link>
      <pubDate>Sun, 17 Feb 2019 00:42:41 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/%E6%9C%80%E5%90%8E%E7%9A%84%E5%AF%92%E5%81%87/</guid>
      <description>&lt;h1 id=&#34;外来务工人员的最后一天寒假&#34;&gt;外来务工人员的最后一天寒假&lt;/h1&gt;
&lt;h2 id=&#34;1&#34;&gt;1&lt;/h2&gt;
&lt;p&gt;我叫代超，今年21岁，来自武汉，是一名外来务工人员。&lt;/p&gt;
&lt;p&gt;我在中关村的一家小公司上班，住集体宿舍，准备攒够了钱去租房。由于宿舍离公司近，我每天九点才起床。草草洗漱后，坐三站公交就能来到上班的地方。我的同事都是和我一样的技术人员，工作时只关心项目，因此不需要额外疏通关系。在那里埋头工作八九个小时之后，我便下班回家。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2019</title>
      <link>https://daichao1997.github.io/posts/life/2019/</link>
      <pubDate>Tue, 01 Jan 2019 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2019/</guid>
      <description>&lt;h1 id=&#34;2019&#34;&gt;2019&lt;/h1&gt;
&lt;h2 id=&#34;生活篇&#34;&gt;生活篇&lt;/h2&gt;
&lt;h3 id=&#34;一月啥时候放假啊&#34;&gt;一月：啥时候放假啊&lt;/h3&gt;
&lt;p&gt;1月2日上午10点，二教窗外敲响了集图考试结束的铃声。我心不在焉地拎起书包，回到了45甲316，一言不发地躺在了床上。&lt;/p&gt;
&lt;p&gt;我没有像其他同学那样收拾行李准备去火车站。我连火车票都没有买好。实际上，我并不知道自己什么时候可以回家。越过荆棘密布的期末季，迎接我的不是无忧无虑的假期，而是**“后期末时代的三座大山”**——操统大作业、操统实习大作业、网络大作业。（福利：&lt;a href=&#34;http://www.bilibili.com/video/av17794295&#34;&gt;当代话剧研究之操作系统&lt;/a&gt;，别忘了给操操投币🧐）&lt;/p&gt;</description>
    </item>
    <item>
      <title>参加Hamilton排练及演出</title>
      <link>https://daichao1997.github.io/posts/life/2019%E5%8F%82%E5%8A%A0hamilton%E6%8E%92%E7%BB%83%E5%8F%8A%E6%BC%94%E5%87%BA/</link>
      <pubDate>Tue, 01 Jan 2019 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2019%E5%8F%82%E5%8A%A0hamilton%E6%8E%92%E7%BB%83%E5%8F%8A%E6%BC%94%E5%87%BA/</guid>
      <description>&lt;h1 id=&#34;小作文&#34;&gt;小作文&lt;/h1&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://daichao1997.github.io/pic/night.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;为期半年的排练已经告一段落了，在这半年里，有欢笑，有泪水，更有无数珍贵的回忆。请以&amp;quot;我与汉密尔顿&amp;quot;为题，写一篇不少于800字的文章，文体不限（诗歌、戏剧除外）。&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>政见不同</title>
      <link>https://daichao1997.github.io/posts/life/%E6%94%BF%E8%A7%81%E4%B8%8D%E5%90%8C/</link>
      <pubDate>Mon, 31 Dec 2018 15:19:29 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/%E6%94%BF%E8%A7%81%E4%B8%8D%E5%90%8C/</guid>
      <description>&lt;p&gt;近来发生的一些政治敏感事件，激起了全校范围内的讨论。我从小都是那种两耳不闻窗外事的书呆子，辩不明大是大非，因此不想针对事件本身作出评价。我想说的，是我作为一个旁观者，在这十几天里得到的启示。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Image Basics</title>
      <link>https://daichao1997.github.io/posts/tech/image_basics/</link>
      <pubDate>Wed, 05 Dec 2018 01:48:01 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/image_basics/</guid>
      <description>&lt;h2 id=&#34;color&#34;&gt;Color&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Hue: pure color, presented by a circle&lt;/li&gt;
&lt;li&gt;Saturation: purity of color, how far it is from pure white, which is every color combined&lt;/li&gt;
&lt;li&gt;Brightness: subjective perception, how far it is from grey&lt;/li&gt;
&lt;li&gt;Luminance: objective, cd/m2&lt;/li&gt;
&lt;li&gt;Contrast:&lt;/li&gt;
&lt;li&gt;Sharpness:&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;noise&#34;&gt;Noise&lt;/h2&gt;
&lt;p&gt;Image noise is random variation of brightness or color information in images, and is usually an aspect of electronic noise.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gaussian noise&lt;/li&gt;
&lt;li&gt;Salt-and-pepper noise&lt;/li&gt;
&lt;li&gt;Shot noise&lt;/li&gt;
&lt;li&gt;Quantization noise&lt;/li&gt;
&lt;li&gt;Film grain&lt;/li&gt;
&lt;li&gt;Anisotropic noise&lt;/li&gt;
&lt;li&gt;Periodic noise&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;photography&#34;&gt;Photography&lt;/h2&gt;
&lt;h3 id=&#34;backlight&#34;&gt;Backlight&lt;/h3&gt;
&lt;p&gt;The process of illuminating the subject from the back. The lighting instrument and the viewer face each other, with the subject in between, creating a &lt;strong&gt;glowing&lt;/strong&gt; effect on the edges of subject, which helps to seperate the subject and the background. In photography, a back light (often the sun) that is about sixteen times more intense than the &lt;strong&gt;key light&lt;/strong&gt; produces a &lt;strong&gt;silhouette&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>简单的字符串练习1</title>
      <link>https://daichao1997.github.io/posts/tech/2018-11-13-%E7%AE%80%E5%8D%95%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%BB%83%E4%B9%A01/</link>
      <pubDate>Tue, 13 Nov 2018 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2018-11-13-%E7%AE%80%E5%8D%95%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%BB%83%E4%B9%A01/</guid>
      <description>&lt;p&gt;初次尝试刷题，当然要刷简单的啦。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://uva.onlinejudge.org/index.php?option=com_onlinejudge&amp;amp;Itemid=8&amp;amp;category=748&#34;&gt;Root :: Competitive Programming 3: The New Lower Bound of Programming Contests (Steven &amp;amp; Felix Halim) :: String Processing :: String Matching :: Standard&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;455---periodic-strings&#34;&gt;455 - Periodic Strings&lt;/h3&gt;
&lt;p&gt;**问题描述：**求一个字符串的最小周期，例如&amp;quot;123123123&amp;quot;的最小周期为3。从数据规模来看，穷举法完全可行，但还是要学习一下&lt;a href=&#34;https://github.com/morris821028/UVa/blob/master/volume004/455%20-%20Periodic%20Strings.cpp&#34;&gt;这位老哥&lt;/a&gt;对KMP的巧妙运用：&lt;/p&gt;</description>
    </item>
    <item>
      <title>LCP数组、后缀自动机、后缀树（？）</title>
      <link>https://daichao1997.github.io/posts/tech/2018-11-02-lcp%E6%95%B0%E7%BB%84%E5%90%8E%E7%BC%80%E8%87%AA%E5%8A%A8%E6%9C%BA/</link>
      <pubDate>Fri, 02 Nov 2018 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2018-11-02-lcp%E6%95%B0%E7%BB%84%E5%90%8E%E7%BC%80%E8%87%AA%E5%8A%A8%E6%9C%BA/</guid>
      <description>&lt;h2 id=&#34;lcp数组&#34;&gt;LCP数组&lt;/h2&gt;
&lt;h3 id=&#34;定义&#34;&gt;定义&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://daichao1997.github.io/%E5%90%8E%E7%BC%80%E6%95%B0%E7%BB%84.html&#34;&gt;有了后缀数组&lt;/a&gt;，也就有了每个后缀的大小顺序。&lt;/p&gt;
&lt;p&gt;但现在我们有另一个奇怪的需求：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;对于任意两个后缀，求它们的最长公共前缀(Longest Common Prefix, LCP)。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;啊？为什么有这个需求？我也不知道，但大佬说很有用，那就求吧。&lt;/p&gt;</description>
    </item>
    <item>
      <title>神奇的优化方式</title>
      <link>https://daichao1997.github.io/posts/tech/2018-11-02-%E5%AD%A6%E4%B9%A0%E4%B8%80%E4%B8%8B%E5%A4%A7%E4%BD%AC%E7%9A%84%E9%AB%98%E7%BA%A7%E4%BC%98%E5%8C%96%E6%8A%80%E5%B7%A7/</link>
      <pubDate>Fri, 02 Nov 2018 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2018-11-02-%E5%AD%A6%E4%B9%A0%E4%B8%80%E4%B8%8B%E5%A4%A7%E4%BD%AC%E7%9A%84%E9%AB%98%E7%BA%A7%E4%BC%98%E5%8C%96%E6%8A%80%E5%B7%A7/</guid>
      <description>&lt;p&gt;Kickstart Round F 2018第一名&lt;a href=&#34;https://code.google.com/codejam/contest/3314486/scoreboard#vf=1&#34;&gt;Benq&lt;/a&gt;的参赛代码，光开头几行就把我吓得魂飞魄散。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#pragma GCC optimize (&amp;#34;O3&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#pragma GCC target (&amp;#34;sse4&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;bits/stdc++.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;ext/pb_ds/tree_policy.hpp&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;ext/pb_ds/assoc_container.hpp&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;ext/rope&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__gnu_pbds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__gnu_cxx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define sz(x) (int)(x).size()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Tree&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tree&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null_type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;less&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rb_tree_tag&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tree_order_statistics_node_update&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;setIn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;freopen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;r&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stdin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;setOut&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;freopen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;w&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stdout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;ios_base&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sync_with_stdio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sz&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;setIn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;.in&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;setOut&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;.out&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;c1&#34;&gt;// ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;gcc-function-attributes&#34;&gt;GCC Function Attributes&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#pragma GCC optimize (&amp;#34;O3&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#pragma GCC target (&amp;#34;sse4&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html&#34;&gt;Common Function Attributes&lt;/a&gt;
&lt;a href=&#34;https://gcc.gnu.org/onlinedocs/gcc/x86-Function-Attributes.html&#34;&gt;x86 Function Attributes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;指定GCC做O3优化，支持&lt;a href=&#34;https://en.wikipedia.org/wiki/SSE4&#34;&gt;SSE4&lt;/a&gt;指令。&lt;/p&gt;</description>
    </item>
    <item>
      <title>The KMP Algorithm</title>
      <link>https://daichao1997.github.io/posts/tech/2018-10-29-kmp/</link>
      <pubDate>Mon, 29 Oct 2018 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2018-10-29-kmp/</guid>
      <description>&lt;p&gt;Not difficult to understand. I learned it from &lt;a href=&#34;https://www.coursera.org/learn/algorithms-on-strings/home/week/3&#34;&gt;Coursera&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;prefix-function&#34;&gt;Prefix Function&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A &amp;ldquo;Border&amp;rdquo; of a string, is a substring that both acts as a &lt;strong&gt;prefix&lt;/strong&gt; and a &lt;strong&gt;suffix&lt;/strong&gt; of that string&lt;/li&gt;
&lt;li&gt;The &amp;ldquo;Prefix Function&amp;rdquo; of a string records the length of the longest border of every prefix of that string&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;symbol&#34;&gt;Symbol&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;s&lt;/code&gt; is a string&lt;/li&gt;
&lt;li&gt;&lt;code&gt;s[:i]&lt;/code&gt; is a prefix of &lt;code&gt;s&lt;/code&gt; made up by &lt;code&gt;s[0], s[1], ..., s[i-1]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;L[i]&lt;/code&gt; is the length of the longest border of &lt;code&gt;s[:i]&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;In other words, &lt;code&gt;L&lt;/code&gt; is the &amp;ldquo;Prefix Function&amp;rdquo; of &lt;code&gt;s&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;L[i+1] &amp;lt;= L[i]+1&lt;/code&gt;, and the equality holds if and only if &lt;code&gt;s[L] = s[i]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The longest border of the longest border of a string, is the second longest border of that string.&lt;/li&gt;
&lt;li&gt;if some border of &lt;code&gt;s[:i]&lt;/code&gt; has a length of &lt;code&gt;len&lt;/code&gt; and &lt;code&gt;s[len] = s[i]&lt;/code&gt;, then there must be a border in &lt;code&gt;s[:i+1]&lt;/code&gt; with a length of &lt;code&gt;len+1&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;method&#34;&gt;Method&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;L[0] = 0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;L[i+1] = len + 1&lt;/code&gt;, where &lt;code&gt;len&lt;/code&gt; is the length of the longest border of &lt;code&gt;s[:i]&lt;/code&gt; that satisfies &lt;code&gt;s[len] = s[i]&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;To find &lt;code&gt;len&lt;/code&gt;, try every border of &lt;code&gt;s[:i]&lt;/code&gt; from the longest to the shortest&lt;/li&gt;
&lt;li&gt;To find the next longest border, see &lt;strong&gt;Conclusion 2&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;If no border is found, simply compare &lt;code&gt;s[0]&lt;/code&gt; with &lt;code&gt;s[i]&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;If &lt;code&gt;s[0] = s[i]&lt;/code&gt;, then &lt;code&gt;L[i+1] = 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Else, &lt;code&gt;L[i+1] = 0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;implementation&#34;&gt;Implementation&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;pf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;kmp&#34;&gt;KMP&lt;/h2&gt;
&lt;h3 id=&#34;symbol-1&#34;&gt;Symbol&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;p&lt;/code&gt; is the pattern string, &lt;code&gt;t&lt;/code&gt; is the text string&lt;/li&gt;
&lt;li&gt;&lt;code&gt;L&lt;/code&gt; is the &amp;ldquo;Prefix Function&amp;rdquo; of &lt;code&gt;p&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;conclusion-1&#34;&gt;Conclusion&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;If &lt;code&gt;p&lt;/code&gt; matches &lt;code&gt;t&lt;/code&gt; partially with a longest common prefix &lt;code&gt;p[:i]&lt;/code&gt;, then no matches will be found before &lt;code&gt;p&lt;/code&gt; is shifted &lt;code&gt;len(p) - L[i]&lt;/code&gt; positions rightwards.
&lt;ul&gt;
&lt;li&gt;There are two &amp;ldquo;submatches&amp;rdquo; in this partial match, both of which are the longest border of &lt;code&gt;p[:i]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The left one acts as a prefix, while the right one acts as a postfix&lt;/li&gt;
&lt;li&gt;&lt;code&gt;p&lt;/code&gt; is shifted rightwards, so does &lt;code&gt;p[:i]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;No matches are possible before the left submatch arrives at the previous position of the right submatch&lt;/li&gt;
&lt;li&gt;The length of this &amp;ldquo;vacuum area&amp;rdquo; is &lt;code&gt;len(p) - L[i]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;method-1&#34;&gt;Method&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Make &lt;code&gt;s = p + &#39;$&#39; + t&lt;/code&gt;, where &amp;lsquo;$&amp;rsquo; is absent from both &lt;code&gt;p&lt;/code&gt; and &lt;code&gt;t&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Calculate the &amp;ldquo;Prefix Function&amp;rdquo; of &lt;code&gt;s&lt;/code&gt;, marked as &lt;code&gt;L&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;A match is found at position &lt;code&gt;i - 2 * len(p)&lt;/code&gt; when &lt;code&gt;L[i] = len(p)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Under such circumstances, the longest border of &lt;code&gt;s[:i]&lt;/code&gt; happens to be &lt;code&gt;p&lt;/code&gt; itself, as &lt;code&gt;p&lt;/code&gt; is a prefix of &lt;code&gt;s&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;This border is also a substring of &lt;code&gt;s&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Thanks to the &amp;lsquo;$&amp;rsquo; sign, we can guarantee that this border never crosses the real &amp;ldquo;border&amp;rdquo; between &lt;code&gt;p&lt;/code&gt; and &lt;code&gt;t&lt;/code&gt;, so it is also a substring of &lt;code&gt;t&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Thus the starting position of the match is &lt;code&gt;i - (len(p) - 1)&lt;/code&gt; in &lt;code&gt;s&lt;/code&gt;, and &lt;code&gt;i - (len(p) - 1) - (len(p) + 1)&lt;/code&gt; in &lt;code&gt;t&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;implementation-1&#34;&gt;Implementation&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cin&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;-1&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;$&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;pf&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;prefix_func&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;delete&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>破解外星代码：详解后缀数组模板</title>
      <link>https://daichao1997.github.io/posts/tech/2018-10-29-%E5%90%8E%E7%BC%80%E6%95%B0%E7%BB%84/</link>
      <pubDate>Mon, 29 Oct 2018 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2018-10-29-%E5%90%8E%E7%BC%80%E6%95%B0%E7%BB%84/</guid>
      <description>&lt;p&gt;朕听说，后缀数组只需寥寥二十行代码即可求出？&lt;/p&gt;
&lt;p&gt;是，陛下。&lt;/p&gt;
&lt;p&gt;快，快呈上来！&lt;/p&gt;
&lt;p&gt;是，陛下。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MAXN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MAXN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MAXN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ws&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MAXN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;inline&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;cmp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;SA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ws&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ws&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ws&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ws&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ws&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ws&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ws&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ws&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ws&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ws&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;陛下……陛下！快请御医！&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;鉴于我也是第一次接触后缀数组，理解程度还很低，再加上类似的博客早已烂大街，因此不求读者能看懂或学到什么东西了。你还可以向我&lt;a href=&#34;mailto:fordring866@gmail.com&#34;&gt;留言&lt;/a&gt;提出指导意见，我会非常欢迎。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43;查漏补缺</title>
      <link>https://daichao1997.github.io/posts/tech/2018-10-26-c&#43;&#43;%E6%9F%A5%E6%BC%8F%E8%A1%A5%E7%BC%BA/</link>
      <pubDate>Fri, 26 Oct 2018 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2018-10-26-c&#43;&#43;%E6%9F%A5%E6%BC%8F%E8%A1%A5%E7%BC%BA/</guid>
      <description>&lt;p&gt;我已经不怎么记得“程序设计实习”的内容了。&lt;/p&gt;
&lt;h2 id=&#34;c与c的细微区别&#34;&gt;C与C++的（细微）区别&lt;/h2&gt;
&lt;h3 id=&#34;c支持但c不支持&#34;&gt;C++支持，但C不支持&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;面向对象&lt;/li&gt;
&lt;li&gt;重载、模板、继承、虚函数、友元函数&lt;/li&gt;
&lt;li&gt;语言层面上的异常处理&lt;/li&gt;
&lt;li&gt;引用&lt;/li&gt;
&lt;li&gt;输入输出流&lt;/li&gt;
&lt;li&gt;new/delete/explicit/class等关键词&lt;/li&gt;
&lt;li&gt;结构体中定义成员函数&lt;/li&gt;
&lt;li&gt;结构体中定义静态变量&lt;/li&gt;
&lt;li&gt;直接在结构体中初始化成员变量&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;c支持但c不支持-1&#34;&gt;C支持，但C++不支持&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;调用尚未声明的函数&lt;/li&gt;
&lt;li&gt;将const的地址赋给non-const指针&lt;/li&gt;
&lt;li&gt;将void*值直接赋给其他指针，malloc()返回的就是void*&lt;/li&gt;
&lt;li&gt;不初始化const&lt;/li&gt;
&lt;li&gt;&lt;code&gt;char *c = 333&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;其他&#34;&gt;其他&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;C认为func()=func(&amp;hellip;)，即func可以接受任意个数的参数。C++认为func()=func(void)，即func不能接受参数。因此在C中使用func(void)会显得你更专业、更严谨&lt;/li&gt;
&lt;li&gt;C认为字面字符常量是整数，C++则认为是字符。&lt;code&gt;sizeof(&#39;a&#39;)&lt;/code&gt;，前者得到4，后者得到1&lt;/li&gt;
&lt;li&gt;C的结构体类型必须带上struct前缀。&lt;code&gt;struct T; T a;&lt;/code&gt;是不合法的C代码，但C++认为没问题&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sizeof(1==1)&lt;/code&gt;的C值为4，C++值为1，因为C++支持bool类型&lt;/li&gt;
&lt;li&gt;空结构体的sizeof值在C是0，在C++是1&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;引用和指针的区别&#34;&gt;引用和指针的区别&lt;/h2&gt;
&lt;p&gt;总地来说，引用不如指针灵活，但更安全。引用值必须&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crowbar源码剖析：语法</title>
      <link>https://daichao1997.github.io/posts/tech/2018-10-08-crowbar%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90%E8%AF%AD%E6%B3%95/</link>
      <pubDate>Mon, 08 Oct 2018 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2018-10-08-crowbar%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90%E8%AF%AD%E6%B3%95/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://daichao1997.github.io/Crowbar%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90%EF%BC%9A%E8%AF%8D%E6%B3%95.html&#34;&gt;上回书说到&lt;/a&gt;，Crowbar的词法分析器将具体的源码文件解析为一串抽象的&lt;strong&gt;符号&lt;/strong&gt;，并伴随着一系列附属动作。接下来轮到Crowbar的语法分析器登场了——它是如何解读这串符号的？解读的同时又做了些什么事情呢？我们一起来看看。&lt;/p&gt;
&lt;p&gt;本篇有非常多杂七杂八的代码，看的时候一定要把握住最大的共同点——&lt;strong&gt;语法&lt;/strong&gt;和&lt;strong&gt;数据结构&lt;/strong&gt;的高度一致。很多代码都是相似的，把握住&lt;strong&gt;设计思想&lt;/strong&gt;才是最关键的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crowbar源码剖析：词法</title>
      <link>https://daichao1997.github.io/posts/tech/2018-10-07-crowbar%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90%E8%AF%8D%E6%B3%95/</link>
      <pubDate>Sun, 07 Oct 2018 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2018-10-07-crowbar%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90%E8%AF%8D%E6%B3%95/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://daichao1997.github.io/Crowbar%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90%EF%BC%9A%E6%80%BB%E4%BD%93%E6%A1%86%E6%9E%B6.html&#34;&gt;上回书说到&lt;/a&gt;，Crowbar用了Lex/Yacc这对经典工具来生成词法/语法分析器。它们具体的编写规则我不想细说，请参考&lt;a href=&#34;https://segmentfault.com/a/1190000000396608&#34;&gt;这篇文章&lt;/a&gt;，但大致来讲，两者都是“一边匹配一边触发动作”。&lt;/p&gt;
&lt;p&gt;本篇文章会集中讨论&lt;strong&gt;匹配&lt;/strong&gt;触发了&lt;strong&gt;哪些动作&lt;/strong&gt;，而不讲如何匹配、为什么匹配。&lt;/p&gt;
&lt;h2 id=&#34;crowbar-lex&#34;&gt;Crowbar-Lex&lt;/h2&gt;
&lt;p&gt;这部分讲述Lex如何对五花八门的字符作出不同反应，用&lt;code&gt;&amp;lt;X&amp;gt;exp{action}&lt;/code&gt;表示“状态X下，与exp匹配时，执行action”。为了给Yacc传递符号的解析结果，双方约定了一种“通信方式”：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crowbar源码剖析：总体框架</title>
      <link>https://daichao1997.github.io/posts/tech/2018-10-06-crowbar%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90%E6%80%BB%E4%BD%93%E6%A1%86%E6%9E%B6/</link>
      <pubDate>Sat, 06 Oct 2018 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2018-10-06-crowbar%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90%E6%80%BB%E4%BD%93%E6%A1%86%E6%9E%B6/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Crowbar是《自制编程语言》一书中作者自己构思的无类型语言。本书一边向读者讲述编程语言的基本要素，一边讲解具体的实现方法，可作为编译技术的入门材料。此外，书中还有一门叫做Diksam的静态类型语言，等我学完了再来写。不🐦，真的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>学习编写单元测试</title>
      <link>https://daichao1997.github.io/posts/tech/2018-09-14-%E5%AD%A6%E4%B9%A0%E7%BC%96%E5%86%99%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/</link>
      <pubDate>Fri, 14 Sep 2018 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/tech/2018-09-14-%E5%AD%A6%E4%B9%A0%E7%BC%96%E5%86%99%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/</guid>
      <description>&lt;p&gt;这两周的工作主要是给自己之前写的代码填坑，也就是写单元测试。&lt;/p&gt;
&lt;h2 id=&#34;我做单元测试的方法&#34;&gt;我做单元测试的方法&lt;/h2&gt;
&lt;h3 id=&#34;裸测很难搞&#34;&gt;裸测很难搞&lt;/h3&gt;
&lt;p&gt;单元测试（unit testing）是指对软件中的最小可测试单元进行检查和验证，而我要测试的内容是一些用Go语言写的接口，大概长这个样子：&lt;/p&gt;</description>
    </item>
    <item>
      <title>参加PKU Hackathon</title>
      <link>https://daichao1997.github.io/posts/life/2018%E5%8F%82%E5%8A%A0pku-hackathon/</link>
      <pubDate>Mon, 01 Jan 2018 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2018%E5%8F%82%E5%8A%A0pku-hackathon/</guid>
      <description>&lt;h1 id=&#34;hackathon-pku-2018&#34;&gt;Hackathon PKU 2018&lt;/h1&gt;
&lt;p&gt;5月12日，SBN、LYQ、JXT三位大佬带我参加Hackathon PKU。比赛于当晚21:00开始，来自中国各大高校的40支队伍展开了激烈角逐——还不到一个小时，咖啡厅里的零食便被一扫而空。偌大的双创中心传来阵阵键盘声，还有我怎么也连不上Wi-Fi的抱怨声。&lt;/p&gt;</description>
    </item>
    <item>
      <title>在西安过夜</title>
      <link>https://daichao1997.github.io/posts/life/2018%E5%9C%A8%E8%A5%BF%E5%AE%89%E8%BF%87%E5%A4%9C/</link>
      <pubDate>Mon, 01 Jan 2018 00:00:00 +0800</pubDate>
      <guid>https://daichao1997.github.io/posts/life/2018%E5%9C%A8%E8%A5%BF%E5%AE%89%E8%BF%87%E5%A4%9C/</guid>
      <description>&lt;h1 id=&#34;30元一晚上的火车站旅馆&#34;&gt;30元一晚上的火车站旅馆&lt;/h1&gt;
&lt;p&gt;七月初去青海的途中，我突然决定凌晨两点在西安下车，然后转车去上海。&lt;/p&gt;
&lt;p&gt;下车后第一件事情，自然是找一个过夜的地方，但你一定料到了－－火车站周围的旅馆早已住满，只剩下几百元一晚上的星级酒店。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
