<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>james1BadCreeper</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://iznomia.github.io/</id>
  <link href="https://iznomia.github.io/" rel="alternate"/>
  <link href="https://iznomia.github.io/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, james1BadCreeper</rights>
  <subtitle>而我行走于世界的边缘 | Made with ❤️ by iznomia</subtitle>
  <title>iznomia</title>
  <updated>2026-04-13T00:00:00.000Z</updated>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="记录" scheme="https://iznomia.github.io/categories/%E8%AE%B0%E5%BD%95/"/>
    <category term="游戏" scheme="https://iznomia.github.io/tags/%E6%B8%B8%E6%88%8F/"/>
    <content>
      <![CDATA[<p>游玩时间：31.7h。没有踩掉所有的 BE。</p><p>刚发布的时候就总是刷到了，但是一直没玩。</p><p>直到清明节考虑了一下是否要玩，大概看了一下评价是否是废萌，发现不是，于是决定买下。在这期间被剧透到有一二周目这一说。</p><p>白发粉瞳加黑发，光对立公式这一块。</p><h2 id="第一幕">第一幕</h2><p>希罗在序章就死了吗。<br>其实即使没有剧透，这里也肯定能猜出来有轮回。不可能搞了一个人设之后直接让她死不为剧情服务的。</p><p>日常中有一种，只要一直作为旁观者不随便干事就不会死的感觉。不知道是不是我的错觉。如果这是真的，不知道是不是像瓦棚中学那样故意将人引入一个陷阱。</p><p>为了真实体验把选项提示给关掉了。</p><h3 id="第一章">第一章</h3><p>确实没想到来的这么快。此时接近下班，这部分留到了第二天。</p><p>按照我自己的想法在沐浴房选择了若有所思，然后死了。镜子感觉有说法。这个选项再一次印证了“只要不干事就不会死”的猜想。</p><p>大胆猜测实际上魔女并不存在，这一切只是谎言。大概率否决《东方快车谋杀案》中全员凶手那种。</p><p>配乐的弦乐非常有感觉。</p><p>扫帚吗，确实很震惊。</p><p>对自己的评价是“做得好”吗，猜测樱羽已经轮回了。有点期待后续发展了。</p><h3 id="第二章">第二章</h3><p>日常：我觉得大叔不是好人，也不是坏人。这个发展是因为懒得做热气球的部分了吗还是什么。</p><p>日常确实有点短了，我好像不适合接受高密度的紧张信息。审判的篇幅给我的感觉跟日常有 73 的感觉，46 可能比较适合我。</p><p>目前看来推理是不太看发言状态的，只看逻辑。我没怎么玩过这类游戏，不知道。</p><p>你们真是喜欢使唤鸟呢。</p><p>我们非常害怕过于冷静，因为那样你会变成一种，非人。每次在按处刑前都会停很久，虽然什么意义都没有。</p><p>给樱羽的诅咒和她初中时的一样呢。</p><blockquote><p>也许总是有人在站在道德制高点指责你。我们也许通过高等教育消除了部分无知，但善良可能一辈子也无法获取到。你也无法判断指责你的人究竟是善良与否，因为只有多数人的选择才会被称为正义，最终胜利的人群才会被称为正义。<br>不要寻找任何借口，永远不要认为自己能瞒天过海，即使天可能根本就不存在。请永远遵循你善良的本性：尊重这个世界的一切，无论它是好是坏。</p></blockquote><p>依然是“做得好”吗，现在更怀疑双重人格。</p><h3 id="第三章">第三章</h3><p>被剧透过雪莉是凶手，感觉要来了。希望是假的，如果是真的也太残忍了。</p><p>真双重人格啊。</p><p>怎么感觉这个扫帚的 BE 莫名其妙地（）</p><p>真是雪莉啊，太残忍了。</p><h3 id="第四章">第四章</h3><p>我以为应该没有魔女审判了，居然还有。</p><p>哦对应该有，主角还没死。</p><p>不对主角没死，直接交换位置吗。哦不是，就是又死了一个人。</p><h3 id="第五章">第五章</h3><p>第二重人格是大魔女，精彩。</p><p>之前的结论猜错了，主角不会死，天选之子。</p><p>这个翅膀的设计很妙的，如果采用天使那种形象的话确实会产生违和感，肋骨的设计塑造出作品需要的压抑感却不失庄严。</p><p>直接出 ED 了，经典的好设计。但是 ED 倒回是之前没有见过的，我唯一见过的就是 arcaea 的返回标题页面然后换背景😅</p><h2 id="第二幕">第二幕</h2><h3 id="第一章-2">第一章</h3><p>回溯的是希罗，出乎意料。以“死亡回溯”作为魔法，一开始的猜测以为是樱羽的本格不满现状然后回溯😅</p><p>希罗在第一章审判开始之前就猜出了监牢的部分真相吗，太厉害了。</p><p>猜测希罗将月托付给了樱羽。欸幕后黑手一上来就死了吗。</p><p>这第一个伪证要不是提示地这么明显要选伪证真的有人敢选吗。。。虽然最后的解释是合理的。逃离焦点位确实帅。</p><p>欸第二幕希罗作为主角艾玛说话居然也有特效吗，官配了。</p><p>感觉事情的发展有点像樱羽带着黑化人格回溯了，敲晕希罗的应该是月代雪。</p><div class="tag-plugin image"><div class="image-bg"><img src="/images/2026/mgwt/4.jpg" alt="名场面" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">名场面</span></div></div><p>第二幕的处刑的发言逻辑有逻辑发言游戏高玩的感觉了，希罗真的帅。</p><p>“没有证据就是最大的证据”什么剧本杀逻辑，没嫌疑就一定是坏人是吧。</p><p>欸不对打昏希罗的不是月代雪吗。</p><p>在笑的樱羽，依然。很难猜测月代雪的目的究竟是什么，单纯的复仇吗。</p><h3 id="第二章-2">第二章</h3><p>精彩。</p><h3 id="第三章-2">第三章</h3><p>樱羽对现场做了什么。此时的樱羽是樱羽还是月代雪。</p><p>开始审判的时候突然想到了一句话：他说你是邪恶你就是邪恶啊，你们邪恶方多一个人多一张嘴，四张嘴随便说就把他说倒了啊。</p><p>这类游戏的大部分推理的大前提是不存在共犯。存在共犯情况会变得骤然复杂，再离谱一点就成东方快车了。</p><p>真的有凶手吗，原以为这一次目的就是证明自己无罪。</p><p>以自己生命为赌注的嫁祸。</p><p>不是真有凶手啊。</p><p>好精彩的借力打力。</p><h3 id="第四章-2">第四章</h3><p>已经被侵蚀理智了吗。</p><p>虽然我知道不应该去追那个影子，但是好奇去选了一下，这湖里怎么还有怨灵啊（）</p><p>医护室那段希罗已经猜到大魔女是月代雪了，就不能在这一段跟艾玛多说几句话吗（）</p><p>坏了死了，我之前关于天选之子的结论是错误的。不应该要被杀的时候强行开大吗。</p><p>冰块杀人又来了，虽然不是真相。</p><p>看到书的时候真的很感人。</p><h3 id="第五章-2">第五章</h3><p>没有进第三幕吗，要是没被剧透真以为没有第三幕了。</p><p>第一幕的记忆居然被灌进来了，为什么。哦原来是这样啊，不同时间线都能互换啊。</p><p>猜测艾玛没法变成魔女，因为这一过程只能由月代雪推动。猜错了。为什么只有第一幕的艾玛魔女化时不会毁容。</p><p>欸艾玛居然完全没有月代雪的记忆吗，好像不是完全由自己控制的将月代雪的记忆转移到自己身上然后忘记月代雪，应该是月代雪操控的这一过程，然后某种程度上可以操控侵蚀的速度。我还是倾向于月代雪干的，第二幕第三章可以看到艾玛是有为了朋友牺牲自己的觉悟的。</p><h2 id="第三幕">第三幕</h2><p>原来冰上梅露露不是单纯的弃子吗。</p><p>一个问题：到第三幕一半的时候希罗直接隐身了。主要是因为需要解决的就是艾玛和雪的故事，虽然按照之前铺垫的东西确实也只能这样写，但这样的话就差了点感觉，升华的不够。</p><p>我去九十九分钟的审判时间，哦原来是结局。</p><p>总结一下：月代雪附身艾玛的原因是想看这么善良的孩子会不会被因周围人的欺压而变坏，如果是那么人类就不值得被拯救。</p><p>彩蛋应该是为因循村做铺垫的。</p><h2 id="总结">总结</h2><p>首先声明一个观点：我是比较讨厌梅露露的。月代雪在决定开杀前都没杀一个人，你就为找一个大魔女杀了六百多号人，无语了。所以我是很讨厌第一幕第五章最后那个 bad end 的。</p><p>个人觉得可以改进的地方：第三幕结的只能说差强人意。</p><p>就是说，可以发现我在第一幕第二幕猜了很多的可能，像可能有樱羽双重人格表现的更复杂的原因，或者月代雪策划这一切有更复杂的原因比如艾玛真的是唯一选择（现在就是，单纯因为是个善良的孩子所以选择了她）。虽然我不是很会编，但是现在的结局有点平凡了。</p><p>现在是想往感人的方向塑造，但是感觉没拉到足够的高度。应该对三人组的初中时代有更多的描写，提供更多的“雪和二人就是最好的朋友”的线索。这样更方便在终审编。目前的话就要么是樱羽希罗要么是樱羽和雪，不是很有三人组的感觉。本来樱羽和希罗是一种“相互制约”的状态（因为她们几乎处于两个极端），实际上她们的陪伴对双方都是一种救赎。我挺想看到雪加入之后会发生什么更多的故事。<s>其实可能只是我想看三人组的日常。</s></p><p>另一种可能就是塑造成推理类作品最后应该有个酣畅淋漓的真相（比如《东方快车谋杀案》），但这样好像月代雪不是很好洗白。如果真的能写出把两个方向都描绘出来的剧本，那么这部作品真的就可以载入史册了。</p><p>原来的结尾也是一种美呢，但却是差了点味道。</p><p>评分：8.0 / 10.0。</p><p>适合喜欢轻推理的玩家，由于我没玩过偏硬核推理的单机游戏（比如大逆转），所以不清楚这类玩家是否会感到别扭，不做评价。也有一种对玩家压力的考量吧，既然审判部分是占大头的，那么相应地推理部分就没那么硬核。如果能将推理做得更硬核一点（但现在这样可能不太会对大众胃口，可能也是商业的一种妥协吧，不追究了），然后增加日常的数量，可能更合我的审美一点，但是这样的话对编剧也是非常大的考验。<br>世界观设计的不错，设定很不错也不怎么超出本格，因此能写的东西足够也很能去符合逻辑。配上哥特风的美术（虽然我觉的美术质量还可以提升，主要还是缺钱啊），成功塑造出荒诞神秘恐怖的感觉，在这种环境下进行推理让人身临其境。<br>配乐非常不错，第一个让我把非 OPED 加进歌单里的 ADV，审判时的音乐非常有感觉。部分曲子真的太会写了（点名《愛の残滓》等，好会写的 pre-chorus，将 chorus 全部失真掉好有表现力，非常创造性地把一般用在 intro 的钟声采样用在了 outro 达成了一种无法逃出的自欺欺人的因果旋律的效果，太厉害了）。<br>人设非常不错，所有角色都能让人记住。令我印象比较深刻的是樱羽的“刻意表示弱小来吸引对方的注意力，其实只是过于善良很害怕失去身边的人”，希罗的“敏锐坚决，为了自己要拯救的人坚决走到底即使灭亡”，以及橘雪莉的“过于乐观开朗而实际上是难以感受到感情，但很多时候又会展现极为温柔的一面”（我才知道奶龙还可以来形容这个，但是你拿一个大黄傻胖龙形容女孩子真的好吗）。少女之间的互动非常有意思的，使得游戏非常有表现力。</p><p>如果把细节完善好（其实就是经费再多一点，可以注意到有些本来要写东西的部分都被放弃了，比如记笔记的功能和允许不存在凶手的规则等，我挺期待真的某一案不存在凶手，但是只是在第一幕作为一个中途讨论出的可能而并没有真正发生；日常部分是偏少的，等等；总之就还是缺钱），可以给到 9.0。<br>如果终章做出那种给我完全震撼掉而不是像现在这样感觉无论从什么角度来说都好像差一点的情况（这样的话可能就需要再加一幕了，增加转折，前面还需要埋更多的线索和伏笔），评分可以给到 10.0。还是可惜经费不足吧，有可能是这个原因，没把故事体量设计得那么大。而且我严重怀疑第二幕不做搜查部分的情节而是直接关起来就是没钱了。正常的推理小说还是应该案件+解密+真相。但从另一个角度来说，我希望多一幕的原因也是故事做得不错我舍不得它那么快结束。</p><p>不知道续作的世界观能否同样精彩呢？如果发挥的好应该也是一部不错的作品。</p><p>总体来说是非常不错的作品，之前好像也没有这类题材的作品吧（？）<br>我觉得还是非常值得去玩的。</p><p>有看到说动画化呼声很高，希望有金主投钱qwq</p><p>把艾玛希罗相拥的最终 CG 设为了壁纸，至少会保留一段时间。曾经在另一部 ADV 的序言中见过一个观点，请“在这之后，优雅地忘记一切”。看似是怕冲击太深对现实产生影响，但现在看来，敢放这狠话的，可能只是单纯地作者有很大把握你忘不掉。</p><p>一部好的文学作品一定会做到这一点。手段有很多，比如思想深度、语言的精妙或者映射时代。如果做到“情感的真实与共鸣”（《魔裁》在这一点上是成功的，通过强压抑的氛围塑造，不断死人却又看不到任何终结一切的希望），那么就有很大概率使得读者在一切之后产生一种空虚感。属于那个世界的故事结束了，但是你的思绪仍然留在那里。</p><p>真是最为温柔的诅咒呢。至少对我来说，《魔裁》做到了。</p><div class="tag-plugin image"><div class="image-bg"><img src="/images/2026/mgwt/ed.jpg" alt=":)" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">:)</span></div></div>]]>
    </content>
    <id>https://iznomia.github.io/posts/58ecea29/</id>
    <link href="https://iznomia.github.io/posts/58ecea29/"/>
    <published>2026-04-07T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>游玩时间：31.7h。没有踩掉所有的 BE。</p>
<p>刚发布的时候就总是刷到了，但是一直没玩。</p>
<p>直到清明节考虑了一下是否要玩，大概看了一下评价是否是废萌，发现不是，于是决定买下。在这期间被剧透到有一二周目这一说。</p>
<p>白发粉瞳加黑发，光对立公式]]>
    </summary>
    <title>一种不存在的记忆 ——《魔法少女ノ魔女裁判》游玩记录</title>
    <updated>2026-04-13T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="记录" scheme="https://iznomia.github.io/categories/%E8%AE%B0%E5%BD%95/"/>
    <category term="游记" scheme="https://iznomia.github.io/tags/%E6%B8%B8%E8%AE%B0/"/>
    <content>
      <![CDATA[<p>清明节第二天打算次日去净月潭玩，发现学生票只要十五块，难以置信。于是在第二天买了票。</p><p>坐地铁去净月潭时发现这条线往另一个方向坐可以到达伪满皇宫，打算以后前往。</p><p>据说好像禁骑行，我以为是没事的，十多公里的话还是能走的。直到进去后我才知道是将近二十公里，而园区内出租的自行车又是那种给两个人骑的半电动自行车，遂放弃，打算步行。</p><div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/69da068b757fdade5ead83f4.jpg" alt="刚进去的上山路上拍摄到的正在睡觉的野猫" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">刚进去的上山路上拍摄到的正在睡觉的野猫</span></div></div><p>纪念品商店的大号松鼠售价八十五元，比玄武湖的烫头鸭便宜，但这次我没买任何纪念品（我在玄武湖购买了一个发夹）。</p><p>在纪念品商店有两条路可以走，一条是跨过坝，另一条是沿着一开始的公路走。我看坝上的人多，以为这是正路，便跨过了坝。后来看到观光车每次都面向我冲来，我才知道我走反了，把逆时针的路走成了顺时针。虽然走的路是一样的，但总觉的怪怪的。但事后看来，如果我没有走反，一些景点我就看不到了（因为我是下午去的，而某些地方晚些时候会锁门）。</p><div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/69da06bf757fdade5ead8404.jpg" alt="坝旁边的一座灯塔，非常有氛围感，可惜进不去。今天部分湖面依然处于结冰状态。" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">坝旁边的一座灯塔，非常有氛围感，可惜进不去。今天部分湖面依然处于结冰状态。</span></div></div><p>跨过坝左转，来到了森林探险区。就是把栈道、滑索之类的结合在一起组成的闯关路线供小朋友游玩。我在旁边驻足了一会儿，观赏孩子们闯关时的表现。<br>这种时光离我一去不复返了啊。碰巧老友 Eric 最近去了举办 NOI2024 的重庆育才中学，真就，欲买桂花同载酒。</p><p>然后掉头，就踏上了正路，即开始环绕净月潭。第一个遇到的地方是关门的星巴克，旁边的座位依然挂着“消费区”，绷不住了。</p><p>再往前走到达了一个植物园，更往里的路好像是“科研重地”，因此我没往更深处去。近一点的地方是一座小的科普基地，在里面看到了一些很好看的标本。</p><div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/69da07df757fdade5ead846c.jpg" alt="我居然还想了想为什么这个落新妇这么暗，哦不对这是标本不是活的植株" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">我居然还想了想为什么这个落新妇这么暗，哦不对这是标本不是活的植株</span></div></div><div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/69da0768757fdade5ead843d.jpg" alt="白斑迷蛱蝶" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">白斑迷蛱蝶</span></div></div><p>想起了之前学习《生命科学导论》时教授分享自己在科考时拍摄到的动物。也许在某条世界线里我真的会去学习生命科学呢，也是自己非常喜欢的学科。</p><p>由于距离比较远，我选择在公路和栈道种选择比较近的路走。第一次踏上栈道时，下雪了，比较难以置信。虽然在出发前天就是灰云压城般的，但是天气预报报的是多云，我原以为最多下个小雨，因为那天是 0℃~4℃，但是却下了很大的雪。我撑起了伞，虽然要担心伞被路边的树枝划到而破损，但真的很有感觉。</p><div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/69da087a757fdade5ead84a9.jpg" alt="相机不是很好，但是依然可以看出此时在下雪。由于气温较高，基本上落地即化。" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">相机不是很好，但是依然可以看出此时在下雪。由于气温较高，基本上落地即化。</span></div></div><p>虽然说厕所名义上是四点半关门，但实际上仍然可以使用，只是灯被关了，门没锁。</p><p>在路上遇到了好像是一个我忘记了叫什么名字的地方，种植灵芝和人参等，但我什么也没看到。</p><div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/69da0b2f757fdade5ead85a5.jpg" alt="从那条路下来后拍摄到的一张照片，我也忘了这里叫啥了" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">从那条路下来后拍摄到的一张照片，我也忘了这里叫啥了</span></div></div><div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/69da0b83757fdade5ead85be.jpg" alt="结冰的湿地公园" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">结冰的湿地公园</span></div></div><div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/69da0ba0757fdade5ead85ca.jpg" alt="拍到的鹅群" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">拍到的鹅群</span></div></div><div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/69da0bb5757fdade5ead85d5.jpg" alt="回坝的路途中拍到的很美的森林" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">回坝的路途中拍到的很美的森林</span></div></div><p>终于回到了坝，绕净月潭一圈的路程结束了，只剩下最后约一公里的距离就可以离开景区了。</p><p>当一切结束之后，坐上了地铁，想象中的疲乏感却并没有降临，可能是我体力确实比以前好了吧。</p><p>因那天下雪的原因，买到了日新楼底下的打骨折的果切，除了放的有点久水果串味了，赚麻了，赶上批发价了。</p><p>夏季的时候可能会再去一次，那时能看的东西应该会更多。</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/918d2f15/</id>
    <link href="https://iznomia.github.io/posts/918d2f15/"/>
    <published>2026-04-06T00:00:00.000Z</published>
    <summary>于清明节假期最后一天去了净月潭旅行，作一个记录。</summary>
    <title>冬行净月潭</title>
    <updated>2026-04-06T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="算法竞赛" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <category term="训练" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/%E8%AE%AD%E7%BB%83/"/>
    <category term="算法竞赛" scheme="https://iznomia.github.io/tags/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <content>
      <![CDATA[<p>Far Out feat. Micah Martin —— Our Own</p><span id="more"></span><h2 id="18-Angle-Beats-2-0">18 Angle Beats 2.0</h2><p><a href="https://qoj.ac/contest/947/problem/4241">https://qoj.ac/contest/947/problem/4241</a></p><p>其实就是 <code>*</code> 上下必选一个，左右必选一个，也就是连边，给边确定一个点。一个连通块是容易做的。对于单个的点直接 BFS 预处理。</p><h2 id="19-Menji-we-miss-you">19 Menji, we miss you!</h2><p><a href="https://qoj.ac/contest/2908/problem/15314">https://qoj.ac/contest/2908/problem/15314</a></p><p>问出与根的距离，然后每问一个点必然会排除掉 <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>3</mn></mrow><annotation encoding="application/x-tex">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="mord">1/3</span></span></span></span> 的点，直接做即可。<a href="https://qoj.ac/submission/2009001">代码</a>。</p><h2 id="20-No-more-regrets">20 No more regrets</h2><p><a href="https://qoj.ac/contest/2908/problem/15324">https://qoj.ac/contest/2908/problem/15324</a></p><p>直接分块。单侧递归？不做思考！</p><p>为什么场上不写这个，明明很简单。</p><h2 id="21-CF2195H-Codeforces-Heuristic-Contest-001">21 CF2195H Codeforces Heuristic Contest 001</h2><p><a href="https://codeforces.com/contest/2195/problem/H">https://codeforces.com/contest/2195/problem/H</a></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><mn>9</mn><mo>×</mo><mn>9</mn></mrow><annotation encoding="application/x-tex">9\times 9</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">9</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">9</span></span></span></span> 我随便一画就画出来了，无语了。</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/eac1c9fa/</id>
    <link href="https://iznomia.github.io/posts/eac1c9fa/"/>
    <published>2026-02-05T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>Far Out feat. Micah Martin —— Our Own</p>]]>
    </summary>
    <title>2026-02-05(#11)：Living in the hell that we made on our own</title>
    <updated>2026-02-05T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="算法竞赛" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <category term="训练" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/%E8%AE%AD%E7%BB%83/"/>
    <category term="算法竞赛" scheme="https://iznomia.github.io/tags/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <content>
      <![CDATA[<p>BlackY feat. Risa Yuzuki —— 華神樂</p><span id="more"></span><p>发的有点晚了。</p><h2 id="10-P14960-「KWOI-R1」XOR-and-Sliding-Window">10 P14960 「KWOI R1」XOR and Sliding Window</h2><p>不难发现每一位是独立的，因此考虑 01 怎么做。</p><p>把 <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>n</mi><mi mathvariant="normal">/</mi><mi>gcd</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>n</mi><mo separator="true">,</mo><mi>k</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">n/\gcd(n,k)</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="mord">/</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop"><span style="margin-right:0.0139em;">g</span>cd</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" style="margin-right:0.0315em;">k</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><msub><mi>a</mi><mrow><mi>i</mi><mo>+</mo><mi>k</mi></mrow></msub></mrow><annotation encoding="application/x-tex">a_{i+k}</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">i</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</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>我们还能对 <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.0315em;">k</span></span></span></span> 个同余类做翻转操作，而只有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>gcd</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>n</mi><mo separator="true">,</mo><mi>k</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\gcd(n,k)</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.0139em;">g</span>cd</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" style="margin-right:0.0315em;">k</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><mo>∣</mo><mo stretchy="false">(</mo><mi>k</mi><mi mathvariant="normal">/</mi><mi>g</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">2\mid (k/g)</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">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="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mord">/</span><span class="mord mathnormal" style="margin-right:0.0359em;">g</span><span class="mclose">)</span></span></span></span> 时才能实现翻转。</p><p><a href="https://qoj.ac/contest/506">Petrozavodsk Summer 2020. Day 6. Korean Contest</a>.</p><h2 id="11-G-Solo-Tree-Game">11 G. Solo Tree Game</h2><p>是 Nim 游戏。</p><h2 id="12-D-Non-Decreasing-Subarray-Game">12. D. Non-Decreasing Subarray Game</h2><p>由于是两个单调函数取 max 得到的单谷函数，因此是要尽可能找两个函数相等的点，无需三分，二分即可。</p><h2 id="13-E-Observer-Game">13. E. Observer Game</h2><p>如果先手能终结掉那就先手获胜。</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><mi>k</mi></mrow><annotation encoding="application/x-tex">k\times k</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.0315em;">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.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">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><mi>m</mi><mo>−</mo><mn>2</mn><msup><mi>k</mi><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">nm-2k^2</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">nm</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">2</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0315em;">k</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> 的奇偶性。</p><h2 id="14-A-Mango">14. A. Mango</h2><p>代码能力有点菜了。</p><p>虽然整个题很简单，就是有两个 <code>$</code> 的时候是最多只有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>60</mn></mrow><annotation encoding="application/x-tex">60</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">60</span></span></span></span> 个有效串，然后递归下去，每次二分出长度从第几个 <code>$</code> 开始计算。</p><h2 id="15-K-Determinant">15 K. Determinant</h2><p>这不是特征多项式模板吗。</p><h2 id="16-F-Rhythm-Game">16 F. Rhythm Game</h2><p>决策单调性。</p><h2 id="17-B-Koosaga’s-Problem">17 B. Koosaga’s Problem</h2><p>由于删边数最少，那么说明删掉的是奇环上的边，而且不是偶环上的边，否则一定不优。</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>u</mi><mo separator="true">,</mo><mi>v</mi><mo stretchy="false">)</mo></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:1em;vertical-align:-0.25em;"></span><span class="mopen">(</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.0359em;">v</span><span class="mclose">)</span></span></span></span>，将其路径上所有树边都标记一下，自己也标记一下，那么标记数量应该是偶数。</p><p>删除非树边对于这套体系不会有影响，删除树边时，由于删掉的边不在偶环上，因此不会出现标记数量由奇数变成偶数的情况，也无影响。</p><p>使用 xor Hash 完成即可。<a href="https://qoj.ac/submission/1996411">代码</a>。</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/ef8530e1/</id>
    <link href="https://iznomia.github.io/posts/ef8530e1/"/>
    <published>2026-01-30T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>BlackY feat. Risa Yuzuki —— 華神樂</p>]]>
    </summary>
    <title>2026-01-30(#10)：いとし調べ乗せ光る風</title>
    <updated>2026-01-30T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="计算机科学" scheme="https://iznomia.github.io/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6/"/>
    <category term="OOP" scheme="https://iznomia.github.io/tags/OOP/"/>
    <content>
      <![CDATA[<p>月底多更新几篇文章，一定会做到的。</p><h2 id="前置知识">前置知识</h2><p>有些东西在算法竞赛中用的比较少，这里重写一下。</p><h3 id="构造与析构">构造与析构</h3><p>对象在被创建时会执行构造函数，被删除时会执行析构函数。</p><h3 id="动态内存分配">动态内存分配</h3><p>我们可以使用 <code>Animal *rt = new Animal</code> 来新建一个</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> std::cout;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> val = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Animal</span> &#123;</span><br><span class="line"><span class="keyword">protected</span>:</span><br><span class="line">    string brand;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="built_in">Animal</span>() &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Object has been created &quot;</span> &lt;&lt; ++val &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    ~<span class="built_in">Animal</span>() &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Oops! Object has been deleted! Hahaha!!!\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">fun</span><span class="params">(<span class="type">void</span>)</span> </span>&#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Funny!!!\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">(<span class="type">void</span>)</span> </span>&#123;</span><br><span class="line">    Animal *rt = <span class="keyword">new</span> Animal;</span><br><span class="line">    rt-&gt;<span class="built_in">fun</span>();</span><br><span class="line">    <span class="keyword">delete</span> rt;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>会产生如下输出：</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Object has been created 1</span><br><span class="line">Funny!!!</span><br><span class="line">Oops! Object has been deleted! Hahaha!!!</span><br></pre></td></tr></table></figure><p>注意一个问题，<code>delete</code> 只会释放指针指向的内存，并不会将该指针赋值为 <code>nullptr</code>，此时该指针会变为悬空指针（Dangling Pointer），访问它是非常危险的。</p><p>未被初始化的指针称为野指针（Wild Pointer）。</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></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> *array = <span class="keyword">new</span> <span class="type">int</span> [m];</span><br><span class="line"> </span><br><span class="line"><span class="keyword">delete</span> [] array;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 二维数组</span></span><br><span class="line"><span class="type">int</span> **array = <span class="keyword">new</span> <span class="type">int</span> *[m];</span><br><span class="line"><span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; m; ++i) &#123;</span><br><span class="line">    array[i] = <span class="keyword">new</span> <span class="type">int</span> [n];</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; m; ++i) &#123;</span><br><span class="line">    <span class="keyword">delete</span> [] array[i];</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">delete</span> [] array;</span><br></pre></td></tr></table></figure><h3 id="友元函数">友元函数</h3><p>访问权限对友元函数没有影响，在类外定义时不需要 <code>friend</code> 关键字。</p><p>常见的用途是重在输入输出流运算符。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Point</span> &#123;</span><br><span class="line"><span class="keyword">private</span>:</span><br><span class="line">    <span class="type">int</span> x, y;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="built_in">Point</span>(<span class="type">int</span> x = <span class="number">0</span>, <span class="type">int</span> y = <span class="number">0</span>) : <span class="built_in">x</span>(x), <span class="built_in">y</span>(y) &#123;&#125;</span><br><span class="line">    <span class="keyword">friend</span> istream&amp; <span class="keyword">operator</span>&gt;&gt;(istream&amp; is, Point&amp; p);</span><br><span class="line">    <span class="keyword">friend</span> ostream&amp; <span class="keyword">operator</span>&lt;&lt;(ostream&amp; os, <span class="type">const</span> Point&amp; p);</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 实现重载 &lt;&lt;</span></span><br><span class="line">ostream&amp; <span class="keyword">operator</span>&lt;&lt;(ostream&amp; os, <span class="type">const</span> Point&amp; p) &#123;</span><br><span class="line">    os &lt;&lt; <span class="string">&quot;Point(&quot;</span> &lt;&lt; p.x &lt;&lt; <span class="string">&quot;, &quot;</span> &lt;&lt; p.y &lt;&lt; <span class="string">&quot;)&quot;</span>;</span><br><span class="line">    <span class="keyword">return</span> os; <span class="comment">// 必须返回流引用，支持链式调用</span></span><br><span class="line">&#125;</span><br><span class="line">istream&amp; <span class="keyword">operator</span>&gt;&gt;(istream&amp; is, Point&amp; p) &#123;</span><br><span class="line">    is &gt;&gt; p.x &gt;&gt; p.y;</span><br><span class="line">    <span class="keyword">return</span> is;  <span class="comment">// 必须返回流引用</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">(<span class="type">void</span>)</span> </span>&#123;</span><br><span class="line">    Point p1;</span><br><span class="line">    cin &gt;&gt; p1;</span><br><span class="line">    cout &lt;&lt; p1 &lt;&lt; endl;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="常量">常量</h3><p>首先是 <code>const</code> 与指针结合：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> value = <span class="number">10</span>;</span><br><span class="line"><span class="type">int</span> other = <span class="number">20</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 1. 指向常量的指针 - 数据不可变，指针可变</span></span><br><span class="line"><span class="type">const</span> <span class="type">int</span>* ptr1 = &amp;value;</span><br><span class="line"><span class="comment">// *ptr1 = 30;        // 错误：不能修改指向的数据</span></span><br><span class="line">ptr1 = &amp;other;       <span class="comment">// 正确：可以改变指针指向</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 2. 常量指针 - 指针不可变，数据可变</span></span><br><span class="line"><span class="type">int</span>* <span class="type">const</span> ptr2 = &amp;value;</span><br><span class="line">*ptr2 = <span class="number">30</span>;          <span class="comment">// 正确：可以修改指向的数据</span></span><br><span class="line"><span class="comment">// ptr2 = &amp;other;    // 错误：不能改变指针指向</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 3. 指向常量的常量指针 - 都不可变</span></span><br><span class="line"><span class="type">const</span> <span class="type">int</span>* <span class="type">const</span> ptr3 = &amp;value;</span><br><span class="line"><span class="comment">// *ptr3 = 30;       // 错误：不能修改数据</span></span><br><span class="line"><span class="comment">// ptr3 = &amp;other;    // 错误：不能改变指针</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 记忆技巧：从右向左读</span></span><br><span class="line"><span class="comment">// const int* ptr   -&gt; ptr 是指向 const int 的指针</span></span><br><span class="line"><span class="comment">// int* const ptr   -&gt; ptr 是 const 指针，指向 int</span></span><br></pre></td></tr></table></figure><p>然后是引用：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> x = <span class="number">5</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 常量引用：不能通过引用修改原值</span></span><br><span class="line"><span class="type">const</span> <span class="type">int</span>&amp; ref = x;</span><br><span class="line"><span class="comment">// ref = 10;         // 错误</span></span><br><span class="line">x = <span class="number">10</span>;              <span class="comment">// 正确：原变量仍然可以修改</span></span><br></pre></td></tr></table></figure><p>函数前加上 <code>const</code> 可以明确其返回的是一个常量。</p><p>类中函数后加上 <code>const</code> 表示不修改对象状态（除了 <code>mutable</code> 成员）。</p><h3 id="静态">静态</h3><p>在函数内部声明的 <code>static</code> 变量只初始化一次，保持值不变，存储在静态存储区。</p><p>静态全局变量表明只有在该文件内可见。</p><p>类的静态成员变量属于类本身而不是某个对象。变量必须在类外定义。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Employee</span> &#123;</span><br><span class="line"><span class="keyword">private</span>:</span><br><span class="line">    std::string name;</span><br><span class="line">    <span class="type">static</span> <span class="type">int</span> totalEmployees;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 或者使用</span></span><br><span class="line">    <span class="comment">// inline static int totalEmployees = 0;</span></span><br><span class="line">    </span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="built_in">Employee</span>(<span class="type">const</span> std::string&amp; n) : <span class="built_in">name</span>(n) &#123;</span><br><span class="line">        totalEmployees++;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    ~<span class="built_in">Employee</span>() &#123;</span><br><span class="line">        totalEmployees--;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> Employee::totalEmployees = <span class="number">0</span>;</span><br></pre></td></tr></table></figure><p>同理，静态成员函数没有 <code>this</code> 指针，不能访问非静态成员。</p><h2 id="继承与多态">继承与多态</h2><p>继承可以基于已有的类创建新类。<code>private</code> 只能在基类中访问，<code>protected</code> 可以在派生的子类中访问。</p><p>继承分为三种，常用的是 <code>public</code> 继承。</p><ul><li>公有继承（public）：当一个类派生自公有基类时，基类的公有成员也是派生类的公有成员，基类的保护成员也是派生类的保护成员，基类的私有成员不能直接被派生类访问，但是可以通过调用基类的公有和保护成员来访问。</li><li>保护继承（protected）： 当一个类派生自保护基类时，基类的公有和保护成员将成为派生类的保护成员。</li><li>私有继承（private）：当一个类派生自私有基类时，基类的公有和保护成员将成为派生类的私有成员。</li></ul><p>构造析构函数、重载运算符、友元函数不会被继承。</p><p>支持多继承，长这样：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> &lt;派生类名&gt;:&lt;继承方式<span class="number">1</span>&gt;&lt;基类名<span class="number">1</span>&gt;,&lt;继承方式<span class="number">2</span>&gt;&lt;基类名<span class="number">2</span>&gt;, &#123;</span><br><span class="line">    &lt;派生类类体&gt;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>继承时会先调用基类的构造函数，然后是派生类的构造函数。删除时先调用派生类的析构函数，再调用基类的析构函数。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Animal</span> &#123;</span><br><span class="line">    <span class="keyword">protected</span>:</span><br><span class="line">        <span class="type">int</span> width, height;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">        <span class="built_in">Animal</span>(<span class="type">int</span> x, <span class="type">int</span> y) &#123;</span><br><span class="line">            <span class="keyword">this</span>-&gt;width = x, <span class="keyword">this</span>-&gt;height = y;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;Designing Animal!!\n&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        ~<span class="built_in">Animal</span>() &#123;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;Sorry, Animal has been removed\n&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Dog</span> : <span class="keyword">public</span> Animal &#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">        <span class="built_in">Dog</span>(<span class="type">int</span> x, <span class="type">int</span> y) : <span class="built_in">Animal</span>(x, y) &#123;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;I have made a dog!\n&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        ~<span class="built_in">Dog</span>() &#123;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;Oh no! My dog has gone:(\n&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="function"><span class="type">int</span> <span class="title">fat</span><span class="params">(<span class="type">void</span>)</span> </span>&#123; <span class="keyword">return</span> width * height; &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">(<span class="type">void</span>)</span> </span>&#123;</span><br><span class="line">    Dog* p; p = <span class="keyword">new</span> <span class="built_in">Dog</span>(<span class="number">2</span>, <span class="number">3</span>);</span><br><span class="line">    cout &lt;&lt; p-&gt;<span class="built_in">fat</span>() &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">    <span class="keyword">delete</span> p;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight sh"><figcaption><span>输出</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">Designing Animal!!</span><br><span class="line">I have made a dog!</span><br><span class="line">6</span><br><span class="line">Oh no! My dog has gone:(</span><br><span class="line">Sorry, Animal has been removed</span><br></pre></td></tr></table></figure><p><code>static</code> 变量会被继承，是共用的。</p><h3 id="菱形继承">菱形继承</h3><p>直接写的话会导致数据冗余，正确方法是使用虚继承：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">A</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="type">int</span> value;</span><br><span class="line">    <span class="built_in">A</span>() : <span class="built_in">value</span>(<span class="number">10</span>) &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;A constructed&quot;</span> &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">    ~<span class="built_in">A</span>() &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;deleted A\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">show</span><span class="params">()</span> </span>&#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;A::show(), value = &quot;</span> &lt;&lt; value &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">B</span> : <span class="keyword">virtual</span> <span class="keyword">public</span> A &#123;  <span class="comment">// 虚继承</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    ~<span class="built_in">B</span>() &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;deleted B\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">B</span>() &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;B constructed&quot;</span> &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">C</span> : <span class="keyword">virtual</span> <span class="keyword">public</span> A &#123;  <span class="comment">// 虚继承</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    ~<span class="built_in">C</span>() &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;deleted C\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">C</span>() &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;C constructed&quot;</span> &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">D</span> : <span class="keyword">public</span> C, <span class="keyword">public</span> B &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    ~<span class="built_in">D</span>() &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;deleted D\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">D</span>() &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;D constructed&quot;</span> &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    D d;</span><br><span class="line">    d.value = <span class="number">50</span>;  <span class="comment">// 正确：不再有二义性</span></span><br><span class="line">    d.<span class="built_in">show</span>();      <span class="comment">// 正确：A::show(), value = 50</span></span><br><span class="line">    </span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;Size of D: &quot;</span> &lt;&lt; <span class="built_in">sizeof</span>(d) &lt;&lt; endl;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight sh"><figcaption><span>输出</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">A constructed</span><br><span class="line">C constructed</span><br><span class="line">B constructed</span><br><span class="line">D constructed</span><br><span class="line">A::show(), value = 50</span><br><span class="line">Size of D: 24</span><br><span class="line">deleted D</span><br><span class="line">deleted B</span><br><span class="line">deleted C</span><br><span class="line">deleted A</span><br></pre></td></tr></table></figure><p>相当于 B、C 都声明自己继承的是虚的 A 类，也就是说 A 只会保留一份。</p><h3 id="虚函数">虚函数</h3><p>基类中可以声明一个函数为虚函数，这样派生类就可以重写这个虚函数。</p><p>使用 <code>= 0</code> 将其定义为纯虚函数。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;queue&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line">priority_queue&lt;<span class="type">int</span>&gt; q;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Animal</span> &#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">        <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">sound</span><span class="params">(<span class="type">void</span>)</span> </span>&#123;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;Animal make a sound.\n&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="function"><span class="type">void</span> <span class="title">sound</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line">            cout &lt;&lt; x &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Dog</span> : <span class="keyword">public</span> Animal &#123;</span><br><span class="line">    <span class="keyword">public</span>:</span><br><span class="line">        <span class="function"><span class="type">void</span> <span class="title">sound</span><span class="params">(<span class="type">void</span>)</span> <span class="keyword">override</span> </span>&#123;</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;Dog barks\n&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">(<span class="type">void</span>)</span> </span>&#123;</span><br><span class="line">    Animal* ptr;</span><br><span class="line">    ptr = <span class="keyword">new</span> Dog;</span><br><span class="line">    ptr-&gt;<span class="built_in">sound</span>(<span class="number">5</span>);</span><br><span class="line">    ptr-&gt;<span class="built_in">sound</span>();</span><br><span class="line">    ptr = <span class="keyword">new</span> Animal;</span><br><span class="line">    ptr-&gt;<span class="built_in">sound</span>();</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight sh"><figcaption><span>输出</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">5</span><br><span class="line">Dog barks</span><br><span class="line">Animal make a sound.</span><br></pre></td></tr></table></figure><p>此时如果要写析构函数，基类的析构函数应该是虚函数，否则 Animal 指针 delete 的时候会调用 Animal 的析构函数而不是 Dog 的。使用虚析构函数就可以正常先调用派生类的析构函数再调用基类的析构函数。</p><p>拥有纯虚函数的类称为<strong>抽象类</strong>。</p><p>这里可以看出，多态的“多种形态”指的是基类派生出的多种子类。</p><h3 id="数据抽象">数据抽象</h3><p>数据抽象是指，只向外界提供关键信息，并隐藏其后台的实现细节，即只表现必要的信息而不呈现细节。比如 <code>sort</code> 函数。</p><h3 id="数据封装">数据封装</h3><p>数据封装是关于保护数据，防止直接访问，通过公共方法提供受控的访问。通过 <code>private</code> 等实现。</p><h2 id="总结">总结</h2><p>嗯，感觉我什么也没写。</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/59551c6a/</id>
    <link href="https://iznomia.github.io/posts/59551c6a/"/>
    <published>2026-01-28T10:00:00.000Z</published>
    <summary>我们以 C++ 为例子介绍一下 OOP 的基本内容，虽然可能不甚详尽。</summary>
    <title>C++ OOP 简介</title>
    <updated>2026-01-28T10:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="计算机科学" scheme="https://iznomia.github.io/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6/"/>
    <category term="PyTorch" scheme="https://iznomia.github.io/tags/PyTorch/"/>
    <category term="深度学习" scheme="https://iznomia.github.io/tags/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/"/>
    <category term="机器学习" scheme="https://iznomia.github.io/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/"/>
    <content>
      <![CDATA[<p>参考的教材：</p><ul><li>《Pytorch 深度学习简论》：<a href="https://m-tob.jd.com/ebook/30806450">https://m-tob.jd.com/ebook/30806450</a></li><li>《机器学习》：西瓜书</li></ul><h2 id="1-猴王出世">1. 猴王出世</h2><p>首先一个观点是，“智能”和“自我意识”没什么关联，不要去思考这个问题。</p><p>深度学习的目的是用数学手段，使用大量数据来近似输入和输出差距很远的函数。比如输入一张图片，输出一段文字来描述这个图片。</p><h3 id="1-1-绪论">1.1 绪论</h3><p>机器学习是从数据中产生模型（model）的算法，即 learning algorithm。</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><mi><msub><mi mathvariant="bold-italic">x</mi><mn mathvariant="bold">1</mn></msub></mi><mo separator="true">,</mo><mo>⋯</mo><mtext> </mtext><mo separator="true">,</mo><mi><msub><mi mathvariant="bold-italic">x</mi><mi mathvariant="bold-italic">n</mi></msub></mi><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">D=\{\bm{x_1},\cdots,\bm{x_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.0278em;">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:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol">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 mathbf 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 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"><span class="mord"><span class="mord boldsymbol">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1611em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord boldsymbol 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 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>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> 个示例（instance）或样本（sample），或者叫“特征向量”（feature vector），每个示例是 <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 mathvariant="script">X</mi></mrow><annotation encoding="application/x-tex">\mathcal 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 mathcal" style="margin-right:0.1464em;">X</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> 称为维数（dimensionality）。</p><p>学得模型对应了关于数据的某种潜在规律，称为“假设”（hypothesis），规律自身称为“真相”（ground-truth），学习的过程是在逼近真相。</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 mathvariant="bold-italic">x</mi><mi>i</mi></msub><mo separator="true">,</mo><msub><mi mathvariant="bold-italic">y</mi><mi>i</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(\bm x_i,\bm y_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"><span class="mord"><span class="mord boldsymbol">x</span></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 class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.037em;">y</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2175em;"><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">i</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="mclose">)</span></span></span></span> 表示一个“样例”（example），<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold-italic">y</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\bm y_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6886em;vertical-align:-0.2441em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.037em;">y</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2175em;"><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">i</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> 称为“标记”（label），<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold-italic">y</mi><mi>i</mi></msub><mo>∈</mo><mi mathvariant="script">Y</mi></mrow><annotation encoding="application/x-tex">\bm y_i\in \mathcal Y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7832em;vertical-align:-0.2441em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.037em;">y</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2175em;"><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">i</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.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.7805em;vertical-align:-0.0972em;"></span><span class="mord mathcal" style="margin-right:0.0822em;">Y</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">Y</mi></mrow><annotation encoding="application/x-tex">\mathcal Y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7805em;vertical-align:-0.0972em;"></span><span class="mord mathcal" style="margin-right:0.0822em;">Y</span></span></span></span> 是离散的，那么这个工作称为“分类”（classification），连续的则称为“回归”（regression），这两者都属于“监督学习”。</p><p>若没有标记信息，我们可以对样本进行“聚类”（clustering），即将样本分成若干组，每组称为一个“簇”（cluster），这是“无监督学习”的一种。</p><p>学得模型能适用于新样本的能力称为“泛化”（generalization）能力。</p><p>假设空间 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">H</mi></mrow><annotation encoding="application/x-tex">\mathcal H</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 mathcal" style="margin-right:0.0097em;">H</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.1076em;">f</span></span></span></span> 的集合，而版本空间指符合样例的模型集合。版本空间大概率不只一个元素，那么我们应该选择哪个作为我们的模型呢？</p><p>“奥卡姆剃刀”是一种常用的原则，即选择最简单的那个。但事实上，总存在一种样本空间，使得那些看上去非常离谱的拟合实际上是更优秀的。</p><p>这就是“没有免费的午餐”的定理。NFL 定理的前提是每个问题出现的概率相同。</p><h3 id="1-2-模型评估与选择">1.2 模型评估与选择</h3><p>我们偏向于选择泛化误差尽可能小的模型。</p><ol><li>留出法：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi mathvariant="normal">/</mi><mn>3</mn><mo>∼</mo><mn>4</mn><mi mathvariant="normal">/</mi><mn>5</mn></mrow><annotation encoding="application/x-tex">2/3\sim 4/5</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">2/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:1em;vertical-align:-0.25em;"></span><span class="mord">4/5</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>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.0278em;">D</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.0315em;">k</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> 次 <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.0315em;">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><mi>m</mi><mo>=</mo><mn>10</mn></mrow><annotation encoding="application/x-tex">k=m=10</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.0315em;">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">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.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>k</mi><mo>=</mo><mi>m</mi></mrow><annotation encoding="application/x-tex">k=m</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.0315em;">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">m</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.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">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><msup><mi>D</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow><annotation encoding="application/x-tex">D&#x27;</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.0278em;">D</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>。</li></ol><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.1076em;">f</span></span></span></span> 的性能：</p><p><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>E</mi><mo stretchy="false">(</mo><mi>f</mi><mo separator="true">;</mo><mi mathvariant="script">D</mi><mo stretchy="false">)</mo><mo>=</mo><msub><mo>∫</mo><mrow><mi mathvariant="bold-italic">x</mi><mo>∼</mo><mi mathvariant="script">D</mi></mrow></msub><mo stretchy="false">(</mo><mi>f</mi><mo stretchy="false">(</mo><mi mathvariant="bold-italic">x</mi><mo stretchy="false">)</mo><mo>−</mo><mi>y</mi><msup><mo stretchy="false">)</mo><mn>2</mn></msup><mi>p</mi><mo stretchy="false">(</mo><mi mathvariant="bold-italic">x</mi><mo stretchy="false">)</mo><mi mathvariant="normal">d</mi><mi>x</mi></mrow><annotation encoding="application/x-tex">E(f;\mathcal D)=\int_{\bm x\sim \mathcal D} (f(\bm x)-y)^2p(\bm x)\d 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="mord mathnormal" style="margin-right:0.0576em;">E</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mpunct">;</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathcal" style="margin-right:0.0278em;">D</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:2.2719em;vertical-align:-0.9119em;"></span><span class="mop"><span class="mop op-symbol large-op" style="margin-right:0.4445em;position:relative;top:-0.0011em;">∫</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:-0.4336em;"><span style="top:-1.7881em;margin-left:-0.4445em;margin-right: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 mtight"><span class="mord boldsymbol mtight">x</span></span></span><span class="mrel mtight">∼</span><span class="mord mathcal mtight" style="margin-right:0.0278em;">D</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.9119em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord boldsymbol">x</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:1.1141em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</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="mord mathnormal">p</span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord boldsymbol">x</span></span></span><span class="mclose">)</span><span class="mord mathrm">d</span><span class="mord mathnormal">x</span></span></span></span></span></p><hr><p>接下来我们介绍 classification 时常用的性能度量。</p><p>错误率 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi><mo stretchy="false">(</mo><mi>f</mi><mo separator="true">;</mo><mi mathvariant="script">D</mi><mo stretchy="false">)</mo><mo>=</mo><msub><mo>∫</mo><mrow><mi mathvariant="bold-italic">x</mi><mo>∼</mo><mi mathvariant="script">D</mi></mrow></msub><mi mathvariant="double-struck">I</mi><mo stretchy="false">(</mo><mi>f</mi><mo stretchy="false">(</mo><mi mathvariant="bold-italic">x</mi><mo stretchy="false">)</mo><mo mathvariant="normal">≠</mo><mi>y</mi><mo stretchy="false">)</mo><mi>p</mi><mo stretchy="false">(</mo><mi mathvariant="bold-italic">x</mi><mo stretchy="false">)</mo><mi mathvariant="normal">d</mi><mi>x</mi></mrow><annotation encoding="application/x-tex">E(f;\mathcal D)=\int_{\bm x\sim \mathcal D}\mathbb I(f(\bm x)\ne y)p(\bm x)\d 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="mord mathnormal" style="margin-right:0.0576em;">E</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mpunct">;</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathcal" style="margin-right:0.0278em;">D</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.1608em;vertical-align:-0.3558em;"></span><span class="mop"><span class="mop op-symbol small-op" style="margin-right:0.1945em;position:relative;top:-0.0006em;">∫</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1225em;"><span style="top:-2.3442em;margin-left:-0.1945em;margin-right: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 mtight"><span class="mord boldsymbol mtight">x</span></span></span><span class="mrel mtight">∼</span><span class="mord mathcal mtight" style="margin-right:0.0278em;">D</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3558em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathbb">I</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord boldsymbol">x</span></span></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="mspace nobreak"></span><span class="mrel">=</span></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.0359em;">y</span><span class="mclose">)</span><span class="mord mathnormal">p</span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord boldsymbol">x</span></span></span><span class="mclose">)</span><span class="mord mathrm">d</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 mathvariant="normal">acc</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>f</mi><mo separator="true">;</mo><mi mathvariant="script">D</mi><mo stretchy="false">)</mo><mo>=</mo><mn>1</mn><mo>−</mo><mi>E</mi><mo stretchy="false">(</mo><mi>f</mi><mo separator="true">;</mo><mi mathvariant="script">D</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\operatorname{acc}(f;\mathcal D)=1-E(f;\mathcal 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="mop"><span class="mord mathrm">acc</span></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mpunct">;</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathcal" style="margin-right:0.0278em;">D</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.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="mord mathnormal" style="margin-right:0.0576em;">E</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mpunct">;</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathcal" style="margin-right:0.0278em;">D</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><mi>P</mi><mo separator="true">,</mo><mi>F</mi><mi>P</mi><mo separator="true">,</mo><mi>T</mi><mi>N</mi><mo separator="true">,</mo><mi>F</mi><mi>N</mi></mrow><annotation encoding="application/x-tex">TP,FP,TN,FN</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">T</span><span class="mord mathnormal" style="margin-right:0.1389em;">P</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">F</span><span class="mord mathnormal" style="margin-right:0.1389em;">P</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">T</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">F</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span></span></span>）。查准率 precision 定义为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>P</mi><mo>=</mo><mfrac><mrow><mi>T</mi><mi>P</mi></mrow><mrow><mi>T</mi><mi>P</mi><mo>+</mo><mi>F</mi><mi>P</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">P=\frac{TP}{TP+FP}</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.1389em;">P</span><span class="mspace" style="margin-right:0.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.2757em;vertical-align:-0.4033em;"></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.8723em;"><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.1389em;">T</span><span class="mord mathnormal mtight" style="margin-right:0.1389em;">P</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight" style="margin-right:0.1389em;">F</span><span class="mord mathnormal mtight" style="margin-right:0.1389em;">P</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" style="margin-right:0.1389em;">T</span><span class="mord mathnormal mtight" style="margin-right:0.1389em;">P</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>，查全率 recall 定义为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>R</mi><mo>=</mo><mfrac><mrow><mi>T</mi><mi>P</mi></mrow><mrow><mi>T</mi><mi>P</mi><mo>+</mo><mi>F</mi><mi>N</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">R=\frac{TP}{TP+FN}</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.0077em;">R</span><span class="mspace" style="margin-right:0.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.2757em;vertical-align:-0.4033em;"></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.8723em;"><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.1389em;">T</span><span class="mord mathnormal mtight" style="margin-right:0.1389em;">P</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight" style="margin-right:0.1389em;">F</span><span class="mord mathnormal mtight" style="margin-right:0.109em;">N</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" style="margin-right:0.1389em;">T</span><span class="mord mathnormal mtight" style="margin-right:0.1389em;">P</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>。一般来说，两者时矛盾的，除非任务非常简单。</p><p>很多情形下最终会对预测结果进行排序，从前到后我们认为其是正例的概率越低。这样，以查准率为纵轴、查全率为横轴可以绘制 P-R 曲线，将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>R</mi><mo>=</mo><mi>P</mi></mrow><annotation encoding="application/x-tex">R=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.0077em;">R</span><span class="mspace" style="margin-right:0.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.1389em;">P</span></span></span></span> 的点视为平衡点（Break-Event Point, BEP），可以通过比较 BEP 来判断学习器性能。</p><p>但是 BEP 有点过于简单了，常用的是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>F</mi><mn>1</mn><mo>=</mo><mstyle scriptlevel="0" displaystyle="true"><mfrac><mrow><mn>2</mn><mi>P</mi><mi>R</mi></mrow><mrow><mi>P</mi><mo>+</mo><mi>R</mi></mrow></mfrac></mstyle><mo>=</mo><mstyle scriptlevel="0" displaystyle="true"><mfrac><mrow><mn>2</mn><mi>T</mi><mi>P</mi></mrow><mrow><mn>2</mn><mi>T</mi><mi>P</mi><mo>+</mo><mi>F</mi><mi>N</mi><mo>+</mo><mi>F</mi><mi>P</mi></mrow></mfrac></mstyle></mrow><annotation encoding="application/x-tex">F1=\dfrac{2PR}{P+R}=\dfrac{2TP}{2TP+FN+FP}</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.1389em;">F</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:2.1297em;vertical-align:-0.7693em;"></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.3603em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1389em;">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="mord mathnormal" style="margin-right:0.0077em;">R</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">2</span><span class="mord mathnormal" style="margin-right:0.1389em;">P</span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></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.1297em;vertical-align:-0.7693em;"></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.3603em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal" style="margin-right:0.1389em;">T</span><span class="mord mathnormal" style="margin-right:0.1389em;">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="mord mathnormal" style="margin-right:0.1389em;">F</span><span class="mord mathnormal" style="margin-right:0.109em;">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.1389em;">F</span><span class="mord mathnormal" style="margin-right:0.1389em;">P</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">2</span><span class="mord mathnormal" style="margin-right:0.1389em;">T</span><span class="mord mathnormal" style="margin-right:0.1389em;">P</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><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>P</mi><mo separator="true">,</mo><mi>R</mi></mrow><annotation encoding="application/x-tex">P,R</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">P</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span></span></span></span> 的调和平均数。</p><p>F1 度量的一般形式是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>F</mi><mi>β</mi></msub><mo>=</mo><mstyle scriptlevel="0" displaystyle="true"><mfrac><mrow><mo stretchy="false">(</mo><mn>1</mn><mo>+</mo><msup><mi>β</mi><mn>2</mn></msup><mo stretchy="false">)</mo><mi>P</mi><mi>R</mi></mrow><mrow><msup><mi>β</mi><mn>2</mn></msup><mi>P</mi><mo>+</mo><mi>R</mi></mrow></mfrac></mstyle></mrow><annotation encoding="application/x-tex">F_{\beta}=\dfrac{(1+\beta^2)PR}{\beta^2 P+R}</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.1389em;">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.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" style="margin-right:0.0528em;">β</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.3715em;vertical-align:-0.8804em;"></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.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.0528em;">β</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;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="mord mathnormal" style="margin-right:0.1389em;">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="mord mathnormal" style="margin-right:0.0077em;">R</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="mopen">(</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 class="mord"><span class="mord mathnormal" style="margin-right:0.0528em;">β</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 class="mord mathnormal" style="margin-right:0.1389em;">P</span><span class="mord mathnormal" style="margin-right:0.0077em;">R</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 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>β</mi><mo>&gt;</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">\beta&gt;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 mathnormal" style="margin-right:0.0528em;">β</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">1</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>&lt;</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">\beta&lt;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 mathnormal" style="margin-right:0.0528em;">β</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> 时查准率影响更大。</p><p>如果对所有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>P</mi><mo separator="true">,</mo><mi>R</mi></mrow><annotation encoding="application/x-tex">P,R</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">P</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span></span></span></span> 取平均值，可以算得“宏 F1”（<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">macro</mi><mo>⁡</mo><mo>−</mo><mi>F</mi><mn>1</mn></mrow><annotation encoding="application/x-tex">\operatorname{macro}-F1</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="mop"><span class="mord mathrm">macro</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">−</span><span class="mord mathnormal" style="margin-right:0.1389em;">F</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><mi>P</mi><mo separator="true">,</mo><mi>F</mi><mi>P</mi><mo separator="true">,</mo><mi>T</mi><mi>N</mi><mo separator="true">,</mo><mi>F</mi><mi>N</mi></mrow><annotation encoding="application/x-tex">TP,FP,TN,FN</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">T</span><span class="mord mathnormal" style="margin-right:0.1389em;">P</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">F</span><span class="mord mathnormal" style="margin-right:0.1389em;">P</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">T</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">F</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span></span></span> 取平均值可以算得“微 F1”（<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">micro</mi><mo>⁡</mo><mo>−</mo><mi>F</mi><mn>1</mn></mrow><annotation encoding="application/x-tex">\operatorname{micro}-F1</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="mop"><span class="mord mathrm">micro</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">−</span><span class="mord mathnormal" style="margin-right:0.1389em;">F</span><span class="mord">1</span></span></span></span>）。</p><p>“排序”本身的质量好坏很大程度上决定了学习器的“期望泛化性能”，预测概率越大说明我们的模型认为其更可能是正例。纵轴为真正例率（True Positive Rate）<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">TPR</mi><mo>⁡</mo><mo>=</mo><mstyle scriptlevel="0" displaystyle="true"><mfrac><mrow><mi>T</mi><mi>P</mi></mrow><mrow><mi>T</mi><mi>P</mi><mo>+</mo><mi>F</mi><mi>N</mi></mrow></mfrac></mstyle></mrow><annotation encoding="application/x-tex">\operatorname{TPR}=\dfrac{TP}{TP+FN}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mop"><span class="mord mathrm">TPR</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.1297em;vertical-align:-0.7693em;"></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.3603em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1389em;">T</span><span class="mord mathnormal" style="margin-right:0.1389em;">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="mord mathnormal" style="margin-right:0.1389em;">F</span><span class="mord mathnormal" style="margin-right:0.109em;">N</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.1389em;">T</span><span class="mord mathnormal" style="margin-right:0.1389em;">P</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><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 mathvariant="normal">FPR</mi><mo>⁡</mo><mo>=</mo><mstyle scriptlevel="0" displaystyle="true"><mfrac><mrow><mi>F</mi><mi>P</mi></mrow><mrow><mi>T</mi><mi>N</mi><mo>+</mo><mi>F</mi><mi>P</mi></mrow></mfrac></mstyle></mrow><annotation encoding="application/x-tex">\operatorname{FPR}=\dfrac{FP}{TN+FP}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mop"><span class="mord mathrm">FPR</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.1297em;vertical-align:-0.7693em;"></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.3603em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.1389em;">T</span><span class="mord mathnormal" style="margin-right:0.109em;">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.1389em;">F</span><span class="mord mathnormal" style="margin-right:0.1389em;">P</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.1389em;">F</span><span class="mord mathnormal" style="margin-right:0.1389em;">P</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>，得到 ROC 曲线。在绘制 ROC 曲线时，假定有 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>m</mi><mo>+</mo></msup></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.7713em;"></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.7713em;"><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="mbin mtight">+</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><msup><mi>m</mi><mo>−</mo></msup></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.7713em;"></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.7713em;"><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="mbin mtight">−</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 stretchy="false">(</mo><mn>0</mn><mo separator="true">,</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(0,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">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">0</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>x</mi><mo separator="true">,</mo><mi>y</mi><mo>+</mo><mfrac><mn>1</mn><msup><mi>m</mi><mo>+</mo></msup></mfrac><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x,y+\frac 1{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">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</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.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"><span class="mord mathnormal mtight">m</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7027em;"><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mbin mtight">+</span></span></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.394em;"><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></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><mo stretchy="false">(</mo><mi>x</mi><mo>+</mo><mfrac><mn>1</mn><msup><mi>m</mi><mo>−</mo></msup></mfrac><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(x+\frac 1{m^-},y)</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.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.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"><span class="mord mathnormal mtight">m</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7027em;"><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mbin mtight">−</span></span></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.394em;"><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></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="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>。比较模型的好坏就会计算 ROC 曲线下的面积，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mstyle scriptlevel="0" displaystyle="true"><mi mathvariant="normal">AUC</mi><mo>⁡</mo><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>m</mi></munderover><mo stretchy="false">(</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><mo stretchy="false">)</mo><mo stretchy="false">(</mo><msub><mi>y</mi><mi>i</mi></msub><mo>+</mo><msub><mi>y</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo stretchy="false">)</mo></mstyle></mrow><annotation encoding="application/x-tex">\displaystyle\operatorname{AUC}=\frac 1 2\sum_{i=1}^m(x_{i+1}-x_i)(y_i+y_{i+1})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mop"><span class="mord mathrm">AUC</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.9291em;vertical-align:-1.2777em;"></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.3214em;"><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">1</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.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 mathnormal mtight">m</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"><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><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></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="mclose">)</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><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.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.0359em;">y</span><span class="msupsub"><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="mclose">)</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 mathvariant="normal">ℓ</mi><mrow><mi>r</mi><mi>a</mi><mi>n</mi><mi>k</mi></mrow></msub><mo>=</mo><mfrac><mn>1</mn><mrow><mi mathvariant="normal">∣</mi><msup><mi>D</mi><mo>+</mo></msup><mi mathvariant="normal">∣</mi><mi mathvariant="normal">∣</mi><msup><mi>D</mi><mo>−</mo></msup><mi mathvariant="normal">∣</mi></mrow></mfrac><munder><mo>∑</mo><mrow><msup><mi mathvariant="bold-italic">x</mi><mo>+</mo></msup><mo>∈</mo><msup><mi>D</mi><mo>+</mo></msup></mrow></munder><munder><mo>∑</mo><mrow><msup><mi mathvariant="bold-italic">x</mi><mo>−</mo></msup><mo>∈</mo><msup><mi>D</mi><mo>−</mo></msup></mrow></munder><mrow><mo fence="true">(</mo><mi mathvariant="double-struck">I</mi><mo stretchy="false">(</mo><mi>f</mi><mo stretchy="false">(</mo><msup><mi mathvariant="bold-italic">x</mi><mo>+</mo></msup><mo stretchy="false">)</mo><mo>&lt;</mo><mi>f</mi><mo stretchy="false">(</mo><msup><mi mathvariant="bold-italic">x</mi><mo>−</mo></msup><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo>+</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mi mathvariant="double-struck">I</mi><mo stretchy="false">(</mo><mi>f</mi><mo stretchy="false">(</mo><msup><mi mathvariant="bold-italic">x</mi><mo>+</mo></msup><mo stretchy="false">)</mo><mo>=</mo><mi>f</mi><mo stretchy="false">(</mo><msup><mi mathvariant="bold-italic">x</mi><mo>−</mo></msup><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo fence="true">)</mo></mrow></mstyle></mrow><annotation encoding="application/x-tex">\displaystyle\ell_{rank}=\frac{1}{|D^+||D^-|}\sum_{\bm x^+\in D^+}\sum_{\bm x^-\in D^-}\left(\mathbb I(f(\bm x^+)&lt;f(\bm x^-))+\frac 1 2 \mathbb I(f(\bm x^+)=f(\bm x^-))\right)</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">ℓ</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.0278em;">r</span><span class="mord mathnormal mtight" style="margin-right:0.0315em;">ank</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.7852em;vertical-align:-1.3352em;"></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.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">∣</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0278em;">D</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6973em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">+</span></span></span></span></span></span></span></span><span class="mord">∣∣</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0278em;">D</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6973em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">−</span></span></span></span></span></span></span></span><span class="mord">∣</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">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.936em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></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.05em;"><span style="top:-1.8421em;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 mtight"><span class="mord mtight"><span class="mord boldsymbol mtight">x</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7027em;"><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mbin mtight">+</span></span></span></span></span></span></span></span><span class="mrel mtight">∈</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0278em;">D</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7027em;"><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mbin mtight">+</span></span></span></span></span></span></span></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.3352em;"><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.05em;"><span style="top:-1.8421em;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 mtight"><span class="mord mtight"><span class="mord boldsymbol mtight">x</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7027em;"><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mbin mtight">−</span></span></span></span></span></span></span></span><span class="mrel mtight">∈</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0278em;">D</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7027em;"><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mbin mtight">−</span></span></span></span></span></span></span></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.3352em;"><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 class="delimsizing size3">(</span></span><span class="mord mathbb">I</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol">x</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8213em;"><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="mbin mtight">+</span></span></span></span></span></span></span></span><span class="mclose">)</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" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol">x</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8213em;"><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="mbin mtight">−</span></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"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><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">1</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="mord mathbb">I</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol">x</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8213em;"><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="mbin mtight">+</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.1076em;">f</span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol">x</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8213em;"><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="mbin mtight">−</span></span></span></span></span></span></span></span><span class="mclose">))</span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">)</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 mathvariant="normal">ℓ</mi><mrow><mi>r</mi><mi>a</mi><mi>n</mi><mi>k</mi></mrow></msub><mo>=</mo><mn>1</mn><mo>−</mo><mi mathvariant="normal">AUC</mi><mo>⁡</mo></mrow><annotation encoding="application/x-tex">\ell_{rank}=1-\operatorname{AUC}</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">ℓ</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.0278em;">r</span><span class="mord mathnormal mtight" style="margin-right:0.0315em;">ank</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.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.6833em;"></span><span class="mop"><span class="mord mathrm">AUC</span></span></span></span></span>。</p><h2 id="2-线性模型">2. 线性模型</h2><p>线性模型（linear model）试图学得一个通过属性的线性组合来进行预测的函数 <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 mathvariant="bold-italic">x</mi><mo stretchy="false">)</mo><mo>=</mo><msup><mi mathvariant="bold-italic">w</mi><mi mathvariant="normal">⊤</mi></msup><mi mathvariant="bold-italic">x</mi><mo>+</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">f(\bm x)=\bm w^\top \bm x+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="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord boldsymbol">x</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.9324em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right:0.0278em;">w</span></span></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></span></span></span></span></span></span></span><span class="mord"><span class="mord"><span class="mord boldsymbol">x</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">b</span></span></span></span>。</p><h3 id="2-1-线性回归">2.1 线性回归</h3><p>考虑最简单的情况，</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/d259e7d7/</id>
    <link href="https://iznomia.github.io/posts/d259e7d7/"/>
    <published>2026-01-18T00:00:00.000Z</published>
    <summary>来玩深度学习！本文初步介绍了机器学习的概念，来为学习 PyTorch 做一些准备。</summary>
    <title>初探茅庐</title>
    <updated>2025-01-18T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="语言" scheme="https://iznomia.github.io/categories/%E8%AF%AD%E8%A8%80/"/>
    <category term="英语" scheme="https://iznomia.github.io/categories/%E8%AF%AD%E8%A8%80/%E8%8B%B1%E8%AF%AD/"/>
    <category term="英语" scheme="https://iznomia.github.io/tags/%E8%8B%B1%E8%AF%AD/"/>
    <content>
      <![CDATA[<p>本文可能不适合作为比较系统性的总结，但如果你想看看玩玩还是没什么问题的。我不知道我为什么 2026 年发的第一篇文章是这个，但是算了。</p><p>我是标题党，因此文章中还有一部分我不认识的词的记录。</p><span id="more"></span><p>期末周复习英语！虽然我觉得这个科目复不复习都是要完蛋的（）</p><h2 id="情态动词">情态动词</h2><p>英语中的情态动词是一类特殊的辅助动词，用于表达说话者的态度、能力、可能性、必要性、许可、义务等，而不是描述具体的动作。它们不能单独作谓语，必须与主动词的原形一起使用。</p><p>做疑问句时要提到句首。</p><p>一些常见的情态动词：</p><ol><li>can/could：可能，能够，请求（此时 could 更礼貌）</li><li>may/might<ul><li>许可：May I come in?</li><li>可能性（might 更小）：She might not come to out party.</li><li>May I help you?</li></ul></li><li>will/would<ul><li>表将来时/意愿：He wouldn’t help us.</li><li>表请求（would 更礼貌，一般都是这个）</li></ul></li><li>shall/should<ul><li>征求意见</li><li>应该</li></ul></li><li>must<ul><li>必要</li></ul></li></ol><p>半情态动词：</p><ol><li>need</li><li>dare：敢，用法同 need</li><li>ought to：应该，比 should 强，比 must 弱，用法是 ought + 动词不定式。</li><li>have to：客观，必须</li><li>had better</li><li>be able to</li></ol><p>常用的一个结构是 情态动词 + have + 过去分词，用于推测、评论或想象过去可能发生或本应发生的事情。</p><blockquote><p>I could have passed the exam, but I didn’t study enough.</p></blockquote><p>如果时态是过去时，那么应该用情态动词的过去形式。</p><h2 id="附录">附录</h2><p>brutal: adj. violent and cruel, direct and clear about sth. unpleasant（冷酷的）, not thinking of people’s feelings<br>He eliminated his rivals in a brutal struggle for power.</p><p>rival n. 竞争对手 v. 与…相匹敌<br>If you say that someone or something has no rivals or is without rival, you mean that it is best of its type.<br>If you say that one thing rivals another, you mean that they are both of the same standard or quality.<br>Their smaller rival is battling to end their duopoly（两强垄断）. 垄断是 monopoly，The company has a virtual monopoly in this area of trade.</p><p>我怎么突然不认识 struggle 了，这不是 testify 中的歌词吗，然后 struggle 可以做名词和不及物动词，如 The government struggled to maintain law and order.</p><p>weed n. 杂草 v. 除草</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/14d9ca7e/</id>
    <link href="https://iznomia.github.io/posts/14d9ca7e/"/>
    <published>2026-01-01T10:00:00.000Z</published>
    <summary>
      <![CDATA[<p>本文可能不适合作为比较系统性的总结，但如果你想看看玩玩还是没什么问题的。我不知道我为什么 2026 年发的第一篇文章是这个，但是算了。</p>
<p>我是标题党，因此文章中还有一部分我不认识的词的记录。</p>]]>
    </summary>
    <title>英语中情态动词的用法</title>
    <updated>2026-01-01T10:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="算法竞赛" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <category term="训练" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/%E8%AE%AD%E7%BB%83/"/>
    <category term="算法竞赛" scheme="https://iznomia.github.io/tags/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <content>
      <![CDATA[<p>Essbee —— 悔_</p><span id="more"></span><p>今年最后一篇了！</p><h2 id="8-2025-Shenyang-The-Bond-Beyond-Time">8 [2025 Shenyang] The Bond Beyond Time</h2><p>我感觉我需要提高我自己写代码的能力。<a href="https://qoj.ac/submission/1783753">代码</a>。</p><h2 id="9-USACO23JAN-P-Mana-Collection">9 [USACO23JAN P] Mana Collection</h2><p>反复走来走去是没有意义的，在最后一次经过一个点的时候收集魔力即可。因此不难发现，统计最少损失多少魔力明显是更好做的。</p><p>因此我们先处理所有的行走路径。假设时间充分大，设 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><msub><mi>p</mi><mrow><mi>s</mi><mo separator="true">,</mo><mi>i</mi></mrow></msub></mrow><annotation encoding="application/x-tex">dp_{s,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 mathnormal">d</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 mtight"><span class="mord mathnormal mtight">s</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>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>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><mo>∑</mo><mrow><mi>k</mi><mo>∈</mo><mi>s</mi></mrow></msub><msub><mi>m</mi><mi>k</mi></msub><mo stretchy="false">)</mo><mo>×</mo><mi>t</mi><mi>i</mi><mi>m</mi><mi>e</mi><mo>−</mo><mi>d</mi><msub><mi>p</mi><mrow><mi>s</mi><mo separator="true">,</mo><mi>i</mi></mrow></msub></mrow><annotation encoding="application/x-tex">(\sum_{k\in s} m_k)\times time -dp_{s,i}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0771em;vertical-align:-0.3271em;"></span><span class="mopen">(</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 mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">∈</span><span class="mord mathnormal mtight">s</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3271em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></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.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.0315em;">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="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.7429em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">t</span><span class="mord mathnormal">im</span><span class="mord mathnormal">e</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 mathnormal">d</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 mtight"><span class="mord mathnormal mtight">s</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>d</mi><msub><mi>p</mi><mrow><mi>s</mi><mo separator="true">,</mo><mi>i</mi></mrow></msub></mrow><annotation encoding="application/x-tex">dp_{s,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 mathnormal">d</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 mtight"><span class="mord mathnormal mtight">s</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>d</mi><msub><mi>p</mi><mrow><mi>s</mi><mo separator="true">,</mo><mi>i</mi></mrow></msub></mrow><annotation encoding="application/x-tex">dp_{s,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 mathnormal">d</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 mtight"><span class="mord mathnormal mtight">s</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> 的经过集合（把负的贡献删掉），形成大概这样的东西：</p><p><img src="https://pic1.imgdb.cn/item/69549a4a44dc06e5053fc9a7.png" alt=""></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> 棵李超线段树查询即可。</p><hr><p>既然标题有年度总结那还是稍微写一点，虽然不是很想写！</p><p>不知道自己在干什么！</p><p>寒假写完《狂乱繁星》和《CRYPTO》！然后学点新的东西（可能是非计算机相关的，比如学点乐理甚至作曲）！</p><p>其实还是走一步看一步吧，有句话是，总是追忆过去是对未来迷茫的一种表现。不清楚，可能说的有道理。不管了我觉得我还是适合走一步看一步，元旦期间还是为期末考试准备一下比较好，感觉学过的东西又忘光了。</p><p>我很喜欢那句话：“动力源于创作，创作源于生活。”然而今年我并没有完成什么有效的创作，我觉得这还是需要完成的。明年争取一周发一篇有效文章，如果在写 wiki 至少发个动态说明一下。不能再拖更了，拖更是没有前途的。</p><p>希望明年能活得更像理想中的自己一点！</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/8d6b7bc5/</id>
    <link href="https://iznomia.github.io/posts/8d6b7bc5/"/>
    <published>2025-12-30T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>Essbee —— 悔_</p>]]>
    </summary>
    <title>2025-12-31(#9)：甚至不明白 这泪水的意义 / 2025 年度总结</title>
    <updated>2025-12-31T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="算法竞赛" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <category term="算法竞赛" scheme="https://iznomia.github.io/tags/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <content>
      <![CDATA[<p>来简单学习一下 python 如何在算法竞赛中使用。寒假想拿学习更多的东西。</p><span id="more"></span><h2 id="创建一个二维数组">创建一个二维数组</h2><p><a href="https://www.luogu.com.cn/problem/P11450">https://www.luogu.com.cn/problem/P11450</a>.</p><p>做法很简单，看代码。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> __name__ == <span class="string">&quot;__main__&quot;</span>:</span><br><span class="line">    n, q = <span class="built_in">map</span>(<span class="built_in">int</span>, <span class="built_in">input</span>().split())</span><br><span class="line">    i = <span class="number">0</span></span><br><span class="line">    X = [[n] * n <span class="keyword">for</span> _ <span class="keyword">in</span> <span class="built_in">range</span>(n)]</span><br><span class="line">    Y = [[n] * n <span class="keyword">for</span> _ <span class="keyword">in</span> <span class="built_in">range</span>(n)]</span><br><span class="line">    Z = [[n] * n <span class="keyword">for</span> _ <span class="keyword">in</span> <span class="built_in">range</span>(n)]</span><br><span class="line">    ans = <span class="number">0</span></span><br><span class="line">    <span class="keyword">while</span> i &lt; q:</span><br><span class="line">        x, y, z = <span class="built_in">map</span>(<span class="built_in">int</span>, <span class="built_in">input</span>().split())</span><br><span class="line">        X[y][z] -= <span class="number">1</span></span><br><span class="line">        Y[x][z] -= <span class="number">1</span> </span><br><span class="line">        Z[x][y] -= <span class="number">1</span></span><br><span class="line">        <span class="keyword">if</span> X[y][z] == <span class="number">0</span>:</span><br><span class="line">            ans += <span class="number">1</span></span><br><span class="line">        <span class="keyword">if</span> Y[x][z] == <span class="number">0</span>:</span><br><span class="line">            ans += <span class="number">1</span></span><br><span class="line">        <span class="keyword">if</span> Z[x][y] == <span class="number">0</span>:</span><br><span class="line">            ans += <span class="number">1</span></span><br><span class="line">        i += <span class="number">1</span></span><br><span class="line">        <span class="built_in">print</span>(ans)</span><br><span class="line">    </span><br></pre></td></tr></table></figure><h2 id="读入一个数组">读入一个数组</h2><p><a href="https://qoj.ac/contest/1427/problem/7810">https://qoj.ac/contest/1427/problem/7810</a>.</p><p>记得要加上 <code>list()</code>。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> __name__ == <span class="string">&quot;__main__&quot;</span>:</span><br><span class="line">    n, d = <span class="built_in">map</span>(<span class="type">int</span>, <span class="built_in">input</span>().<span class="built_in">split</span>())</span><br><span class="line">    v = <span class="built_in">list</span>(<span class="built_in">map</span>(<span class="type">int</span>, <span class="built_in">input</span>().<span class="built_in">split</span>()))</span><br><span class="line">    a = <span class="built_in">list</span>(<span class="built_in">map</span>(<span class="type">int</span>, <span class="built_in">input</span>().<span class="built_in">split</span>()))</span><br><span class="line">    ans = <span class="number">0</span></span><br><span class="line">    cnt = <span class="number">0</span></span><br><span class="line">    mn = <span class="number">1e9</span></span><br><span class="line">    <span class="keyword">for</span> i in <span class="built_in">range</span>(n - <span class="number">1</span>):</span><br><span class="line">        <span class="keyword">if</span> i:</span><br><span class="line">            v[i] += v[i - <span class="number">1</span>]</span><br><span class="line">        val = (v[i] - cnt * d + d - <span class="number">1</span>) <span class="comment">// d</span></span><br><span class="line">        cnt += val</span><br><span class="line">        mn = <span class="built_in">min</span>(mn, a[i])</span><br><span class="line">        ans += val * mn</span><br><span class="line">    <span class="built_in">print</span>(ans)</span><br></pre></td></tr></table></figure><h2 id="让我们学会输出！">让我们学会输出！</h2><p><a href="https://www.luogu.com.cn/problem/P9750">https://www.luogu.com.cn/problem/P9750</a>.</p><p>分类讨论。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> math <span class="keyword">import</span> *</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">solve</span>():</span><br><span class="line">    a, b, c = <span class="built_in">map</span>(<span class="built_in">int</span>, <span class="built_in">input</span>().split())</span><br><span class="line">    <span class="keyword">if</span> a &lt; <span class="number">0</span>:</span><br><span class="line">        a, b, c = -a, -b, -c</span><br><span class="line">    delta = b * b - <span class="number">4</span> * a * c</span><br><span class="line">    <span class="keyword">if</span> delta &lt; <span class="number">0</span>:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;NO&quot;</span>)</span><br><span class="line">        <span class="keyword">return</span></span><br><span class="line">    x1 = ceil((-b + sqrt(delta)) / (<span class="number">2</span> * a))</span><br><span class="line">    <span class="comment"># print(x1)</span></span><br><span class="line">    <span class="keyword">if</span> a * x1 * x1 + b * x1 + c == <span class="number">0</span>:</span><br><span class="line">        <span class="built_in">print</span>(<span class="built_in">int</span>(x1))</span><br><span class="line">        <span class="keyword">return</span></span><br><span class="line">    p, q = -b, <span class="number">2</span> * a</span><br><span class="line">    val = floor(sqrt(delta))</span><br><span class="line">    <span class="keyword">if</span> val * val == delta:</span><br><span class="line">        delta = <span class="number">0</span></span><br><span class="line">        p += val</span><br><span class="line">    g = gcd(p, q)</span><br><span class="line">    p /= g</span><br><span class="line">    q /= g</span><br><span class="line">    <span class="keyword">if</span> p:</span><br><span class="line">        <span class="keyword">if</span> p * q &lt; <span class="number">0</span>:</span><br><span class="line">            <span class="built_in">print</span>(<span class="string">&#x27;-&#x27;</span>, end = <span class="string">&#x27;&#x27;</span>)</span><br><span class="line">        p, q = <span class="built_in">abs</span>(p), <span class="built_in">abs</span>(q)</span><br><span class="line">        <span class="built_in">print</span>(<span class="built_in">int</span>(p), end = <span class="string">&#x27;&#x27;</span>)</span><br><span class="line">        <span class="keyword">if</span> q != <span class="number">1</span>:</span><br><span class="line">            <span class="built_in">print</span>(<span class="string">&#x27;/&#x27;</span>, end = <span class="string">&#x27;&#x27;</span>)</span><br><span class="line">            <span class="built_in">print</span>(<span class="built_in">int</span>(q), end = <span class="string">&#x27;&#x27;</span>)</span><br><span class="line">        <span class="keyword">if</span> delta:</span><br><span class="line">            <span class="built_in">print</span>(<span class="string">&#x27;+&#x27;</span>, end = <span class="string">&#x27;&#x27;</span>)</span><br><span class="line">    <span class="keyword">if</span> delta:</span><br><span class="line">        val = floor(sqrt(delta))</span><br><span class="line">        <span class="keyword">while</span> val &gt;= <span class="number">1</span>:</span><br><span class="line">            <span class="keyword">if</span> delta % (val * val) == <span class="number">0</span>:</span><br><span class="line">                delta /= val * val</span><br><span class="line">                <span class="keyword">break</span></span><br><span class="line">            val -= <span class="number">1</span></span><br><span class="line">        p, q = val, <span class="number">2</span> * a</span><br><span class="line">        g = gcd(p, q)</span><br><span class="line">        p /= g</span><br><span class="line">        q /= g</span><br><span class="line">        <span class="keyword">if</span> p != <span class="number">1</span>:</span><br><span class="line">            <span class="built_in">print</span>(<span class="built_in">int</span>(p), end = <span class="string">&#x27;*&#x27;</span>)</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;sqrt(&quot;</span>, end = <span class="string">&#x27;&#x27;</span>)</span><br><span class="line">        <span class="built_in">print</span>(<span class="built_in">int</span>(delta), end = <span class="string">&#x27;)&#x27;</span>)</span><br><span class="line">        <span class="keyword">if</span> q != <span class="number">1</span>:</span><br><span class="line">            <span class="built_in">print</span>(<span class="string">&#x27;/&#x27;</span>, end = <span class="string">&#x27;&#x27;</span>)</span><br><span class="line">            <span class="built_in">print</span>(<span class="built_in">int</span>(q), end = <span class="string">&#x27;&#x27;</span>)</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&#x27;&#x27;</span>)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">&quot;__main__&quot;</span>:</span><br><span class="line">    T, M = <span class="built_in">map</span>(<span class="built_in">int</span>, <span class="built_in">input</span>().split())</span><br><span class="line">    <span class="keyword">for</span> _ <span class="keyword">in</span> <span class="built_in">range</span>(T):</span><br><span class="line">        solve()</span><br></pre></td></tr></table></figure>]]>
    </content>
    <id>https://iznomia.github.io/posts/5c7f8dbe/</id>
    <link href="https://iznomia.github.io/posts/5c7f8dbe/"/>
    <published>2025-12-15T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>来简单学习一下 python 如何在算法竞赛中使用。寒假想拿学习更多的东西。</p>]]>
    </summary>
    <title>算法竞赛中的 python（一）</title>
    <updated>2025-12-15T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="记录" scheme="https://iznomia.github.io/categories/%E8%AE%B0%E5%BD%95/"/>
    <category term="游记" scheme="https://iznomia.github.io/categories/%E8%AE%B0%E5%BD%95/%E6%B8%B8%E8%AE%B0/"/>
    <category term="游记" scheme="https://iznomia.github.io/tags/%E6%B8%B8%E8%AE%B0/"/>
    <content>
      <![CDATA[<blockquote><p>你不能总是一直逃避某些事情。</p></blockquote><span id="more"></span><h2 id="总结">总结</h2><p>比赛当天早上感觉扁桃体有些发炎。</p><p>为啥能不会这个 A 呢。</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>n</mi><mn>2</mn></msup><mi>k</mi><mi>log</mi><mo>⁡</mo><mi>m</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n^2k\log m)</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.0278em;">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="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">m</span><span class="mclose">)</span></span></span></span> 真的卡不过这个 E 吗，等 ucup 上了我再研究一下。</p><p>所以还是单核强度最重要。下学期还是多学习一点有用的东西吧，算法竞赛也不能断就是了，感觉会很有挑战性。</p><p>主要影响是没拿到金牌，然后没 EC 去了。有一种没进省队的空虚感。</p><h2 id="NextStage">NextStage</h2><p>第一次参加这种活动，虽然是线上。</p><p>Gram 抬手好帅，削除射线好酷炫。</p><p>第一次知道 TG 是个法师，有点帅的。期待和 Laur 的新曲。</p><p>期待 Ashrount 和打打的新曲。后面那段 kick 太震惊了，太厉害了，真的不是 Myosuke 或者 Gram 吗。</p><div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/6925522c3203f7be002fe988.png" alt="象征性地放个图" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">象征性地放个图</span></div></div><p>ak+q vs onoken，我的天哪。</p><p>我就说 Xterfusion 是个不错的曲子，你看这效果不非常好吗。</p><p>看情况确实想在寒假开始学习乐理了。</p><h2 id="上海旅行">上海旅行</h2><p>赛后晚上打算去外滩看看，但是地铁坐到一般发现自己的感冒其实不是很轻，早上的感觉是对的，赛时只是在硬撑罢了。</p><p>在前往外滩的路上遇到了巧克力博物馆，有巧克力造的东方明珠塔。据我观察墙壁好像也是用巧克力造的（或者只是颜色很像），有点厉害的。</p><div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/6925524c3203f7be002feb07.jpg" data-fancybox="true" style="width:200px;"/></div></div><p>在外滩使用破烂手机拍照，并未被东方明珠塔攻击。未尝试饮用蜜雪冰城。</p><div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/6925525d3203f7be002febc4.jpg" data-fancybox="true"/></div></div>]]>
    </content>
    <id>https://iznomia.github.io/posts/f79d0940/</id>
    <link href="https://iznomia.github.io/posts/f79d0940/"/>
    <published>2025-11-24T00:00:00.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p>你不能总是一直逃避某些事情。</p>
</blockquote>]]>
    </summary>
    <title>
      <![CDATA[2025 ICPC 上海站 & Arcaea NextStage 线上观感]]>
    </title>
    <updated>2025-11-25T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="算法竞赛" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <category term="训练" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/%E8%AE%AD%E7%BB%83/"/>
    <category term="算法竞赛" scheme="https://iznomia.github.io/tags/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <content>
      <![CDATA[<p>LucaProject / NeLiME —— Quadruplicity</p><span id="more"></span><h2 id="2-ICPC-2022-Jinan-R-Tower">2 [ICPC 2022 Jinan R] Tower</h2><p>很好猜，不想证了。</p><h2 id="3-ICPC-2022-Jinan-R-Frozen-Scoreboard">3 [ICPC 2022 Jinan R] Frozen Scoreboard</h2><p>模拟。</p><h2 id="4-CCPC-2025-Harbin-01-背包">4 [CCPC 2025 Harbin] 01 背包</h2><p>猜。</p><h2 id="5-CCPC-2025-Harbin-六边形翻转">5 [CCPC 2025 Harbin] 六边形翻转</h2><p>猜。</p><h2 id="6-CCPC-2025-Harbin-液压机">6 [CCPC 2025 Harbin] 液压机</h2><p>模拟。</p><h2 id="7-Xi’an-Regional-2025-Catch-the-Monster">7 [Xi’an Regional 2025] Catch the Monster</h2><p><a href="https://www.luogu.com.cn/problem/P14449">Portal</a>.</p><p>不难画出来，如果有一个点满足它有至少三个儿子，每个儿子都不是叶子，那么就完蛋了。</p><p>使用双指针维护所有的答案为 Yes 的区间，移动指针的时候稍微剪剪枝。复杂度好像是对的，不管了。<a href="https://qoj.ac/submission/1758014">代码</a>。</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/dcc604a/</id>
    <link href="https://iznomia.github.io/posts/dcc604a/"/>
    <published>2025-11-11T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>LucaProject / NeLiME —— Quadruplicity</p>]]>
    </summary>
    <title>2025-11-11(#8)：四重性</title>
    <updated>2025-11-11T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="算法竞赛" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <category term="训练" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/%E8%AE%AD%E7%BB%83/"/>
    <category term="算法竞赛" scheme="https://iznomia.github.io/tags/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <content>
      <![CDATA[<p>Onlap —— Burn</p><span id="more"></span><h2 id="4th-ucup-s3-Disjoint-Set-Splitting">[4th ucup s3] Disjoint Set Splitting</h2><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><h2 id="1-4th-ucup-s3-Christmas-Tree">1 [4th ucup s3] Christmas Tree</h2><p>见 NOI 一轮复习：状态设计。</p><h2 id="Nanjing-Regional-2024-Strips">[Nanjing Regional 2024] Strips</h2><p>简单。</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/a497f773/</id>
    <link href="https://iznomia.github.io/posts/a497f773/"/>
    <published>2025-10-25T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>Onlap —— Burn</p>]]>
    </summary>
    <title>2025-10-25(#7)：一遍又一遍将它全部燃烧</title>
    <updated>2025-10-26T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="算法竞赛" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <category term="训练" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/%E8%AE%AD%E7%BB%83/"/>
    <category term="算法竞赛" scheme="https://iznomia.github.io/tags/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <content>
      <![CDATA[<p>ナナツカゼ —— アリア</p><span id="more"></span><p>trio <a href="https://qoj.ac/contest/2551">https://qoj.ac/contest/2551</a>，怎么马上就要打正赛了啊？</p><hr><p>solo <a href="https://qoj.ac/contest/1828">https://qoj.ac/contest/1828</a></p><h2 id="B-Birthday-Gift">B. Birthday Gift</h2><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>0</mn><mo separator="true">,</mo><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:0.8389em;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">1</span></span></span></span>，最后必定会删到只剩一个数的情况。</p><hr><h2 id="qoj14572-Mex-Hex">qoj14572 Mex Hex</h2><p>这个条件非常奇妙，不太能 DP。但是可以维护上一个保护范围终止点的可行区间，这样下一个区间的合法范围是可以简单地更新的。</p><h2 id="qoj4888-Decoding-The-Message">qoj4888 Decoding The Message</h2><p>首先模 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>65535</mn></mrow><annotation encoding="application/x-tex">65535</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">65535</span></span></span></span> 很诡异，注意到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>65535</mn><mo>=</mo><mn>3</mn><mo>×</mo><mn>5</mn><mo>×</mo><mn>7</mn><mo>×</mo><mn>257</mn></mrow><annotation encoding="application/x-tex">65535=3\times 5\times 7\times 257</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">65535</span><span class="mspace" style="margin-right:0.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.7278em;vertical-align:-0.0833em;"></span><span class="mord">3</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">5</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">7</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">257</span></span></span></span>，因此对于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>256</mn></mrow><annotation encoding="application/x-tex">256</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">256</span></span></span></span> 进制，前三个都是所有数的和（<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>256</mn><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>3</mn><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">256\bmod 3=1</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">256</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">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.6444em;"></span><span class="mord">1</span></span></span></span>），后面这个</p><hr><p>做点杂题，感觉这个挺杂的：<a href="https://qoj.ac/contest/1306">2023 Multi-University Training Contest 1</a>。</p><h2 id="A-Hide-And-Seek-Game">A. Hide-And-Seek Game</h2><p>不是你怎么能调这么久的。</p><h2 id="B-City-Upgrading">B. City Upgrading</h2><p>直接 DP 就可以了。</p><h2 id="C-Mr-Liang-play-Card-Game">C. Mr. Liang play Card Game</h2><p>比较简单。</p><h2 id="E-Cyclically-Isomorphic">E. Cyclically Isomorphic</h2><p>向模板库中添加了最小表示法。</p><h2 id="I-Assertion">I. Assertion</h2><p>你在搞笑吗。</p><h2 id="J-Easy-Problem-I">J. Easy Problem I</h2><p>不是你怎么能调这么久的。</p><h2 id="K-Easy-Problem-II">K. Easy Problem II</h2><p>不是你怎么能调这么久的。</p><p>不如 Today’s Computer is very Fast.</p><h2 id="L-Play-on-Tree">L. Play on Tree</h2><p>AGC017D 的换根 DP 版。</p><h2 id="ARC207B-Balanced-Neighbors-2">[ARC207B] Balanced Neighbors 2</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>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><mo>−</mo><mi>i</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">n-i+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.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>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></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>]]>
    </content>
    <id>https://iznomia.github.io/posts/5d67ad62/</id>
    <link href="https://iznomia.github.io/posts/5d67ad62/"/>
    <published>2025-10-20T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>ナナツカゼ —— アリア</p>]]>
    </summary>
    <title>2025-10-20(#6)：能拯救他人的梦想</title>
    <updated>2025-10-24T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="算法竞赛" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <category term="训练" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/%E8%AE%AD%E7%BB%83/"/>
    <category term="算法竞赛" scheme="https://iznomia.github.io/tags/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <content>
      <![CDATA[<p>Ashrount —— Undying Macula</p><span id="more"></span><p>10 月 2 日体验了 Arcaea 的新主线，也是我第一次跟着更新体验主线。确实好玩好吧。</p><p>隐藏曲我就这么翻译了，感觉这么粗暴的翻译比较有史诗感。</p><p>谢谢你回应我的呼唤。</p><hr><p>duo <a href="https://qoj.ac/contest/2539">https://qoj.ac/contest/2539</a></p><h2 id="F-Yet-Another-MST-Problem">F. Yet Another MST Problem</h2><p>就你要注意到一个事情，两个区间连起来之后，新的区间相当于这两个区间的交集。</p><h2 id="E-Coffee-Shops">E. Coffee Shops</h2><h2 id="B-Domain-Compression">B. Domain Compression</h2><h2 id="K-Robot-Construction">K. Robot Construction</h2><hr><p>trio <a href="https://qoj.ac/contest/1741">https://qoj.ac/contest/1741</a>，真补不完了啊。</p><h2 id="E-Building-a-Fence">E. Building a Fence</h2><p>考场上就应该直接写拍子。</p><h2 id="B-Bookshelf-Tracking">B. Bookshelf Tracking</h2><p>注意到读书操作相当于左右两半段排序，因此直接模拟即可。</p><h2 id="C-Painting-Fences">C. Painting Fences</h2><h2 id="D-Function-with-Many-Maximums">D. Function with Many Maximums</h2><h2 id="F-Teleports">F. Teleports</h2><h2 id="G-Exponent-Calculator">G. Exponent Calculator</h2><h2 id="I-Marks-Sum">I. Marks Sum</h2><p>萌萌的。</p><h2 id="K-Train-Depot">K. Train Depot</h2><h2 id="L-Array-Spread">L. Array Spread</h2><hr><p>trio <a href="https://qoj.ac/contest/1780">https://qoj.ac/contest/1780</a>。</p><p>我觉得我就是菜。</p><h2 id="H-Permutation">H. Permutation</h2><p>事实证明小局部 DP，大范围按照 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi mathvariant="normal">/</mi><mn>3</mn></mrow><annotation encoding="application/x-tex">2/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">2/3</span></span></span></span> 来划分即可。</p><h2 id="E-Team-Arrangement">E. Team Arrangement</h2><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>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">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 mathnormal" style="margin-right:0.0278em;">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><h2 id="L-Challenge-Matrix-Multiplication">L. Challenge Matrix Multiplication</h2><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><mn>60</mn><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>m</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(60(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.0278em;">O</span><span class="mopen">(</span><span class="mord">60</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><hr><p>trio <a href="https://qoj.ac/contest/1901">https://qoj.ac/contest/1901</a>。</p><p>我觉得需要好好训练一下。</p><h2 id="K-Knapsack">K. Knapsack</h2><p>莫名其妙的科技题，这里稍微写点东西。</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>A</mi><mo separator="true">,</mo><mi>B</mi><mo separator="true">,</mo><mi>C</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(A,B,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 mathnormal">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0502em;">B</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0715em;">C</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><mo>+</mo><mi>C</mi></mrow><annotation encoding="application/x-tex">A+C</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">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.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0715em;">C</span></span></span></span> 来算值，这样大概率是可以减小差值的。</p><p>最终我也是不知道真遇到这种题怎么办，感觉只能听天由命。</p><h2 id="H-Have-You-Seen-This-Subarray">H. Have You Seen This Subarray?</h2><p>这场为数不多的好题了，这个比赛给我的感觉非常愚人节。</p><p>相邻两个数靠在一起的时间为若干个连续段，因为交换随机，所以段数很少，询问的时候直接暴力合并段即可。</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> 小的时候不满足这一点，需要暴力哈希做掉。</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/762e3621/</id>
    <link href="https://iznomia.github.io/posts/762e3621/"/>
    <published>2025-10-05T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>Ashrount —— Undying Macula</p>]]>
    </summary>
    <title>2025-10-05(#5)：不死的太阳耀斑</title>
    <updated>2025-10-05T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="算法竞赛" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <category term="训练" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/%E8%AE%AD%E7%BB%83/"/>
    <category term="算法竞赛" scheme="https://iznomia.github.io/tags/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <content>
      <![CDATA[<p>JYOCHO —— 互いの宇宙</p><span id="more"></span><p>国庆会多更新一点，但是我还没做线性代数的标准化作业。</p><p>trio <a href="https://qoj.ac/contest/1480">https://qoj.ac/contest/1480</a>，红了。</p><h2 id="J-Middle-Race">J. Middle Race</h2><p>假交互其实猜对了，但问题是我暴力写挂了。</p><p>但为什么会想着去硬解不等式啊。</p><p><img src="https://pic1.imgdb.cn/item/68dce3d2c5157e1a884c4eb1.png" alt=""></p><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><mi>A</mi><mo>+</mo><mi>B</mi><mo>+</mo><mi>C</mi><mo stretchy="false">)</mo><mo>÷</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">n(A+B+C)\div 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">n</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><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.0502em;">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:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0715em;">C</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">3</span></span></span></span>，然后直接枚举就行了。</p><h2 id="D-Gambler’s-Ruin">D. Gambler’s Ruin</h2><h2 id="L-Por-Una-Cabeza">L. Por Una Cabeza</h2><hr><p>trio <a href="https://qoj.ac/contest/1236">https://qoj.ac/contest/1236</a>，绿了。</p><h2 id="A-Oops-It’s-Yesterday-Twice-More">A. Oops, It’s Yesterday Twice More</h2><h2 id="D-Paimon-Sorting">D. Paimon Sorting</h2><h2 id="H-Crystalfly">H. Crystalfly</h2><h2 id="I-Cloud-Retainer’s-Game">I. Cloud Retainer’s Game</h2><h2 id="L-Secret-of-Tianqiu-Valley">L. Secret of Tianqiu Valley</h2><h2 id="M-Windblume-Festival">M. Windblume Festival</h2><h2 id="K-Ancient-Magic-Circle-in-Teyvat">K. Ancient Magic Circle in Teyvat</h2><p>大无语题。</p><hr><p>休息很久了，来打 CF！希望能上分！<a href="https://codeforces.com/contest/2152">https://codeforces.com/contest/2152</a></p><p>妈的破防了。</p><h2 id="E-Monotone-Subsequence">E. Monotone Subsequence</h2><h2 id="F-Triple-Attack">F. Triple Attack</h2><h2 id="G-Query-Jungle">G. Query Jungle</h2>]]>
    </content>
    <id>https://iznomia.github.io/posts/b060879/</id>
    <link href="https://iznomia.github.io/posts/b060879/"/>
    <published>2025-09-30T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>JYOCHO —— 互いの宇宙</p>]]>
    </summary>
    <title>2025-09-30(#4)：我却以为 终有一日 能回想起来</title>
    <updated>2025-09-30T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="记录" scheme="https://iznomia.github.io/categories/%E8%AE%B0%E5%BD%95/"/>
    <category term="闲话" scheme="https://iznomia.github.io/categories/%E8%AE%B0%E5%BD%95/%E9%97%B2%E8%AF%9D/"/>
    <category term="闲话" scheme="https://iznomia.github.io/tags/%E9%97%B2%E8%AF%9D/"/>
    <content>
      <![CDATA[<p>打完了 CF，但是确实卡 F 了。手速还是需要练的啊。</p><p>然后吃了点夜宵，明天下午才有课，因此可以稍微放松一下。原本的打算是稍微玩一会儿，然后在机房睡两三个小时，等早上学校门开了再回宿舍睡觉（我宿舍在校外）。</p><p>但发生了一些意料之外的情况。我之前没有注意到机房的窗没有纱窗，便直接将其打开以便通风——这邀请了大量的蚊子进入机房做客，导致我无法入睡。</p><p>于是无事可做，扫了一辆车在校园里乱逛。夜晚给人的体感还是比较冷的，把手冻到有点发寒的程度。我尝试寻找可能出去的门（没有找到），在北门找到了没有人要的外卖（放了一天的汉堡），穿越了正在施工的医学楼，如此。</p><p>最后以在机房睡了大概半个小时，大拇指被蚊子咬了一下的结局迎来了天亮。温度仍然很低，我离开了学校。</p><details class="tag-plugin colorful folding" color="red"><summary><p>图片</p></summary><div class="body"><div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/68da111ac5157e1a88432fe0.jpg" alt="王湘浩楼" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">王湘浩楼</span></div></div> <div class="tag-plugin image"><div class="image-bg"><img src="https://pic1.imgdb.cn/item/68da1142c5157e1a88433063.jpg" alt="于北苑拍摄的拂晓" data-fancybox="true"/></div><div class="image-meta"><span class="image-caption center">于北苑拍摄的拂晓</span></div></div></div></details>]]>
    </content>
    <id>https://iznomia.github.io/posts/71998f63/</id>
    <link href="https://iznomia.github.io/posts/71998f63/"/>
    <published>2025-09-26T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>打完了 CF，但是确实卡 F 了。手速还是需要练的啊。</p>
<p>然后吃了点夜宵，明天下午才有课，因此可以稍微放松一下。原本的打算是稍微玩一会儿，然后在机房睡两三个小时，等早上学校门开了再回宿舍睡觉（我宿舍在校外）。</p>
<p>但发生了一些意料之外的情况。我之前没有]]>
    </summary>
    <title>夜行</title>
    <updated>2025-09-26T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="算法竞赛" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <category term="训练" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/%E8%AE%AD%E7%BB%83/"/>
    <category term="算法竞赛" scheme="https://iznomia.github.io/tags/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <content>
      <![CDATA[<p>ARForest feat. Sennzai —— 星になって</p><span id="more"></span><p>队友太强了！！</p><p><a href="https://qoj.ac/contest/2534">https://qoj.ac/contest/2534</a></p><h2 id="G-序列与整数对">G. 序列与整数对</h2><p>这个复杂度怎么拿不等式写出来啊qwq</p><p>多做点数据结构。由队长的建议，要补区域赛的数据结构题。</p><h2 id="A-整点正方形计数2">A. 整点正方形计数2</h2><p>赛时队友写了一个非常诡异的做法过掉了，赛后看来想复杂了。</p><h2 id="M-并行计算">M. 并行计算</h2><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> 的位置的前缀和值，也就是 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>y</mi><mi>i</mi></msub><mo>×</mo><msub><mi>s</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">y_i\times s_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><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.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">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><mn>1024</mn><mo>=</mo><msup><mn>32</mn><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">1024=32^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">1024</span><span class="mspace" style="margin-right:0.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">3</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></span></span>，因此直接将序列分块，即可比分治更优地完成前缀操作。</p><h2 id="C-造桥与砍树">C. 造桥与砍树</h2><h2 id="F-连线博弈">F. 连线博弈</h2><p>Fun Fact：我之前做过 SG 函数的递推式长得跟这个一样得题，但是一点瞪不出 SG 函数的规律。感谢队友神力了。</p><h2 id="H-教师">H. 教师</h2><hr><p>trio <a href="https://qoj.ac/contest/1252">https://qoj.ac/contest/1252</a></p><p>也算是勉强打上金牌线了，主要是我的 I 分类讨论讨错了，我在干什么🤣</p><h2 id="I-Linear-Fractional-Transformation">I. Linear Fractional Transformation</h2><p>硬解方程，由于 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mo separator="true">,</mo><mi>d</mi></mrow><annotation encoding="application/x-tex">c,d</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="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></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><mo separator="true">,</mo><mi>d</mi></mrow><annotation encoding="application/x-tex">c,d</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="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">d</span></span></span></span> 表示即可。</p><hr><p>来打 CF，用的小号，打 Div.2，<a href="https://codeforces.com/contest/2151">https://codeforces.com/contest/2151</a>。</p><p>怎么 C 都不会了，还是要充满决心啊！</p><h2 id="C-Limited-Edition-Shop">C. Limited Edition Shop</h2><p>其实一开始想的就是对的，唉。</p><hr><p>搞了新的小号来打 Div.3。james2StormEye！</p><p><a href="https://codeforces.com/contest/2149">https://codeforces.com/contest/2149</a></p><p>无语了，怎么能卡 F。</p><p>某些小事情：<a href="/posts/71998f63/">/posts/71998f63/</a>。</p><hr><p>补 <a href="https://qoj.ac/contest/2238">https://qoj.ac/contest/2238</a>。</p><h2 id="G-矩阵">G. 矩阵</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; ++i)</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">1</span>; j &lt;= n; ++j)</span><br><span class="line">        cout &lt;&lt; j + (i - <span class="number">1</span>) * p &lt;&lt; <span class="string">&quot; \n&quot;</span>[j == n];</span><br></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>p</mi><mo>&gt;</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">p&gt;n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">p</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.4306em;"></span><span class="mord mathnormal">n</span></span></span></span>。</p><hr><p>trio <a href="https://qoj.ac/contest/1305">https://qoj.ac/contest/1305</a></p><p>打的还可以吧。</p><h2 id="E-Buy-and-Delete">E. Buy and Delete</h2><p>被队友想出做法后遥控我写完了，然后发现这个东西很对。</p><hr><p>唉怎么每天都有一万道题需要做。</p><p>感觉是时候寻找一些全新的可能性了，iznomia。</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/ec78c757/</id>
    <link href="https://iznomia.github.io/posts/ec78c757/"/>
    <published>2025-09-22T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>ARForest feat. Sennzai —— 星になって</p>]]>
    </summary>
    <title>2025-09-22(#3)：让我们再次解答 对着那被吞噬的黑暗</title>
    <updated>2025-09-22T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="算法竞赛" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <category term="训练" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/%E8%AE%AD%E7%BB%83/"/>
    <category term="算法竞赛" scheme="https://iznomia.github.io/tags/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <content>
      <![CDATA[<p>AxR —— Levitation</p><span id="more"></span><h2 id="EC-Online-2025-II-DAG-Query">[EC Online 2025 II] DAG Query</h2><p>我了个假 DAG 啊。</p><p>忘了拉格朗日插值怎么推的了。</p><p>有板子真的，最多三分钟。</p><p>无语了，只能说幸好没掉出前六。</p><hr><p>solo <a href="https://qoj.ac/contest/1799">https://qoj.ac/contest/1799</a></p><h2 id="G-Game">G. Game</h2><p>直接模拟即可，需要等比数列求和。</p><h2 id="L-502-Bad-Gateway">L. 502 Bad Gateway</h2><p>我的写法需要开 int128。</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><h2 id="D-Query-on-Tree">D. Query on Tree</h2><h2 id="K-Match">K. Match</h2><hr><p>有一百万道题需要补。</p><p>trio <a href="https://qoj.ac/contest/1053">https://qoj.ac/contest/1053</a></p><h2 id="E-Identical-Parity">E. Identical Parity</h2><p>被硬控了😭</p><p>我觉得还是需要写出 exgcd 的通解。</p><h2 id="D-Frozen-Scoreboard">D. Frozen Scoreboard</h2><h2 id="C-DFS-Order-2">C. DFS Order 2</h2><p>这真的比 G 简单吗😨</p><p>肯定要树形 DP，但是不难发现一个事情：关注子树内的信息是极其诡异的，因为 DFS 序只和子树外面是怎么走的有关。</p><h2 id="G-Quick-Sort">G. Quick Sort</h2><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>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">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 mathnormal" style="margin-right:0.0278em;">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.0139em;">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><h2 id="L-Tree-Distance">L. Tree Distance</h2><hr><p>加强代码能力，加强体力（以及读题能力）。学数学，做 DP，练数据结构，如果可以还需要学图论和串。</p><p>妈的干不完了，我想打金。</p><p>要不找机会 VP 一场 CF。</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/c967b560/</id>
    <link href="https://iznomia.github.io/posts/c967b560/"/>
    <published>2025-09-15T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>AxR —— Levitation</p>]]>
    </summary>
    <title>2025-09-15(#2)：漂浮于重力之上</title>
    <updated>2025-09-15T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="算法竞赛" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <category term="训练" scheme="https://iznomia.github.io/categories/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/%E8%AE%AD%E7%BB%83/"/>
    <category term="算法竞赛" scheme="https://iznomia.github.io/tags/%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B/"/>
    <content>
      <![CDATA[<blockquote><p>又回来了，又能持续多久呢？</p></blockquote><span id="more"></span><p>Sakuzyo —— Lost Memory</p><h2 id="CF2128D-Sum-of-LDS">CF2128D Sum of LDS</h2><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> 为右端点的区间的 LDS，一定可以以 <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> 结尾，然后就完成了。</p><hr><p>做 <a href="https://qoj.ac/contest/1986">https://qoj.ac/contest/1986</a></p><h2 id="A-删除01串">A. 删除01串</h2><p>分讨。</p><h2 id="C-砝码">C. 砝码</h2><p>分讨。</p><h2 id="G-萤火虫难题">G. 萤火虫难题</h2><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><h2 id="D-最近公共祖先">D. 最近公共祖先</h2><p>来写简单数据结构！感觉比 H、I、J 都要简单啊。</p><p>总结一下两棵树类的问题：在一棵树上进行操作（点分治等），然后统计另一棵树上的信息。</p><p>LCA 问题显然考虑枚举 LCA 是什么，于是在第一棵树上启发式。当枚举到一个新的节点时，如果它在第二棵树上是 LCA 的儿子，那么要统计此时第二棵树上 LCA 的子树中被“激活”了多少个节点，减去枚举节点所对应的小子树内的被激活的节点。</p><hr><h2 id="CF2135B-For-the-Champion">CF2135B For the Champion</h2><p>记得使用演算纸而不是 iPad。</p><h2 id="qoj-11736-Three-Arrays">qoj 11736 Three Arrays</h2><p>STL 二分记得判断二分出来的东西是否在答案区间内。</p><hr><p>感觉 <a href="https://qoj.ac/contest/1885">https://qoj.ac/contest/1885</a> 很不错。</p><hr><h2 id="EC-Online-2025-I-Moving-on-the-Plane">[EC Online 2025 I] Moving on the Plane</h2><p>为啥不会啊。</p><p>见 NOI 一轮复习 I：杂项。</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/cfb4593d/</id>
    <link href="https://iznomia.github.io/posts/cfb4593d/"/>
    <published>2025-08-25T00:00:00.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p>又回来了，又能持续多久呢？</p>
</blockquote>]]>
    </summary>
    <title>2025-08-30(#1)：重新开始</title>
    <updated>2025-09-09T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>james1BadCreeper</name>
    </author>
    <category term="TeX" scheme="https://iznomia.github.io/tags/TeX/"/>
    <content>
      <![CDATA[<blockquote><p>源于一场使用 XeLaTeX 编译 beamer 并设置全局背景时，每一页都会重复引用图片导致最终 pdf 变得很大。最后切换至 LuaTeX 解决了该问题。</p></blockquote><span id="more"></span><h2 id="问题概述">问题概述</h2><p>最近在准备假期给小朋友讲课用的课件，但是遇到了一个问题：编译 beamer 并设置全局背景时，每一页都会重复引用图片导致最终 pdf 变得很大。我查阅了曾经做过的课件（只能找到 pdf，源码已丢失），发现它们的大小是正常的。</p><p>这让人很苦恼，因为一个课件有上百页，对于一张 2MB 的背景来说，会使得这个课件膨胀至 300MB 的大小，非常的恐怖。所以这是一个急需修复的问题。</p><p>有趣的是，如果把这个膨胀的 pdf 打成 zip 那么它没怎么被压缩，而打成 7z 可以压缩至正常大小。原来 zip 这么菜的，以后有机会要研究一下。</p><h2 id="问题分析">问题分析</h2><p>AI 给出了使用 <code>background</code> 的解决方式。经过我的尝试这好像不起作用。我认为这应该是给 LaTeX 文档用的而不是 beamer。如果是我的问题，请在评论区告诉我。</p><p>我曾经在其它环境上使用过 XeTeX 并没有出现上述情况，可能是我现在使用的环境的 XeTeX 有点问题。反正很神秘。</p><p>经测试 pdfTeX 可以正常工作，但是因为我需要改字体，所以最终换成了 LuaTeX，问题得以解决。</p><h2 id="总结">总结</h2><p>感觉自己没有解决实际问题的能力。需要学会如何高效地使用搜索引擎寻找答案，并适当的使用 AI 辅助来解决问题。</p><p>否则到时候遇到一点自己不会的东西，忙了一个下午不知道自己在忙什么，那就有点搞笑了！</p>]]>
    </content>
    <id>https://iznomia.github.io/posts/9b7cfc66/</id>
    <link href="https://iznomia.github.io/posts/9b7cfc66/"/>
    <published>2025-07-18T00:00:00.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p>源于一场使用 XeLaTeX 编译 beamer 并设置全局背景时，每一页都会重复引用图片导致最终 pdf 变得很大。最后切换至 LuaTeX 解决了该问题。</p>
</blockquote>]]>
    </summary>
    <title>一场因神秘力量影响而发生的事故</title>
    <updated>2025-07-18T00:00:00.000Z</updated>
  </entry>
</feed>
