<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>サン猫の時間漂流</title><description>一个孤独的地方，散落着一个人的人生碎片</description><link>https://www.saroprock.com/</link><language>zh-CN</language><atom:link href="https://www.saroprock.com/rss.xml" rel="self" type="application/rss+xml"/><image><url>https://www.saroprock.com/favicon.png</url><title>サン猫の時間漂流</title><link>https://www.saroprock.com/</link></image><item><title>首考</title><link>https://saro.pub/behind</link><guid isPermaLink="true">https://saro.pub/behind</guid><description>我无意写一首闷闷不乐的颂歌，可我要像破晓晨鸡一样在栖木上引吭啼唱……</description><pubDate>Sat, 17 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;我拿起一支笔──现在，它不再是一件理所应当的物品了。我说过不在自修课写随笔的，但……一抹紫色闯入我的视野，吓得我一哆嗦，或者说她“𝓈ℯ𝓃𝒹 𝓂ℯ 𝒶 𝓆𝓊𝒾𝓋ℯ𝓇”──首考续写没用上的放在这里倒还合适。总之，我断断乎不敢浪费时间了。还有大把的事情等着我去做，走哪条路根本无须斟酌，我把本子放回课桌，从此再没打开过&lt;a href=&quot;https://www.saroprock.com/%E6%88%91%E6%9C%89%E6%84%8F%E8%BF%BD%E6%B1%82%E6%8A%BC%E9%9F%B5%EF%BC%8C%E8%A7%89%E5%BE%97%E8%AF%BB%E8%B5%B7%E6%9D%A5%E7%A1%AE%E5%AE%9E%E6%98%AF%E5%BE%88%E6%9C%89%E5%91%B3%E9%81%93%E3%80%82%E4%BD%86%E6%98%AF%E8%8B%A6%E4%BA%8E%E6%97%B6%E9%97%B4%E7%B2%BE%E5%8A%9B%EF%BC%8C%E6%B2%A1%E5%8A%9E%E6%B3%95%E9%9D%A2%E9%9D%A2%E4%BF%B1%E5%88%B0%E3%80%82&quot;&gt;^1&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;首考考完的第一周只上语数，我以为总可“随意些”，可发现别说是校方了，就连我自己也不乐意自己过得太滋润。我无意写一篇冗长无趣的流水账，好像只是把任务完成，全然不管文章标题是什么。有人问我──无非是闲谈而已──每天作业写完后会做些什么：试卷教辅多了去了，我怎么也写不完，错题笔记更是老生常谈，只是当我说每天还会做一份英语时，他忽然扭了头，瞪大了眼，似乎在打量我是不是发了疯。嗳~我只是放不下而已。摆摆手，一句话终没有说出口：就和你们讨论物理化学……没什么两样。&lt;/p&gt;
&lt;p&gt;和同学在一起总是不乏乐趣。如果可以，我倒是想大摇大摆地躺在地上、无拘无束，任凭窗外的花瓣飘进我的双眼，而上面的不过是些枯枝落叶罢了。不过，我确乎找到了一些不一样的乐趣，它更不主动，而且不必别人的帮助。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;一月九日清晨，品尝完昨夜八个小时熬的好粥&lt;a href=&quot;https://www.saroprock.com/%E5%8D%81%E5%88%86%E5%B9%BC%E7%A8%9A%E7%9A%84%E6%9A%97%E7%A4%BA%EF%BC%8C%E6%88%91%E8%87%AA%E5%B7%B1%E6%83%B3%E6%83%B3%E9%83%BD%E8%A7%89%E5%BE%97%E5%BE%88%E4%B8%8D%E6%88%90%E7%86%9F%E3%80%82&quot;&gt;^2&lt;/a&gt;后，我冲了个澡，准备迎接这难得的、完整的一天。说实在的，有点没头绪，我，上次有这时间，除了国庆假期之外，也就是七月份暑假的时候了，但那时称得上有点什么意义的活动，也唯有泡图书馆那么一件，今儿断断乎是不愿去了。或许我真该同我朋友一样，组个班，去邻近的城市，上杭高老师的课把这一天冲掉才好──多少符合我的日常。可若是这样，昨日的我亦不能幸免于难。我无法改变过去，只得“被迫”接受当下的现状了。&lt;/p&gt;
&lt;p&gt;如果让我列一处想去的地点，除了图书馆，也就是街头巷尾的几摞书店而已──我这么写并不是为了凸显自己有多么爱阅读，恰恰相反，我读得实在太少，以至于一落笔、一张口，不外乎是些口耳相传、鄙俗不堪的流行语罢了──除此以外，这城市太小，确实没有再值得我留恋的地方。要是球拍在我手上，约上三五好友，那几座球馆还算得上是好去处。但我&lt;strong&gt;昨天&lt;/strong&gt;已领略过羽球的风采，双臂酸痛，歇息的时间仍是要的。我骑着车，在北风中兜了几个圈子，手被冻得通红，扶不稳，撞倒一整串多米诺骨牌才停下。我一个个扶起、拖过去，像是在犁地一样。这比喻……我忖量这到底是什么意思，是不是太做作。正当时，又忽然觉得能写这些已经是莫大的荣幸了。&lt;/p&gt;
&lt;p&gt;门外车很多，店里除我以外，却是连半个客人也没有。店员们在讨论唐诗宋词，倒是让空气中夹杂了点文学的味道。得亏书店够大，相隔多远，还容得下我这俗人一个，不然，我绝对得同莫言一样，被贬到外国文学那一栏里──初看到这一幕，真是说不上来的诡异──当然我来这里断断乎不是去寻他的，而是去求“围而得”湖的：久享“美文中的美文”、“经典中的经典”，《瓦尔登湖》，一本我垂涎已久的名著，一拿到手，却是令我惭愧不已：先前看到同学拥有的版本的封面，我一直以为它是小说来着，现在一看，却是实实在在的非虚构作品。这如何不让我感到羞愧呢？喜欢一部作品，却连体裁也不了解，同那些追逐流行，不求甚解的人有什么区别呢？好吧，暂且不管这事了──现在我可是学会挑译者了！早先阅读《傲慢与偏见》的经历，让我明白了译者之间亦有差距：有些或许仅仅是风格不同，读来稍有区别而已，说不定还会有些出乎意料的体验；有些则是云泥之别，断断乎不能享受了。翻来覆去，我最终选择了潘庆舲先生的“拙译版”。现在说来，比起梭罗，对他，我可能更加情有独钟。&lt;/p&gt;
&lt;p&gt;顺带着，我还买了一本《杀死一只知更鸟》。确实只是顺带着。事实上，我已经有了一本 Kindle，按道理是不必要再花&lt;strong&gt;冤枉钱&lt;/strong&gt;买纸质书籍了──况且电纸书更薄，更加不容易被老师发现。但是，我还是老老实实付了一百零八元。毕竟，过了这么久，我还是觉得，唯有抚摸着书籍的每一页，顺着手指读下去，里面的文字，才能给我带来些许&lt;strong&gt;实在的&lt;/strong&gt;安全感。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;同母亲在一起吃吃饭、当当衣架子的时间是很难得的，但有些事情反而让我更加在意：我叹息，嗳气，到底仍不知其中奥秘。空落落的包间里只有我与母亲两人。关心、诧异、埋怨、鼓励，直到一位服务员的进入才打破这略带迷蒙的场景。“你知道么，”母亲有意无意地说，“她──对就她，比你还小上一岁呢&lt;a href=&quot;https://www.saroprock.com/%E6%88%91%E7%9A%84%E6%AF%8D%E4%BA%B2%E6%98%AF%E5%BA%97%E9%95%BF%EF%BC%8C%E6%89%80%E4%BB%A5%E7%9F%A5%E9%81%93%E8%81%8C%E5%91%98%E7%9A%84%E8%BA%AB%E4%BB%BD%E4%BF%A1%E6%81%AF%E3%80%82&quot;&gt;^3&lt;/a&gt;。”好了，现在轮到我诧异了。瞪大双眼，我四处张望，人呢？最终只发现一双躲在门后眨巴的小眼睛，乌黑乌黑的，充满好奇似的上下打量着我，发现我看着她，又马上消失了。我说不上来这是种什么感觉：一位与我年龄相仿的少女，在我还在象牙塔里&lt;strong&gt;饱&lt;/strong&gt;&lt;a href=&quot;https://www.saroprock.com/%E6%88%91%E8%AF%95%E5%9B%BE%E9%9A%90%E5%90%AB%E5%AF%B9%E2%80%9C%E4%B9%A6%E6%96%8B%E5%BC%8F%E4%BC%98%E8%B6%8A%E6%84%9F%E2%80%9D%E7%9A%84%E5%8F%8D%E8%AE%BD%E3%80%82%E4%BA%8B%E5%AE%9E%E4%B8%8A%EF%BC%8C%E6%88%91%E5%85%A8%E6%96%87%E4%B9%9F%E5%B0%BD%E9%87%8F%E5%9C%A8%E5%B1%95%E7%A4%BA%E8%BF%99%E4%B8%80%E7%82%B9%EF%BC%8C%E6%88%96%E8%80%85%E8%AF%B4%EF%BC%8C%E6%88%91%E5%9C%A8%E6%89%B9%E5%88%A4%E6%88%91%E8%87%AA%E5%B7%B1%E3%80%82&quot;&gt;^4&lt;/a&gt;读圣贤书时，她已经走向社会工作，养活自己，全然不像，也不能是个小孩了。我揣度着，不由得暗自嗟叹，端得是感慨万千：我当然知道总有人要走这条路，可亲眼所见，又怎么能没有感动？呀，可是，不一会儿，我就被自己幼稚的感慨逗笑了：我一直长大，服务员却只招这么个岁数。待我七老八十了，大抵没有服务员能够得上我的年龄。&lt;/p&gt;
&lt;p&gt;我曾经说过，我好像一个观察者，每天观察别人&lt;a href=&quot;https://www.saroprock.com/%E6%9D%A5%E6%BA%90%E8%AF%A6%E8%A7%81%EF%BC%9A%5BX%5D(https://x.com/EveSunMaple/status/1923427268489011357?s=20)&quot;&gt;^5&lt;/a&gt;——如今，我也算是看到很多人啦~唔，不过我是学生，记得最多的也就是学习相关的事情。行吧，你看看，有的人，比如那位之前还在同我一起参加信息学竞赛的小朋友，本来比我还小一届呢，老早考上少年班，在中科大不知学了几年了；那位先前还与我一起琢磨游戏引擎的，已经因为一篇论文被港科大录取了&lt;a href=&quot;https://www.saroprock.com/%E9%99%A4%E4%BA%86%E8%BF%99%E4%BB%B6%E4%BA%8B%E6%83%85%E7%9A%84%E7%9C%9F%E5%AE%9E%E6%80%A7%E6%9C%89%E5%BE%85%E8%80%83%E8%AF%81%EF%BC%8C%E5%85%B6%E4%BB%96%E9%83%BD%E6%98%AF%E5%8F%91%E7%94%9F%E5%9C%A8%E6%88%91%E7%9C%BC%E5%89%8D%E7%9A%84%E4%BA%8B%E5%AE%9E%E3%80%82&quot;&gt;^6&lt;/a&gt;；还有之前认识的学长，有哪个不是考上了清北复交浙？就连我们这个小地方，出国留学的也数不胜数：首考的时候，同班同学忽然拉住我的肩膀，对这一个人指指点点：“就她！澳洲回来的！从南半球飞来参加首考啦！”实际上我们班就有一个去英国的，但是那天并没有回来。&lt;/p&gt;
&lt;p&gt;考前几天，还在同一位网友聊天呢。我说马上高考啦！他居然以为我是职高的──似乎职高高考是这个时候？我赶忙解释，好像蒙受了天大的委屈，很着急似的。他似有些漫不经心地说了一句：“草，真没经历过高中……”&lt;/p&gt;
&lt;p&gt;行吧，现在就留我在这里。我想起我父亲三年前说过的一句话：“你要是考不上提前招，我就想尽办法把你送出去……”现在看来，我倒是&lt;strong&gt;不负众望&lt;/strong&gt;啦。毕竟，家族里面，除了我以外，真没什么人了，能托关系上职高的已经算好了──就这还花了四万块钱──其它的，叫我如何说明呢……？所以我现在就在这里，同其他三十万考生一样。我最终还是选择了最普通的一条路。为外出准备的几块钱，已经是父亲的极限，其它的他帮不上忙，我也不曾指望。我想，我真不过是个普通人。&lt;/p&gt;
&lt;p&gt;后来，我在我母亲的引荐下认识了一位旧相识，也许小学见过，现在断断乎是不记得了。幸好我不介意再相认一场，心里想着，这倒是考验自己&lt;strong&gt;社交能力&lt;/strong&gt;的绝佳机会。我说啊，我妈提起你，就特别想让我来见你，笃定我们俩一定特有话题可聊！可是我有什么可以讲的呢？现在刚刚考完，每天又是学习学习，除了文化课以外，真一概不知。可我又不能直接问成绩，多少有点不太礼貌，你说怎么办呢？&lt;/p&gt;
&lt;p&gt;“可你还是问了。”&lt;/p&gt;
&lt;p&gt;对啊，我就是这样子来提出的，我说，心想自己真是绝顶聪明，连他脸上的表情都没太在意。待他报完几串&lt;strong&gt;期望的&lt;/strong&gt;数字，我一震惊，却又得意洋洋、莫名自信起来，开始谈天说地、自吹自擂──虽然我不想承认这一点，毕竟我只是阐述事实、分享校园生活罢了。只是好像我不管用什么方式表达，都逃不过“凡尔赛”的标签。但换位思考一下，若我是他，前面这位玩世不恭的态度，同 𝖇𝖆𝖗𝖐&lt;a href=&quot;https://www.saroprock.com/%E7%8F%AD%E7%BA%A7%E9%87%8C%E7%9A%84%E2%80%9C%E4%BF%97%E8%AF%AD%E2%80%9D%EF%BC%8C%E5%AD%97%E9%9D%A2%E6%84%8F%E4%B8%BA%E2%80%9C%E7%8B%97%E5%8F%AB%E2%80%9D%EF%BC%8C%E6%8C%87%E4%B8%80%E4%B8%AA%E4%BA%BA%E8%87%AA%E6%88%91%E5%A4%B8%E8%80%80%E3%80%82&quot;&gt;^7&lt;/a&gt; 有什么区别？和他一起走出去时，我们还遇到了我的同学──“诺，清北选手。”他呀呀几句，我不知哪儿来一阵得意，好像我认识我同学是什么很光荣的事情一样。但这种自豪感很快变成了负罪感。&lt;/p&gt;
&lt;p&gt;人生道路千万条，服务员小妹也好，“准”清北学霸也罢，我指认同学，无非想说有些无法想象的人事，其实是很稀疏平常的。前面我不是还在感慨么？哎，可是，如今我们是同在一座小城，以后呢？断断乎是不可相提并论。我忽然想到肖复兴先生的《为什么一次次重回老街》&lt;a href=&quot;https://www.saroprock.com/%E6%83%AD%E6%84%A7%E7%9A%84%E6%98%AF%EF%BC%8C%E8%BF%99%E5%B9%B6%E4%B8%8D%E6%98%AF%E6%88%91%E7%9C%8B%E4%B9%A6%E7%9C%8B%E5%88%B0%E7%9A%84%EF%BC%8C%E8%80%8C%E6%98%AF%E6%88%91%E5%88%B7%E8%AF%95%E5%8D%B7%E5%81%9A%E5%88%B0%E7%9A%84%E3%80%82&quot;&gt;^8&lt;/a&gt;中的几段文字。他那老街，与我这小城，当真有相似之处：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我忽然发现，老街上，院落不同，不仅暗含着住在里面人员身份的不同，更注定着日后命运的不同。乡村饭店、同泰店和我住过的粤东会馆可以成为三个代表。乡村饭店里住的部队干部包括老红军及其家属子弟。粤东会馆里住的有工程师、技术员、翻译家、中学老师、小学校长、职员、会计、火车司机……同泰店里住的基本是在火车站扛大个儿的，即搬运工，还有蹬排子车的，或者拉大车，赶马车运货卖苦力的工人。&lt;/p&gt;
&lt;p&gt;这是三座建造于不同时代的院落……有人有事，有情感，有细节，有反思，有话可说，有案可稽，雪泥鸿爪，活色生香，百味俱生。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;隐士&lt;/strong&gt;&lt;a href=&quot;https://www.saroprock.com/%E6%88%91%E8%BF%99%E9%87%8C%E6%84%8F%E5%9B%BE%E6%A8%A1%E4%BB%BF%E3%80%8A%E7%93%A6%E5%B0%94%E7%99%BB%E6%B9%96%E3%80%8B%E4%B8%AD%E3%80%8E%E9%B8%9F%E5%85%BD%E8%8B%A5%E6%AF%94%E9%82%BB%E3%80%8F%E7%9A%84%E5%86%85%E5%AE%B9%E3%80%82%E2%80%9C%E9%9A%90%E5%A3%AB%E2%80%9D%E6%8C%87%E6%88%91%E7%9A%84%E5%AE%A4%E5%8F%8B%EF%BC%8C%E2%80%9C%E8%AF%97%E4%BA%BA%E2%80%9D%E5%88%99%E6%98%AF%E6%88%91%E8%87%AA%E5%B7%B1%E2%94%80%E2%94%80%E6%88%91%E8%AE%A4%E4%B8%BA%E8%BF%99%E4%B8%A4%E4%B8%AA%E8%AF%8D%E8%AF%AD%E4%BA%8E%E6%88%91%E4%BB%AC%E4%B8%A4%E4%B8%AA%E5%80%92%E6%98%AF%E9%9D%9E%E5%B8%B8%E7%9B%B8%E7%A7%B0%E3%80%82&quot;&gt;^9&lt;/a&gt;　所以就是在那一刻，你忽然成为了别人眼中的，等价于你先前赞叹的那些遥不可及的存在……&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;诗人&lt;/strong&gt;　看这些云，悬浮长空，多美！这可是我今天看到的最最顶呱呱的景致。像这样的云彩，古画里没有，异国他乡也没有──除非我们到了西班牙海岸观景。那才是地地道道的地中海蓝空&lt;a href=&quot;https://www.saroprock.com/%E5%90%8C%E6%A0%B7%E5%BC%95%E8%87%AA%E3%80%8A%E7%93%A6%E5%B0%94%E7%99%BB%E6%B9%96%E3%80%8B%E4%B8%AD%E7%9A%84%E3%80%8E%E9%B8%9F%E5%85%BD%E8%8B%A5%E6%AF%94%E9%82%BB%E3%80%8F%E3%80%82&quot;&gt;^10&lt;/a&gt;。当然啦，总有人没那么幸运，无法身临其境。所以我写诗又作曲，想让他们多少了解儿一点。别看我游山玩水，好像非常逍遥自在似的，实际上，我只是位吟游诗人罢了。&lt;/p&gt;
&lt;p&gt;回家后，我总是心神不宁，觉得自己真是该死──即使他似乎一点也不在意──除了首考，真没什么可聊的了么？我同时也觉得，先前什么普通不普通的论调也得改改了：未成年就打工的，大抵不是普通人，在现在这个环境下，至少不是大部分人；考上清北复交浙、被港科大特招乃至于没上高中就进少年班的，肯定也不是普通人；至于小小年纪不读书直接开公司的，那更是人中龙凤──至少他们，父母称得上是……至于我，似乎也不配被称之为普通人了。因为我发现，当一个真真正正的普通人站在我面前时，我是多么地手足无措，以至于羞愧而无地自容；因为我发现，真正的普通人，压根就不存在于我的视线里面；因为我发现，那些在暗处，不被我所见，甚至在我脑中连概念都没有的人，才是我所谓的，普通人。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;隐士&lt;/strong&gt;　你在属于你的层次里交流，觉得你自己很普通很正常。在同一个层次里交流当然很“顺手”，但若出去同其它层次的人沟通──经验、三观、阅历、行为习惯等等想当然的林林总总都毫不相干、大不相同──真的是很困难的。换而言之，你们并不是同一个世界的人。这种事情，我经历得多了。&lt;/p&gt;
&lt;p&gt;“走吧，打羽毛球去！”母亲似特别希望拉近我与他的关系。想想，也是太久没运动了，反正下午有时间，说走就走呗！路上，我遇到了我的同学。“诺，清北选手。”他呀呀几句。我突然感觉心里咯噔一下，感觉根本没必要说这句话，想要找补，就说：”哎，其实他也不容易呀……算了，别人家的事，我不好多谈。”我的那位同学的父亲，前两星期刚因车祸离世。但最后，我还是没有说出口。&lt;/p&gt;
&lt;p&gt;两小时后，我瘫倒在座位上，气喘吁吁。就在刚才，我还一会儿从左边跑到右边，从右边跑到左边，几次等着出界，才发现早被玩弄于股掌之间。“行啦，他可比我强太多啦！”我披上外套，不知心里想着什么。&lt;/p&gt;
&lt;p&gt;他母亲热情邀请我去家中做客，我却执意要走了。嗨别呀，你们俩多有缘留个影再走呗。我的手被拽着，来到一处涂鸦下。啊，拍照啊，留影啊，我想着，这似乎是第一次在外同别人合影呢。要知道，我与他才相识不过三个小时──不对啊不对啊！这怎么是我的交友风格！明明我最在意的人都还没同我合过照──心里还没想通，手却举在高空，摆出一个胜利的 V 字：“来吧──&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;茄子&lt;/strong&gt;！”&lt;/p&gt;
&lt;p&gt;行，我又瘫倒了。看那些云，悬浮长空，多美！这可是今天看到的最最顶呱呱的景致！而现在我们都可以尽情享受它！“耳得之而为生，目遇之而成色”，毕竟，我，与你，在同一片天空之下。&lt;/p&gt;
&lt;p&gt;我们仍然是同一个世界的人吧。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;诗人&lt;/strong&gt;　我们都是各自人生的主角，在我眼里，普通更像是“透明”的代名词──芸芸众生，谁不普通？谁又称得上不普通？所以，还是让我来下个定义吧：当一个人，不管是谁，闯入你的生活，从幕后走到台前的那一刹那，他已经完成了从普通到不普通的华丽转变──至于你自己，你生来与众不同，你有他人无法窥探的内心，在这一点上，你是独一无二、绝无仅有。&lt;/p&gt;
&lt;p&gt;首考……罢了，没什么好顾虑的，能有两次机会，已经是很幸运了。别再说什么空话了！到时候成绩出来，不尽如人意，又情何以堪！“其实，我的压力也很大啊……”我喃喃道，“我想，我要是连浙大都考不上，该怎么办呢？”&lt;/p&gt;
&lt;p&gt;“啊，我太荣幸了，居然有一天真的可以听到有人说出这种话……”听到他这么说，我突然很想哭。我觉得我又说错话了，我又一次，同他远离了。&lt;/p&gt;
&lt;center&gt;临江仙&lt;/center&gt;
&lt;center&gt;人道平生多倥偬，几度笑对春风？笙歌一曲意正浓，书声依旧是，新春又桃红。&lt;/center&gt;
&lt;center&gt;金科未就何堪恸，浊酒难温愁容。桃花庵外话重逢，莫作锦书郎，只把寸心颂。&lt;/center&gt;

&lt;p&gt;那天是一月八日&lt;a href=&quot;https://www.saroprock.com/%E6%88%91%E6%95%85%E6%84%8F%E8%83%A1%E4%B9%B1%E5%9C%B0%E6%8E%92%E5%88%97%E4%BA%8B%E4%BB%B6%EF%BC%8C%E4%BD%86%E4%B9%9F%E4%BF%9D%E7%95%99%E5%85%B7%E4%BD%93%E6%97%B6%E9%97%B4%EF%BC%8C%E8%AF%BB%E8%80%85%E9%98%85%E8%AF%BB%E6%97%B6%E5%8A%A1%E5%BF%85%E6%B3%A8%E6%84%8F%E3%80%82&quot;&gt;^11&lt;/a&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;事实证明，那一百零八元花得实在是值得。&lt;/p&gt;
&lt;p&gt;我已经好久没有体会过这种如饥似渴的感觉了──或许是因为它是非虚构作品的原因──梭罗的《瓦尔登湖》给我一种非常&lt;strong&gt;实在的&lt;/strong&gt;感觉，这种实在感与纸质书的实在感完美重合，充满风光旖旎的田园般的魅力，好像不是他栖居在林中湖畔，而是我在那里生活一样。而他独特的思想见解又会恰到好处地跳出来，提醒你、同你沟通，好像时不时造访的一位老友一样亲切、可爱。尤其是看到他如此钟情于孔孟之道、老庄思想，我不由得暗自发笑，以至于每一处我都要标记下来，最后足足有九处之多。不只是这些，还记得我提到的译者的重要性吗？潘庆舲先生的导读《〈瓦尔登湖〉：人与自然和美共存的赞歌》宛如一位循循善诱的导师──不是把方方面面都“喂”给我──引导我去发现梭罗文字中的趣味。比如它真的很喜欢用双关，而潘庆舲先生会不厌其烦地用脚注写出来。“总之，梭罗笔下那么多的双关语，我在译注时不由得一一加注，我想，说不定我国的读者也会感兴趣。”同时，潘庆舲先生的用词也很有韵味。首先，不谈梭罗原著是如何写的──毕竟我没有看过──他可以把梭罗的诙谐幽默演绎得淋漓尽致，光是这一点，我就十分佩服了。其次译者在翻译、诠释的同时，也夹杂了个人的偏好，比如潘庆舲先生非常非常喜欢使用“断断乎”三个字，读来就很有节奏、朗朗上口。我几乎爱上这三个字了，所以在这篇文章里面，我很多地方都在使用它。&lt;/p&gt;
&lt;p&gt;译者不同，作品也各有千秋。潘庆舲先生的“拙译”清新、酣畅、富于韵味，不由得让我迷恋，以至于我就是下课也要拿出来品味一番──毕竟再怎么样，我也不舍得把自修课的时间拿出来阅读──咂摸一下字里行间闪耀着的宁静、恬淡、智慧的光芒，当真为学生生活的一大享受。如此，实在是值得。&lt;/p&gt;
&lt;p&gt;“你是在看《瓦尔登湖》吗？”诶？这不是我先前看到的，也买了这本书的同学吗？我看他脸上诧异的标签，一下子不明白他的意思。我点头表示承认，他倒是更惊奇了。&lt;/p&gt;
&lt;p&gt;“嘿？这你也看得下去？”&lt;/p&gt;
&lt;p&gt;如何看不下去呢？我真被搞糊涂了。&lt;/p&gt;
&lt;p&gt;“这不就是一个人住在湖边，看到的都是鸟、兽、虫、鱼、湖，写的还都是自己脑子里想的东西，真是枯燥极了！”我思量着，不就是人脑子里想的才有意思吗。我想反驳，他倒是向我拱手行礼了：“行行行，您太厉害了！佩服佩服！”&lt;/p&gt;
&lt;p&gt;这不知怎的成了一个开端。今后几天，又有好几个人几乎相同地重复了上面令人摸不清头脑的对话。最后一次，有人道出原因了：“这书网上风评很差的！怎么看呢？”&lt;/p&gt;
&lt;p&gt;我仍是不明白，只是看。没几天，这二十二万字就见了底。我看到潘庆舲先生写的附录，几天前的事情又浮现了出来──怎么会是这样子呢？潘庆舲先生这样写到[^12]：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;拿我重译《瓦尔登湖》来说，没承想带来始料所不及的惊喜。尽管译峻后，我依然觉得并不十分满意，但上海社会科学院出版社于 2007 年 6 月首印后未几即告罄，于是赶紧在 2008 年 3 月再版。据悉，拙译《瓦尔登湖》在北京反应特别好，在当当网上被评为 5 个红五星。读者说，“现在这个互相倾轧、明争暗斗的时代，读这本书真的是特别好的选择。《瓦尔登湖》留在我们心里。让它成为我们的新的桃源吧！”（摘自 2008 年 2 月 14 日当当网）据《世界文学名著典藏》丛书主编告知，他们这套大型特精装本丛书中唯独三本一路热销，里头有一本即是拙译《瓦尔登湖》。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;行吧，这又要让我引用潘庆舲先生的话了：这可让我不由得暗自纳闷，端的是感慨万端──怎么这“新的桃源”，如今却鲜有人识了呢？哎，我又搞不清其中缘由了。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;九日晚，是时候准备回去了。我打开书包，取出那瓶印有我的名字与“首考必胜”的芬达──老师说这是高“芬”必达──怎么这么轻呢？我顿感大事不妙，一看，这易拉罐如何破了个小洞？我的书包早就被浸烂了，当真是“芳”香四溢。里面的物品更是不必说。幸好首考完根本没有再卷的欲望，没有带什么资料、或者很重要的小本子回来。要是我的日记本、或者朋友写的诗被泡得“橙”甸甸的，那我真得发狂了不可。唯有一本我随身携带的小册子当真是遭了殃，因为碳酸的威力，连书脊的胶水都失去了作用，全然是一副要散架的样子。行吧，我把它放到冰箱──不知道哪里看来的处理方法──把铅笔盒、书包一一洗净又吹干。我不仅没得享受芬达，结果（说得难听些）还和吃了达芬一样难受。&lt;/p&gt;
&lt;p&gt;后来才发现，是我在书包里的切纸刀把它划破了……而那把刀经过一天一夜的浸泡，也早就锈得不成样子，无法使用了。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;说实在的，我已经尽力避免校对答案了，可是明枪易躲暗箭难防，英语的十个挖空，还是被我看到了。我英语从来都不好的，说实话，也没指望能怎么样。可是首考的时候，也许是状元糕与向日葵的加持吧，感觉卷子真的特别简单，体感真的特别好，以至于老师来问我，我就说，没对过也都觉得全对的嘛！毕竟不会写自己觉得没道理的答案的嘛！可是，我英语挖空怎么扣了&lt;strong&gt;四个&lt;/strong&gt;呢，怎么可以扣&lt;strong&gt;四个&lt;/strong&gt;呢？我英语虽然差，但也从来没有差成这个样子。别人扣五分已经在鬼哭狼嚎，我光着一项就扣了六分──一瞬间，我感觉天塌下来了。&lt;/p&gt;
&lt;p&gt;那个晚上，我断断乎是睡不好的，不要说物化还错了一个选择，地理还难于上青天，简直没有可以看的了。我翻来覆去，想想自己应该怎么办呢：以前看不起三一，觉得自己根本用不上，现在却是着急了，没有 420 ，哪里有好专业可以选择呢！如果我一门都放不掉，我真的深陷泥潭，难以自救了。&lt;/p&gt;
&lt;p&gt;十号早，我提前半个小时来的校门口，却不是提前来学，而是提前来哭的。行吧，也许我的文章不管怎么样都得落到眼泪水里。但平心而论，我已经很久没有哭过了。只是父亲突然说要给我报英语辅导班，好像我的努力都比不上外面上课一样，我突然就忍不住了。一下子，几天前的所有都涌入我的脑海，从五号我拿到那瓶芬达起，到坐在校门口前的现在，我的希望似乎同它一样被一把不知道什么时候被&lt;strong&gt;自己&lt;/strong&gt;放好的小刀无情地划破了。里面承载的梦想，不仅把周遭的以前都淹没得一干二净，连同那把刀都无情地吞噬了。我想到那些形形色色的人，我想到我自己！我哭，我嚎叫，可以说是泣不成声。我哽咽着，我以为，我之前不好，是我不努力，是我不用功，是我恣意妄为；可是现在，我已经这么努力了，我已经把自己锁在了学校的寝室里、诚心诚意地学习了，可是，结果却还是这样！真的，真的，我真的从来没有想过，原来拼尽全力之后的失败是那么难以接受、痛心疾首！&lt;/p&gt;
&lt;p&gt;“父亲，你说过的，要我认命，我明白：我生在这么个家族里面，没人与我感同身受，我孤军奋战；我生来不在罗马，只能向上攀登，我只求更好；我没有良好的品德，所以用非理性的暴力约束自己，我不想后悔……只是，我看到那些人，看到他们的父母，看到他们早就被安排好的一切，我又怎么能没有想法，又怎么能完全置之不理……”&lt;/p&gt;
&lt;p&gt;我想到我的过去，我的未来。其实，说说吧，我现在已经有几个挚友了，可是日日夜夜与我相伴的，只有我自己一个人。我难以想象我是如此地脆弱，仅仅 2% 的分数我就无法接受，这还是首考！要是我的高考不理想……我自己都不敢想象我会变成什么样。&lt;/p&gt;
&lt;p&gt;“其实，我的压力也很大啊……”我又想起同他说的话。&lt;/p&gt;
&lt;p&gt;我想，他断断乎是理解不了的吧。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;“听说你有《杀死一只知更鸟》，可以借我看看么？”&lt;/p&gt;
&lt;p&gt;行，好哇，要我附一张书签么？他摆摆手，径直拿去看了──他只在自修课上看闲书。每次下课他都还给我，上课又借走，总是如此，不厌其烦。&lt;/p&gt;
&lt;p&gt;第三天的时候，他不来找我了。我前去问他看得如何，他却说──&lt;/p&gt;
&lt;p&gt;“我已经看完了。”&lt;/p&gt;
&lt;p&gt;我难以置信地看着这本书。它和《瓦尔登湖》一般厚度，但比它宽得多。我不知道他是怎么做到的……囫囵吞枣？不求甚解？自修课，我写完一份卷子，略带迷茫地环顾四周，发现大家不是在写随笔，就是在看闲书……哦天哪，为什么会是这个样子？原来只有我，还活在首考中么？&lt;/p&gt;
&lt;p&gt;[^12]: 选自《瓦尔登湖》（上海译文出版社）第 406 - 407 页的内容。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>高三杂记二周目──新阵地后</title><link>https://saro.pub/senior-2</link><guid isPermaLink="true">https://saro.pub/senior-2</guid><description>文章分成两部分内容：联考后的简单总结与之后两周的小事。呵呵，你能想象什么课可以把学生从字面意义上地吓哭吗？我即使经历过了，也还是很难想象呢……</description><pubDate>Sat, 18 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;关于联考&lt;/h2&gt;
&lt;h3&gt;总起&lt;/h3&gt;
&lt;p&gt;高三上学期拢共大概是五次联考──新阵地是第二次。这个只有 13000 ~ 17000 人参加的联考，比起之前几万人的 Z20 来说算不上大，但是却给我留下了深刻的印象。“反刷题、反模板”的趋势已经很明显了，很多题型也就是根据高考来的……嗯，写不下去了，毕竟我只是编编『客观』的内容，真正为什么要写的原因，还是主观为主才对。不然为什么不写天域呢？（天域是全国联盟，参加的学校都是学军等强校。杭二貌似是自己考的，我也不太明白，这里就不提了）&lt;/p&gt;
&lt;h3&gt;语文&lt;/h3&gt;
&lt;p&gt;语文是个很神奇的科目，不论试卷难还是简单（选择题），成绩总是很稳定。这次试卷的选择题明显特别简单，我们班里面有一半是全对的，但是这样子平均分却是比 Z20 还要低下去一点点。主观题没什么好说的，因为参考答案写得并不是特别好，加上排版方面的失误（为了平均导致四分题的横线数量比六分题都多），我主观上很难评价，只能说总体上和 Z20 很像的感觉。&lt;/p&gt;
&lt;p&gt;考完回来的那个晚上，有一位朋友想要“瞄一眼”我的语文作文。哎呀，我这种乱七八糟的会写，可是考场上怎么能写乱七八糟的东西呢？我说：“30分钟写的大作不能看喵。”把他回绝了。但是心里还是有点遗憾：哇塞，有人主动要看我写的东西诶。&lt;/p&gt;
&lt;p&gt;作文确实是做到了“反刷题、反模板”。因为自己积累不足，所以考前很多时间是在看优化 38 套的作文资料，结果考试却考了一个“谷子经济”！？对，就是那个“谷子”。说来惭愧，这次六门课我没有一门时间来得及的，写作文不算审题只有 30 分钟了，哪里还有时间去想去扣什么点。全篇都是说理论证，错别字还有好几个，能写完已经是奇迹了，最后拿个 45 分也是知足了。我们班的最高分是 52 分，他从“谷子”延伸出去紧扣『文化』一点进行说理，这个思维就很不一样了，确实也是该学习的：看起来“反刷题、反模板”，但到头关联的还是那几个点──这和数学里面圆锥曲线用交点来掩盖本质的切线问题倒是有点类似了（无端联想）当然还可以有更好的想法。听说范文被骂得很惨，不过我没有看过。&lt;/p&gt;
&lt;p&gt;最后考了 109 分。选择题错了一个古诗错了两个，这五分算是遗憾，其他的就不强求了。&lt;/p&gt;
&lt;h3&gt;数学&lt;/h3&gt;
&lt;p&gt;我觉得数学这次的绝对难度比 Z20 小很多很多，但是莫名其妙就是会失去分数──比如选择题的 1 3 8 三道题目，你说难吗？一点都不难！第一题是集合啊！难道你连 N 是自然数集都不知道了吗？结果我们班居然有 17 个人错了！？这可是理科创新班诶！怎么可以呢？第三题你说零的零次方有没有意义这个问题应该不知道吗？──诶还真可以不知道，因为课本上只说了零的负数次方没有意义，确实没有说零的零次方没有意义（坏笑）这道题错了二十多个，非常好我也是其中之一。&lt;/p&gt;
&lt;p&gt;其他的没什么好说的了，要么就是最后一题难一点。参考答案给的方法真的是仅供参考了，哪里有人会去死算的？？？不可能有时间算的。正解应该是使用调和点列（极点极线的知识）与梅涅劳斯定理，通过平面几何的知识去证明恒成立。不过都知道上了高中平面几何退化是很正常的事情，没想到也情有可原。&lt;/p&gt;
&lt;p&gt;我自己对于这门课也是遗憾的（哪门课不遗憾）。首先选择题错了一个罪该万死，多选最后一题少选了一个。因为前面花的时间有点久了，太着急居然把期望都算错了，到最后一题只有十分钟了，用极点极线马上拿出 1/3 ，就没有时间做最后一问了。如此 150 - 5 - 2 - 2 - 7 = 134 分。&lt;/p&gt;
&lt;h3&gt;英语&lt;/h3&gt;
&lt;p&gt;每次想到这门课我就难过（所有时候）我是典型的英语菜鸡：听力错了三个，阅读 B 篇错了三个？？？完型错了三个，词汇连 herbal 都不会写，甚至过去式都变错了，那么又是扣两个。做得不好的人，往往做得也不快，到应用文 + 续写只有三十几分钟了。最后应用文九点五分，续写十六分，遗憾离场──总分 117.5 分。身为英语菜鸡也不知道怎么评价，只能说没有想象中那么难，B 篇错三个与词汇的两个真的是太不应该了。&lt;/p&gt;
&lt;h3&gt;物理&lt;/h3&gt;
&lt;p&gt;物理就更搞笑了，可能早上第一门脑子不太灵光，选择扣了十一分！后面做着做着又没有时间了，到最后一题只有一两分钟了，写了个第一小题仓皇逃跑，甚至忘记写点坐标只拿了个电性分一分真的笑死了（满分十三分）。于是 100 - 11 - 12 = 77 分。结果一看这个成绩居然算高了！？赋分一赋直接 97 分。一想也是，我其他没错也挺逆天了，做过的同学应该都有体会，那些小的注意点与第一道大题目的脑筋急转弯我就不说了。不过倒数第二道大题貌似是个错题，因为如果你分过程计算的话，你会发现第一次下降 h 的高度那个电阻发的热量居然是个负值？但是全过程也可以写，也就是给我控了点时间吧。&lt;/p&gt;
&lt;h3&gt;化学&lt;/h3&gt;
&lt;p&gt;化学没什么好讲的，作为和我英语一样菜鸡的学科，补了这么久总算要有点回报了。虽然试卷不难，选择题还是被坑死了两个（那个晶体我认出来了结果第七题错了，可见我基本功很差），后面东错西错扣了五分，实考 89 分，赋分 97 分。嗯，也算是完成目标啦！&lt;/p&gt;
&lt;h3&gt;地理&lt;/h3&gt;
&lt;p&gt;最遗憾的科目──所以我说世事无常，总能跳出我的设想。之前 Z20 那次考了段一赋分 99 分我以为我无敌了，结果这次……我怀疑出卷老师真给他找到文理思维差异了：之前那次我和另外三个同学的平均分是 98 分，这次只有 87 分了！？以前都是我们按着文科班的那一帮在地上打（地理是理科对吧），结果这次两极反转了哈哈……更不能接受的是我选择题还涂错了两个！哇，涂卡都能涂错的嘛大哥~？要是考得高还好，涂错四分影响不大。问题是我这次考得不高哇，涂错四分就是赋分扣四分。最后实考 58 分赋分 89 分，真的这辈子没考过这么差的分数只能说。我 95 都接受不了的人，告诉我考了 85 分……啧，还是继续加油吧！&lt;/p&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;p&gt;最后总分 109 + 134 + 117.5 + 97 + 97 + 85 = 639.5，段名次 46，联盟名次未知。你不要看我上面写了这么多“遗憾”的内容，其实这个成绩出来的时候我还是很……心情很复杂。因为自从成绩退步以来，我的名次就没有上过段前五十，最差甚至到了段九十。但是我相信我总可以返回段二十的，你看我这次这么多遗憾……地理……是吧？算是小小的鼓励吧。&lt;/p&gt;
&lt;p&gt;所以这可能才是我为什么要写的真正原因。&lt;/p&gt;
&lt;h2&gt;后两周&lt;/h2&gt;
&lt;p&gt;出分数后，我去老师的办公室。&lt;/p&gt;
&lt;p&gt;刚考完时，段长来说了有关培优的事情。因为之前自己成绩太差了，暑假与开学初的强基培训都没得参加，想着强基也不一定有的去，我也只能这样子宽慰自己了。这次培优的内容倒不是强基而是首考。班主任拿来名单的时候，我一看，果然没有我──但是每个班可以加几个名额，老师就问有没有人想加的。我的脑子里面一直盘旋着学长的一句话：“要利用身边一切可以利用的资源。”虽然成绩还没有出，但是我怎么也不想错过了。举起手，我的心不知道为什么跳得很快。&lt;/p&gt;
&lt;p&gt;想去，也不是每个人都可以去的，必须得是候选名单上面的人才可以。我一看，自己刚好是本班的倒一……好歹是可以去了。班主任去和段长说的时候，段长还有点犹豫。因为这次名额是严格限制的，我这么个段 90 的多少是有点过分了（还好之前考得好不然不可能在候选名单上面）。但是班主任就说了：我答应都答应出去了，我们学生之前可是考过段十一的，你要么就都收了，要么都别加了。我算是以这种耍赖皮的方式，在微格教室要到了一个位置。&lt;/p&gt;
&lt;p&gt;当然，这些都是班主任之后跟我说的了。这次考了段前五十，去上课也算是名正言顺了。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;现在是十月十八日 23 点 58 分 25 秒，我坐在电脑前面写着字。嗯……我一看，写了啥呀这都，要分析好像也没分析，纯粹是一厢情愿的情绪输出吧？我本来还想写六七千字呢，但是现在只有两千五。&lt;/p&gt;
&lt;p&gt;第一节课是物理。第一次踏进微格教室，哪知道墙上全都是之前的清北学长──好吧，这些对我来说太遥远了，还是看看面前的老师吧。看过我日记的都知道（当然应该是没看过），我一直对我们班的物理老师有很大的意见：上课只能讲基本模型，难题目是不讲的，答案是不超的。好几次半节课花在前面的小题目上面，对着一个基本模型讲来讲去，到最后五分钟了知道要讲难题了，你知道他是怎么讲的吗？他居然说他也不会所以看答案了？？？然后就把答案给我们看，最逆天的是只抄表达式不抄结果的。我去我两个式子当然知道但是不就是难在计算吗？我不止一次去他办公室要原卷答案来，这还不如我自己刷题呢。每天上课都很痛苦，抱着“万一有有用的东西”的心态听完了才发现是巧克力味的答辩。所以渐渐的我也和大部分同学一样当自修了。我真的不喜欢我们班的物理老师，别的老师都这么负责，他么不想上课直接在办公室『出差』，我都懒得说了。&lt;/p&gt;
&lt;p&gt;我知道差距很大，但是没想到差距那么大。我不太好直接表示出来，毕竟我不可能把五个小时的课给你上一遍。我就这么说，一份嘉兴卷子，他可以做整整 54 页的 PPT。这可不是为了我们公开课才特意做的，这是他们平常上课的课件哇。公开课的 PPT 可是 66 页呢。一看桌面，全都是 Word 与 PPT，U 盘里面也是，我不知道说什么了。&lt;/p&gt;
&lt;p&gt;当然啦，数量怎么反映质量呢？但是我上过他的课了，讲得是真的好，只是这个真的很难形容罢了。一定要说，比如他可以发现这个题目隐藏的难点（有一个高压输电的题目，看看很好做，但是如果把题目中一个看似理所当然的条件拿掉，就变得非常困难──而这恰恰是我们觉得很稀疏平常的东西），可以从一个简单的空气阻力问题延伸到电磁感应问题，可以从『合理性』『是否可以计算』等角度极大地优化流程。原来，很多题目不用计算也可以做得又快又正确，当然这里面有很强的技巧性，不是一朝一夕听听五个小时可以掌握的。他给我们展示了他的学生的笔记──字迹不算好看但是干净，主要是内容全都是精炼的结论，还不单单是结论而是结合推导的。有一道俄罗斯的联赛题目我印象很深，但是这里肯定是写不了了（如果不是半夜三更也许我真的可以扯一扯）。总之单从物理一门我就……像我说的，我知道差距很大，但是没想到差距那么大。五个小时，3 + 2 ，虽然很累，但是我从来没有这么精神过。下课之后，我真觉得我的手，是举对了。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;第二次是英语培优。刚开始还以为讲卷一呢，不过想想确实没什么好讲的。发下来的资料一看：不都是写过的续写吗？结果上完后，给我吓哭了──字面意义上的。你能想象这节英语课对我的杀伤力有多大吗？我自己都很难想象：哪里有人上课还能上哭的？？？但是……我一直以来都觉得我们英语课的质量很好，之前有老师来我们班听课，下课都把我们老师围得水泄不通：哇你们平常都这样子上课都吗？词汇量压力好大！确实，每次看英语续写范文，尤其是第三篇在考场外面写的，那词汇，真的是想都不敢想。精不精准我不知道，难是难倒我了。我尝尝整篇整篇背诵续写，只是希望自己可以写得好一点。&lt;/p&gt;
&lt;p&gt;但是那个老师不一样哇。她首先语言方面就提三个点：对比、具象、重复。她通过这三件事做到了我们一直想做但是从来都不敢做而且做不好的事情：把一个情节合理地进行扩充。这太逆天了，几乎可以用到所有地方──你知道的，现在高考情节是不容易偏离的，但是情节线明显短了，很多时候你不得不加情节。问题是你知道你的情节对吗？像今年六月份的高考续写，段一都知道要准备道歉了，但是怎么写呢？写一封信、准备饼干，还能做什么呢？所以你看，那时候的高考范文就是把大量的篇幅都放在了做饼干上面，用细腻的描写得了 23 分。可是做饼干是主要情节吗？压根不是啊……我想没有哪个人会觉得做饼干写这么多是合理的，无非是不知道写什么了，动作描写的句子背了很多，所以这样子写。嗯……她的方法解决了“没什么好写”的问题，用三个“I should not ...”的重复 + 具象 + 对比，直接填充完了！？在场的没有不被她的文章打动的。她说，她的一位学生对她说过一句话就是，我为什么考 145 分，为什么续写这么好，因为我在写生活。没有生僻词汇，没有人看不懂，但所有人都觉得，这就是比那些看起来富丽堂皇的文章好……打动人心啊。这样的例子还有好多，比如描写一个相机，写一个转学生的适应，都一样……但是这么写，难道就比那样写简单吗？非也，反而是更难了。她读了多少文章啊，随便拿一段《麦田里的守望者》里面的文字──又是一阵惊叹──这不就是第二段道歉的内容！？这可是名家的文字，不是随随便便写得都比你好？可是你看这哪里有生僻词汇……大量的积累大量的背诵仍然是不可或缺的，当然这种思路是绝对宝贵的。至于那个饼干……哎呀做好的直接拿出来不就得了吗？&lt;/p&gt;
&lt;p&gt;想到我们上课的时候了。因为范文就是写饼干嘛，所以老师也强调要写做饼干。这下好了，第一稿没有人写做饼干的，第二稿全写做饼干的。上课的时候还有人在问，这样写确实很好，但是评分标准是什么？结果人家就是高考改卷老师，你怎么说？&lt;/p&gt;
&lt;p&gt;后面讲情节（前面其实是语言），我还斗胆回答了个问题──一群大佬盯着我这么个 117.5 分的看多少有点给我上强度了。可惜还是差了一点……&lt;/p&gt;
&lt;p&gt;下课之后我就偷偷躲到办公室去哭了。首先是因为开心，我居然可以上到比我班主任还要好的英语课，当然我知道这种课肯定是她集其精华而成的东西，但是恰恰是因为精华所以让人震撼；其次是因为伤心，我知道我的积累对于使用这种方法真的差远了，而且我的卷一让我根本还到不了了精进续写的程度──我首先得有时间留出来写文章才可以；最后，我突然就想到，我为什么要好好学习，我为什么要这样子一步步冲上来，我为什么要放弃自己的时间来上课，我为什么要上一个好的大学，不就是为了接受好的教育，不就是为了以后可以有更多的机会上到这种课吗？我一直觉得学习很有意思，真的很有意思。我不喜欢敷衍的老师，比如我的物理老师。我喜欢这样的老师，甚至这可以让我流泪。&lt;/p&gt;
&lt;p&gt;其实大家都挺乐观的，我也很幸运可以在这样一个集体里面。中途休息的时候我们太活跃了，以至于再次上课时，那位老师都忍不住的说：你们的老师有你们这样的学生，真的是老师的幸福。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;这周是运动会。运动会的前一天晚上，我们偷偷打好 50 个红彤彤的气球，一人一个牵在手上。哇那个场景，教室里面感觉充满了节日的气息，好有活力……我们一起在夜色下练习开幕式，比如大国旗要在气球收起来（不允许放飞）之后从后面盖上来。这种和同学相处的时光真的很美好很珍贵。&lt;/p&gt;
&lt;p&gt;结果第二天一来，气球全部『阵亡』了。没有一个可以飞得起来的。想要再打，氦气又用光了。没办法，我们突然想起物理培优老师给我们分享的一个小故事……于是大家全都手握物理课本，气球、国旗都不要了，连口号都换成了“角标、匝数！等效电路！”──喊得比之前响的多得多。&lt;/p&gt;
&lt;p&gt;同学说，我们真的是个乐子，把昨天晚上都乐子掉了。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;最后是化学培优，是镇海的。可能之前震撼太大了，也有可能我的化学老师确实也太厉害了，上完感觉也没什么稀奇的东西，不都是讲过的吗？而且我明显感觉他是收着讲的，明明有更好的方法他居然不说……我翻开我厚厚的化学笔记，他讲一个，我就翻到对应的一页。我看我旁边的实验班同学怎么不翻呢，我就问，你们没有教过这些东西吗？&lt;/p&gt;
&lt;p&gt;“没有。”&lt;/p&gt;
&lt;p&gt;同一个学校的区分度，在此时也体现出来了。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;老师说我真是个小孩子──我还在哭呢。&lt;/p&gt;
&lt;p&gt;要了一张请假条，放学之后，我就回家去了。半夜，我打开网易云──八九月份听歌总的时间都没有三个小时──搜索了一首歌，一首我明明最近没有听过却莫名占据我大脑的一首歌……&lt;/p&gt;
&lt;p&gt;import AudioPlayer from &amp;quot;../../components/mdx/AudioPlayer.tsx&amp;quot;;&lt;/p&gt;
&lt;p&gt;&lt;AudioPlayer 
  src=&quot;https://www.saroprock.com/music/senior-2/%E4%B8%8B%E4%B8%80%E4%B8%AA%E5%A4%A9%E4%BA%AE%20-%20%E9%83%AD%E9%9D%99.mp3&quot;
  client:load 
/&gt;  &lt;/p&gt;
&lt;p&gt;听着听着，我全身都热起来，眼泪又不争气地流下来：我说我真的老了，听歌也能哭了。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>高三初杂记</title><link>https://saro.pub/senior</link><guid isPermaLink="true">https://saro.pub/senior</guid><description>一篇在学校的课余时间拼凑起来的「杂记」</description><pubDate>Sun, 14 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;正文&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;《文化苦旅》：我无法不老，但我还有可能年轻。我不敢对我们过于庞大的文化有什么祝析，却希望自己笔下的文字能有一种苦涩后的回味、焦灼后的会心、冥思后的放松、苍老后的年轻。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;高三开学快一个半月了，我想写点东西，也应该写点东西。作为一名真正的高三学生，压力大是正常的。只是我的心思很乱，不能完全投入，所以又责备自己，为什么这样？老师让我们定目标，我想，我又一次眼高手低了：数学 140，不过分吧？语文 120，不过分吧？英语 130，不过分吧？物化地分别 98、97、99，不过分吧？可是总分一加 684，这就太太过分了。栏目上，670+、680+ 的目标简直迷了眼，要是我们学校真有这么厉害，早就……也难怪老师觉得可笑了吧。&lt;/p&gt;
&lt;p&gt;两次地理一次 99、98，我觉得地理要考一百几乎是一件不可能的事情。第一次 Z20 的那份裸分考了 82，离一百竟然还差五分！真的是比登天还难的分数。七彩阳光的只有 98 分，这一两分真难赚。&lt;/p&gt;
&lt;p&gt;周一化学限时——现在每周限时六七次是常态——是学军那边名校协作体的卷子，我只考了 95 分。说来真的很搞笑，前十道单选我能错俩，第一道工业流程我特么可以把 Fe₂(CO₃)₃ 与 AL(CO₃)₃ 这种双水解根本不存在的玩意儿写上去！？再加个愚蠢的化学方程式和一个说理，只有 95 分了。我不甘心啊！我错难题我认，可是我难题做出来了，你告诉我错这种题……&lt;/p&gt;
&lt;p&gt;我当然也得认，必须得认，而且要特别严肃。&lt;/p&gt;
&lt;p&gt;错得太笨，可我确实又不明白。上课不讲，同学也觉得这都是常识，我就去找老师。寻了一个下午寻不见，我就突然想到之前的一篇文章《记录一场雨》来。那时成绩尚可，又恰巧碰上通校，每晚回家就一发不可收拾。老师发现我精力不专注，把我拎到外面劝导。我那时自大、狂妄，甚至把她的忠告都抛之脑后，想要再上演一场初中的「指点江山」。现在老实了，几个星期写的错题比我四个学期加起来都多。晚上我找到她，顺便聊了会儿，也谈起了这个事情。我想说，悟以往之不谏，知来者之可追，但终于是觉得太卖弄，说了句亡羊补牢。她说没事的，一切还来得及。我点点头，不知道说了什么。&lt;/p&gt;
&lt;p&gt;我常常在后悔，我的高二到底过成了什么废物样子。但我终究不能对过去的自己做什么约束，也不能因为这个消耗现在的时间。我稍微可以理解望子成龙的心态了，我以后肯定不希望我的孩子走我的老路。我的父亲不懂学习，我稍稍明白些。可人就是，有些苦有些痛不经历过，有些弯路不去走过，就永远以为自己牛逼哄哄，可以无法无天，可以起死回生。&lt;/p&gt;
&lt;p&gt;忙，忙点好。我可不希望考出来物化地 95、95、98，那我真吐血了。想到之前看到的一个 vlog，说高三是幸福的，我举双手赞成。现在，青春是用来奋斗的，我觉得我在成长，我真的从中感到幸福。至于满屏问号，随他们发去吧。&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;《文化苦旅》：我们这些人，为什么稍稍做点学问就变得如此单调窘迫了呢？如果每一宗学问的弘扬都要以生命的枯萎为代价。那么世间学问的最终目的又是为了什么呢？如果辉煌的知识文明总是给人们带来如此沉重的身心负担，那么再过千百年，人类不就要被自己创造的精神成果压得喘不过气来？如果精神和体魄总是矛盾，深邃和青春总是无缘，学识和游戏总是对立，那么何时才能问津人类自古至今一直苦苦期盼的自身健全？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我也许应该再写点，但是我也不知道我之后要到哪里去。&lt;/p&gt;
&lt;p&gt;双休日回家，看到空间里面同学每天写的诗，试问谁不是……？&lt;/p&gt;
&lt;p&gt;其实是没有时间写了。不过有「初」，那就还有后续。&lt;/p&gt;
&lt;h2&gt;小插曲&lt;/h2&gt;
&lt;p&gt;有一天，正在上地理课呢，地理老师忽地把手指向一班&lt;a href=&quot;https://www.saroprock.com/%E5%9B%A0%E4%B8%BA%E6%88%91%E6%98%AF%E7%89%A9%E5%8C%96%E5%9C%B0%EF%BC%8C%E6%89%80%E4%BB%A5%E6%AF%8F%E6%AC%A1%E4%B8%8A%E5%9C%B0%E7%90%86%E8%AF%BE%E8%A6%81%E5%88%B0%E6%96%87%E7%A7%91%E5%B0%96%E5%AD%90%E7%8F%AD%E4%B8%8A%E8%AF%BE%EF%BC%8C%E4%B9%9F%E5%B0%B1%E6%98%AF%E8%B5%B0%E7%8F%AD%E3%80%82&quot;&gt;^1&lt;/a&gt;教室后面的八字标语：「路在脚下，未来已来」。他问，这标语是上一届高三&lt;a href=&quot;https://www.saroprock.com/%E9%AB%98%E4%B8%89%E4%B8%80%E5%B9%A2%E6%95%99%E5%AD%A6%E6%A5%BC%EF%BC%8C%E9%AB%98%E4%B8%80%E9%AB%98%E4%BA%8C%E4%B8%80%E5%B9%A2%E6%95%99%E5%AD%A6%E6%A5%BC%EF%BC%8C%E6%89%80%E4%BB%A5%E5%88%B0%E9%AB%98%E4%B8%89%E4%BC%9A%E6%8D%A2%E7%8F%AD%E7%BA%A7%E3%80%82&quot;&gt;^2&lt;/a&gt;的时候就在的吗？答案是肯定的。他把课本一甩，说：“难怪上一届文科班考这么差，这毫无逻辑的话嘛：路不在脚下还能在哪里？在脚上么你人都入土了已经死了呀？还‘未来已来’，未来么永远也不会来呀！不然怎么叫作未来呢？”&lt;/p&gt;
&lt;p&gt;同学们都被这一段话逗笑了。你别说，还真那么有点道理。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>再见！包括</title><link>https://saro.pub/goodbye-i</link><guid isPermaLink="true">https://saro.pub/goodbye-i</guid><description>直到现在才发现，自己早就成了背景，而我还在以己度人罢了</description><pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;很久以前，我曾经写了一篇文章：《在网络的另一头相遇》&lt;a href=&quot;https://www.saroprock.com/%E8%BF%99%E4%B8%AA%E4%BB%A5%E5%8F%8A%E5%90%8E%E9%9D%A2%E6%8F%90%E5%88%B0%E7%9A%84%E6%96%87%E7%AB%A0%E5%90%8D%E5%8F%AF%E4%BB%A5%E7%9B%B4%E6%8E%A5%E5%9C%A8%E6%9C%AC%E7%AB%99%E5%8F%B3%E4%B8%8A%E8%A7%92%E7%9A%84%E6%90%9C%E7%B4%A2%E6%A1%86%E6%90%9C%E7%B4%A2%E6%89%BE%E5%88%B0%E3%80%82&quot;&gt;^1&lt;/a&gt;。那个时候，还有人在文章下面评论，说非常羡慕这种关系——作为当事人的我，那更是对未来充满信心——然而这段故事，其实早在九个月前就结束了。&lt;/p&gt;
&lt;p&gt;没错，我就这样子挣扎了九个月，直到今天二零二五年八月二十八号，趁着明天老师要去考试而得来的假期，一直到晚上十点，才开始写这篇文章作为一个句号。这件事情对我的影响不是一般的大，在这九个月里面，我常常一两个小时发呆，就是在想为什么会这样——这段感情怎么只坚持了短短一年就结束了呢？经过这件事情，直到画上这个句号为止，我应该算是开启了一个新的阶段。但也正是这件事情，打破了我内心中的很多东西，让我不得不去面对一些我从来没有面对过的事情，让我去经历一些「平常人」应该经历而我不曾经历过的事情。如果让我重来一次，我不会选择再遇见他。也许这会让我失掉当下我珍惜的一切，但是九个月的代价真的太大了。&lt;/p&gt;
&lt;p&gt;我必须写一篇文章来画一个句号，不是写给别人看，而是写给我自己看——给自己一个理由放下，也告诉自己，我已经做得足够了。&lt;/p&gt;
&lt;h2&gt;正文&lt;/h2&gt;
&lt;p&gt;这篇文章不仅仅是记录，更是一个自证，即面对当下我自己的一个定义。&lt;/p&gt;
&lt;p&gt;为了方便，我将对方称之为小 IN，两个字母更加有代表性，同时也不会指向任何一个已有的关键词。&lt;/p&gt;
&lt;h3&gt;我爱——&lt;/h3&gt;
&lt;p&gt;为什么会结束呢？也许是因为我。&lt;/p&gt;
&lt;p&gt;我说这件事情是个开始，不仅仅写完这篇文章是一个开始，相遇也是一个开始。它让我意识到，在网络这个虚拟的地方是可以找到真实的。我曾经说「他们却一个又一个地离开了」，这件事情就是一个非常好的反驳，让我更加坚定了「找朋友」的路径。&lt;/p&gt;
&lt;p&gt;当然后面到底怎么样我们先暂且安下不表。实际上，找朋友是一个假命题，因为我这个人这辈子（到目前为止）过得太顺利了，在现实中几乎没有遇到什么挫折，实实在在可以见得到面的好朋友数都数不过来，见到谁都是自来熟，大家都很喜欢我。尤其是现在看到的东西多了，我这个「观察者」的身份日益凸显，就更加觉得自己生在了一个好社群，可以说几乎是生活在一个「天下大同」的社会之中。但是人是不能只经历好的一面的，因为这样子，就会把遇到的零星的挫折无限放大。所以出现了一个很奇怪的现象，我往往是被那些美好的事情伤害，我总是想到以前的一些美好，辗转反侧，思考为什么现在得不到了——即使当前的生活还是很美好，甚至更加美好，我还是念念不忘。我希望十全十美，不允许一个污点，这显然是做不到的。以前我死皮赖脸还可以抹去，如果抹不去呢？&lt;/p&gt;
&lt;p&gt;越纯净洁白的东西越容易沾染污渍。我一面享受着纯白之美，一面为了……而精疲力尽。&lt;/p&gt;
&lt;p&gt;那次相遇，现在想来也许也就那样，但是太特殊了。一个陌生人给我写信，这是前所未有的美好，因此我就不想再失去他了。也就是这件事情，让我学会了在网上真真切切地表达自己的情感——这实际上是一件非常危险的行为。我自己都说，如果我遇到一个会蛊惑人心的人，我立马会被他迷得神魂颠倒，又被整得死去活来——同时我还心甘情愿。&lt;/p&gt;
&lt;h3&gt;请输入文本&lt;/h3&gt;
&lt;p&gt;我的母亲不在我身边。我知道父亲很爱我，但是表达方式终究不一样。得不到显性的爱，我开始封闭自己，但是意识到如此封闭总有耗尽的一天。我要找，要找到人说爱我，那就让我先爱别人吧！遇见了小 IN 之后，我就开始尝试在网络上面表达自己的情感，因为我前文说了，小 IN 的事情让我知道这是可以的——既然他可以通过写信让我感动，我应该也可以让别人感动，所谓真心换真心嘛。&lt;/p&gt;
&lt;p&gt;所以我说，我还是太幸运了，我还是活得太滋润了。第一个，就成功了，也就是我之前在日记里面提到的（这里就不写了）到后面就越来越多——通过给出爱，我同时也获得爱。这种东西就在交换中不断成长，我的心里也有了宽慰。不过很快我也意识到，我不应该开始依赖这种交换，我必须以自身为根基，必须学会自爱，必须学会自产——所以我开始写日记，开始写博客。我写这种东西不是为了别人而写，而是为了自己而写。我明白自己过得太舒服了，还总是忘记经历过的不开心的事情。我要记下来，我不能再迷迷糊糊地过日子。我知道让别人看这种东西就是遭罪，因为我自己都看不下去别人写的同类文章，所以也没有多么希望路人会看——但是我希望我的朋友会看，爱我的人会看，毕竟他们都在网络之上，这是我找到现实感的一种方式。这告诉他们，我不是数据，我是真真切切存在的一个人。&lt;/p&gt;
&lt;p&gt;但是小 IN 曾经说，我的日记是为别人写的——也许这个时候就已经初见端倪了——我非常伤心，从此没有再给他发过日记。但是我还是一直写，直到现在已经七百一十多天，写完整整三本日记本了。&lt;/p&gt;
&lt;h3&gt;让我大声说&lt;/h3&gt;
&lt;p&gt;我爱的人很多：和我同龄的、年长的、年少的；有男生、也有女生——当然，他们也爱我，到现在没有哪个不是一年两年的。我爱的人也很少，手指头掰掰就数完了，毕竟一个人的经历也总有一个限度。所以我说我还是太幸运了，寥寥数人，种类都齐了，哈哈。当然上面说的只局限在网上，现实中就更多了。因为像我自己说的，看到的事情多了之后，就越来越觉得自己幸运，自己在现实中遇到的都是特别好的人，不管是同学、老师，还是我自己的父母与亲戚……如果有人就我对男生说“爱你”这件事来说我是男同的话，我觉得这是完全站不住脚的。我的性取向很正常，至于我为什么要提这个，你接着看就知道了。&lt;/p&gt;
&lt;p&gt;我喜欢的人是什么样的？举个例子，我自己并不是一个纯粹的人，因而我非常喜欢纯粹的人。遇到的第一个是比我小的一位初中生（现在已经高中了），他就非常纯粹。 那段时间他总是给我出数学题目写（还好他是初中生我还写得来），比如一个比较有意思的是三角形里面二倍角的题目，求出来的轨迹恰好是一个四分之一个双曲线（我那个时候都还没有学圆锥曲线呢）他同时也很温柔，我难过的时候，会对我说“揉揉”。我觉得这真的是一个很有魔力的词语，和“抱抱”一样，都给我一种未曾有过的温暖。后面还认识了一位温柔的大哥哥，他对我说“要做一个可爱的人哦，不要像我以前一样说暴戾语言（）”也就是从那个时候，我也立志要做一个可爱的人，因为这很温暖——别人给予我爱意，我也要还给他……&lt;/p&gt;
&lt;p&gt;我对他们说，我爱他们。他们也都理解是什么意思，这真的是很幸福的相遇。&lt;/p&gt;
&lt;p&gt;在现实中举个例子，可以是我的英语老师：他有时间就戴个耳机听听力，有空就用手机看各类外文……还有数学老师，总是看到他在研究题目。在我眼里，他们都是非常负责纯粹的人，当然对老师肯定不是说爱来表达喜欢，做好学生分内的事情、敬重老师、在三年里面留下一个好的印象，就是最好的回报了吧。我的同学也都是很好的人，班级里面到处充满了活跃的气氛……哈哈抱歉，我写得太多了。&lt;/p&gt;
&lt;p&gt;不过，也许是年纪比较小的还在成长容易变，之前那个小朋友已经不再找我做题目，而是自己研究图形库去了——每天看外网视频学习到凌晨，还是一个很纯粹的人啊！&lt;/p&gt;
&lt;h3&gt;小 IN&lt;/h3&gt;
&lt;p&gt;小 IN 也是会变的。&lt;/p&gt;
&lt;p&gt;那封信是一个暴击，让我不得不换一个态度对待他。但是那个时候我还没有遇见后面遇见的人，所以还没有那种意识。不过喜欢一个人还是一样的，他真的是很纯粹——几乎不可能再纯粹的纯粹——甚至那个时候他是刚刚接触网络，而我是在他网上遇见的第二个人。作为一个冲浪老司机，我觉得我有能力带领他成为一个我希望他成为的人。事实证明，这是一个极其自大的决定，也成了我之后被诟病的根源，就是试图扭转别人……我必须承认，每个人都有自己选择的道路， 但是他却慢慢变成了我最不希望他成为的样子。&lt;/p&gt;
&lt;p&gt;曾经的他会熬夜写代码到凌晨两点，会用最基础的图形库，一点点笨拙又可爱地搭建自己喜欢的东西。这种求学的过程在我看来真的很可爱很让人喜欢，但是他后来换了一个 2D 游戏引擎……嗯，我并不是说这个不好，但是我很明显地感觉到他的注意力发生了改变。&lt;/p&gt;
&lt;p&gt;我毕竟不是他肚子里面的蛔虫，也不知道为什么他喜欢上了一个虚拟歌姬——如果你认真看了全文，你就应该发现贯穿全文的就是一个字：人。网络只是一个媒介，我喜欢的是屏幕后面的人，而不是里面的内容本身。从他开始给我推术曲的时候，我就有点奇怪了。但是我还是试图找一些话题，便也找了一些术曲推给他，结果他居然告诉我，他是那个虚拟歌姬的粉丝，是不能听别的虚拟歌姬的作品的。&lt;/p&gt;
&lt;p&gt;非常迷惑，非常奇怪。&lt;/p&gt;
&lt;p&gt;我上文也说了，我一直在寻求自爱的方法，也就是以自己为中心。面对「现代人的精神沙漠」，我选择把自己作为自己的精神支柱。当我谈及这个问题的时候，他却回答我，那个虚拟歌姬就是他的精神支柱。&lt;/p&gt;
&lt;p&gt;我必须说明，我从那个时候就开始对于他能否成为我的一个朋友产生了怀疑——但是我也要同时说明，那一封信的威力还是太大了，我想他应该还是非常在意我的，不然也不会和我讲这件事情。从此之后，他开始制作一个以那个虚拟歌姬为中心的音游，并且以此获得了大量的关注。但是作为一个摸了几年程序同时一直看着这个项目成长的人，我马上发现这个程序有些很严重的问题。比如说，一个只有几行文本的谱面文件，他的程序居然要读取整整好几秒——甚至会因为图形界面太久不刷新直接未响应；一个 Demo 可以直接占掉我半个 GB 的内存；甚至连音游最基本的判定都有非常严重的问题。对此，我还特意录了一个视频：我先打了一个喵赛克 10 级歌曲的 EX，表示我还是有点音游水平的，然后打开他的游戏，首先是卡死，再之后勉勉强强打完一首歌，居然 Miss 了几十个——我觉得这已经足够说明问题了，但他还是不理不睬，说说会修的，一直拖到 24 年暑假结束才被群里面的群友修复。他毕竟一直没有来找我，我也懒得做什么贡献——他之前邀请我加入的那个项目，早就死翘翘了。&lt;/p&gt;
&lt;p&gt;我顿时觉得这个项目前途渺茫。作为「观察者」，我看到过无数优秀的独立游戏作品，可是它们的曝光率居然比不上一个连基础功能都做不好的 Demo&lt;a href=&quot;https://www.saroprock.com/%E6%88%91%E5%BF%85%E9%A1%BB%E8%AF%B4%E6%98%8E%EF%BC%8C%E6%88%91%E8%BF%99%E9%87%8C%E6%98%AF%E5%A6%82%E5%AE%9E%E8%AE%B0%E5%BD%95%E6%88%91%E8%84%91%E6%B5%B7%E9%87%8C%E9%9D%A2%E5%BD%93%E6%97%B6%E7%9A%84%E8%AE%B0%E5%BF%86%EF%BC%8C%E4%B9%9F%E8%AE%B8%E6%9C%89%E5%87%BA%E5%85%A5%EF%BC%8C%E5%90%8C%E6%97%B6%E4%B9%9F%E4%B8%8D%E8%83%BD%E4%BB%A3%E8%A1%A8%E7%8E%B0%E5%9C%A8%E7%9A%84%E9%A1%B9%E7%9B%AE%E6%83%85%E5%86%B5%E3%80%82%E6%88%91%E6%80%BB%E6%9C%89%E4%B8%80%E7%A7%8D%E9%A2%84%E6%84%9F%EF%BC%8C%E5%B0%B1%E6%98%AF%E4%BB%96%E7%9A%84%E4%BA%8B%E6%83%85%E4%B8%80%E5%AE%9A%E4%BC%9A%E6%88%90%E5%8A%9F%EF%BC%8C%E5%9B%A0%E4%B8%BA%E5%90%8E%E9%9D%A2%E4%BA%BA%E6%84%88%E6%9D%A5%E6%84%88%E5%A4%9A%EF%BC%8C%E4%BB%96%E6%83%B3%E5%81%9C%E4%B9%9F%E4%B8%8D%E8%A1%8C%E4%BA%86%E2%80%94%E2%80%94%E5%BD%93%E7%84%B6%E8%BF%99%E6%98%AF%E6%88%91%E7%9A%84%E7%8C%9C%E6%B5%8B%EF%BC%8C%E6%88%91%E5%BD%93%E7%84%B6%E5%B8%8C%E6%9C%9B%E5%87%A0%E5%B9%B4%E5%90%8E%E6%9C%89%E4%BA%BA%E6%9D%A5%E7%8B%A0%E7%8B%A0%E6%89%93%E6%88%91%E7%9A%84%E8%84%B8%EF%BC%9A%E2%80%9C%E4%BD%A0%E4%B9%8B%E5%89%8D%E8%AF%B4%E4%B8%80%E7%9C%BC%E5%B0%B1%E8%83%BD%E7%9C%8B%E5%88%B0%E5%A4%B4%E7%9A%84%E9%A1%B9%E7%9B%AE%E7%8E%B0%E5%9C%A8%E5%B7%B2%E7%BB%8F%E4%BA%BA%E5%B0%BD%E7%9A%86%E7%9F%A5%E5%95%A6%EF%BC%81%E2%80%9D%E5%A6%82%E6%AD%A4%E5%BD%93%E7%84%B6%E6%9C%80%E5%A5%BD%EF%BC%8C%E6%88%91%E4%BB%8E%E6%9D%A5%E5%B0%B1%E6%B2%A1%E6%9C%89%E5%B8%8C%E6%9C%9B%E9%82%A3%E4%B8%AA%E9%A1%B9%E7%9B%AE%E5%A4%B1%E8%B4%A5%E8%BF%87%E3%80%82&quot;&gt;^2&lt;/a&gt;？我心里很苦恼，我觉得他应该还是在意的。我好几次提醒他，他只是说会一直坚持，我却看不到什么进展。&lt;/p&gt;
&lt;p&gt;代码方面，他则开始研究一些莫名其妙的东西，比如让函数返回自己。一个群里面管理连什么是指针都不懂，可以指望他们研究出什么呢？连最基础的类型都不明白，就开始研究一些毫无边际的东西——不是说不可以，但是至少要有一个谦逊的心态——这么大的报错拍在你脸上，英文看不懂翻译软件总会用吧？为什么要死磕呢？这是他讨论编程技术的一个还算纯粹的群，再后来就出现了一个以他与那个虚拟歌姬为中心的群，我没加，因为我在里面找不到位置。后来事情越来越奇怪，那个原来叫作小群的第二个群，人数越来越多，而那个编程群反而越来越冷清，到最后，直接被解散了。&lt;/p&gt;
&lt;p&gt;我被迫还是加入了那个群。有几百号人，但是发言的就这么几个，内容要不就是什么音游就是那个虚拟歌姬或者小 IN 自己。他完全变了个人，似乎：一天可以见两三个网友，参加漫展，在 KTV 里面放声歌唱——这还是那个之前对我说被霸凌的那个他吗？&lt;/p&gt;
&lt;p&gt;也许像他说的，我应该为他开心。但是我渐渐觉得，他不纯粹了。&lt;/p&gt;
&lt;h3&gt;愚蠢的呐喊&lt;/h3&gt;
&lt;p&gt;我和他大吵了一次，一直到凌晨三点——那天还是 NOIP 考试的前一天晚上。起因只是因为退出了那个群，因为里面的群友在发一些批评中国教育制度的东西，我不太想看，同时我也说了我在里面找不到位置，顺其自然就退了。他开始给我扯一些“看山不是山”的东西，我不知道他看了什么书。他说我认为他们讲的不对这个的情况，恰恰说明我在第二个层次。我说我压根就没想过什么对不对错不错的东西，我就单纯不想看，有什么问题吗？到最后怎么也扭转不了，我感觉很无语，就这样一直纠缠到凌晨三点。唉，早上起来就是 NOIP。&lt;/p&gt;
&lt;p&gt;之后又吵了一次。在他消失很久之后，他突然回过来对我说说：“刚才在和父亲吵架，现在回来发现你还挺可爱的。”我好像赌气一样地，把那些对别人的聊天记录都发给他，我说，我当然知道我可爱啊，我就想成为一个可爱的人啊！&lt;/p&gt;
&lt;p&gt;然后我就把他删掉了，因为不管怎么说，我无法改变什么了。&lt;/p&gt;
&lt;p&gt;现在想想，其实自己也真的是破罐子破摔了。我完全可以偷偷把他的特别关心去掉，毕竟他都不关心我，他在网上的朋友已经数不清了，分给我的已经很少了，我还这么执着干什么呢？&lt;/p&gt;
&lt;p&gt;但是那封信啊……真的，杀伤力太大了。如果你看过前面的文章比如《舔狗的幸运》，我之前的观点和现在是很不一样的，那封信算是一个直截了当的出口——可以让我迅速地逃离当时的心理困境——但是哪知道这个出口通向的是另一个困境？&lt;/p&gt;
&lt;p&gt;我为什么破罐子破摔把他删了？也是因为这封信。我记得第二次的那个晚上，他告诉我了一个不可思议的事实：“其实我那个时候给很多人都写了信，你又不是唯一。其中有一位是北京的朋友，他现在和我的关系还是和之前一样，你怎么不想想你自己的问题呢？”&lt;/p&gt;
&lt;p&gt;我觉得这大概似乎确实不像是人说出来的话……你想想看，一个你心里无比珍视的东西，原来只是别人批量生产的罢了……你以为你是特殊，原来只不过是被扩列的其中之一……&lt;/p&gt;
&lt;p&gt;“不过我还是要谢谢你，陪了我一年，对我来说就是一个教训吧。”教训，原来我只是一个教训……我那个时候不知道该哭还是该笑。小 IN 又说，这次经历教会了他不要随便和网上的陌生人说太多，所以就是一个教训。我说他太冷血了，我可是一个活生生的人，怎么可以是一个教训呢？而且，同一个经历，我和他学到的，怎么恰恰好好正正相反呢？&lt;/p&gt;
&lt;p&gt;哎，确实是我错了，我太认真了、太较真了。网络上的一切真真假假我干什么这么执着呢？他的教训也对，如果他不告诉我他的故事，如果他不给我写那封信，我也不会这么放不下。&lt;/p&gt;
&lt;p&gt;他又出去了，全然不是我之前认识的他了。我默默地把信撕成碎片，希望水流可以带走一切。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;然而这是不可能的。六个月之后，我还是放不下，放不下。那时正是高二下，我从年段前二十一下子掉到了前一百当守门员，我知道不能归咎于一个原因，但是也不能说和这件事情没有关系。我总是动不动就想到这件事情，久久不能忘怀。&lt;/p&gt;
&lt;p&gt;随后我就做出了一个极其愚蠢的决定：我发现我还没有对他说过“爱你”，我相信他肯定是不明白我为什么这么执着所以才……之前真心换真心都成功了，这次也可以吧？&lt;/p&gt;
&lt;p&gt;于是我就找到他的 B 站账号，开始发私信——我简直像个疯子一样，我说我为什么这样子都是因为我爱你，如果是别人，我还和他争论到凌晨三点干什么呢……他说：“是我想的那样吗？”我没多想就回了个：原来你一直都不知道……&lt;/p&gt;
&lt;p&gt;然后他再也没回过我，也不拉黑，就任凭我一个人在聊天窗口说着一些疯癫的话。&lt;/p&gt;
&lt;p&gt;后来，还是我的一个网友&lt;a href=&quot;https://www.saroprock.com/%E5%AF%B9%E6%88%91%E6%9D%A5%E8%AF%B4%EF%BC%8C%E7%94%A8%E8%AF%8D%E6%98%AF%E5%BF%85%E9%A1%BB%E4%B8%A5%E8%B0%A8%E7%9A%84%E3%80%82%E3%80%8C%E7%BD%91%E5%8F%8B%E3%80%8D%E4%B8%8D%E5%90%8C%E4%BA%8E%E3%80%8C%E6%9C%8B%E5%8F%8B%E3%80%8D%EF%BC%8C%E6%89%80%E4%BB%A5%E8%BF%99%E4%B8%AA%E7%BD%91%E5%8F%8B%E5%AE%9E%E9%99%85%E4%B8%8A%E5%B9%B6%E4%B8%8D%E5%AD%98%E5%9C%A8%E4%BA%8E%E4%B8%8A%E8%BF%B0%E3%80%8C%E6%9C%8B%E5%8F%8B%E3%80%8D%E7%9A%84%E8%8C%83%E5%9B%B4%E9%87%8C%E9%9D%A2%E3%80%82&quot;&gt;^3&lt;/a&gt;来找我了。那是小 IN 来找他，问我最近是不是出了点问题。到后面我才知道，小 IN 把我当成同性恋了。好了，这下真的完犊子了，没有回旋的余地了。我想到之前「看山不是山」的事情，就明白他的想法不可能再被更改了，也就是说，我这个同性恋的标签不可能甩掉了。他还把我挂在了空间，我甚至没有胆量去看他是怎么写的。&lt;/p&gt;
&lt;p&gt;这种误解与被标签化的痛比之前的还要难受——不是因为标签本身，而是因为我感到自己的话语与感情就这么轻易地被定义和消解了，甚至说我是……简直和侮辱我一样&lt;a href=&quot;https://www.saroprock.com/%E5%BD%93%E7%84%B6%E8%BF%99%E7%A7%8D%E4%B8%9C%E8%A5%BF%E9%83%BD%E6%98%AF%E8%87%AA%E5%B7%B1%E6%83%B3%E7%9A%84%EF%BC%8C%E6%A0%B9%E6%9C%AC%E8%B0%88%E4%B8%8D%E4%B8%8A%E3%80%82&quot;&gt;^4&lt;/a&gt;。那我还喜欢老师呢，难道我是师生恋吗？我只是想说我把他看得很重要而已，为什么呢？&lt;/p&gt;
&lt;p&gt;写了两天，现在已经是二十九号了，写到大约五千五百字，我有点不知道怎么继续。其实这种事情写出来，尤其是从别人眼里看来，真的是微不足道的事情，谁或多或少总得经历一下。所以，让我想不通的还是明明之前几次都可以的，为什么这次就不行了呢？如果说很久以前的不快还可以用「不重要」来搪塞，可是他确实对我来说是很重要的人啊。如果没有他，就没有现在的我吧。&lt;/p&gt;
&lt;p&gt;先前问题的解决是在一页日记里面，我说，我只要爱那些爱我的人就好了，可是我却没有想过爱我的人如果不爱我了怎么办，或者说其实根本没有爱过我怎么办——所以我说我还是过得太幸福了，从来没有经历过这种事情，稍微有一点点挫折就放不下了，好像一定要十全十美一样的。&lt;/p&gt;
&lt;h3&gt;现在&lt;/h3&gt;
&lt;p&gt;高三开学后，我选择回到学校住校。我从小学开始就一直是住校生，只有高二一年不是住校的。而我也就是从那一年开始退步。我可能已经习惯了在学校里面认真学习，在家里面疯玩的节奏了。所以一通校，我根本控制不住我自己。尤其是那件事情之后，我连在学校里面都过得不认真了。不认真，就更加谴责自己，明明周围的人都很好，我却为了那一个人执着，我觉得我对不起他们，更对不起我自己。所以我又申请住校去了，希望在学校里面我可以安心一点。躺在学校的单人床上总是很有安全感，可能是比较狭窄的缘故，这张床也是十几年没有变过呢。&lt;/p&gt;
&lt;p&gt;开学初就是 Z20 联盟考试，压力非常大。考完数学之后，我就知道我自己考砸了。但我突然惊喜地发现再想起小 IN 我居然不会难受了——也许是现实的压力真的太大了，这么多月了，难道我要因为这件事情荒废自己吗？可是考试结束后的一周，那种感觉又回来了。我似乎有一个污点被他捏在手里：哦，原来 Maple 是一个性取向有问题的变态啊！我不知道为什么觉得我还会再见到他，如果真的是这样我又该怎么面对？如果有人先我之前见到他了呢？&lt;/p&gt;
&lt;p&gt;我明白通过压力压制是没有用的，我的问题在于我面对的还是一个未知的未来，而我总是会想最坏的情况。我开始找一些场景来让自己释怀，直到现在才发现，其实自己早就成了背景，而我还在以己度人罢了。&lt;/p&gt;
&lt;p&gt;我说嘛，我已经做得足够了，你看……所以也该释怀了。&lt;/p&gt;
&lt;h2&gt;免责声明&lt;/h2&gt;
&lt;p&gt;小 IN 曾经说，他非常讨厌别人在文章中写到他（但是我之前写第一篇文章他不是这么说的），所以我对他的名字进行了一些修改，这两个字母仅在我的心里留一个键值，不代表任何与这两个字母有关的其他人，这两个字母也不属于网络上的任何一个关键词。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;本文的所有内容皆由我回忆而成，真实情况可能因为时间原因有所偏差，但我主观上没有任何欺骗的想法。&lt;/li&gt;
&lt;li&gt;本文的所有内容只针对当时的人与事，不代表现在的情况。&lt;/li&gt;
&lt;li&gt;本文对于小 IN 的评价都是我自己的主观臆断，不代表其本人实际性格。&lt;/li&gt;
&lt;li&gt;本文内容不存在任何可以让局外人锁定具体人物真实信息的方法（诸如暗藏密文等等）。&lt;/li&gt;
&lt;li&gt;本文标题的「包括」与「IN」属于同一性质，仅方便我回忆，没有其他含义。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;杂记&lt;/h2&gt;
&lt;p&gt;我希望我可以做一个可爱的人，同时也保留定义自己的权利。&lt;/p&gt;
&lt;p&gt;我在这篇文章中从来没有说过，我是对的，谁谁谁是错的。这种事情没有对错之分，如果一定要说，那就是我错了，我不应该这么执着，我不应该内耗自己。&lt;/p&gt;
&lt;h2&gt;花絮&lt;/h2&gt;
&lt;p&gt;昨天晚上，也就是二零二五年八月二十八日，我回家的时间刚好赶上我父亲与他的四个好朋友聚餐的时候，因此顺便蹭个饭。五个马上年过半百的人在小巷的餐厅里面把酒言欢，我在旁边看着，真的是一种很奇怪的感觉。我觉得，我作为学生，真的是太脱离这种社会了；我又觉得，以后再有这种时候也是很难了。气氛到了，父亲久违地陪着兄弟抽了烟，举起酒杯一饮而尽。&lt;/p&gt;
&lt;p&gt;这里是容不下我这种多愁善感的人的，就纯粹地快乐，多好呢？&lt;/p&gt;
&lt;p&gt;纯粹的人，纯粹的物，纯粹的时刻。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>任性</title><link>https://saro.pub/go</link><guid isPermaLink="true">https://saro.pub/go</guid><description>孩子，放过自己吧，逼自己太久了，「任性」一回当然可以。但是当你做出这个决定之后，也就没有回头路了。</description><pubDate>Tue, 12 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;日记 [2025-8-12]&lt;/h2&gt;
&lt;p&gt;什么是任性，我现在知道了。&lt;/p&gt;
&lt;p&gt;起床，发完早安，才发现今天晚了。昨晚睡得很舒服，也不是非得五点半起对吧。我想对汐汐解释下，其实这几天七点前就醒，所以六点半买早饭完全来得及。被父亲看见了，他说，是谁给我打电话呀？我一下子压力山大，脑子里马上想到，他是不是“又要”骂我了，可实际上我爸从来不会责备我，他真的只是单纯好奇。没人这么早给我打电话，我自己却快被这三个字压垮了。本来昨天突如其来的歇斯底里便已经让我精疲力尽了，连动动嘴巴吃个早饭也不想。父亲看到我这样自然很担心，可是他越担心说得越多我压力便越大。最后他说，我不讲了，我怕我再讲下去，你就要崩溃了——晚了，可是。&lt;/p&gt;
&lt;p&gt;一旦陷入，除了爆发别无选择。我想到昨天晚上，在我还像小孩子一样哭唧唧的时候，他说了一句：“你再这样，明天不要上学了吗？”“不要上学”这四个字一下子引爆了我。说我不要、不想上学，这不是荒谬吗？如果不要，我为什么每天起这么早；如果不要，我干嘛对不负责任的老师生气；如果不要，我又何必把自己关到图书馆、书房里去呢。本身母亲不在，父亲又不懂文化课，自己已经觉得是孤军奋战。现在我上课回来，又说这种话，不是把我否定了么……我忽地暴起，扯着安全带，同时疯狂地扇自己的脸：“我要上学！我怎么可能不去，你不能不让我去……”&lt;/p&gt;
&lt;p&gt;“我真怕你疯了。” “害怕有什么用？”是他也哭了起来。&lt;/p&gt;
&lt;p&gt;到学校了，我却是走不动了。同昨天一样懦弱地流着泪，脑子里盘算着一句我不敢说的一句话。陆续有家长的车开来又开走，维持着蓝白色的人流。好像又说了很多，也许是昨晚的印象太深刻使“失忆”失了效用，也许是自己的逻辑推着自己走，我说出了我这辈子可能都不会相信这是我说的一句话：“我不想去上学了，我不想上学了，我真的不想去上学了。”&lt;/p&gt;
&lt;p&gt;一句活，打开了一扇门。可能是超越自己的一扇门，可能是堕入迷途的一扇门，也可能是我眼泪水的阀门。因为自己的精神状态每况愈下，父亲很早就反对我去上学了。我不知道这是不是顺了他的意，只是今天……呵呵，我也没想到我真的会说出如此大逆不道的话。从小被老师夸赞的乖孩子，怎么允许这么任性呢？&lt;/p&gt;
&lt;p&gt;父亲说，出去走走吧。去上海的火车已没了票，最后也只买到了两张去杭州的无座。我就这样子与父亲一起“非法”的时间穿越到了西湖。游人如织、风和日丽，却也只是回忆的美好。拥挤与打卡式的逃避并不轻松，即使在景区里，人们仍是行色匆匆，三潭印月也不过是无聊的背景。只有在候车的车站里，充满疲惫或憧憬心情的地方，我才得以把本子拿出来，在熟睡的父亲身旁写下些文字。我没拍任何照片，更没有刻什么印记。坐在澄潭江&lt;a href=&quot;https://www.saroprock.com/%E5%B5%8A%E5%B7%9E%E7%9A%84%E4%B8%80%E6%9D%A1%E6%B2%B3%E6%B5%81&quot;&gt;^1&lt;/a&gt;旁，就当我从来没有去过。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;今天&lt;/h2&gt;
&lt;p&gt;我在沙发上，抱着自己的鱼鱼抱枕，扭来扭去、惴惴不安。“哎呀，票都卖完了嘛……”其实，如果可以，我想面对澄潭江坐上一整天。不过这样的话，我可能先被太阳晒话。抱着出了汗，我自己也逐渐冷静下来，开始渐渐觉得，自己怎么这么冲动呢，如果当时忍一下下……“没事，老爸还有办法。”我们买了一张从嵊州新昌站到嵊州北站的票，等上了车再补票。因为当时，连到绍兴上虞的票都卖光了，大巴车更是要到十点多——我也不知道为什么这么执着一定要出去，想来这还是近一年来第一次出嵊州。&lt;/p&gt;
&lt;p&gt;其实在之前父亲盘算干什么的时候……“我很想带你出去走走，转移一下注意力，但是你总是拒绝……老爸还没有很难以前做过地铁呢，飞机也没有……我们一起去看过西湖吗？好像没有……不是说‘不到长城非好汉’嘛，老爸一个人也懒得去……”，说着说着，他又哭了，“唉，我只想把老的小的照顾好，你以后上大学了就……”&lt;/p&gt;
&lt;p&gt;我头一次见还能这样子补票的，在我看来也是流氓了。父亲在高铁上好像一个小孩子，因为是无座，只能在车门旁边站着。他就把目光从车门的窗上探出去：“欸，你看，那是什么柱子哇，一眼看不到头欸。”我把余秋雨的书给他看，他要好久才能翻一面。看到「李白的轻舟、陆游的毛驴都雇不到了，我无法穿越那种似现代又非现代、由拥塞懈怠白眼敲诈所连结成的层峦叠嶂」，又会哈哈大笑起来。我赶忙比个「嘘」的手势。看到《鼠疫》中的一句话，让我感慨万千，但是已经找不见了。&lt;/p&gt;
&lt;p&gt;出了车站，好多人，好多人，怎么到处都是人呢？除了人，还有到处都是的广告牌，以及从四面八方传来的五湖四海的口音。在人群的簇拥下误打误撞进了地铁，临时做攻略从一号线到龙翔桥，终于爬到了地面上……怎么这么熟悉呢？&lt;/p&gt;
&lt;p&gt;望不到头的步行街、湖边的喷泉、樟树上的小松鼠和蹦蹦跳跳的小白鸽，我好像来过这里……乘坐游船来到中心的小岛，看着中心曲折的青石板，我又依稀记得上面有我的脚印……八年前，或者说九年前，母亲还在我身边的时候，我和舅舅舅妈一起来到这里——那时还是 G20 ，我记得很清楚，我睡在他们家的飘窗上，因为我觉得高高的，很有趣。&lt;/p&gt;
&lt;p&gt;没什么好说的，对我来说，水就是水，风就是风，阳光就是阳光。汗一直出、腿一直迈，比水的波浪更加密集的是人的波浪。我想到嵊州稀稀拉拉的人流，再看到这里，感到莫名的惶恐不安。我觉得可能还是在家里睡觉更好，也许？&lt;/p&gt;
&lt;p&gt;穿着各色古风服饰的人、穿着制服维护秩序的人，其实更多还是「相伴而行」的人。我不太喜欢父亲大大咧咧的性格，面对这种画面，我想我最好「大隐隐于市」，但显然这是不可能的。我累了也腻了，看着水中无规律游弋小鱼与用瓶子抓鱼却怎么也抓不到的小女孩，我想，也许是因为我在这个城市没有家的缘故吧。如果平时乏了，我至少还知道一个去处。但是现在我累了，我应该去哪里呢？&lt;/p&gt;
&lt;p&gt;去车站吧，毕竟我是从那里来的。&lt;/p&gt;
&lt;p&gt;经历了三次抢票失败后，我总算是候补到了回家的票。杭州东站，想到我上次来这里的时候，还是两年前去常州培训的时候。那时候老师对我们说，在省常中上学的时候，可以多去旁边的寺庙走走，也是很有当地文化的。我那个时候嗤之以鼻，现在想想，一个人安静地独走或许是难得的记忆。&lt;/p&gt;
&lt;p&gt;“哈哈，我站在这里还会动，挺有趣的呢。”地铁上人太多，父亲只能站在两节车厢的链接处，随着一块板子左右摇摆。他还是这样子，把“没见过市面”表露的一览无余，在沉寂的车厢中显得很突出。但其实他怎么会没有坐过地铁呢……&lt;/p&gt;
&lt;p&gt;候车大厅，父亲睡着了。我曾经把本子放在西湖边的栏杆上面，靠着，算是写一点东西。但是最后还是放了回去。现在，距离回家还有一段时间，我终于可以写点东西了吧。&lt;/p&gt;
&lt;p&gt;但是我后来也睡着了……&lt;/p&gt;
&lt;p&gt;也许本来就没必要这么紧张，一个小时可以赶上一趟火车，一天也可以拜访一座城市。对于学习，少了一天，难道就完蛋了吗？我其实不知道，就像我说的，我不知道这是超越自己的一扇门，还是堕入迷途的一扇门。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>如何部署我的博客</title><link>https://saro.pub/build-saroprock</link><guid isPermaLink="true">https://saro.pub/build-saroprock</guid><description>针对个人项目「SaroProck」简单的配置 &amp; 部署教程。</description><pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import Warning from &amp;quot;../../components/mdx/Warning.astro&amp;quot;;&lt;/p&gt;
&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;昨天突发奇想在「NodeSeek」上面发了一篇帖子（&lt;a href=&quot;https://www.nodeseek.com/post-407852-1&quot;&gt;帖子链接&lt;/a&gt;），没想到第一篇就被设置为了「推荐阅读」。但是毕竟是我自己的博客而不是模板，所以并没有部署指南。惊喜之余，还是要写一篇关于如何部署我的博客的教程。部署很简单，这里我分成三个步骤，分别是：博客与动态部署 -&amp;gt; 评论系统 -&amp;gt; 短链系统。在最后，我会提供完整的 &lt;code&gt;.env&lt;/code&gt; 文件。你也可以在 &lt;a href=&quot;https://github.com/EveSunMaple/SaroProck/blob/main/.env.example&quot;&gt;GitHub 仓库&lt;/a&gt;查看。&lt;/p&gt;
&lt;h2&gt;博客与动态部署&lt;/h2&gt;
&lt;p&gt;让我们先从最基础的开始吧！&lt;/p&gt;
&lt;h3&gt;准备工作&lt;/h3&gt;
&lt;p&gt;首先，你需要有一个 GitHub 账号以及一个 Telegram 账号，此部分不在教程范围内。&lt;/p&gt;
&lt;p&gt;其次，你需要选择一个部署平台。我的项目属于 Astro SSR，需要适配器。具有官方适配器的平台有 Vercel、Netlify、&lt;del&gt;Cloudflare&lt;/del&gt; 等等。你可以选择其中一个进行部署。如果你选择 Vercel 部署，那么你不需要对 &lt;code&gt;astro.config.mjs&lt;/code&gt; 进行修改；如果你选择 Netlify 或者 &lt;del&gt;Cloudflare&lt;/del&gt; ，请根据 &lt;a href=&quot;https://docs.astro.build/zh-cn/guides/on-demand-rendering/#%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%80%82%E9%85%8D%E5%99%A8&quot;&gt;Astro 文档&lt;/a&gt;更换相对应的适配器。&lt;/p&gt;
&lt;Warning&gt;
  **注意**：Cloudflare Workers/Pages 运行在 Edge Runtime（V8 环境），并不具备完整的 Node.js API 支持。
  由于本项目使用 Astro SSR 并依赖部分 Node API，直接部署到 Cloudflare 可能会导致构建或运行时报错（如 MessageChannel is not defined），
  页面无法正常渲染甚至返回 404。
  **建议** 使用 Vercel、Netlify 等具备完整 Node 运行时的平台部署。
&lt;/Warning&gt;

&lt;p&gt;最后，你需要一个公开的 Telegram 频道，在&lt;code&gt;.env&lt;/code&gt;中添加变量如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-dotenv&quot;&gt;TELEGRAM_HOST=t.me
# 自定义频道或标识符
CHANNEL=your_channel_name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果在本地运行开发者服务器时出现超时的情况，你可能需要配置代理，在&lt;code&gt;.env&lt;/code&gt;中添加变量如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-dotenv&quot;&gt;# HTTP 代理 (具体端口请自行配置)
HTTP_PROXY=http://127.0.0.1:7897
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;请注意，这在部署的时候是不需要的，仅在本地测试使用。&lt;/p&gt;
&lt;h3&gt;部署步骤&lt;/h3&gt;
&lt;p&gt;推送您的仓库到 GitHub 上，确定适配器正确后，前往您选择的部署平台（如 Vercel、Netlify 或 Cloudflare）部署即可。全程使用默认设置，不需要修改构建命令等等。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;当然，记得添加你的环境变量！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;评论系统&lt;/h2&gt;
&lt;p&gt;评论系统的配置也相当简单。因为是我自己写的，所以你也不需要额外部署其他项目的后端，只需要配置 MongoDB 即可。&lt;/p&gt;
&lt;h3&gt;准备工作&lt;/h3&gt;
&lt;p&gt;前往 &lt;a href=&quot;https://www.mongodb.com/cloud/atlas&quot;&gt;MongoDB Atlas&lt;/a&gt; 注册账号，然后创建一个新的集群（免费套餐即可满足个人使用需求）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;创建数据库用户&lt;/strong&gt;：
在「Database Access」中添加一个新的数据库用户，记下用户名和密码，后续会用到。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;配置网络访问&lt;/strong&gt;：
在「Network Access」中添加 IP 地址 &lt;code&gt;0.0.0.0/0&lt;/code&gt;（允许所有 IP 访问，适合部署在 Serverless 平台），或者添加 Vercel 的 IP 范围。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;获取连接字符串&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在「Database」页面点击「Connect」&lt;/li&gt;
&lt;li&gt;选择「Connect your application」&lt;/li&gt;
&lt;li&gt;复制连接字符串（以 &lt;code&gt;mongodb+srv://&lt;/code&gt; 开头）&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;添加变量&lt;/h3&gt;
&lt;p&gt;在&lt;code&gt;.env&lt;/code&gt;中添加如下内容：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-dotenv&quot;&gt;# MongoDB 连接配置（推荐 MongoDB Atlas）
# 请前往 https://www.mongodb.com/cloud/atlas 注册并获取连接字符串
MONGODB_URI=mongodb+srv://username:password@cluster0.xxxxx.mongodb.net/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是这还没完，您还需要配置管理员的个人信息、密码等等：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开&lt;code&gt;src/config.ts&lt;/code&gt;，根据注释修改下面内容：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;// src/config.ts
// 针对博主特定的数据
export const ADMIN_USER = {
  nickname: &amp;quot;EveSunMaple&amp;quot;,
  email: &amp;quot;evesunmaple@outlook.com&amp;quot;,
  website: &amp;quot;https://www.saroprock.com&amp;quot;,
  avatar: &amp;quot;https://www.saroprock.com/avatar.webp&amp;quot;,
};

// 你不希望用户使用的名称与邮箱
export const SENSITIVE_USERS = [&amp;quot;evesunmaple&amp;quot;, &amp;quot;EveSunMaple&amp;quot;, &amp;quot;sunmaple&amp;quot;, &amp;quot;SunMaple&amp;quot;, &amp;quot;admin&amp;quot;, &amp;quot;博主&amp;quot;, &amp;quot;evesunmaple@outlook.com&amp;quot;];
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;在&lt;code&gt;.env&lt;/code&gt;中添加如下内容：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-dotenv&quot;&gt;# JSON Web Token (JWT) 密钥
# 用于用户认证和 API 安全，请使用一个长且随机的字符串
JWT_SECRET=&amp;lt;你的 JWT 密钥&amp;gt;
# 后台管理员密码
# 用于访问受保护的管理功能
SECRET_ADMIN_PASSWORD=&amp;lt;设置一个强的管理员密码&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里为了方便，管理员在登录时，只需要输入用户名、邮箱与密码即可，个人数据会直接使用配置的数据。&lt;/p&gt;
&lt;p&gt;重新部署之后，您应该可以使用评论系统了。&lt;/p&gt;
&lt;p&gt;对于管理员，可以访问&lt;code&gt;/admin/comments&lt;/code&gt;管理评论。&lt;/p&gt;
&lt;h2&gt;短链系统&lt;/h2&gt;
&lt;p&gt;如果您成功访问了&lt;code&gt;/admin&lt;/code&gt;，可能会惊讶地发现流量数据是不可用的。这是因为本博客使用 Sink 作为短链服务来统计并且分析浏览量。打开 &lt;a href=&quot;https://github.com/ccbikai/Sink&quot;&gt;Sink 项目&lt;/a&gt;，根据教程部署即可。&lt;/p&gt;
&lt;p&gt;部署完成后，在&lt;code&gt;.env&lt;/code&gt;中添加如下内容，即可以自动实现与 Sink 的集成，包括为每一篇博客生成短链，统计并且分析数据等等（当然，您不配置 Sink 也可以正常使用）：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-dotenv&quot;&gt;# 数据接收服务 (Sink) 配置
SINK_PUBLIC_URL=&amp;lt;你的 Sink 服务公开访问 URL&amp;gt;
SINK_API_KEY=&amp;lt;你的 Sink 服务 API 密钥&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;自定义&lt;/h2&gt;
&lt;p&gt;到现在为止，您就完成了所有配置！最后，您只需要修改本站页面，就可以变成您自己的博客了！&lt;/p&gt;
&lt;p&gt;对了，我在博客页脚添加了一个喜欢本站按钮，统计的是仓库数据。如果您希望保留，还需要添加一个变量：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-dotenv&quot;&gt;# 用于访问 GitHub API，请在 GitHub &amp;gt; Settings &amp;gt; Developer settings &amp;gt; Personal access tokens 中生成
GITHUB_TOKEN=&amp;lt;你的 GitHub Personal Access Token&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其他的，比如希望添加导航链接，都可以前往对应的页面组件修改（src/components/layout/Header.astro）。我觉得我自己项目的文件命名还是没什么问题的，找起来应该不难。因为每个人可能希望的都不一样，这里就没有类似模板一样写一个通用的配置了。嗯，记得不要删除页脚右下方我的信息就好 ♥️ 先谢过各位了。&lt;/p&gt;
&lt;h2&gt;结语&lt;/h2&gt;
&lt;p&gt;完成自定义后，我的教程也到了头。整个过程不复杂吧？&lt;/p&gt;
&lt;p&gt;如果在实践过程中遇到任何问题，欢迎前往 &lt;a href=&quot;https://github.com/EveSunMaple/SaroProck&quot;&gt;GitHub 仓库&lt;/a&gt; 提交 Issue 或讨论，当然也可以直接在文章下方留言。如果喜欢这个项目，可以转发此文章，也可以给项目点个 ⭐ 支持一下，项目还是会持续更新的喵。&lt;/p&gt;
&lt;p&gt;对了，如果你需要一个纯静态的博客，这里不要脸打一个自己的广告 -&amp;gt; &lt;a href=&quot;https://github.com/EveSunMaple/Frosti&quot;&gt;Frosti&lt;/a&gt;。&lt;/p&gt;
&lt;h2&gt;完整&lt;code&gt;.env&lt;/code&gt; 文件&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-dotenv&quot;&gt;# MongoDB 连接配置（推荐 MongoDB Atlas）
# 请前往 https://www.mongodb.com/cloud/atlas 注册并获取连接字符串
MONGODB_URI=mongodb+srv://username:password@cluster0.xxxxx.mongodb.net/

# JSON Web Token (JWT) 密钥
# 用于用户认证和 API 安全，请使用一个长且随机的字符串
JWT_SECRET=&amp;lt;你的 JWT 密钥&amp;gt;

# 自定义频道或标识符
CHANNEL=your_channel_name

# HTTP 代理 (可选)
# 如果你的网络环境需要代理才能访问外部服务，请取消注释并设置
# HTTP_PROXY=http://127.0.0.1:7897

TELEGRAM_HOST=t.me

# GitHub Personal Access Token
# 用于访问 GitHub API，请在 GitHub &amp;gt; Settings &amp;gt; Developer settings &amp;gt; Personal access tokens 中生成
GITHUB_TOKEN=&amp;lt;你的 GitHub Personal Access Token&amp;gt;

# 后台管理员密码
# 用于访问受保护的管理功能
SECRET_ADMIN_PASSWORD=&amp;lt;设置一个强的管理员密码&amp;gt;

# 数据接收服务 (Sink) 配置
# 如果你使用自定义的数据统计或链接缩短服务，请配置以下选项
SINK_PUBLIC_URL=&amp;lt;你的 Sink 服务公开访问 URL&amp;gt;
SINK_API_KEY=&amp;lt;你的 Sink 服务 API 密钥&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>城市漫步初体验</title><link>https://saro.pub/city-walk</link><guid isPermaLink="true">https://saro.pub/city-walk</guid><description>一个嵊州人回望嵊州的旅程。</description><pubDate>Mon, 07 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;由头&lt;/h2&gt;
&lt;p&gt;七月五日、六日正是浙江省学考的日子，而我早已经在几天之前被连续不断的模考考傻了。学考卷做吐了，所以就很想做高考卷。做到第三份还是第四份的时候，有一道非连续性文本引起了我的注意——城市漫步——这还是我第一次听到它的中文名字，之前嘛，也就只有“Citywalk”令人耳熟能详了。不过我一直以为这个什么“Citywalk”那都是外国人闲得没事干玩玩的，没想到在中国也曾爆火过。这我就有兴趣啦！刚好，学考考完之后的一天是星期一，这图书馆还不开门，没事干，正好去逛逛咱嵊州！真的，说出来不怕丢人，我这个土生土长的嵊州人，却连嵊州有名的“嵊州炒年糕”都没吃过，太不好意思了。还有那些刚刚火起来的小吃街，也是去都没去过。惭愧惭愧。&lt;/p&gt;
&lt;p&gt;六号，我与同学分享我的想法，却得到了一个晴天霹雳般的消息：七号台风天！哦哟晕倒了，我朝着外边看了好久：这热浪！这艳阳！这湛湛蓝天！你告诉我明天不仅刮大风还下雨？&lt;/p&gt;
&lt;h2&gt;啊，我要睡觉&lt;/h2&gt;
&lt;p&gt;假的。&lt;/p&gt;
&lt;p&gt;我的生物钟不知道为什么在早上五点就给我拽了起来，我寻思平常也没有起这么早嘛。翻来覆去好不容易八点了，我看着外面细细打量了一番：嗯！下雨的概率是 0%！起床出发！&lt;/p&gt;
&lt;p&gt;毕竟我想想可能也就这一次机会，之后哪还能腾出这半天来当当「街溜子」。&lt;/p&gt;
&lt;h3&gt;小问题&lt;/h3&gt;
&lt;p&gt;就是，我貌似不太理解，什么是「城市漫步」。&lt;/p&gt;
&lt;h2&gt;在路上&lt;/h2&gt;
&lt;p&gt;（并非）众所周知，嵊州有三大小吃：小笼包、炒年糕、榨面。榨面这就不用说了，那确实家家户户都会，也就是买个面饼加水的事情。这小笼包有说法，分成紧粉和发粉，紧粉的我比较喜欢所以放在前面说，那皮就是像饺子皮一样的，一口咬下去那汁水~所以也可以叫灌汤小笼包。不过干着吃可能有点腻，蘸点辣椒酱就完美了（看个人喜好）。至于那个发粉的呢，皮就和馒头、大包子一个样。倒也不是说这个皮怎么样，就是我感觉啊，里面这馅料区别大了，不止是汤没了，就我个人而言还有一种说不上来的奇怪。所以在我眼里，这嵊州小笼包的正统，那必须是紧粉的！可是放眼望去，还是卖发粉的居多。还好我家楼下有一家只卖紧粉的，那么这早饭就敲定了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_084807.webp&quot; alt=&quot;原谅我的拍照技术，对不起了我的小笼包&quot;&gt;&lt;/p&gt;
&lt;p&gt;真可惜嵊州这地方实在太小，「嵊」这个字在语文课本还要注音呢。所以刚开始很多人出去做小吃都不标「嵊州小笼包」，而是标「杭州小笼包」。“哼，倒是被那些杭州佬占了便宜”，我说。&lt;/p&gt;
&lt;h3&gt;出发吧！去哪？&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_090409.webp&quot; alt=&quot;今天天气真的很好，哪里有台风&quot;&gt;&lt;/p&gt;
&lt;p&gt;面对前面的道路，我突然有点迷茫：这都是高楼，啥啥看不见，去哪呢？欸，既然因为有楼看不见，那就去没有楼的地方，上堤坝走走看呗！&lt;/p&gt;
&lt;p&gt;我现在在的地方，可以说算是比较发达的地方了。想到刚开始嵊州出现了「国商」，也就是「北直街」那块；然后又出现了「新国商」，那么之前的「国商」就变成了「老国商」；后来又有什么「鹿山广场」、「世纪联华」、「吾悦广场」……嵊州本来就这么点大的平地，「七山二水一分田」嘛，这繁华的地方也就是跟着这几个广场换来换去。最后只有这「吾悦广场」越做越好，其他的不是说没人而是「非必要不去了」，这「鹿山广场」当真最可怜，地盘最大一个，死得也最快，名字都换了不知道多少个了，现在的名字是什么我也不知道，就不再赘述了。&lt;/p&gt;
&lt;p&gt;走过「吾悦广场」，就来到了澄潭江边上。我真是好久没有看过这澄潭江水了，恰好有个看台，「左右逢源」，拍了两张照片：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_091258.webp&quot; alt=&quot;左边的那座桥是剡溪大桥&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_091304.webp&quot; alt=&quot;右边的那座桥是嵊州大桥&quot;&gt;&lt;/p&gt;
&lt;p&gt;这两座桥的名字取得真好，一个「剡溪」一个「嵊州」，算是把这地最官方的名字给占下来了。我还记得小时候还住在「三江城」边上的时候，我每天早上都和父亲跑步到「嵊州大桥」上呢。还有一次好像是赌气了，也不管我爸怎样，一下子跑到了「剡溪大桥」。哎呀，原来这两座桥在我记忆里面也已经这么久了啊。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_091407.webp&quot; alt=&quot;回头看看呢&quot;&gt;&lt;/p&gt;
&lt;h3&gt;顺流而下&lt;/h3&gt;
&lt;p&gt;没想到这堤坝上面的人还挺多的哦，还有人坐在长椅上面看书，真不错啊。走到头，我远远地望还以为没路了，原来是不让机动车进，这还挺巧妙的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_092531.webp&quot; alt=&quot;拦「路虎」&quot;&gt;&lt;/p&gt;
&lt;p&gt;这左前方是一座只能非机动车开的小桥，连接了三江口，也就是「澄潭江」和「长乐江」汇合的地方，这汇合之后才叫「剡溪」。那之前跑步到这的时候，三江口尽是些老房子和杂草，现在这新房子建的一个比一个气派，我们之后还会提到呢。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_092708.webp&quot; alt=&quot;绍兴 嵊州&quot;&gt;&lt;/p&gt;
&lt;p&gt;左侧是咱们嵊州的第一高楼，在这住一天最低也得四位数。没想到刚刚好和堤坝连在一起了，这种立体的结构我还是相当喜欢的。旁边还有一排排的彩色小车，很可爱。&lt;/p&gt;
&lt;p&gt;欸，看这里，是不是挺好的？但是总觉得缺了什么——人！嵊州人真的太少了，一千多平方千米那连七十万人都凑不出来，咋够？不过人少某种意义上也算好处吧……&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_093029.webp&quot; alt=&quot;嵊州大桥&quot;&gt;&lt;/p&gt;
&lt;h3&gt;我家呢&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_093208.webp&quot; alt=&quot;这是哪哇&quot;&gt;&lt;/p&gt;
&lt;p&gt;「嵊州大桥」旁边啥时候多了这么一排房子？诶不是我家呢？我在太阳底下兜兜转转了半天，想来是把脑子转坏了，我家什么时候在「嵊州大桥」边上了，那是在「东桥」边上！还得往下。可惜了，这「转」脑子的病好了，又给太阳烧坏了。我看看上面穿不过去，居然忘记可以从桥底下穿过去了。然后我就傻不愣登地、义无反顾的右拐了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_093403.webp&quot; alt=&quot;还是过不去的嘛&quot;&gt;&lt;/p&gt;
&lt;p&gt;本来以为嵊州早就没有电线杆之类的了，没想到这里就有。我还是第一次以这种视角看这条路，哈，原来这么宽敞！与后面几条扩无可扩的小路相比，这里还算是大有可为。&lt;/p&gt;
&lt;h3&gt;从堤坝到小巷&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_094039.webp&quot; alt=&quot;赶路中&quot;&gt;&lt;/p&gt;
&lt;p&gt;所以我坠入「人间」了。&lt;/p&gt;
&lt;p&gt;在堤坝上你看到的是天、是地，是悠悠的江水与层层的群山。在小巷里可就不一样了，早饭一条街！还有老城区嘛，这水泥路是要修修换换了，那就免不了有什么施工现场。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_094452.webp&quot; alt=&quot;“当当当当当”——钻地声&quot;&gt;&lt;/p&gt;
&lt;p&gt;我的本能告诉我，“不想出事就赶紧给我死对面去”。我小心翼翼地穿过马路，又是水泥车又是挖掘机的，还是早点溜号为妙。&lt;/p&gt;
&lt;p&gt;也许真正的「城市漫步」就应该沉到小巷里面，但是我那时哪有这种想法。我想的是我走错路啦，快快，快点回到堤坝上啊！&lt;/p&gt;
&lt;h3&gt;从小巷回堤坝&lt;/h3&gt;
&lt;p&gt;明明地图上面显示堤坝就在眼前了，我却怎么也看不见。终于，转过一个街角，真当是「柳暗花明」。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_095438.webp&quot; alt=&quot;我回来了&quot;&gt;&lt;/p&gt;
&lt;p&gt;啧，这太气派了。这条路我也是第一次来。想到之前顺着堤坝跑步的时候，这里还是一堆破房子，仅在前段有了点要修路的样子。父亲说，等这路修好，之后通行就方便得多了。可是等到我搬家走了，它还是那种若有似无的感觉，没承想今天看见了，还真不错呀。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_095521.webp&quot; alt=&quot;回望「嵊州大桥」&quot;&gt;&lt;/p&gt;
&lt;p&gt;不过到了堤坝上，没什么遮挡，当真是酷热难耐。也许是老天可怜我一个人孤零零地走在这，呼了朵云过来遮着，欸，还有风！真算是天助我也了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_100028.webp&quot; alt=&quot;十点整&quot;&gt;&lt;/p&gt;
&lt;p&gt;路上居然加了个休息的地方，不错。这一坐下来，身体里面的汗就全跑出来了，一看胸前早已湿透了。坐着，我想我们嵊州这好哇，座椅上面都没有什么对抗流浪汉的措施，在这睡一夜也不错。不过又一想，嵊州大概也不会有什么流浪汉，毕竟现在真的太太缺人了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_100542.webp&quot; alt=&quot;东桥&quot;&gt;&lt;/p&gt;
&lt;p&gt;「东桥」的前面还有一座不知道什么名字的「廊桥」，是我和父亲跑步的「第二路线」。那廊桥也算是我看着搭建出来的，不过现在没有时间去看它，等下回吧。&lt;/p&gt;
&lt;p&gt;这「东桥」，也不知道存了多少魂魄……我的意思是，好久以前，在巷子里面还流行着各种五颜六色的霓虹灯的时候，总是有人从这往下跳的。姓甚名谁、什么时候，那我真不清楚，只知道一切都在这「剡溪」中了吧。唉，无情的江水，这罪过居然要让桥来承担？&lt;/p&gt;
&lt;h3&gt;剡溪对岸&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_100924.webp&quot; alt=&quot;「牛」像&quot;&gt;&lt;/p&gt;
&lt;p&gt;这里有一座雕塑，不知道叫什么名字也不知道是什么材质，干脆先叫它「牛」像吧。以前小的时候，就是和父母以前走过桥到这里来玩，和别的小孩子比比谁先爬到牛背上。&lt;/p&gt;
&lt;p&gt;后来在前面的空地上，又架起了一个充气城堡，那么「牛」像就没什么魅力了，大家都去玩充气城堡了嘛。直到有一天，父亲突然拦住我：你已经这么大了，还要玩这种东西啊？毕竟城堡不是免费的。自那以后，我就很少再去了，那个城堡也不见了，只剩这「牛」像，移不动，更搬不走。&lt;/p&gt;
&lt;p&gt;再往前直走，就是那个不知道换了多少次门庭的「鹿山广场」，我没必要去，就直接左拐，冲进花鸟市场——左边的小公园里面。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_101404.webp&quot; alt=&quot;曲径通幽&quot;&gt;&lt;/p&gt;
&lt;p&gt;这公园叫什么名字，我不大记得了。不过它刚进来的地方立了一块牌子告诉我这是「民法典公园」……呃……我想想应该大概不是这个名字……&lt;/p&gt;
&lt;p&gt;还记得以前学校里面发的那种奇异规格的小册子，有一张封面就是这个公园，不过是俯瞰图了。在里面，居然也神奇地存在着一个充气城堡。现在再去看么，自然是没有的了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_101418.webp&quot; alt=&quot;树、草地、人&quot;&gt;&lt;/p&gt;
&lt;p&gt;哇哦，还有人放着舞曲在跳舞呢~不过我不敢举起来光明正大地拍，胡乱拍一张就逃跑了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_101440.webp&quot; alt=&quot;公园舞会&quot;&gt;&lt;/p&gt;
&lt;h3&gt;医院路&lt;/h3&gt;
&lt;p&gt;下来的地方叫「医院路」。我想想这个取名的方法太草率，毕竟原来的「嵊州市人民医院」就在这条路上。不过后面「浙江大学附属第一医院分院」来了，这原来的「人民医院」，就改名成了「嵊州市中医院」。渐渐的，原来的小路也不够通行了，但两侧房子还在，总不能拆了。所以不知道什么时候起，这「医院路」就成了一条单行道。不过这件事，我想想总是在新的「人民医院」出现之前就发生了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_102142.webp&quot; alt=&quot;原来的正门&quot;&gt;&lt;/p&gt;
&lt;p&gt;这里我太熟悉了。小时候体弱多病哇，总是往这里跑。刚好与我之前的住址只隔了一座东桥，所以也还算方便。有幸住过几回医院，甚至还是嵊州市手足口病的「零号病人」，也算是个「嵊州第一了」。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_102234.webp&quot; alt=&quot;现在的正门&quot;&gt;&lt;/p&gt;
&lt;p&gt;以前门诊应该也在这，但是远远没有这么气派。所谓的正门之分，可能只是看哪里人走得多吧。按现在来讲，之前那个可以说是停车场入口之类的东西了。&lt;/p&gt;
&lt;h3&gt;老城墙&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_102916.webp&quot; alt=&quot;左侧为「老国商」，右侧为老城墙&quot;&gt;&lt;/p&gt;
&lt;p&gt;再往前走就到了「老国商」与「文化广场」，中间隔了一段老城墙。没记错的话，应该是原南门应台门的东段城墙。说是老城墙，毕竟也才几百年，还称不上「古」。父亲和我说，这段城墙还是好不容易才保下来的，不然早就和其他段一样被拆掉了。至于其他杂七杂八被拆除再重建的「惠安寺」、「应天塔」之类，就不是我这个毛头小子可以记得住的了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_103115.webp&quot; alt=&quot;老城墙背面&quot;&gt;&lt;/p&gt;
&lt;p&gt;后面这台阶修得挺好，这一小段谁都可以上。呃，不过可能是我走得疲乏了，脚抬得不高；也有可能是刚上的时候直接从旁边跳了上去，是为不敬。就这么短短的一段楼梯，我居然给自己摔了一跤，好险没给自己摔下去。我背着双肩包呢，里面的雨伞当即飞出来，没眨眼已经骨碌下去了。至于我自己，还好手撑得快，就受了点皮外伤，不碍事。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_103246.webp&quot; alt=&quot;从老城墙看「文化广场」&quot;&gt;&lt;/p&gt;
&lt;p&gt;这「文化广场」确实对得起它的名字：早上会有老人家用水笔在地上写书法；下午会有越剧演出；到了晚上更是热闹非凡，大平地用来跳广场舞是最好了，小孩子么可以玩玩轮滑，大人则去旁边的「老国商」买点东西。在这里也不用怕自己的小孩子会被拐走，街坊邻里都照顾着，都安心。至于江湖老大爷的「中国象棋」，那是从白天到下午到晚上不停息。看到右边的林子了吗？他们正躲在那儿呢！&lt;/p&gt;
&lt;p&gt;不过上面说的，都是我记忆中的东西了。那时父亲给我报了个轮滑班，每天晚上就和那几个小塑料圆锥斗智斗勇，看到的大概就是这么个景象。嗯……还有到处都是的小商贩呢！什么气球啦，陀螺啦，竹蜻蜓啦，都是小孩子喜欢的物件。欸欸，可惜我去的时间不太妙，十点半，早不早晚不晚，刚好没人！我只得去找找下象棋的老大爷们了。&lt;/p&gt;
&lt;p&gt;现在是不是这样子，我还真不能打包票。&lt;/p&gt;
&lt;p&gt;一坐下来才发现坏事了。估计是刚刚摔倒那一下太厉害了，给我放在裤兜里面的手机的屏幕都摔碎了。唉，肉是软的可以「以柔克刚」，这「硬碰硬」怎么行？还好，除了莫名其妙把我手机壁纸摔没了，这拍照存储还没大碍。万幸，万幸。&lt;/p&gt;
&lt;h3&gt;剡湖街道&lt;/h3&gt;
&lt;p&gt;穿过「文化广场」，就来到了「剡湖街道」。欸，这不是我们小学春游经过的地方嘛？从城西呼哧呼哧走到这里，去拜访「鹿山公园」或者「城隍庙」，都得往这走。&lt;/p&gt;
&lt;p&gt;同时在这里的。还有另一座小学：「剡山小学」。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_105123.webp&quot; alt=&quot;「剡山小学」&quot;&gt;&lt;/p&gt;
&lt;p&gt;这小学修得确实气派，一看就是个人才辈出的地儿。我关注这个是因为咱班好多大牛都从这出来的，这不你看，里面还有人在上课呐！嗨呀呀，提一嘴啦，我们继续走。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_105459.webp&quot; alt=&quot;猜猜这是哪&quot;&gt;&lt;/p&gt;
&lt;p&gt;没想到绕了一圈，就来到了「西桥」。眼前的这条江不叫「剡溪」，而是「长乐江」了。如果你看过民国二十三年（1934）《嵊县志》县城图的话，就知道这城区一度是在「长乐江」的北岸。那三江口与「澄潭江」南岸，不是荒地就是田地咯。&lt;/p&gt;
&lt;h3&gt;选择&lt;/h3&gt;
&lt;p&gt;跨过「西桥」，就来到了一个十字路口：前面是我心心念念的「老袁炒年糕」，右边则是之前春游来的路，是回「逸夫小学」的。十一点了，现在吃中饭也不是不行……我正琢磨着是前进还是拐弯，看到了一个自助售卖机：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_105752.webp&quot; alt=&quot;就只是一个自助售卖机&quot;&gt;&lt;/p&gt;
&lt;p&gt;好啦，对于我这个很少踏出过家门的人来说，这种东西也算得上新鲜了。想到刚看到这玩意的时候，还是在之前的老家，一二年级吧。从小区东边的小拱门出来向右拐就有一个自助售卖机，再往前那就是家家户户都有一个订奶的小箱子，小时候就是喝这个长大的。&lt;/p&gt;
&lt;p&gt;刚刚好，随身带的一瓶水喝完了，买个酸奶解解渴噻。啧，真甜真清爽。那就没什么可以考虑的了，掉个头，咱们上堤坝，继续走！&lt;/p&gt;
&lt;h3&gt;逸夫小学&lt;/h3&gt;
&lt;p&gt;小学六年可以说是我到现在（2025）最快乐的时光，我肯定得去看看。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_110052.webp&quot; alt=&quot;小学春游路线&quot;&gt;&lt;/p&gt;
&lt;p&gt;还记得小学时从那边走过来，这里还都是水泥路面呢，现在都换成塑胶了，真好真好。&lt;/p&gt;
&lt;p&gt;酸奶很快就喝完了，我急着把手上的垃圾出手，沿着堤坝走了半天却连一个垃圾桶也没有。十一点多，树荫也少得可怜，我且下堤坝去找一隅清凉了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_110644.webp&quot; alt=&quot;这种密匝匝的是什么树&quot;&gt;&lt;/p&gt;
&lt;p&gt;也就路边这小树林可以看看。你且往左边瞟一眼，全都是锁上的车库门，没有店家更不用说行人了，死气沉沉，不拍不拍。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_110849.webp&quot; alt=&quot;「滴翠亭」&quot;&gt;&lt;/p&gt;
&lt;p&gt;没想到这还有个小亭子，以前倒是没有注意。刚好停下来吹吹风。&lt;/p&gt;
&lt;p&gt;右侧又是一个岔路口，从后边的堤坝过去是学校后门，再过去是「长安桥」，对面就是教堂」。 说来奇怪，嵊州市这么个小地方怎么还有基督教堂的。那地方甚是古怪，还记得在小学参加舞蹈社团的时候，晚上从五楼回来是一点灯光也没有的。向走廊窗外望去，黑压压的天空中只有那顶部的十字架红艳艳地亮着，吓死个人。之前还在地上见到过传教单，感觉和「千疑千寻」差不多性质了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_111854.webp&quot; alt=&quot;「逸夫小学」&quot;&gt;&lt;/p&gt;
&lt;p&gt;这应该是嵊州市唯一一所寄宿和走读并存的民办公助小学。嗨呀，就我个人而言，这住校生活真的是太有趣了。小孩子最缺的就是玩伴，那时候八个人一个寝室，早上起来有条不紊轮流洗漱，然后一起到外面做早操、跳大绳，再之后才是吃早饭准备上课。每天吃完晚饭还有一个多小时的自由时间，可以回寝室洗澡啦，或者直接回到教室后面打牌也是可以的。当然，打牌什么的还是太高级了，我们那时的游戏可多了去了，比如在走廊上几个人分成两边，轮流朝对方扔透明胶，若是可以穿过对方的层层阻隔就算得分。这游戏好玩又方便，下课随时可以玩。不过最经典的还得是在美术纸上面画游戏，一般一个寝室一个局，每天晚上就和小说似地推演剧情。管理游戏的是最累的，因为要无时无刻用铅笔橡皮画了再擦擦了再画。但是大家都争着管，毕竟这种机会不是谁都可以有的。&lt;/p&gt;
&lt;p&gt;小学有社团那是真有。除了我之前说的舞蹈社团之外，我还参加了巧手坊、版画社团、航模社团、科学社团。学会了诸如折纸花、刻胶版画、做航模、用棉花糖与意大利面做高塔等等等等稀奇古怪的技术。除此之外还有奥数、语文竞赛、英语竞赛之类。每天通校生们回家的时候，我老是暗暗想着星期五什么时候到来。现在回想，吃过晚饭才是我们住校生的“SHOWTIMES”嘛！&lt;/p&gt;
&lt;p&gt;再往右瞟几眼，发现之前玩航模的水池已经变成荡秋千的地儿了——我想想，这秋千确实更好玩些。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_112001.webp&quot; alt=&quot;小学对岸&quot;&gt;&lt;/p&gt;
&lt;p&gt;对面自然是一些文具店，也就在这里那些车库门才肯打开来透透气。诶，这地方可是通校生的天堂了。每天上学放学的时候都可以到这里消费一番。我们这群住校生就算是想要消费也没有这个机会！后来那群通校生看我们对那些零食「望眼欲穿」，居然打起了倒卖的主意。每天放学出去买来所需的物品，趁着晚上要来上奥数课的功夫以十倍之高的价格售出！啧啧，有人敢卖有人敢买，五块钱一颗的糖也吃得起。我那个时候想哇，这群人真的不会做生意，看我屯一堆，卖一块一颗，抢光他们的市场！&lt;/p&gt;
&lt;p&gt;结果正和奥数老师炫耀我的商业头脑呢，等我回班级的时候，怎么那几个买糖都站到后边去了？什么，你告诉我班主任现在发现了？呜哇，可是那群通校生已经赚了一百多了，我这「未遂」，怎么判？&lt;/p&gt;
&lt;h3&gt;嵊州炒年糕&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_113041.webp&quot; alt=&quot;小学对岸&quot;&gt;&lt;/p&gt;
&lt;p&gt;又走了十分钟，我回到了之前的路口，右拐来到了我心心念念的「老袁炒年糕」。按道理我这个嵊州人，是不必要如此大费周章来找什么「老袁炒年糕」的，毕竟我爸曾说，他的炒年糕就是最正宗的。可是吧，他烧出来的炒年糕又大块又硬，哪里是嵊州炒年糕的弹滑软糯？罢了罢了，且让我当一回「探店」主播，一探究竟！&lt;/p&gt;
&lt;p&gt;「CCTV 探访品牌」，这几个字什么时候加的，有点意思。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_114344.webp&quot; alt=&quot;「15 元」的炒年糕&quot;&gt;&lt;/p&gt;
&lt;p&gt;光这一碗等了我整整十三分钟。上了才知道，我这「15 元」的炒年糕是基础款。像如果你要加糟肉哇，那就是「25 元」的糟肉炒年糕了。唉算了，我还点了一瓶 10 元的饮料（双柚汁你怎么这么贵），加起来也算 25 罢。&lt;/p&gt;
&lt;p&gt;好吃不好吃，我真说不来。对我而言，食物只要方便吃就好，填饱肚子是首要。这正宗的炒年糕果然方便，用不着我一根根啃着了。只可惜烈日下走了半天，胃口着实没有。三五两口下肚饱了，就立刻起身将桌子让给别人——这小地方人还真是多。&lt;/p&gt;
&lt;h3&gt;剡溪大桥&lt;/h3&gt;
&lt;p&gt;要回去了。&lt;/p&gt;
&lt;p&gt;本来还想一路往西，去初中再看看。结果手机电量告罄，来去路途又有将近七八公里，加上初中远比小学难过的多，罢了罢了，便转身向南，回家去了。&lt;/p&gt;
&lt;p&gt;我总算是感觉到了一点台风天的味道。在两侧高楼林立的街道里，狭管效应开始发力，吹得我整个人都要飞上天去！吓人是吓人，爽也是真的爽。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_121951.webp&quot; alt=&quot;看看嵊州第一高楼&quot;&gt;&lt;/p&gt;
&lt;p&gt;如今这路上是真的没人了。我时而跳跃时而转圈。也是，怎么会有人在这个时候，在这个地点，拍一些无关紧要的东西。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_121959.webp&quot; alt=&quot;西望澄潭江水&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_122436.webp&quot; alt=&quot;桥下一条小路&quot;&gt;&lt;/p&gt;
&lt;h3&gt;地下&lt;/h3&gt;
&lt;p&gt;下了「剡溪大桥」，又是一个十字路口。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_122916.webp&quot; alt=&quot;假的「地铁」&quot;&gt;&lt;/p&gt;
&lt;p&gt;以前可没有这个地下「过街行人通道」。想到我之前第一次看到这施工的时候，还以为咱大嵊州要修地铁了呢！可惜空欢喜一场。到最后，就连这「过街行人通道」，也只修了这一条。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_123007.webp&quot; alt=&quot;燃烧生命「本身」&quot;&gt;&lt;/p&gt;
&lt;p&gt;「过街行人通道」里面自然有广告，但是不多，更多的是这种道德楷模的宣传标语。上面这个是让我印象最深刻的。44 800 毫升血液？算到今年也才二十三年。就此一项来说，这哪里是「燃烧着生命的激情与善意」？这分明就是燃烧生命本身！可惜这种宣传我只在地下看见，英雄不应该被放在这里。&lt;/p&gt;
&lt;h2&gt;尾声&lt;/h2&gt;
&lt;p&gt;至此，我短短的「城市漫步」，差不多就要结束了。本以为走了很多很多呢，结果用地图软件标了半天点，也不过区区十公里。想看看微信步数——我想没有一万也有两万了——结果我压根没打开微信运动！啊也，怎么这样。&lt;/p&gt;
&lt;p&gt;写到这里，我才发现我又完成了一次「长征」：博客。我已经写了六千五百个字了，精力耗费程度不亚于再走上一趟。而现在，已然是「城市漫步」结束后的第二天，七月九号了。现在，我这个土生土长的嵊州人，总算是用自己的双脚和纸笔重新丈量了一下自己生活的城市。第一次可能不是那么完美，但能开始并且完成就已经很好。别的富丽堂皇的话我写不出，只能说：&lt;/p&gt;
&lt;p&gt;——「哦，我是这座城市的一个人。」&lt;/p&gt;
&lt;h2&gt;三江口&lt;/h2&gt;
&lt;p&gt;还记得我埋的那个伏笔吗？晚上，我前往三江口，参加同学的聚会：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.saroprock.com/photo/city-walk/20250707_175356.webp&quot; alt=&quot;「外卖」盛宴&quot;&gt;&lt;/p&gt;
&lt;p&gt;我白天走过的街、看过的水、晒过的太阳，此刻都成了一份背景、一份不言而喻的依托，支撑着我，在这里安心地「聚」一下，哪怕只是一次。&lt;/p&gt;
&lt;p&gt;也许城市漫步的终点不是哪一条街，也不是哪一块地标。而是这样一个时刻，你停下了脚步，身边有人，一起说说笑笑。&lt;/p&gt;
&lt;p&gt;终点从不是风景本身，而是——&lt;strong&gt;人&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;城市终究只是壳，人却是魂。&lt;/p&gt;
&lt;p&gt;谨以此篇，记录「城市漫步」。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>今天是我的生日</title><link>https://saro.pub/birthday</link><guid isPermaLink="true">https://saro.pub/birthday</guid><description>生日了，开心一点吧。以后，就是真正的，大人了吧。</description><pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;开始&lt;/h2&gt;
&lt;p&gt;二零零七年六月十七日凌晨，在嵊州这个小城，我，诞生了。那个时候嵊州还有七十多万人呢，我只不过是几千新生儿的一员，太普通，更不用说什么“天生异象”之类的了。&lt;/p&gt;
&lt;p&gt;也许对于我这个年纪的人来说，现在，应该是刚刚高考完，准备享受暑假，上大学的时候。啊，让我想到在幼儿园大班毕业的那个下午&lt;a href=&quot;https://www.saroprock.com/%E6%83%85%E8%8A%82%E6%98%AF%E8%99%9A%E6%9E%84%E7%9A%84%EF%BC%8C%E4%BD%86%E6%98%AF%E8%AF%9D%E7%A1%AE%E5%AE%9E%E6%98%AF%E8%BF%99%E6%A0%B7%E8%AF%B4%E7%9A%84%EF%BC%8C%E6%88%91%E4%B9%9F%E7%A1%AE%E5%AE%9E%E5%A4%9A%E4%B8%8A%E4%BA%86%E4%B8%80%E5%B9%B4%E5%B9%BC%E5%84%BF%E5%9B%AD%E3%80%82&quot;&gt;^1&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;“爸爸爸爸，那么我以后就可以去上小学了吗？”&lt;/p&gt;
&lt;p&gt;“不行哦，你这么小，到时候上小学要被欺负的，我们还要再上一年‘学前班’哦。”&lt;/p&gt;
&lt;p&gt;于是非常不幸的，我在幼儿园就留了级。&lt;/p&gt;
&lt;h2&gt;前十八年&lt;/h2&gt;
&lt;p&gt;如果一周岁是一年，那么确实应该是十八年了。&lt;/p&gt;
&lt;h3&gt;什么是生日&lt;/h3&gt;
&lt;p&gt;说实在的，生日这种东西，我很少在意。我不知道为什么，感觉这种东西，可有可无。没有人记得我的生日，所以我也不记得别人的生日——也许一个反过来，正是因为我不记得别人的生日，不怎么参加类似的生日聚会，所以别人也不会在意我的生日，更何况我自己都不想办什么生日聚会。也这样母亲，总是会召集亲朋好友，聚在一起吃一碗长寿面，这样就算是庆生了。我觉得这样子挺好的，多么简单。&lt;/p&gt;
&lt;p&gt;礼物，几乎没有过。没有，没有就没有呗，我觉得这种东西也是可有可无的嘛。其实还是一个逻辑，因为小时候看的一堆书，导致我对朋友的定义太苛刻了，我找不到什么愿意让我自己送礼物的人。那么我不送礼物，别人当然也不会想到来送给我。我觉得这样子也挺好的，因为如果收到礼物，自己就很害怕，可能一下子就觉得别人对自己太好了，感觉欠了一个天大的人情，怎么也报答不完了。&lt;/p&gt;
&lt;p&gt;这真不是我乱猜想的。前几年有一个人仅仅只是为我写了一封信我就……我就再也忘不掉了&lt;code&gt;@include&lt;/code&gt;。所以这种东西对我来说还是很珍贵的吧。&lt;/p&gt;
&lt;p&gt;其实前面的逻辑，我看了看还是挺有道理的。因为我不怎么参加这种活动，所以这种活动也不会落到我的头上。但我又很奇怪了，一切的开始都要有个源头，这个源头为什么不落到我头上呢？那也当然是有的了……&lt;/p&gt;
&lt;p&gt;总之写了这么些，只是说明自己确实没什么经验，也没有什么期待罢了。不过这次还是不太一样，至少从法律层面上面不一样了，从「礼治」上面也不一样了。我不能期待别人给我什么礼物，那么就自己给自己写一份礼物吧。为别人写一份文章在我这里算是一份最高规格的礼物了&lt;a href=&quot;https://www.saroprock.com/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%98%AF%E3%80%8C%E6%9C%80%E9%AB%98%E8%A7%84%E6%A0%BC%E3%80%8D%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BB%8E%E4%B8%8B%E6%96%87%E7%9A%84%E3%80%8C%E6%A0%87%E5%87%86%E5%AF%B9%E7%A7%B0%E3%80%8D%E6%9D%A5%E7%90%86%E8%A7%A3%E3%80%82%E5%9B%A0%E4%B8%BA%E6%88%91%E6%9B%BE%E7%BB%8F%E8%A2%AB%E4%B8%80%E5%B0%81%E4%BF%A1%EF%BC%88%E4%B9%9F%E5%8F%AF%E4%BB%A5%E7%9C%8B%E4%BD%9C%E6%98%AF%E6%96%87%E7%AB%A0%EF%BC%89%E6%84%9F%E5%8A%A8%E5%BE%97%E4%B8%8D%E5%BE%97%E4%BA%86%EF%BC%8C%E6%89%80%E4%BB%A5%E8%AE%A4%E4%B8%BA%E6%88%91%E7%BB%99%E5%88%AB%E4%BA%BA%E5%86%99%E4%BF%A1%E4%B9%9F%E5%8F%AF%E4%BB%A5%E2%80%9C%E6%8A%8A%E5%88%AB%E4%BA%BA%E6%84%9F%E5%8A%A8%E5%BE%97%E4%B8%8D%E5%BE%97%E4%BA%86%E2%80%9D%EF%BC%8C%E4%B9%9F%E5%B0%B1%E6%98%AF%E5%BF%83%E7%81%B5%E6%8E%A5%E8%A7%A6%E7%9A%84%E3%80%8C%E6%9C%80%E9%AB%98%E8%A7%84%E6%A0%BC%E3%80%8D%E3%80%82&quot;&gt;^2&lt;/a&gt;，虽然之前有&lt;strong&gt;一个人&lt;/strong&gt;对我这种行为表示相当反感，但是我还是要写，最多也不过是在心里默默伤心而已。&lt;/p&gt;
&lt;h3&gt;我是谁&lt;/h3&gt;
&lt;p&gt;我一直觉得这是一个很蠢蛋的问题，但是我确实答不上来。既然不清楚，那么干脆不回答，把什么“关于”页面全部删掉。如果别人要了解我，那就请看我写过的十几万字吧！于是甩出一堆数据做了结。&lt;/p&gt;
&lt;p&gt;我说写日记是为了了解自己。写了这么久了，已经写了三百二十六篇&lt;a href=&quot;https://www.saroprock.com/%E5%88%B0%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%94%E5%B9%B4%E5%85%AD%E6%9C%88%E5%8D%81%E5%85%AD%E6%97%A5%E4%B8%BA%E6%AD%A2%E3%80%82&quot;&gt;^3&lt;/a&gt;。这数据实在是太多了，我觉得一下子发送这么多数据是一件很不礼貌的事情，还是得面对这个问题，用自己的话总结一下，我，是谁？&lt;/p&gt;
&lt;h3&gt;我的性格&lt;/h3&gt;
&lt;p&gt;我很讨厌那些人格测试，当然不会甩下几个字母一走了之。&lt;/p&gt;
&lt;h4&gt;自我洗脑&lt;/h4&gt;
&lt;p&gt;这大概不算是一个「性格」，但是了解这个可以解释很多东西。不管是小时候从家长、老师那里得来的教诲，还是以后从书籍、网络上面自己获取的行为准则，好像都在告诉小时候的我一件事情：人要去博得别人的喜爱与认可，要博得喜爱就要做一个乖孩子，要博得认可就要取得成绩。所以这种东西就深深地根植在我的脑海，那么反过来又开始引导着我去有选择性地吸收网络上面的信息&lt;a href=&quot;https://www.saroprock.com/%E6%88%91%E4%BB%8E%E7%9B%B8%E5%BD%93%E5%B0%8F%E7%9A%84%E6%97%B6%E5%80%99%E5%B0%B1%E6%9C%89%E4%BA%86%E7%8B%AC%E7%AB%8B%E6%8E%A5%E8%A7%A6%E7%BD%91%E7%BB%9C%E7%9A%84%E6%9D%83%E5%88%A9%EF%BC%8C%E6%9C%89%E5%BE%88%E5%A4%9A%E4%B8%9C%E8%A5%BF%E6%98%AF%E4%BB%8E%E9%82%A3%E4%B8%AA%E6%97%B6%E5%80%99%E5%AD%A6%E4%B9%A0%E5%B9%B6%E4%B8%94%E8%AE%A4%E5%8F%AF%E3%80%81%E7%89%A2%E8%AE%B0%E7%9A%84%E3%80%82%E5%8D%B0%E8%B1%A1%E6%9C%80%E6%B7%B1%E5%88%BB%E7%9A%84%E6%98%AF%E6%9C%89%E4%B8%80%E9%83%A8%E5%85%B3%E4%BA%8E%E3%80%8A%E4%B8%89%E5%AD%97%E7%BB%8F%E3%80%8B%E7%9A%84%E5%8A%A8%E7%94%BB%E7%89%87%E2%80%94%E2%80%94%E9%82%A3%E6%97%B6%E5%80%99%E7%9A%84%E7%BD%91%E7%BB%9C%E8%BF%98%E6%B2%A1%E6%9C%89%E5%83%8F%E7%8E%B0%E5%9C%A8%E8%BF%99%E8%88%AC%E3%80%82%E7%8E%B0%E5%9C%A8%E5%B0%8F%E5%AD%A9%E5%AD%90%E5%88%B7%E7%9A%84%E9%82%A3%E7%A7%8D%E5%B0%8F%E8%A7%86%E9%A2%91%EF%BC%8C%E8%99%BD%E7%84%B6%E5%B9%B6%E4%B8%8D%E4%B8%80%E5%AE%9A%E5%B0%B1%E6%AF%94%E6%88%91%E9%82%A3%E4%B8%AA%E6%97%B6%E5%80%99%E7%9A%84%E2%80%9C%E8%87%AA%E6%88%91%E6%B4%97%E8%84%91%E2%80%9D%E6%9B%B4%E4%B8%8D%E5%A0%AA%EF%BC%8C%E4%BD%86%E6%98%AF%E5%9C%A8%E6%88%91%E7%9C%8B%E6%9D%A5%E8%BF%98%E6%98%AF%E7%9B%B8%E5%BD%93%E5%AE%B3%E4%BA%BA%E7%9A%84%EF%BC%8C%E5%9B%A0%E4%B8%BA%E5%AE%83%E7%A9%BA%E6%97%A0%E4%B8%80%E7%89%A9%E3%80%82&quot;&gt;^4&lt;/a&gt;。这种先被学校、父母定性而后又自我学习的过程，让我形成了最初的价值观。而这些学习到的东西，也确确实实带来了它们所声明的“好处”。我从小就被老师认为是一个乖孩子，街坊邻居也都夸我懂事，那么这样子就更加激励着我，继续学习。&lt;/p&gt;
&lt;p&gt;那么以此推广出去，我说啊，这社会是多么多么得美好哇；这人性，是多么多么得善良啊！我就这样子以「别人家的孩子」的身份，渡过了一个非常满足，非常自由的童年生活。&lt;/p&gt;
&lt;p&gt;后来开始审视自己，就发现自己是相当保守且封建的一个人。我觉得“封建”这个词语用得非常好。但是作为一个活人，那些被封建礼教世俗道德限制的事情，往往就是我这种小孩子非常喜欢的事情。别人当然不会像我这样子自我洗脑，以「追随圣人者」的身份自居。每当看到别人逾越规矩做那种事情时，我的心里有一种来自“正义”的怒火：凭什么那些不遵守规矩的人反而可以获得我不能得到的东西？凭什么我这种守规矩的人只能获得家长与老师的“施舍”？&lt;/p&gt;
&lt;p&gt;这个矛盾一直贯穿始终。再加上后面视野的日渐开阔，我发现这个社会也不完全那么美好，这种无可争辩的事实我再怎么洗脑也没有用了。但很可惜，这种自我洗脑已经深深地影响了我，深入骨髓。我可以体会到这种感觉，但是我不能摆脱，当然也时时被影响。&lt;/p&gt;
&lt;p&gt;说到底，这是因为我从心底，还是向往着那个美好的社会，还是认同那一套“自我约束”的。&lt;/p&gt;
&lt;h4&gt;法定量度&lt;/h4&gt;
&lt;p&gt;通过&lt;code&gt;自我洗脑&lt;/code&gt;，我获得了一套&lt;code&gt;法定量度&lt;/code&gt;。以小孩子简单的视角来说，在量度之内的就是好，就是正确；在量度之外的就是坏，就是错误。这真的很有用，我这个量度尺可以说非常智能，结合了封建、道德、法律、习惯等等各种东西。有了这个工具，我等于有了一个非常明确的方向：我要做好的事情对的事情，反对不好的事情。这种「明辨是非」的能力，也是我从小被认为“成熟”的原因之一。&lt;/p&gt;
&lt;p&gt;如果是在《乡土中国》里面的那种乡土性的社会，那应该可以用到我老死。问题就是现在这个社会不一样了，人，太多了；范围，太大了；变化，太快了。社会变化得这么快，那些封建、道德、法律、习惯，也会改变。可是我的量度尺已经成形，里面装好的东西改不动怎么办？这个世界不再是非黑即白的了，这个世界出现了灰色！我反过来受到了父母与老师的告诫：你啊，不要这么执着对，与错！&lt;/p&gt;
&lt;p&gt;我很奇怪，不是你们告诉我，要做一个好孩子、乖孩子，要做正确的事情，追寻圣人的指引吗？&lt;/p&gt;
&lt;p&gt;我认为我没变，那就只能是他们变了。于是&lt;code&gt;自我洗脑&lt;/code&gt;又开始了：我认为我手握真理，也把这一套量度沿用到现在。&lt;/p&gt;
&lt;h4&gt;自我否定&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;法定量度&lt;/code&gt;可以丈量一切事物，当然可以丈量我自己。但是我是小孩子，小孩子是不可能犯错的。可我我同时又是「追随圣人者」，是不能犯错的。那么拿这&lt;code&gt;法定量度&lt;/code&gt;一量，只能报出“错！错！错！”。我成了要被消除的事物！这怎么办？那我当然是不能消除自己的，于是我就否定自己。&lt;/p&gt;
&lt;p&gt;只要我敢于否定自己，我就可以原谅自己的错误。从某种意义上，这放纵了我自己，但是我还是会要求自己，只是这程度远远没有那么大了，因为我不用承担被消灭的风险了。所以我要说的是，&lt;code&gt;自我否定&lt;/code&gt;并不单纯是消极的。应该说，这是我手执&lt;code&gt;法定量度&lt;/code&gt;必须获得的代价。&lt;/p&gt;
&lt;p&gt;敢于承认自己的错误才能成长，不是吗？&lt;/p&gt;
&lt;h4&gt;标准对称&lt;/h4&gt;
&lt;p&gt;所谓对称，就是我会以同样的标准去要求自己，要求别人。这个“要求”可以换成很多词，比如“审视”、“评判”之类。举个例子，我在网上聊天的时候，就深刻地体会到了自己的无能：面对别人的痛苦，我只能隔着屏幕安慰，除此之外什么也做不了。因为我什么也做不了是客观事实，我无法再要求更多了！所以这时我的标准就是，只要我能安慰别人就好了，我体谅、照顾别人就好了。那么在我向别人倾诉这种事情的时候，我的期望也就只是别人安慰我一下就好了。因为我不能在这种情况下做什么，也不会要求别人做什么。获得这种似有似无的情感价值，那我也就知足了，接下来的，就是整理好自己的心情，去面对自己要解决的事情&lt;a href=&quot;https://www.saroprock.com/%E6%89%80%E4%BB%A5%E5%A6%82%E6%9E%9C%E6%9C%89%E4%BA%BA%E8%B4%A8%E9%97%AE%E6%88%91%EF%BC%9A%E4%BD%A0%E9%99%A4%E4%BA%86%E8%AF%B4%E8%BF%99%E4%BA%9B%E8%BF%98%E4%BC%9A%E5%81%9A%E4%BB%80%E4%B9%88%E5%91%A2%EF%BC%9F%EF%BC%81%E6%88%91%E4%BC%9A%E5%BE%88%E9%9A%BE%E8%BF%87%EF%BC%8C%E5%9B%A0%E4%B8%BA%E6%88%91%E7%A1%AE%E5%AE%9E%E4%B9%9F%E5%81%9A%E4%B8%8D%E4%BA%86%E4%BB%80%E4%B9%88%E4%BA%86%E3%80%82%E6%9F%90%E7%A7%8D%E7%A8%8B%E5%BA%A6%E4%B8%8A%EF%BC%8C%E8%BF%99%E4%BC%9A%E5%AF%BC%E8%87%B4%E6%88%91%E7%9A%84%E6%A0%87%E5%87%86%E8%BF%9B%E4%B8%80%E6%AD%A5%E9%99%8D%E4%BD%8E%EF%BC%8C%E4%B9%9F%E5%B0%B1%E6%98%AF%60%E8%87%AA%E6%88%91%E5%90%A6%E5%AE%9A%60%EF%BC%8C%E6%9D%A5%E9%98%B2%E6%AD%A2%E8%87%AA%E5%B7%B1%E5%B4%A9%E6%BA%83%E3%80%82&quot;&gt;^5&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;反过来也是一样的。如果一个人对我非常无理，那我也不会给他什么好面子。这种&lt;code&gt;标准对称&lt;/code&gt;，其实和上面&lt;strong&gt;什么是生日&lt;/strong&gt;那一段是同一个逻辑。&lt;/p&gt;
&lt;p&gt;不过，这种&lt;code&gt;标准对称&lt;/code&gt;其实会带来一个问题，就是可能会导向“过于苛刻”的印象。比如我每天早起吧，通过&lt;code&gt;自我否定&lt;/code&gt;，我这人已经是非常低劣了。那么就这么一个低劣的人，还可以早起，你这个人不早起，岂不是连我都不如？当然这个量度不是随便用的，我会衡量其代价。如果我在陌生人面前这样子，那显然是没事找事，我岂会不识趣。但是如果是我父亲呢？&lt;/p&gt;
&lt;p&gt;我可不能容忍我父亲比他低劣的儿子还要低劣，所以在之前，我总说他，你凭什么起得比我晚？当然这只是一个很小的缩影，推广出去可以导致很大的不愉快。只是事情多了，我也会觉得，这样子真的是有点“不识趣了”，我也在尝试慢慢修改这种「对称」&lt;a href=&quot;https://www.saroprock.com/%E5%85%B6%E5%AE%9E%E5%8F%AF%E4%BB%A5%E7%9C%8B%E5%87%BA%E6%9D%A5%EF%BC%8C%E6%88%91%E4%B9%8B%E5%89%8D%E5%86%99%E7%9A%84%E2%80%9C%E4%B8%8D%E4%BC%9A%E5%9C%A8%E9%99%8C%E7%94%9F%E4%BA%BA%E9%9D%A2%E5%89%8D%E8%BF%99%E6%A0%B7%E5%AD%90%E2%80%9D%EF%BC%8C%E5%B0%B1%E6%98%AF%E5%B0%8F%E6%97%B6%E5%80%99%E8%BF%99%E7%A7%8D%E4%BA%8B%E6%83%85%E6%90%9E%E5%A4%9A%E4%BA%86%E5%AD%A6%E4%B9%96%E4%BA%86%EF%BC%8C%E4%B8%8D%E8%A6%81%E6%B2%A1%E4%BA%8B%E6%89%BE%E4%BA%8B%E2%80%A6%E2%80%A6%E4%BA%8E%E6%98%AF%E9%80%9A%E8%BF%87%60%E8%87%AA%E6%88%91%E5%90%A6%E5%AE%9A%60%EF%BC%8C%E4%BB%A5%E4%B8%80%E4%B8%AA%E5%BE%AA%E7%8E%AF%E7%9A%84%E6%96%B9%E5%BC%8F%E9%99%8D%E4%BD%8E%E4%BA%86%E8%87%AA%E5%B7%B1%E6%A0%87%E5%87%86%E6%9D%A5%E5%85%BC%E5%AE%B9%E4%BB%96%E4%BA%BA%E3%80%82&quot;&gt;^6&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;小学四年级的班主任曾经把我拉出来说过一通话。他说，我知道你很听话懂事，但是你不能要求每个人都像你一样，你会把自己搞垮的。&lt;/p&gt;
&lt;p&gt;我那个时候很疑惑啊！我明明是帮你在管理班级，你反而把我拉出来，这算是什么事情？&lt;/p&gt;
&lt;h4&gt;自我妥协&lt;/h4&gt;
&lt;p&gt;一次次的碰壁，让我终于把标准缩小到了自己。我无法改变别人，无法改变社会，我只能改变我自己。&lt;/p&gt;
&lt;p&gt;我是一个成熟的人——小时候大家就这么说我——所以我理应承担更多的责任。我比别人年龄大，所以我应该让着小孩子。这种&lt;code&gt;自我妥协&lt;/code&gt;实际上给我带来了非常非常多的委屈——我难道不也是一个小孩子？你们这群大人凭什么不妥协妥协？但是他们有来着血缘以及社会的权利，我也无法改变。所以我还是只能，改变自己。&lt;/p&gt;
&lt;p&gt;后来我学会了一个技能。我学会了忘记，我会忘记不开心的事情，只有情感留下来了。&lt;/p&gt;
&lt;h4&gt;偏执情节&lt;/h4&gt;
&lt;p&gt;现在是二零二五年六月十六日十一点半，离我生日可以说只有半个小时了。我没时间写了，所以就算了吧。你只要记着就可以了。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;自我洗脑&lt;/code&gt;告诉我只要坚持就可以得到自己想要的东西，我也从中获得了很多正向的激励。但是我这不是「坚持」，我是「偏执」。既然变成了偏执，想必不是什么好事情。&lt;/p&gt;
&lt;p&gt;不过你看，我现在想不写就不写了，某种意义上也学会渐渐放下了。&lt;/p&gt;
&lt;h3&gt;我的生活&lt;/h3&gt;
&lt;p&gt;我每天都在生活，当然在生活。可是我却发现我在很长一段时间里面都没有生活。如果你看过&lt;a href=&quot;https://www.saroprock.com/blog/mains&quot;&gt;这篇文章&lt;/a&gt;，你就会知道我之前甚至连我喜欢吃什么喜欢穿什么都回答不上来。我觉得这是最贴近生活的问题没有了，可是我却从来没有想过。如此一个人，怎么能说在生活呢？&lt;/p&gt;
&lt;p&gt;我现在的生活很简单，也很幸福。我有两个朋友，不管比我大点还是小点，有点难为情地说，我把他们看作是我的母亲一样。为什么？因为我的母亲早就不和我生活在一起了。我的父亲当然也不是一个温柔的人。虽然我其实心里很明白，小时候打我骂我的，恰恰是现在特别疼我的母亲。可是我的母亲既然不在，那就允许我让我想得温柔一点吧。我的&lt;code&gt;偏执情节&lt;/code&gt;让我拥有了几段时间跨度非常长的友谊，长的时间跨度又让我对他们有了一种信任，一种可以依靠的感觉。虽然我曾经“偏执”错了人，虽然我曾经也不会表达我的情感。可正像我日记里面写的一样，我只要爱那些爱我的人就好了。&lt;code&gt;自我否定&lt;/code&gt;让我学会了知足，在这种低欲望的情况下，我又可以有这么放心的依靠，那我当然是过得非常幸福了。&lt;/p&gt;
&lt;p&gt;两年前开始写日记以来，从刚开始的无从下笔，到现在，我真的是怎么写也写不完了。我常常觉得少写了很多东西，但是时间不允许，这一页纸也放不下。我不能把一堆数据一下子抛给别人，但是可以「细水长流」。这样子发现生活、记录生活、分享生活……我想，我真的，找到了自己的生活。&lt;/p&gt;
&lt;h3&gt;我的梦想&lt;/h3&gt;
&lt;p&gt;我说，我要成为一个温柔的人，一个可爱的人。因为我父亲不温柔，因为那些温柔的人给了我整理好自己的心情的勇气。对陌生人温柔，是现代伦理告诉我的；对朋友忠诚，则是封建礼教告诉我的。&lt;/p&gt;
&lt;p&gt;其实我还有一个很蠢的梦想。我的&lt;code&gt;偏执情节&lt;/code&gt;发现坚持并不能得到所有想得到的东西。但是我现在的&lt;code&gt;法定量度&lt;/code&gt;已经不怎么用了，我的欲望已经很低了。作为劳动委员的我，在打扫卫生的时候，发现干家务、扫地之类的事情，那真的就是只要坚持就可以做到的事情了。有什么灰尘，扫了拖了便是。如果不干净，那就不要嫌脏，弯腰下地拿抹布用手擦。如果还是除不掉，拿一把铲刀总能了事。我想，我以后要是做一个家庭主夫多好，把自己的小家打扫好，做自己喜欢的饭菜，等着自己的爱人归家，感觉是一件非常幸福的事情——当然，这太过于理想了。&lt;/p&gt;
&lt;h2&gt;今天是我的生日&lt;/h2&gt;
&lt;p&gt;其实在生日的前几天，我一直在哭。&lt;/p&gt;
&lt;p&gt;曾经以为自己很成熟，可是真的要成为大人了，才发现自己不过是一个小孩子。&lt;/p&gt;
&lt;p&gt;你看我之前写的文字，都是说自己是小孩子。我之前的抱怨，也只是问：我明明是一个小孩子，凭什么……&lt;/p&gt;
&lt;p&gt;可是我要长大了，今天是我的生日，我的成人日。我以后就再也不能说，我是一个小孩子了，我再也不能推卸那些本不应该属于我的责任，因为我，真的变成一个大人了。&lt;/p&gt;
&lt;p&gt;我很难过，我太早开始回忆过去，我不想长大……&lt;/p&gt;
&lt;p&gt;可是生日嘛……总是要开心的……那么请真诚的祝福我，“生日快乐”吧！&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>电源</title><link>https://saro.pub/mains</link><guid isPermaLink="true">https://saro.pub/mains</guid><description>一封回忆，记录在遗忘之前</description><pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;开始&lt;/h2&gt;
&lt;p&gt;我发神经似的坐下来，开始给一个我自己都不知道是不是，确定存在的人，写文字。我说过我最不喜欢的就是那些“不确定”，所谓的欺骗或虚假。如果你还记得，应该知道我曾经在若干人的注视下写了一篇四、五千字的长文，里面就有她的影子。我说，那几年我也过得很虚无，觉得自己好没用，好像什么都做不到。我只能眼巴巴地看着我所想象，或者说我曾经被教育的，那个美好的世界在我眼前一点点地被撕裂，被那些肮脏的东西玷污。我没用，当然没用，甚至连我自己这一关都快过不去了。我唯一能做的，就是告诉自己，那都是假的，是骗人的，是博取同情的，是无聊的人玩味别人的手段。&lt;/p&gt;
&lt;p&gt;可马上欺骗自己的小伎俩也派不上什么用场了，因为我立刻遇到了一个我只能认为是真的事情，也许是灾难。我当然明白这个世界上肯定会有类似的悲剧，但是它们难道不应该在外面吗，为什么会在这里？&lt;/p&gt;
&lt;p&gt;后来我写了那篇文章，但是那个时候她已经不在了。对受难者的同情……我的刀剑绝不对谎言手下留情。可我所认定的他却不明白我的意思。我是一个残酷、冷血的人吗？我想不是，我想成为一个可爱的人……最痛苦的莫过于，我知道是我先放的手——这种虚无缥缈的寄托当然有一天会结束——我知道我自己听话懂事的外表下其实也同他们一般，像社会教育于我的，那样黑暗。我对他们说过，我远远不及他们，因为我不敢承认，不敢迈步，所谓好的坏的对的错的只是等着别人来点破，很被动，远远不够强大。&lt;/p&gt;
&lt;p&gt;可能也是因为这样觉得自己很幸运，可以遇到那么几个勇敢的人。呵呵……勇敢么……我又想想，这似乎是迫不得已。如果我不是生在这个与世隔绝的小城，如果我是那些故事的主人公，我也不得不坚强，在明知对方做不了什么的情况下，还要保持笑颜。&lt;/p&gt;
&lt;p&gt;这里没有谎言，没有欺骗。我情愿那些不幸是真实的。&lt;/p&gt;
&lt;p&gt;故事要开始了——我惊奇地发现自己丧失了讲故事的，像以前一样的从容不迫。曾以为那篇文章已是痛苦，现实却是一篇比一篇更痛苦。不过没关系的，我还是个小孩，哪里来这么多痛苦呢。说真的，我已经很幸运了，就让故事化作「Memory」&lt;a href=&quot;https://www.saroprock.com/%E8%BF%99%E4%B8%AA%E6%89%80%E8%B0%93%E7%9A%84%E3%80%8CMemory%E3%80%8D%E5%85%B6%E5%AE%9E%E6%98%AF%E4%B8%BA%E4%BA%86%E5%A5%91%E5%90%88%E4%B9%8B%E5%89%8D%E7%9A%84%E5%8D%9A%E5%AE%A2%E8%80%8C%E5%8F%96%E7%9A%84%E4%B8%80%E4%B8%AA%E5%88%86%E7%B1%BB%E5%90%8D%E5%AD%97%E3%80%82%E6%9C%AC%E6%9D%A5%E6%98%AF%E6%89%93%E7%AE%97%E7%94%A8%E6%9D%A5%E5%AD%98%E6%94%BE%E8%BF%99%E7%A7%8D%E5%9B%9E%E5%BF%86%E6%80%A7%E8%B4%A8%E7%9A%84%E6%96%87%E7%AB%A0%E7%9A%84%EF%BC%8C%E4%BD%86%E6%98%AF%E5%9B%A0%E4%B8%BA%E6%88%91%E5%86%99%E5%BE%97%E5%A4%AA%E6%85%A2%EF%BC%8C%E7%8E%B0%E5%9C%A8%E5%8D%9A%E5%AE%A2%E5%85%A8%E6%94%B9%E4%B8%AD%E6%96%87%E4%BA%86%EF%BC%8C%E8%BF%99%E4%B8%AA%E5%88%86%E7%B1%BB%E4%B9%9F%E5%B0%B1%E4%B8%8D%E5%A4%8D%E5%AD%98%E5%9C%A8%E4%BA%86%E3%80%82&quot;&gt;^1&lt;/a&gt;，写下来，记下来吧。&lt;/p&gt;
&lt;h2&gt;只是一场梦&lt;/h2&gt;
&lt;p&gt;端午节，坐在回老家的车上，眯着眼睛，我的脑海中突然浮现起这篇没写几个字的文章来。从年初开始企划，再到四月十九号写下第一段，到现在，我已经不知道过去了多久。这一段时间，我一直在「完美主义」的圈子里面打转，深刻地明白我自己完全是「害怕失败」，而不是「追求完美」。单看这件事来说，大概是之前写了几篇自以为还不错的文章，反而不敢写了，害怕新写的达不到之前的高度，那么假装忘记，就永远不会失败了。&lt;/p&gt;
&lt;p&gt;也许是太累了，我不知怎的就睡着了。我好像做了个梦，梦到一个在我眼里几乎完美的女孩——也许青春期的少男总是会有这些不切实际的幻想。她不像是普通的女孩子，她喜欢编程，从 Scratch 到 Unity，她脑子里总是有很多想法，并且有能力将它们变成现实。她还喜欢建模、作曲、绘画，学过乐器、舞蹈，去过世界各地旅游。啊！可她又多么像是一个可爱的女孩子，会穿很多可爱的衣服、烧可爱的饭菜……这就是完美吗？大概是吧，没有什么比梦更会编织美妙的幻想了。她为我写了一首曲子，甚至给我，和她自己，捏了两个小模型：“诶嘿，这就是我和你呀~”可能那个时候的我还没有那么恐惧，毕竟梦里的我还在外地培训呢&lt;a href=&quot;https://www.saroprock.com/%E4%BB%8E%E9%AB%98%E4%B8%AD%E6%8F%90%E5%89%8D%E7%8F%AD%E5%88%B0%E9%AB%98%E4%B8%80%E7%9A%84%E9%82%A3%E4%B8%80%E4%B8%AA%E6%9A%91%E5%81%87%EF%BC%8C%E6%88%91%E5%9C%A8%E6%9D%AD%E5%B7%9E%E4%BB%A5%E5%8F%8A%E5%B8%B8%E5%B7%9E%E4%B8%8A%E8%AF%BE%EF%BC%882023%EF%BC%89%E3%80%82&quot;&gt;^2&lt;/a&gt;。我觉得我也应该做些什么，回来后，我给她的头像加了一对猫耳与一条尾巴——是可爱的猫猫哦！她很开心地换上了。“耳朵里要多加些小撮毛哦。”这句话，那时的我好像，忘记了。&lt;/p&gt;
&lt;p&gt;实际上，画这一幅，是她求了好几次之后的。我也想早点画哇，可是人在外面，没有板子，做不到……&lt;/p&gt;
&lt;p&gt;梦，是很难记得清的。我现在到底是要写我的不幸呢，还是要写她的不幸呢？也许我应该写写，她到底是不是真的：如果是真的，世界上就多了一段美好的记忆，与一个痛苦的人；如果是假的，那就仅仅是一段美好的记忆吧……可是真的美好么？大概只是「Rosy retrospection」[^3]在起作用吧。我常常经历一些不开心的事情，当然这种事情谁都有，当然谁都得有个方法去治愈自己。我逐渐养成了“健忘”的能力，不管今天有多么伤心难过，只要睡上一觉，什么都忘光了，只有情感还留着。我只知道我很难过，却不知道为什么难过。既然没有为什么，那难过也只是伤害自己。现在再回头望，只有那些美好的事情与难过的情感吧。&lt;/p&gt;
&lt;p&gt;[^3]: 玫瑰色回忆是&lt;strong&gt;一种心理学现象，指的是对过去的回忆比实际经历的更加积极&lt;/strong&gt; 。人类记忆的高度不可靠性已得到充分证实，心理学家也对此深信不疑。一些研究提出了“蓝色回忆”，它也会夸大负面情绪。&lt;/p&gt;
&lt;p&gt;我当然相信她是真的，她的那首送给我的曲子，我还记得呐。&lt;/p&gt;
&lt;h2&gt;悲剧中挣扎&lt;/h2&gt;
&lt;p&gt;我曾经说过一句话，我认识好朋友，都是从悲剧开始的。只有当两个人都处在巨大的痛苦中时，才会把自己掏心窝子的话都一股脑地说出去。呵呵，毕竟互联网上没有代价，最深厚的情感，就用这么脆弱的方式链接着吧。&lt;/p&gt;
&lt;p&gt;那时候，她还在病房中躺着。大概是疫情开始的前几年吧，她身子本来就弱，怎么经得起？好几次，死神都快把她夺走了，而我只能干看着。头一次觉得自己这么没用，我锤着屏幕，可是自己又能做什么呢？她说她很艰难地用一根指头和我发信息，我真想说，还是不要给我发了，可是我自己却没有——为什么？我想你应该明白，是个人，应该明白。至于那个时候我怎么怎么伤心，我真的想不起来了，你知道的，我会把它们通通忘记，直到连自己也找不回。&lt;/p&gt;
&lt;p&gt;如果说病痛是随机又无法避免的悲剧，那么剩下的，只能是上天的玩笑，或者恶意……&lt;/p&gt;
&lt;p&gt;她太完美了，太完美了。她是一个花瓶，太美丽的花瓶，换谁不愿多看两眼。靠近她的人舔舐她，爱慕她的人凌辱她，得不到她的人摔碎她——梦里的东西都是很易碎的。我却只是被锁在展览室之外，隔着厚厚的玻璃观看这场盛大的表演&lt;a href=&quot;https://www.saroprock.com/%E5%86%99%E5%AE%8C%E8%BF%99%E4%B8%80%E6%AE%B5%EF%BC%8C%E6%88%91%E6%80%BB%E7%AE%97%E6%98%AF%E8%A7%A3%E8%84%B1%E4%BA%86%E3%80%82%E6%88%91%E6%83%B3%E8%BF%99%E6%98%AF%E6%88%91%E8%83%BD%E5%81%9A%E5%88%B0%E7%9A%84%E6%9E%81%E9%99%90%E4%BA%86%E3%80%82%E6%88%91%E7%9C%9F%E7%9A%84%E4%B8%8D%E7%9F%A5%E9%81%93%E6%80%8E%E4%B9%88%E5%8E%BB%E5%86%99%E8%BF%99%E7%A7%8D%E4%BA%8B%E6%83%85%E3%80%82&quot;&gt;^4&lt;/a&gt;。啊！我又能做什么呢？我跪下，痛斥自己的无能。这时，脑海中的另一个我走出来，肆无忌惮地嘲笑我，你难道敢保证自己进去不会和他们一样！？虚伪！&lt;/p&gt;
&lt;p&gt;我骗自己，这不是玻璃，这只是一块银幕，一个恶搞。啊对啊，现实中怎么会发生这种事情呢，怎么会呢，怎么会呢，怎么会呢。&lt;/p&gt;
&lt;h2&gt;逃避与转身&lt;/h2&gt;
&lt;p&gt;我时常觉得自己没用，恐惧是我的常态，自卑是我的底色。她曾经问了我两个问题，我记得很清楚：&lt;/p&gt;
&lt;p&gt;“你平常喜欢吃什么呢？”&lt;/p&gt;
&lt;p&gt;啊啊，吃，吃什么？这真的是我从来不考虑的问题。学校里吃的都是统一提供的饭菜，哪有什么可选的呢&lt;a href=&quot;https://www.saroprock.com/%E9%82%A3%E4%B8%AA%E6%97%B6%E5%80%99%E8%BF%98%E6%98%AF%E5%88%9D%E4%B8%AD%EF%BC%8C%E6%B2%A1%E6%9C%89%E7%82%B9%E9%A4%90%E5%88%B6%E5%BA%A6%EF%BC%8C%E5%B0%B1%E6%98%AF%E7%BB%99%E4%BB%80%E4%B9%88%E5%90%83%E4%BB%80%E4%B9%88%E3%80%82&quot;&gt;^5&lt;/a&gt;？家里面也是有什么吃什么，我也没有什么喜欢与不喜欢的分别……&lt;/p&gt;
&lt;p&gt;“啊，那你平常喜欢穿什么衣服呢？我喜欢穿……（后略）”&lt;/p&gt;
&lt;p&gt;穿什么……我一直都穿校服哇。就算是回家了，这么点时间，穿穿校服也就得了……&lt;/p&gt;
&lt;p&gt;我他妈真没用！有人愿意关心我的生活，我却连最基本的吃穿都回答不上来！我突然觉得我从来没有好好生活过，没有自己决定的时间，或者说，我好像从来都不关心这种事情，好像无关紧要。但是现在她问了，那就有关紧要了。太难过了，可是要是哭就显得自己更没用，我总不能让她来安慰我，这算什么样子，我应该保护她，可是，我什么也做不到。&lt;/p&gt;
&lt;p&gt;我觉得我和她不是两个世界的人。也是，毕竟是梦境，本来就不是一个世界。她说她去过俄罗斯，给我讲香港的事情，我对这些都一无所知。为了使自己不那么没用，我在电脑上开了个备忘录，如果有一天又梦到了，那就做些笔记，好记性不如烂笔头嘛。&lt;/p&gt;
&lt;p&gt;我真的喜欢她，如果她不是梦呢？但是之前发生的事情，我觉得我这种想法太龌龊了、太恶心了。我根本就不配，也不应该去接手。那种想法，也许只能藏在我的心底了。&lt;/p&gt;
&lt;p&gt;两个人都很默契地没有迈出那一步。可有一天，好像变了……“Maple，喜欢你喵”这句话不是私聊，直接发在我群里的。我的脑子要炸了，就这么一句话，还有别的，很多很多……当这些我曾经梦寐以求&lt;a href=&quot;https://www.saroprock.com/%E8%AF%B4%E7%9C%9F%E7%9A%84%EF%BC%8C%E6%88%91%E5%86%99%E8%BF%99%E7%A7%8D%E4%B8%9C%E8%A5%BF%E4%B9%9F%E6%98%AF%E6%8F%AD%E8%87%AA%E5%B7%B1%E8%80%81%E5%BA%95%E4%BA%86%E3%80%82%E2%80%A6%E2%80%A6%E4%BA%BA%E6%9C%89%E8%BF%99%E7%A7%8D%E6%83%B3%E6%B3%95%EF%BC%8C%E4%B9%9F%E6%98%AF%E5%BE%88%E6%AD%A3%E5%B8%B8%E7%9A%84%E4%BA%8B%E2%80%A6%E2%80%A6&quot;&gt;^6&lt;/a&gt;的文字出现时，我却，漠视。我害怕，我逃避，我就这样走了。她给我发私聊，是一个小蛋糕吧，大概。她像之前一样温柔地喂我吃（当然是聊天说说而已……），我不知怎的，什么都不敢说。我到现在我都想不通我为什么要这样，可能我觉得为了她，我不得不这样子，我不能让她落入我的手里，可是我又怎么知道……其实我现在写这一段也很害怕，我怕其实只不过是我的凭空臆想，也许她根本就不是那种想法呢？&lt;/p&gt;
&lt;p&gt;“好看吗？”“可爱吗！？”她给我发各种 cos 照片，我也不敢回了。也许后面好久再没梦到她，到底多久，我也不知道……后来，她貌似找到了别人&lt;a href=&quot;https://www.saroprock.com/%E4%BA%8B%E5%AE%9E%E4%B8%8A%E6%88%91%E5%B7%B2%E7%BB%8F%E8%AE%B0%E4%B8%8D%E6%B8%85%E8%BF%99%E4%BB%B6%E4%BA%8B%E5%92%8C%E4%B8%8A%E9%9D%A2%E9%82%A3%E4%BB%B6%E4%BA%8B%E6%83%85%E6%98%AF%E8%B0%81%E5%85%88%E8%B0%81%E5%90%8E%E4%BA%86%EF%BC%8C%E6%88%91%E5%8F%8D%E8%80%8C%E8%A7%89%E5%BE%97%E6%98%AF%E5%A5%B9%E5%85%88%E6%89%BE%E5%88%B0%E5%85%B0%E5%86%8D%E6%9D%A5%E6%89%BE%E6%88%91%E7%9A%84%EF%BC%8C%E7%AE%97%E4%BA%86%EF%BC%8C%E6%88%91%E7%9C%9F%E4%B8%8D%E8%AE%B0%E5%BE%97%E4%BA%86%E3%80%82&quot;&gt;^7&lt;/a&gt;。那个人的名字叫作兰。有一次兰逼她把我删了一次，还真的挺……兰后来和我讲了我不在的那段时间的事情，什么被（已屏蔽）啦……什么翻到香港吞药躲下水道自杀啦……这种真实与玄幻的交织让我头晕，毕竟我早就认为这些不过是银幕的投射而已。不过，看她们的样子，我不知道为什么有点欣慰（实际上我压根没资格这么说吧）。有一个人，有时间有精力，愿意照顾她爱她，真好。而她的头像，也不再是我给她画的那个了。&lt;/p&gt;
&lt;h2&gt;地狱里燃烧&lt;/h2&gt;
&lt;p&gt;兰走了。&lt;/p&gt;
&lt;p&gt;在我印象里，兰都是一个心理素质及其强大的人。我其实难以想象，如果连兰都受不了，那还有谁受得了？我又回想起美好但痛苦的往事，不负责任地暗自庆幸。&lt;/p&gt;
&lt;p&gt;她拉了个群，里面都是我不认识的人。她求着大家想想办法让兰回来，可是能有什么用呢？我随便拉了一个群友开了一个临时聊天：&lt;/p&gt;
&lt;p&gt;“啊啊，到底发生什么了啊？”&lt;/p&gt;
&lt;p&gt;然后 Ta 给我发了一堆图片，可惜我都忘光了。&lt;/p&gt;
&lt;p&gt;“那么，你现在在这里是干什么呢？”&lt;/p&gt;
&lt;p&gt;“看乐子呗。”&lt;/p&gt;
&lt;p&gt;我问他是不是还会一直看下去。“同类型的看多了就没意思了”……&lt;/p&gt;
&lt;p&gt;有一天晚上，她突然发了点不一样的东西。她说，她要去地狱里燃烧了，吃了很多药，就在顶楼。&lt;/p&gt;
&lt;p&gt;好多人啊，好多人冲出来关心她，而我只是看着。有一位日本的留学生，那时他在听音乐会呢，举起手机在群里面发语音，甚至到后面音乐会都不听了，跑到场馆外面要和她打电话。在这我创造的梦境里面，我在半空肆意地嘲笑他们。哈哈哈，你们和我有什么不同呢？你们能做什么呢！快结束吧。&lt;/p&gt;
&lt;p&gt;“我跟你说，那个男学生可喜欢她了，也是乐子。”&lt;/p&gt;
&lt;p&gt;群友又在临时聊天里面给我发了一堆图片，群里面的她，则再也没动静了。“去地狱里面燃烧了吧”我想是。也许是过了几天，她又出现了。&lt;/p&gt;
&lt;p&gt;“药效太强昏过去了，没跳下去……”&lt;/p&gt;
&lt;p&gt;……就是这样子玩弄别人的情感么，怎么回事……&lt;/p&gt;
&lt;h2&gt;东西呢&lt;/h2&gt;
&lt;p&gt;2025年年初，我听朋友说，可以在移动硬盘里面装 Linux，这样就可以是双系统了。趁着寒假，我很想试试这个点子。在我通过移动硬盘运行 Ubuntu 的安装程序时，第一个选项是“覆盖所有文件”&lt;a href=&quot;https://www.saroprock.com/%E5%88%9A%E5%BC%80%E5%A7%8B%E6%98%AF%E8%A3%85%E7%9A%84%E9%95%BF%E6%9C%9F%E6%94%AF%E6%8C%81%E7%89%88%E6%9C%AC%EF%BC%8C%E5%90%8E%E9%9D%A2%E6%83%B3%E6%83%B3%E7%94%A8%E9%83%BD%E7%94%A8%E4%BA%86%E5%B0%B1%E6%8D%A2%E4%BA%86%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC%E3%80%82%E7%BB%93%E6%9E%9C%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC%E7%9A%84%E5%AE%89%E8%A3%85%E7%A8%8B%E5%BA%8F%E5%A4%9A%E4%BA%86%E4%B8%80%E4%B8%AA%E9%80%89%E9%A1%B9%EF%BC%8C%E5%8F%AF%E4%BB%A5%E9%80%89%E6%8B%A9%E5%AE%89%E8%A3%85%E5%9C%A8%E5%93%AA%E4%B8%80%E4%B8%AA%E7%A1%AC%E7%9B%98%E2%80%94%E2%80%94%E8%BF%99%E4%B8%AA%E5%9C%A8%E4%B9%8B%E5%89%8D%E6%98%AF%E6%B2%A1%E6%9C%89%E7%9A%84%E3%80%82&quot;&gt;^8&lt;/a&gt;。那个时候想，我是通过移动硬盘启动的，那么抹除文件也应该只在这个硬盘上。当时已经把里面的东西都清空了，我自信地点击了按钮。等我看到清理文件的进度条半天不动，我才明白坏大事了。可是程序一旦开始就无法停止，只能眼睁睁地看着自己的 Windows 被“吃干抹净”。&lt;/p&gt;
&lt;p&gt;因为是品牌机，我也不想再刷回去了[^9]。啊，也好吧，本来原系统的一堆问题就够令我头疼了，而且 Ubuntu 用了一段时间后感觉相当不错，那就这样凑合着用吧。&lt;/p&gt;
&lt;p&gt;[^9]: 实际上对于购买了预装并已激活 Windows 11 的电脑用户，若不慎将系统刷为 Linux 后希望恢复原版 Windows 11，通常情况下，重新安装相同版本的 Windows 11 系统后，&lt;strong&gt;仍然可以恢复正版激活状态&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;然后我突然发现了一个问题：她的那首曲子！&lt;/p&gt;
&lt;p&gt;这是我最先想到的东西，然后是一些别的，比如笔记之类。不知道什么原因，我居然没有做任何备份！就这样孤零零地放在桌面上，然后，全没了。&lt;/p&gt;
&lt;p&gt;我就知道这一切都是假的，梦里的人怎么可能给我写曲子，这不是搞笑吗！&lt;/p&gt;
&lt;h2&gt;信不信&lt;/h2&gt;
&lt;p&gt;其实早有疑点。她那个哥哥（数据已删除）还有她的 cos 照片，很久以前就有群友挖出来是网图了。在去“地狱里燃烧”之后，她又曾来找过我，她说，她去日本玩啦，然后给我发了一张大剧院的图片。&lt;/p&gt;
&lt;p&gt;我很好奇，第一次用搜图试了试，随便一搜，就是网图……&lt;/p&gt;
&lt;p&gt;“哎呀，这不是要去了，先发给你看看嘛。”&lt;/p&gt;
&lt;p&gt;我不知道为什么她后来突然着急了，“你不信，那我发露脸照，满意了吧！？”&lt;/p&gt;
&lt;p&gt;这哪跟哪啊，这么多年了，我压根就不在意你是不是真的，如果我真的在意，我早就问了。&lt;/p&gt;
&lt;p&gt;那时的我是这样回复的。其实我不在意，是因为根本无法想得清楚。一个人，这么多离奇的事情，这么几年，就最简单的诈骗来说，她一文钱都没要过，甚至她还给我写了一首曲子不是？如果一个人耗了几年给网上的几个人编了这么一篇长篇故事，那也没什么道理啊……&lt;/p&gt;
&lt;p&gt;我突然想起来了，我的那个猫耳头饰，还是她送给我的。&lt;/p&gt;
&lt;h2&gt;不知道&lt;/h2&gt;
&lt;p&gt;她还在找兰。&lt;/p&gt;
&lt;p&gt;我做了一个梦。梦里有一个女孩，还在对着 Unity 界面的报错发呆。她拉着我的手，问我有没有什么办法。我说，没有办法。我不能再折腾，我总得好好读书，上个好大学，不论怎么说，算是给自己挣一块敲门砖——现在做这些游戏，我当然知道你有实力啦，可是有什么用呢，别人都不会看你一眼。&lt;/p&gt;
&lt;p&gt;“你现在做这些事情，难道影响你捡那块砖头了吗？”&lt;/p&gt;
&lt;p&gt;“是的。”&lt;/p&gt;
&lt;p&gt;我毫不犹豫地，斩钉截铁地回答到。&lt;/p&gt;
&lt;h2&gt;结束&lt;/h2&gt;
&lt;p&gt;写完一篇回忆，我想总得发给当事人再看看。&lt;/p&gt;
&lt;p&gt;那时的我还太小，太不成熟，什么都不懂，不会表达。而现在，我却是自己给自己框起来。难为情地说，这几天我已经不知道为自己流了多少眼泪——我分明纯乎还是一个小孩子，却还老是让别的小孩子来安慰我。如果说……其实我也一样。&lt;/p&gt;
&lt;p&gt;写这篇东西，全然没有什么目的。如果是为了（数据已删除），那我永远也不会原谅自己。可能我还是这么死板，我想把事情都搞清楚、说清楚。&lt;/p&gt;
&lt;p&gt;我永远不会忘记你的名字。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>人生海海读后感</title><link>https://saro.pub/rensheng-haihai-review</link><guid isPermaLink="true">https://saro.pub/rensheng-haihai-review</guid><description>人生无处可逃，只有握手言和</description><pubDate>Mon, 28 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;音频&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.bilibili.com/audio/au4807062/&quot;&gt;https://www.bilibili.com/audio/au4807062/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;原文&lt;/h2&gt;
&lt;p&gt;说实话，我已经忘记了，把“写人生海海读后感”加到 To Do List 上是什么时候了。太久远了，而我到现在才写。在我已忘却的时间里，我其实遇到了一个困难。但具体什么我也记不清，也许是写文章写得多了之后，就愈发怕起来，怕自己新写的达不到之前的高度。真的，如此胆小是很痛苦的。我基本上每一篇文章都先手写再转到电脑上，本身并不做什么修改。可之前的一篇《云端》却被我改得面目全非。我好像在学习麦家，学习他每天只写几百字多删改的习惯。这显然是我不擅长的。我擅长的是笔随心动，是灵机一动的巧思。总是逐字推敲，反而让我逐渐丧失了讲故事的能力，然后只能仰天长啸，哎！是应该改改，是应该“让我这辆破车重新上路”。&lt;/p&gt;
&lt;p&gt;我想到之前一次，在开会的时候无所事事，打开本子，想到写什么便写什么，不用思考地洋洋洒洒地写了一面。我现在也学习这样，这种最舒服的状态。我脑中第一个跳出的词是鸡奸犯，然后的话是其他的一些下流的词汇，这真是我印象最深的东西。“人生海海”，这书名，我本以为是什么心灵鸡汤，而我也正是奔着这去的。可等我看到书里的内容，迎面而来的首先是一种“人类无非是喜欢‘屎尿屁’”的真实，然后紧接着是震惊与惊喜。震惊在于书中的内容与麦家本人演讲的风格差别也太大了，至少表面上看来是如此；惊喜在于内容莫名有一种在学校偷看禁书的刺激感。也许是因为我是青春期的孩子，看到一个围绕着那个东西展开的故事，里面还有一些六七十年代的事情，所以会激动吧。有时我觉得，这真是最真实的小说没有了，因为现实生活中怎么可能逃得开那些东西？但其他小说都只字不提，可能是不重要吧。&lt;/p&gt;
&lt;p&gt;不重要，说到这个，这么久过去了，我才写这篇读后感，倒是给我起到了一个提炼的作用，或者说，我已经把我记忆中不重要的东西忘得差不多了。里面的故事很有意思，但怎么也没有写在这里的必要，我又不是那些二十分钟带你精读一本的快餐式博主，把佳肴嚼碎了再喂给别人，多少有点恶心。那个名词还在我脑中晃荡，鸡奸犯。说实话，我刚开始并不知道这是什么意思，我知道强奸是强迫别人，那么鸡奸总不能是“鸡哔”别人。书中说，这是再恶劣的词没有了，谁沾上，谁就完蛋了。等我明白了之后，我觉得是极对的。&lt;/p&gt;
&lt;p&gt;我现在得改改观点，要我说，这故事就是围绕误会展开的，不管是上校在村里，还是在外面和那个女人的故事。一切的原因，都只是他肚皮底下的一行字，一行在最恶劣的词之外的最恶劣的一行字，也是我最失望的一行字。我如饥似渴地在书中跳跃，同书中村里的人、城里的人一样，无比渴求的想知道，那一行字到底有多么的不堪。等来的不过是，是那个上校在那个日本女人家里留下的印记。我觉得为何不公开呢？既解决了矛盾，又可以平反，也不用再惹出这么多难过的事。好吧，这是上校的伤疤，只有他疯了之后，他才愿意将其见人，并在上面画一棵小树吧。&lt;/p&gt;
&lt;p&gt;在这种环境下，写东西真的困难，尤其是写得稍微长了些，总是得分成几天来写。这让我又回到先前的害怕来，害怕我忘记了自己要写什么，应该写什么。不过其实我反而没什么好担心的，毕竟我压根没想过后面应该怎么写，或者说，我压根想不出后面应该写什么。那就从心所欲吧。我说，自然而然的，他会给你一个出口。这好像是我在读《人山海海》时觉得剧情快要下不去了，忽地，它给你一个强烈而又合乎情理的转折，一下子拨云见雾，然后你才能发现其中的矛盾是什么，而他们背后的逻辑却又是同一个。&lt;/p&gt;
&lt;p&gt;转折发生得太快了，让这个真实的小说忽然变得荒诞。我全家被村里人唾弃，与爷爷好了一辈子老保长，则一下子翻了面。我晚上不敢再出门，因为随时有可能飞过来一块砖给自己拍死。我被分到最差的客桌，甚至最后不得不背井离乡，逃到西班牙才得以生存。被第三章吓呆了，我，真的，明明是围绕上校展开的故事，这灾祸怎么忽得降临到了“我”头上呢？好心办错事，酒后吐真言，一切都毁在爷爷明白的一辈子里了。&lt;/p&gt;
&lt;p&gt;上校的周围就这么一圈人，明白了一世，糊涂了一时，在所有矛盾与纠织不清的因果中了结了一生，当然最后也是自食其果，或是装傻、装疯卖傻，或是用余生去弥补。&lt;/p&gt;
&lt;p&gt;现在想来有些惭愧的是，我竟忘了最后照顾上校直至离开的那个人的名字了。也许她是一切的源头，容许我简略讲讲内容：大抵是上校在抗美援朝战争中，好像，她他发生了关系。之后她屡次求爱无果，一气之下将其告上了法庭，要还她清白。她做出了她一生中最糟糕的一次决定，不仅把上校打回了村里，还毁了她自己的名声，从此到哪儿都不受待见，孤苦一人；而我也在这文中写下了最糟糕的一段，擅自概括内容，把作者用了极大笔墨捯饬的前因后果删改得不成样子。甚至其实后文还有暗示，与她发生关系的压根不是上校，纯是因为黑灯瞎火看不清人，自此误解。她不知道上校拒绝她根本不是因为……只是因为他本人小腹的那一行字，他怕他让她蒙羞，怕他对不起她。&lt;/p&gt;
&lt;p&gt;上校疯了，彻底疯了。为什么疯了，我不记得了，大抵是发烧给脑子烧糊了吧。反正不重要，重要的是突然出现了一个女人，一个外乡人，找到村里来，日夜照顾上校，好似一生只为他一人。村里人都说，这是天上的仙女下了凡，是上校救人修来的福分。一切只有她自己明白，这恰恰是她酿成的苦果，现在她要在人们欢送的掌声中，用余生去弥补。&lt;/p&gt;
&lt;p&gt;但这时，“我”是不知道的，在西班牙，“我”连怎么活下去都是个难题，哪还了解这些。寄回家的书信，也少有回信，不管仍是写，谁想全到了她的手里。“我”，上校的最好的朋友的儿子，没想到与她建立了这样的单方面的联系。在西班牙，发生的种种也很重要，只可惜不是主线。写到这一步，我得停停，去写点真正的，“读后感的”文字。别再讲故事，别再叙旧情。&lt;/p&gt;
&lt;p&gt;可是，没了故事，情感便无处可移。我呆坐了十分钟，一个字也写不下来。既如此，只好寻出路，不单单是书籍本身。我想到了，想到了麦家的演讲，就是那个我说过风格差别很大的，我也曾写过的演讲。一部破车，重新上路？什么是破车，怎样，算是上路呢？在这部小说中，我好像有了一点头绪……麦家，作家，谁不是一辆曾经翻倒在路边的破车？只是有的自重太大，倒下就再起不能（爷爷）；有的惊慌失措，又因为还有更重要的人，只能停留，或做坚守（父亲）；其他的，则是丢掉了之前的往往，重拾希望，重新上路。“我”是如此，她也是如此，上校更是如此。我从不觉得上校真的疯了，他疯，只是他修补自己的手段吧。是受困于人的倔强的解决方案，只有这样，他才可以坦然面对自己的伤疤……如此，故事也该结束了。&lt;/p&gt;
&lt;p&gt;写到现在，我已经痛苦得很，写不太下去了。即使我用想写什么就写什么的想法来宽慰自己，也难有太大的作用。可能是写得太多又少，马上结束盘算着文章发布后的事，人心又静不下来。我觉得写这一篇是提炼不出我要表达什么的，不论怎样都好似是对原文的冒犯。在这思潮枯竭的最后，我终于又想到了一个场景。&lt;/p&gt;
&lt;p&gt;那是小瞎子，一个造谣者，苦苦将爷爷逼死。他瘫坐在地上，那时“我”正好从西班牙回来，某种意义上也是功成名就。“我”在上俯视他，他在下仰视“我”，同时乞求着几文钱。“谢谢你，大人不计小人过。”他用脚在泥地里抠出几个字来，因为他的舌头早就被割掉。虽然当他风生水起之后，又成为了之前那个令人生厌的刺头，但“我”还是给了他钱，甚至包了他在小店的费用，村里人都很不可思议，作为读者的我也一样。如果是我，我定然不会可怜他，我想，哎，也许不落井下石，就是“我”这部破车上路的诀窍吧，什么时候我不会再因此感到诧异，大抵什么时候，我才可以把这本书看明白吧。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>Q 胜记略</title><link>https://saro.pub/ah-q</link><guid isPermaLink="true">https://saro.pub/ah-q</guid><description>一篇在困倦与迷茫中诞生的语文课习作。从最初的困惑，到恍悟的悚然——当我捧着被展览的作文本时，连我自己也分不清，这份被肯定的喜悦里……是否也掺杂着阿Q式的自我安慰呢？</description><pubDate>Thu, 20 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;本文基本上保持原稿，仅有极个别错字删改。&lt;/p&gt;
&lt;h2&gt;Original Text&lt;/h2&gt;
&lt;p&gt;初看觉得懂了，再看又不懂了。忽得捏不准记叙的是喜还是悲，表达的是褒还是贬。总觉得在那个世间，有点“得胜”的本领是有必要的，但又觉得在批判，所以我自己并不知写什么才好。&lt;/p&gt;
&lt;p&gt;文中说阿Q没什么“行状”，既如此，那我便给他捏个形状：阿Q是有自尊心的，也并不是一无是处。做工做得来，赌博也是可以的。只可怜于自身没有什么硬实力，脊梁又太软，被打几下，就连自己是虫豸也说得来的。不论什么方法，阿Q得胜的方式很简单，就是“合理化”。只要把自己看得足够弱，或把对面看得足够轻，那一切都是合理的。既然是合理的，那就怪不到自己身上，顶多是怪世道沧桑罢了。你说这有道理么？我觉得是有道理的。因为世界本身太不合理了：别人不喜欢的事物非要提; 一言不慎就动手开打。就连赌赢了也不遵守规矩，自导自演地抢走了……世界不合理，可人又是要合理性的，所以只得在不合理的世界中编造合理的理由，才能正常地生活下去。不然正像文中所说，阿Q早就遭了瘟，哪儿还有后来呢？&lt;/p&gt;
&lt;p&gt;不止是阿Q，在这个世界中，人人都有自己的得胜技巧。先前的庄家————说过了，你赢钱没事，我再抢回来就行；又癞又胡的王癞胡，平日里肯定也是被大家笑话的角色，你看他不还是找准机会暴揍了阿Q一顿么；处处受人嫌的小尼姑，若是没有排解的法子，早就被淹死在乡里乡亲的唾沫中与笑声中了。我半睡不醒地写了两大页，现在才终于找到些许明白：阿Q之类，无非是一个小的缩影罢了。谁是阿Q与行状，又不重要。但一群人的行为不是孤立没有原因的，反映的最后，就是这个吃人的社会。&lt;/p&gt;
&lt;p&gt;你觉得阿Q可怜，那其实大家也都很可怜；你觉得阿Q可恨，那其实大家也都挺可恨。一群人病了，病因便不在人。我写到最后终于明白了鲁迅先生所写的，感叹先生文章之传神，同时也感叹我总算没有浪费时光。&lt;/p&gt;
&lt;h2&gt;Postscript&lt;/h2&gt;
&lt;p&gt;其实这篇是上周的一次语文作业。说来惭愧，我长这么大没有完整地看过《阿Q正传》，所以在写之前也只不过是看了语文书里面的一点点内容而已。那天撰写此篇时，因为脑袋空空，犯困得紧。还好最后总算是憋出一些东西，所以也还算是满意交差。&lt;/p&gt;
&lt;p&gt;只是后面语文老师给我们看了《阿Q正传》的电影，越看越觉得我之前写得胡乱。总觉得不是这样，但是还是说不清。更令人惊奇的是，本以为就这样了，老师还把这篇当作好文展了出来——有了这层认同，我想这篇总还是有点内容。但到最后还是理不清，仅作抛砖引玉之计，希望读者可以有自己的看法。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>云端</title><link>https://saro.pub/cherishing</link><guid isPermaLink="true">https://saro.pub/cherishing</guid><description>意识到会不说再见地离别，才学会珍惜生命的每一天。</description><pubDate>Mon, 17 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Para 1&lt;/h2&gt;
&lt;p&gt;正月初六，我犯了一个原则性问题，把我的生活抛给了一个不可名状的未知数中。虽然它使我的生命分崩离析的概率小到比周围空气爆炸的概率还荒谬，但正像从0到1的“突破”，有这种概率的出现已使我惶惶不可终日了。直到现在，那个未知数还不能被确定……在这每天的思想斗争中，我突然再一次地觉得我的生命，与我所珍视的一切是那么脆弱。我所努力拥有或幸运遇到的一切，都有可能因为我的一个错误而全部爆掉。那可怕的玩意压着我的头，让我跪在地上承认我的错误我的罪，让我不得不珍惜这不确定的每一天。&lt;/p&gt;
&lt;p&gt;类似可能随地断线的事情我经过很多次，但哪一次都没有像这一次一样漫长且煎熬。那一回吧，和父亲去爬一座山，山的路径是石头砌好的，是和尚化缘修来的。对于那时的我，无非只相当于爬爬楼梯，哪儿是真去爬山呢？我自然的而然地走在队伍的最前面，把父亲甩在后头。也就是那之后，父亲逢人就说：这小家伙体力好得很，是领头羊呢——每次他这般胡诹的时候，我老早在上边催促了。&lt;/p&gt;
&lt;p&gt;又是很自然的，到了山顶。这山不是一座三角锥，而仿佛是从平地上突兀升起的一整块，四周都是悬崖峭壁。站在边上，就有一种不自觉想下跳的趋势。没有了往上的石阶，我说，原路回去吧。父亲却瞄见了前方的道路，怂恿我从那里下山去。显然，那不是属于景区的一条路。与所有景区横竖交叉出来的小路一样，它没有石砌的台阶，有的是黄黄的、被踩实了的土地与四周的杂草。多好的探险呐，父亲推着我。我只知父命不可违，也就去了。&lt;/p&gt;
&lt;p&gt;自然的，先前领队的我成了探路的先锋，像只真正的领头羊在石矶间跳跃。这确实是一条下山的路，但也只是向下，全然不知通往何方。土地是实的没错，可上面还有一层沙，踩上去，也就是沙沙、沙沙——沙沙地滑落下去。踩在石头上尚且还好，可一切都太突然了，我右脚一迈，就踩到了一层沙上。又是斜坡，待我意识到时，我的右腿已经被拖拽着走了，幸好人小，两脚大开步时还可以勉强站住。可这样两手挥舞的样子，怎么停得下来？前方是一块突出的巨石和绿葱葱的远景，左边有一棵孤零零的树。大脑还没有思考，整个人就趴在了那小树上。幸好就几秒钟，速度还不快。我死命拽着树不撒手，人望前的石头一探，才发现什么都没了——远景遥不可及，低头便是绝壁。&lt;/p&gt;
&lt;p&gt;但当时的我没什么感觉，肾上腺素还没反应过来，就又回到了正确道路上。要说有点变化的，可能就只是多了一些尘土，手没放开过树木而已。父亲趁这功夫终于赶了上来，看见我抓着树干，笑嘻嘻的说我怎么被这难住了。盯着他轻松的样子，我一时竟忘了告诉他我差点就掉下去了、就再也见不到了。想着，为什么爸爸完全不怕会滑倒呢？看了看一旁的小树，我觉得它可撑不住。&lt;/p&gt;
&lt;p&gt;到了山下的一户村子里，已是离开景区很远了。山凹凹里没再多岔路，只得沿出村的马路走着。说是马路，其实和下山路差不太多。人已经乏了，但想到之前的事，再走走吧，脚踏实地的感觉真好。&lt;/p&gt;
&lt;h2&gt;Para 2&lt;/h2&gt;
&lt;p&gt;也就是那个暑假，我的一位同学离开了。我想她总是没抓住什么东西，不然也不至于呜呜淹死在江水中了。但是我不知道她到底应该抓住些什么，我只知道那天她是一个人从同学家走回来的，走到两村街的小桥上，兀得没了身影。是失足了？还是情愿放弃一切的纵身一跃？我也不知道。我只知道他的父母在她定位信号消失的地方打捞了四天三夜，最后才捞上来一具浮肿的尸体。家委会在班级群里收集善款，有同学质疑：为什么不是他的父母来收？越说越难听……作为班长的我因为管理不当被老师训了一顿。除了少了一个在操场边上独自坐着、若有所思的同学之外，这可能是对我唯二的影响。&lt;/p&gt;
&lt;p&gt;死人，总是会有的，但我不想讲死。小时候想不通，现在觉得乏味了。那后来倒在我班级面前的、倒在血泊中的尸体，即使在当天被吓得不轻，没几天也就忘却了。就连寝室里回去要登记，我也觉得是很正常的事。前几年不登记人员的散漫态度，在我眼里才是不正常的存在。&lt;/p&gt;
&lt;h2&gt;Para 3&lt;/h2&gt;
&lt;p&gt;小时候，不知道水循环，老师就把水比作一个个水宝宝：它们从大海上出发，攒着一股劲儿，乌泱泱的爬到空中，循着气流飘到了中国大地上空。它们有的钻进干涸的土地里，哺育出美丽的花朵；有的扑进长江母亲的怀抱，成了一朵奔涌的浪花；还有的则化作雪花，落在皑皑的喜马拉雅之巅——或化甘泉、或成冰原，等待人们的发现。我傻傻的望着，望着在水壶里没有半点声响的一块水。我想，这些水宝宝见到我之前，经历了什么呢？如果有一部纪录片可以记录水的一生，那该有有多酷啊！那时候很喜欢看纪录片，我想人们既然可以拍出诸如《动物世界》、《地球脉动》等片子，那么拍一个水宝宝的纪录片，想来也不过分。&lt;/p&gt;
&lt;p&gt;可是除了一身顽皮的小孩子以外，谁还会去关注它们呢。况且拍摄难度太大，用动画模拟一下已经是大发慈悲了。只是这样它们就并不是真的存在我水杯里的一滴水，所以我的愿望，很快就从务实的纪录片，转成可以回溯事物经历的超能力了。&lt;/p&gt;
&lt;h2&gt;Para 4&lt;/h2&gt;
&lt;p&gt;清明，又爬山。“清明时节雨纷纷&amp;quot;不是假的。雨水把地面浇得湿漉漉的，这次我没再跑在前头，等着父亲慢吞吞的上来，然后抓着他的手说：“你带着我走吧，我怕滑。”父亲还是和之前一样，稳稳当当的，一步一个泥泞。每一顿，都好像把脚扎根在了土地里。&lt;/p&gt;
&lt;h2&gt;Para 5&lt;/h2&gt;
&lt;p&gt;我住在一座小城里，很宁静的小城，和书本上说的一模一样。&lt;/p&gt;
&lt;p&gt;我很享受这里，觉得外面的人很疯狂，理解不来，但又笃信那是潮流。在宁静的小城里呆着，时常觉得很孤僻。我跳到云上，但还是向往宁静，还是住在小城里。&lt;/p&gt;
&lt;p&gt;有人对我说：“我要去地狱里燃烧了。”我是看不得有人去死的，因为看得太多了，那些东西也到底挥之不去……想着祂总得抓住点什么，可我毕竟在云上，即使跳出城外，也找不到方向去寻那一双手。幸好云上大家都是善良的吧，我的身影早已被乌泱泱的队伍盖得没了影。想跟上，却发现是原地转圈，最后也没有人找到祂。直到第二天传来一句：“没事儿了，昨天药效太猛没跳下去，昏了。”&lt;/p&gt;
&lt;p&gt;疯狂的人还活在世上，并且活得并不像他们所说的一样——到众叛亲离的地步。毕竟我到现在还没有受到过这种乌泱泱的待遇。&lt;/p&gt;
&lt;p&gt;可小城里的人，却真的是越来越少了。没能跟上队伍的我，最终还是要降落的。没地方去，只得落到原本的小城里——和书本上说的，大相径庭。&lt;/p&gt;
&lt;h2&gt;Para 6&lt;/h2&gt;
&lt;p&gt;上学了。回家的路上，我低着头说了一堆。我说我以后不能再这么暴躁了，我要改。父亲笑嘻嘻的说：“你暴躁吗？我没感觉到啊。”唉唉，我老是不耐烦的样子，你忘了吗？我说，我现在十分珍惜每一天，因为也许何时就不说再见的结束了，能活到现在也是一个奇迹——他好像在专心开车，所以没有搭理我。&lt;/p&gt;
&lt;p&gt;你不觉得我说这些很奇怪吗？我没忍住，问了一句。“不奇怪啊，这说明你不再是象牙塔里的孩子，不再只是听从老师的教诲、一板一眼的考虑书本上的问题。你会思考人、会思考社会，说明你变得成熟了，这很正常。”&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>人生海海，错了可以重来</title><link>https://saro.pub/life-is-vast-errors-can-be-redone</link><guid isPermaLink="true">https://saro.pub/life-is-vast-errors-can-be-redone</guid><description>人生无处可逃，只有握手言和</description><pubDate>Wed, 22 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;语文老师给我们看的一场演讲……印象非常深刻……&lt;/p&gt;
&lt;h2&gt;正文&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;人生海海[^1]，山山而川&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;[^1]: “人生海海” 源自闽南方言，很难确切地指出最初是谁说的。不过，作家麦家在其 2019 年出版的长篇小说《人生海海》中使用了这个词，并将其内涵进行了深入挖掘和广泛传播。&lt;/p&gt;
&lt;p&gt;说实话，现在要我写这篇“观后感”让我很忐忑……因为这演讲我看了太多次导致脑中的思想变得有些“碎”，让我无从下笔。但我又告诉自己，哦，不，你一定要写点东西才行。既如此，我只能问自己一些问题：为什么如此印象深刻？可能是其中的东西与我有一些共鸣——对自我的剖析——坦然地承认自己的迷失。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;那时候我常常地告诫自己，当世界变得日日新、天天快的时候，我要做一个旧的人、慢的人、不变的人、为理想而执着的人；当众人都一路在往前冲杀的时候，我要独自靠边，以免被时代的洪流卷走；当一切都变得声色犬马，令人眼花缭乱的时候，我要安于一个角落，孤独地和寂寞战斗——这不是我一时兴起的念想，而是我对自己一生的认定和誓言。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;“然而很遗憾啊，我没有守住自己。”麦家如此平静的说到……我觉得这很真实，但也很残酷。&lt;/p&gt;
&lt;p&gt;残酷……残酷什么呢？我写完这两个字之后，我突然就写不下去了。因为我觉得这太像了可是又太矛盾，或者说我现在也正在这条路上……我写不下去了可是我仍然逼着我写，甚至让 AI 帮我续写……&lt;/p&gt;
&lt;p&gt;可你看 AI 续写的是什么？写的是“在成长的路途中一次次与初心背离”，写的是“曾经信誓旦旦要每日诵读经典，汲取文学养分，可没坚持几周，就被手机游戏、短视频的诱惑拽离了书桌”这种“陈词滥调”的东西。我为什么要写这些东西？明明我还不知道我是谁……我要去哪……&lt;/p&gt;
&lt;p&gt;哦，可是上面的又何尝不真实？难道我说，我坚持每天写日记剖析自己，就够了吗？不够……当然不够。可是我现在的笔确实是失去了力量，揣度了半天的文字不能尽数倒出——我好痛苦。&lt;/p&gt;
&lt;p&gt;我现在知道我完了，我完成不了这篇文章，而这演讲也得为我“报废”掉。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我不是一个圣人，禁不起利益的诱惑，锁不住欲望之门。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;麦家在开头说他其实拒绝来演讲，但是觉得既然是真实的东西，那也就来讲一讲吧。真实的东西，我无法抗拒，可能也是我为什么一定要写这篇文章的原因。可是他说这是“长记性”，我有点怕。&lt;/p&gt;
&lt;p&gt;真的可惜，我以前不认识麦家，没有看过《人生海海》。我想我一定要去看看那本书……&lt;/p&gt;
&lt;p&gt;但是这篇文章就要结束了，既如此，哎，“作死”的苦水。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>重拾《朝花夕拾》</title><link>https://saro.pub/dawn-blossoms-plucked-at-dusk</link><guid isPermaLink="true">https://saro.pub/dawn-blossoms-plucked-at-dusk</guid><description>重拾《朝花夕拾》，可能只能到这种程度吧，更多的可能只有眷恋了。无意义的废话可能也是我的行文特色……如此也该结束了，可我不知道怎么收尾——或者是不愿意收尾吧……</description><pubDate>Fri, 27 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;正文&lt;/h2&gt;
&lt;p&gt;我总算是把书拾起了。&lt;/p&gt;
&lt;p&gt;泼洒出去的话，已是不消说的了。回想，最近的一本大概是之前友人所荐的《局外人》，可还有一本《鼠疫》却很难看得完。可能是昏昏欲睡了罢；可能是借书证到期了罢；可能热情被磨灭了罢。总之 它最后仍是回到了书架上，亦或被其它有心人拿走借阅了。&lt;/p&gt;
&lt;p&gt;我想是得看点东西，不管以前有没有看过。&lt;/p&gt;
&lt;p&gt;找出一本电纸书版本的《朝花夕拾》，下课或是午睡，有时间我就抽出来瞄几眼。大概我早已忘却了它的厚度，差不多几个下课就能看完一个片段，没几天就仅剩了一篇后记。小时候所看的《阿长与&amp;lt;山海经&amp;gt;》、《二十四孝图》、《五猖会》、《从百草园到三味书屋》，拎出来似乎都是很长的一封回忆，现在却是被集合在这一小册子中了。如此，我对它的厚度才有一些模糊的记忆来。&lt;/p&gt;
&lt;p&gt;也许是第二次看的缘故，如今确实添得了不少东西……其实我是应该感谢这一册书了，因为它在原来的基础上新增了很多注解，极大程度上补全了我曾经并不了解的一些事情——我甚至还能找到 《纪念刘和珍君》的影子，知道了鲁迅先生写完那篇文章后遭到了反动政府的迫害、知道了正是在那样颠沛流离的生活中，先生写完了《二十四孝图》、《五猖会》、《无常》三篇文章，与其它诸如《狗·猫·鼠》等文章一齐被编入这小册子中了。&lt;/p&gt;
&lt;p&gt;陈西滢、杨荫榆、徐志摩……这些名字成群结队地出现在注解中，而我却无法在原文中扣出半个字眼来。“‘浑身发热’这是讽刺陈西滢的话”、“‘以动机来褒贬作品’这也是讽刺陈西滢的”、 “‘公理’、‘正义’这是陈西滢等常用的文字”。我想我约莫了解这一小本书的利害之处了：实话来说，我真没想到其背后还有这些文字。 老师说的“猫、狗具有特殊含义”也许也还是太肤浅了。真的文字早已写明，哪儿需要拐弯抹角呢？难怪徐态靡说：“说实话, 他也不是好惹的。”&lt;/p&gt;
&lt;p&gt;至于其它诸如各种典故、长妈妈的身世以及各类图画的注解, 相较于类似上面忿忿不平的东西，可能就差得远了。但这并不妨碍它们给我带来惊喜。小到一个字词来说吧：“鼗”，小鼓，两旁有耳——这是极正常的，因为“鼗”这个字一看就是个陌生角色，猜不明的；可你知道“嘲诮”的 “诮”是什么意思？可别以为是同音字，“诮”，读作qiào，意为“讽刺”；还有“拚了性命”的“拚”字，也别认为是“拼“错了字，“拚”, 读作pan，意为“舍弃”。怎？我以前如何不知里头有如此玄机?&lt;/p&gt;
&lt;p&gt;不过说到底，上面所记的，也只是一些鸡毛蒜皮的小事，所谓的“读后感”在哪儿呢？哎，想来是难了。如果真如其它介绍中所说，这是一部回忆性的散文集的话，事情会好办得多；可我当真了解了背后的种种隐情后，一来是觉得可悲：悲在这些原本可以单纯、朴素地记录的文字，因为这样或那样的原因，不得不把手别在身后，装出一幅鬼魅般的笑意来；二来又觉得欣喜，欣喜于它写着的那些东西，即使不用多读也能令人心驰神往的……回忆，正如我所回忆我第一次拾起这本书时，一种纯粹的美意与舒适。“朝花夕拾”，本就是极美的四个字，伴着些许忧伤，淡淡的。 也许要可惜吧，可惜的是“朝花夕拾”，晚了、太晚了，以至于存在的一切的早已变了模样——被深厚浑黑的土壤侵蚀得不成样子了。 所以只能用假的坏的补上，以为自己未曾记过它的模样；也许要感激吧，感激的是“朝花夕拾”，至少那些在其中留下的，是最最挺拔雄伟的样子、所铸就的是那些最最朴素真实的情感——就像一本真正的回忆一样干净利落。“哦哦！你是范爱农！”我情不自禁地想读出这句话，“哦哦”，故意拖得很长，引得周围的同学发笑。想来，这有什么可笑的呢，但我也随着他们哈哈地张着笑着。可能单纯是文字的波动吧，似和文中人物一般无厘头了。&lt;/p&gt;
&lt;p&gt;所以“感”在哪儿呢？大抵都在上边了吧——但终究还是太隔膜，如此难免成为故弄玄虚的影子。写到这，其实令我印象最深的，并不在《朝花夕拾》之中，而是随书所附的一篇藤野先生所写的：《谨记周树人君》。&lt;/p&gt;
&lt;p&gt;文章很短，甚至可以说短得可怜。在我还在期待有什么内容时，再翻页，就草草结束了。但这确实是我从来没有看到过的文字，文中并没有太多修辞或铺排，仅仅是真实地记录了藤野先生自己对鲁迅的印象——纯粹的真实。想到鲁迅先生在《藤野先生》中曾经写道，“我在东洋所得到的，是墨写的教科书上和讲义上都没有的东西。”，于我，在《谨记周树人君》中看到的，也是我在《朝花夕拾》中没有看到的东西，或者是，曾经看到的东西。&lt;/p&gt;
&lt;p&gt;真实，这是我所最看重的东西。小时候看《朝花夕拾》，总是怀疑这是不是散文、到底是不是真的。毕竟那些隐晦的人名、不知去向的比喻修饰、若有似无的主线叙事，让我总觉着这不过是作者为了迎合老师所讲的内容而附和的文字罢了。但《谨记周树人君》的存在，虽然仅仅是作为这电纸书版本的“赠品”，却使我感受到一种奇妙的平行视角：啊呀！原来“藤野先生”真的存在。鲁迅以他的视角在书中恣意写着，哪知他死后，他心心念念的藤野先生会为他补充上第二个视角——别人眼里的鲁迅。也许这种视角也已写得多了：陈西滢、杨荫榆、徐志摩……这些人不也在“写鲁迅”吗？只是我没见过这么真实的存在罢了。再翻，再翻，就真的没有了。&lt;/p&gt;
&lt;p&gt;哎，不知道如何表达了……只是觉得之前自己实在是错付了这本书，现在又是看得太快太急躁了。“碧绿的菜畦，光滑的石井栏，高大的皂荚树……”也许像别人所说，这就是一个时代的缩影吧。可能我比较肤浅，打动我的反倒是两位真实的角色而已。&lt;/p&gt;
&lt;p&gt;重拾《朝花夕拾》，可能只能到这种程度吧，更多的可能只有眷恋了。无意义的废话可能也是我的行文特色……如此也该结束了，可我不知道怎么收尾——或者是不愿意收尾吧……&lt;/p&gt;
&lt;h2&gt;草稿（图片）&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20241227_230818.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20241227_230823.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20241227_230828.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>在圣神殿堂之下</title><link>https://saro.pub/under-the-sacred-hall</link><guid isPermaLink="true">https://saro.pub/under-the-sacred-hall</guid><description>真理无法驳倒的东西</description><pubDate>Thu, 05 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;我当真没想过有机会能把这废稿完成。如此，得感谢一下最近的所见、所闻，以及所思、所想。&lt;/p&gt;
&lt;h2&gt;原文&lt;/h2&gt;
&lt;p&gt;“为了见世面，有人热衷于各地旅游打卡，有人穿梭在各种展览活动之间，也有人追逐各种热点，体验各种新奇。他们以不同的方式接触更多的新鲜事物。他们说：‘我是见过世面的人了。’”&lt;/p&gt;
&lt;p&gt;看了上面的材料，你会怎样构思作文呢？我想这似乎太简单。 “见世面不仅是对外在世界的探索，更是内心世界的丰富”；“见世面的方式和目的应相辅相成，不应偏离初衷”……等等等等举不胜举。是啊，这材料作为考试题目确乎是太简单了：鲜明的反例与浮于表面的行为，根本没有考虑其他观点的必要。可这道理谁都明白，我却是不敢这样写的——若是以前的我或考场中的我，大抵也不会像现在这般如此迟疑——我只是不理解：追求内心极致、排除外在虚浮的东西固然是好的，但我们是否又太过于执着那至高无上的极点，以至于对这种行为感到鄙夷不屑，用无可辩驳的真理去归谬，甚至于自己连什么是“见世面”都未曾好好考虑过就不敢再迈出一步？&lt;/p&gt;
&lt;p&gt;“无可辩驳的真理”是什么呢？我想这大概就是所谓“神圣殿堂”中最宝贵的东西——超脱于事物之外的、不被干扰的真理。而在这殿堂中生活的虚影，自然就是那些“圣人”们了，他们是真理的人的化身，方便殿堂之下的人们模仿学习。不过圣人是不能自称为圣人的，不然依据真理，它就不能算是圣人了。所以到现在为止，我也没有见过一位活的圣人，只能在宣传栏里、课本上偶尔瞻仰一下了。&lt;/p&gt;
&lt;p&gt;还是回到上面的话题吧。说实话，若真有人造访过世界各地，追逐过各种热点，体验过各种新奇，那我必须打心眼里佩服他。因为我自己并没有亲身经历过、因为“见万物是见世面的重要途经”。说白了，“见外物”之于“见世面”是一个“必要条件”。如果连这些被认为最浅显最浮于表面的东西都没有足够的积累，如何说自己见过世面呢？当然，我们不能否认其中所存在的、可能忽视的、关于内心导向的问题。只是一想便太可悲：一群没去过什么地方的学生们，用圣人所教诲的真理对“见万物”加以单一片面的否定，真的太奇怪、太令人伤心了。也许这就是神圣殿堂的利害之处：它的真理之光太亮、太耀眼，照得世间一切不符合它的“黑暗”都不见了。而我沐浴在这光芒中，只觉内心清爽、圣洁无比，觉不到真实的世界为何物，也觉不到自己其实也身处在这黑暗之中了。那么，如此这般抛弃一切尘埃杂念，一心向上，多么美好……&lt;/p&gt;
&lt;p&gt;为什么其实自己也身处“黑暗”之中呢？可能是作为“人”而无法克服的顽疾。我这人实在太乖，在小时候被说教的那些准则，早已深深地植入了我的骨髓，以至于让我发誓，我要成为一个圣人。可说是这样说，那内心的条条框框早已不知逾越了多少次……也许是所谓的人的最低劣的欲望吧……你当然可以大肆地指责我、迁怒我，我毫无怨言可言，毕竟在圣人的光芒下，我实在是太卑劣太低微了。拿时间来写这种文字，大抵也是一种罪过。所以我说，我自己其实也身处黑暗之中，是要被请除、被洗刷的存在。&lt;/p&gt;
&lt;p&gt;这太累、太苦。于是之后我改变了我的想法，不再想做什么圣人——可这又何其艰难！有人对我说，人有三种境界：看山是山，看山不是山，看山还是山。而我则正是第二重境界。我摇了摇头，表示不解：“所以你想说什么呢？教我成为第三重吗？”……&lt;/p&gt;
&lt;p&gt;晚上回家，我木讷的父亲忽然在车上放起了音乐。若是按音乐本身评价的话，这可以说是最低劣、最土味而又毫无“营养”的音乐了。可这被排除在音乐神圣殿堂之外的制作，却给我几乎从不听歌的父亲带来了音乐的力量……不知道为什么，明明这事情已经过去很久了，可每每想到，就觉得想哭。也许在某些人看来，听这种音乐就是罪过：抢占了他们优质音乐的市场，同时一次又一次地刷新大众审美的下限。&lt;/p&gt;
&lt;p&gt;可这世上比真理更无可辩驳的，就是事实。事实就是，这种音乐给我父亲带来了快乐、带来了他以前上学时未曾体验过的感觉……或许真理的纯粹性与现实的复杂性之间，总会存在着某些无法调和的冲突。但看似高高在上，拥有至高权威的真理，却并不能抹去那些生活中的、真实的生命体验。是啊，那些人说到太对了，这种音乐就是祸害市场的——我也觉得对，太对了，毕竟这是有评判准绳的东西。谁都明白，正是因为有听众，这种音乐才会在市场泛滥。可我难道要一把关掉音响，然后转头说：“就是你！才让这些创作者受益！”么？真理会审判每一个人，但我想这罪怎么也不应该让听众承担！那天晚上父亲听“土味”音乐获得的快乐，或许远比我们追求“高级趣味”时的矜持更加真实、更加接近生活的本质——这是真理无法驳倒的东西。&lt;/p&gt;
&lt;p&gt;“我不需要你教我什么第三重境界，对与不对、好与不好，何必如此执着？”&lt;/p&gt;
&lt;p&gt;或许所谓的“见世面”也是如此。那些批判“浮于表面”的声音往往忽略了，所谓的“浮于表面”是一切的基石，是“必要条件”。若以为只有深入思考、内心丰富才能称为“见世面”，而忽略那些东西，怎么谈得上在内心构建起一个完整的世界？浮光掠影固然不够深刻，但如果没有这些“表面”，深刻也只能是空中楼阁罢了。&lt;/p&gt;
&lt;p&gt;埋头苦干的“小镇做题家”们，可怜没有机会真正地走过这世界的大好河山，有的只有殿堂所教授的真理……却忘了，在神圣殿堂之下的，才是自己，才是最无可辩驳的事实。&lt;/p&gt;
&lt;p&gt;我不是一个圣人，甚至可以说是一个浑浊的人——就像那首“土味”音乐，它可能永远进不了艺术的神圣殿堂，但它却在某个夜晚成为了父亲内心最真实的慰藉。而这一刻，比任何真理都更加动人。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>矛盾式</title><link>https://saro.pub/emotion-confict</link><guid isPermaLink="true">https://saro.pub/emotion-confict</guid><description>人们常说：痛并快乐着</description><pubDate>Sat, 30 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;原文&lt;/h2&gt;
&lt;p&gt;前几天做稽阳联考的语文试卷时，第一篇阅读就给我抓住了&lt;a href=&quot;https://www.saroprock.com/%EF%BC%88%E4%BA%8B%E5%AE%9E%E4%B8%8A%E6%88%91%E8%A7%89%E5%BE%97%E6%AF%8F%E5%BC%A0%E8%AF%AD%E6%96%87%E5%8D%B7%E5%AD%90%E7%9A%84%E9%98%85%E8%AF%BB%E9%83%BD%E6%8C%BA%E6%9C%89%E6%84%8F%E6%80%9D%E7%9A%84%EF%BC%89&quot;&gt;^1&lt;/a&gt;：讲什么呢？讲“矛盾式表达”。比如形容自己是一个“绝版平凡”的人，或者是平日里调侃的“朋克养身”，都是“矛盾式表达”的典型例子。欸你还真别说，这种表达你乍一看好像奇奇怪怪，其实已经深刻融入我们的生活了。像你说“女汉子”、“土豪”的时候，也丝毫体会不到它们原本是用两个“矛盾”的词拼起来的一样。&lt;/p&gt;
&lt;p&gt;所以……我干嘛对这种平常的事情感兴趣呢？我又看了一遍原文——原谅我不想再重复一遍内容了——觉得，在这种矛盾式的表达、或者说在矛盾格的“语言陌生化”之下，其实折射出了当代青年的&lt;a href=&quot;https://www.saroprock.com/%E5%A6%82%E6%9E%9C%E8%AF%B4%E8%BF%99%E4%B8%AA%E5%A4%AA%E5%A4%A7%E4%BA%86%EF%BC%8C%E6%88%91%E8%A7%89%E5%BE%97%E5%8F%AF%E4%BB%A5%E5%8D%95%E6%8C%87%E6%88%91%E8%87%AA%E5%B7%B1&quot;&gt;^2&lt;/a&gt;，一种本能的害怕。&lt;/p&gt;
&lt;p&gt;语文学习中免不了出现人物，而出现人物又免不了要学习人物、剖析人物。老师告诉我们，人物有两种：一种是扁平人物；一种是圆形人物。扁平人物很简单，甚至可以用单个的词语去形容他。这在比较古早的故事中很常见，毕竟作者只是借人物指代一种品质，扁平人物个性鲜明有张力，自然是最好不过了。后来大家这样觉得太片面了，所以又出现了圆形人物——在不同的场景下显现出不同的性格品质，好让这个人物更加贴近生活、更真实些。如果说以前的作家既淳朴又简单，只是为了抒发自己的情感。现在的作家则是把选择权交给了读者：因为怎么看圆形人物，取决于你怎么看，那自然是千人千面的了。&lt;/p&gt;
&lt;p&gt;所以我想，既然“女汉子”、“土豪”之类也算，那么“笑哭”这种情感的叠加也是再正常不过了。对我自己而言，这种体会过于深刻了。我时常觉得既伤心又开心，这当然是要从两个方面看的了。只是人毕竟不是端得平的动物，怎么可能毫无偏心呢？总有一份情感更为侧重一些，但是那一份不重要的表达又不能删去，不然就打破了平衡。如此的话，就连到底哪个更重要也说不清的了，也许，我也把选择权交给了自己的读者。&lt;/p&gt;
&lt;p&gt;以前的人们说，天生我才必有用，千金散尽还复来；现在的人们说自己“绝版平凡”。若按我的理解，这自然是侧重于“绝版”二字了——每个人都是独一无二的嘛！这个道理谁不懂呢？可又任凭谁也不能直接说，我是天下独一无二的存在——这不是太狂妄了吗？所以加个“平凡”二字，先小小认同一下平凡，如此“绝版”好似也显得谦虚而理直气壮了起来。害！可是这种表达到底是为了什么呢，因为怕被别人耻笑吗？所以不得不戴上这个并不表意的部分，好让自己把选择权交给别人，如此，也算是尊重读者而不狂妄自大了吧。&lt;/p&gt;
&lt;p&gt;我说，我真的是不懂自己了，或者说，不敢说自己是什么了。我从去年秋开始写日记写到现在，也不懂我自己是谁，可别人是早就给我界定好了。我对这种评价没什么准确不准确的看法，毕竟我并不知道自己是谁，也无法否认或认同。我就像是一本被别人阅读的书，作为读者的他们当然可以从个个方面解读我这个圆形人物，我丝毫没有怨言，他们总是正确的。只是作为作者的我就算是不懂，也还是得写写自己的圆形人物才行。所以我说我怕啊，害怕什么呢，也许是怕太绝对、太过分了，把自己变成了一个扁平人物，就无法在三维世界中存活了。&lt;/p&gt;
&lt;p&gt;太矛盾的词汇。可作者的思绪也只能在这种矛盾式中折射体现。只怕别最后连自己也无法透过矛盾看清自己，我写日记，只是尽力往前走。什么正确与否，我不考虑，也无法考虑。忌讳情感的直接表达，好似太宝贝，而将选择的余地丢给对方选择——可人不是端得平的动物，怎么可能毫无偏心呢？&lt;/p&gt;
&lt;h2&gt;附件（日记）&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/Cache_-174417bc75845040.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;附件（考试试卷）&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/640.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/640%20(1).webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>语文学习——？</title><link>https://saro.pub/yuwen-to-learn</link><guid isPermaLink="true">https://saro.pub/yuwen-to-learn</guid><description>数学、物理、化学、英语、地理……语文</description><pubDate>Sun, 17 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;原文&lt;/h2&gt;
&lt;p&gt;老师说，要写一点语文学习的想法。我其实有些迷茫：如果是数学、物化这种理科，我们可以整理些学习方法，或是错题之类的。就算是诸如英语、地理这种文科，那其实也是有路可走的，比如说语有语法，有句式，行文之间亦有思路。是它的题型题型型决定的，看似开放的作文实际上是很死的。再比如地理，很多实际上并不是“文科题”，而是有逻辑、有推导的“理科题”。要不以前选地理怎么还要学物理呢？可语文呢……嗯，我确是难以找出一个好的“主线”去形容它。&lt;/p&gt;
&lt;p&gt;语文当然是有什么“答题方法”的，但若只能一昧套模板，那其实也没什么意思。我在网上总是看到有人在玩什么“表达了作者的思乡之情”，其实很能反映当代学生们学习的方法太僵化了，成为了一种思维定式：看到类似的就会套模板。可得是多答不扣分，每次对答案的时候就会发现自己总是答了一堆不知所云的内容。&lt;/p&gt;
&lt;p&gt;分析后，我觉得现在有一个挺好的方向，那就是提高学生的阅读、鉴赏能力。就像现在美术课并不是教你去画一幅多么漂亮的作品，而是教你如何去欣赏别人的优秀作品，也就是现在的模式，美术鉴赏。语文我觉得很像。题目无外乎于你是否读懂了文章本身，问的不是你的观点，更多是作者的观点。我认为这个方向其实很正确，对于事物的评析鉴赏能力对我们而言是很欠缺的。人们总说你都写不出这么好的文章，怎么去评价别人的？我倒想把它们调换一下：你都读不懂、分析不了一篇好的文章，怎么写出一篇好的文章？人们总说大众水平（审美）在下滑，语文又何尝不是如此呢？&lt;/p&gt;
&lt;p&gt;但鉴赏能力不是一蹴而就的，去鉴赏、去读，才能提高。像我这种埋头自己写自己的，可能就没有什么特别大的作用了，更不用说我曾经还对读背这种任务感到十分不屑了。所以，这就是为什么我到现在对这种仍是一知半解，不过我会尽力去靠近那些东西。我总觉得我并不是一个理性的人，感性反而更多些。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>三脚猫</title><link>https://saro.pub/a-cat</link><guid isPermaLink="true">https://saro.pub/a-cat</guid><description>三角形具有稳定性</description><pubDate>Thu, 14 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;原文&lt;/h2&gt;
&lt;p&gt;我有多久没写随笔了？事实上，我倒是没太关注这个。只知道老师上次收上去之后，就再没把随笔本发下来过。语文作业也换成了卷子……是真没时间去写，幸亏期中考考过了，趁这喘息的功夫，我才着急忙慌写完作业订正完卷子，再拿一本新本子打开。&lt;/p&gt;
&lt;p&gt;可是我又写啥呢？之前写完《米考伯》的那一篇后，我好像像失去全身气力似的，再蹦不出半个字眼来。若换作是在网上，我可以装小猫“喵喵喵”地装疯卖傻——现实中怕是真傻了。不过，我倒是认识一只“三脚猫”，在我还作为一只猫之前，它还算得上位朋友。于是，我便只好写写他的事来“装疯卖傻”了，怎么说我已不是猫了。&lt;/p&gt;
&lt;p&gt;在我作为一只猫在人类中生活时，它就已经在那儿了，只是那时它还很小。它的父母也许已经被警卫们逐出了校园——流浪猫确实是挺恼人的——只有它留了下来。我还记得那天在升旗仪式上，保安大队长一字一句的嘱咐我们，千万不要给那只小猫送吃的。奇怪，不赶也不留，八成是得饿死了。我脑子里莫名想着，没想到退场的人们早已散开了。&lt;/p&gt;
&lt;p&gt;那天之后就奇了怪了，每次从食堂里出来，我总是能在右边的那棵大樟树下看见它。这确是个好去处，有树叶照着，还不怕雨淋。最主要的是不会饿着——香肠、猫粮、牛奶。嘿！ 我是说，警卫们呢？大会方针白说了？可惜那时我没工夫去管那些有的没的，马上期中考了，我得赶紧回去，顶多在走路时想想罢了。&lt;/p&gt;
&lt;p&gt;呃啊！我的字怎这么差，真的太久没写了吗…… 先不说了，总之是，人越来越多，了一片还有一片……你们在跳海草舞吗？&lt;/p&gt;
&lt;p&gt;你看我多蠢，一页翻篇了，为啥是“三角猫”，呸！三脚猫！都还没解释。哎！其实它腿脚便利得很！那是猫啊！猫最突出的不就是敏捷吗？什么上房揭瓦啦，去年级主任那里偷几张卷子来——哎！可别说是我说的啊！不然年级主任得给我打死了，她可是第一个喂猫的老师呢。反正就是，谁也说不清的缘故，它就拄拐了。拜托！真别问我猫怎么柱的拐，问它去呗！总之看样子一条脚——是一条脚！猫科动物的脚可长着哩！——是折了，就这样孤零零地晾着，倒也没绷带没石膏的……嗯石膏，CaSO4·2H2O，也许是二分之一个水？&lt;/p&gt;
&lt;p&gt;所以它理所应当成了“三脚猫”了。嗯……大抵是因为猫没有咯吱窝的缘故，所以为它量身定做的“小猫架子”也派不让什么太大的用场，只能像用登山杖一样，往前杵着，然后用力，用力，用力蹦嗒一下。嗯……这可是用了我三次去食堂的时间才看请的，毕竟在一堆海草中想看清楚只猫真不是件易事。不过要我说，这咱还是别摆这小猫架子了。之前有一次，保安大队长大踏步走来了，“三脚猫”一下成功夫猫了，顾不得架子顾不得伤腿（脚），嗖嗖地就从海草中游过去了，也没见啥事啊！&lt;/p&gt;
&lt;p&gt;不过不过，这小猫还挺懂人情的，听见我说，你的登山杖掉了~它第二天真把小猫架子换成了登山杖。深红色的黑，够味儿。&lt;/p&gt;
&lt;p&gt;“嗒、嗒、嗒”。三角……三脚猫的登山杖柱在地上就是那么铿锵有力。现在它活脱脱像个人了，拄着登山杖挺起腰板，一只脚金鸡独立着。如果它父母还健在的话，准会大吃一惊。&lt;/p&gt;
&lt;p&gt;原谅我没事可讲了！它现在足够大了，我也得去考期中考试去了。嗯？你说怎么不说说我还是猫时和他的故事？嘿！放尊重些可以吗，好吗？我现在可是人了，不是猫！你知道的，物种的认知从来都是自由的。像隔壁有一位同学，见人就让别人叫他自己为“小狗”。我是看不下去的，你为什么要给自己取一个这么有侮辱性的名字？你不也称自己为猫吗？他说，狗比起猫的话，也许还更城实些呢！从那以后我就不再是一只猫了。呵呵，我可是充满理性光辉的人类啊！所以你就别打听我和它之前的故事了，这设什么好讲的。猫和狗天生是对死对头，我听了狗的话，自然与它决裂了。&lt;/p&gt;
&lt;p&gt;Btw，它做的有些下流事我还是明白的。每天看它蹒跚地往前蹦，感觉也算是值了。可惜它没上过人类的数学课，三角猫、三脚猫，三角形具有稳定性也不懂么？本来它也用不到这减到最小仍然显得粗大的登山杖了，不过他乐意把三角弄成四角，也随他的便喽~嗯……三角成四角，四脚成三脚，也算是等价交换了。&lt;/p&gt;
&lt;p&gt;考完试后，冷锋过境，嵊州这座小城又下起了大雨。作为地理生的我放下笔，伴着下课的铃声走到外边。二楼角度正好，可以破开雨墓看到那棵大樟树，只是没看见那暗红色光影。也许藏起来了……还是说，它就在我身后？我一哆嗦，也不知为啥这么想。&lt;/p&gt;
&lt;p&gt;只是觉得，它好像一直在我身边，没离开过。哎，只盼冷锋过去之后，这场雨幕可以冲刷走一切，然后是万里无云——只是一位地理生的直觉。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>圆锥曲线魔法-2</title><link>https://saro.pub/conic-section-2</link><guid isPermaLink="true">https://saro.pub/conic-section-2</guid><description>极坐标中的圆锥曲线</description><pubDate>Mon, 07 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;一次平平无奇的数学考试，一道平平无奇的选择题，为何卡了我这么久？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;极坐标中的圆锥曲线&lt;/h3&gt;
&lt;p&gt;我觉得我笔记已经写的够详细了，就不打字了吧（逃）&lt;/p&gt;
&lt;p&gt;说实话，上学的日子回家确实没什么时间，还是早点睡了吧……&lt;/p&gt;
&lt;h4&gt;例题&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;已知$F_1$、$F_2$是椭圆$C:\frac{x^{2}}{a^{2}}+\frac{y^{2}}{b^{2}}=1(a&amp;gt;b&amp;gt;0)$的左右焦点，$A$、$B$是椭圆$C$上的两点，若$\overrightarrow{F_{1}A}=2\overrightarrow{F_{2}B}$，且$\angle AF_{1}F_{2}=\frac{\pi}{4}$，求$e$。&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;笔记 &amp;amp; 题解&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20241007_222345.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>米考伯</title><link>https://saro.pub/micawberism</link><guid isPermaLink="true">https://saro.pub/micawberism</guid><description>在“怀疑”之下，任何主义都将被归于荒谬</description><pubDate>Thu, 26 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;原文&lt;/h2&gt;
&lt;p&gt;狄更斯笔下的世界是一个谦卑的市民世界，一个心满意足的英国，是众多生活可能性中狭小的一部分。如此贫困的世界只有通过强烈的感情，才能变得富有起来。&lt;a href=&quot;https://www.saroprock.com/%E6%91%98%E8%87%AA%E8%AF%AD%E6%96%87%E4%BD%9C%E4%B8%9A%E6%9C%AC%E7%AC%AC%E4%BA%94%E5%8D%81%E9%A1%B5%E7%AC%AC%E5%85%AD%E9%A2%98&quot;&gt;^1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;初读《大卫·科波菲尔》时，我对文中的米考伯一家厌恶透了， 明明生活如此艰难却还要爱慕虚荣的米考伯夫妇简直令我作呕。他们卖掉了家具，当掉了餐具，只为吃上一顿炸羊排、喝上一口热麦酒，甚至最后进了监狱，仍是一幅“贪图享乐”的样子，丝毫不悔过。于是我理所应当的认为这只不是篇批评现实的小说，主人公大卫最后的光芒也被遮盖罢了。可事实证明我完全想错了，作者想要表达的善良恰恰体现在米考伯夫妇身上，大卫也并不是这一个片段的主角。&lt;/p&gt;
&lt;p&gt;我想我先入为主的偏见是一切的根源：我忽略了“文雅”与“亲密”，忽略了“依然相信”与“毫不怀疑”；我忽略了“一种屈尊俯就的口气”， 忽略了“她曾尽过最大的努力”；我忽略了作者想要表达的、从小人物中表现的”谦卑的市民世界”，而将它们无一例外地归于小说批评家所常用的“反讽”的手法上。以至于等到上了这篇课文后，我才不得不重新审视起这一段来。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“体现了面对生活困境积极乐观的态度，体现出对美好生活的向往”&lt;/em&gt; 写下这答案，我真心怀疑我拿错了答案——如果说米考伯主义都算积极向上的话，什么虚伪也就应该不存在了。但我必须改变这种观点， 必须认识到好的方面——对于米考伯一家来说——我总得这样做，不管是从认识还是从成绩方面来说。&lt;/p&gt;
&lt;p&gt;如果我坚信他们所说的一切属实，就像大卫“依然相信”与“毫不怀疑”一样，事情会变得好办得多。相信“当我跟爸爸妈妈一起过日子时我真的不懂，我现在用的‘困难’这两个字是什么意思”，也许卖掉资产比它们留在房里发臭要有用得多、也许住在监狱比住在家里要舒服得多——前提是“我相信”。&lt;/p&gt;
&lt;p&gt;如果先入为主的偏见是一切的根源，那么“相信”与否就是偏见的根源。换而言之，如果我太过于注重人的力量而忽视客观事实，自然会认为他们虚伪、贪图享乐。正因为我不承认困难生活的前提，我才会觉得所谓”乐观的态度”是错误的。&lt;/p&gt;
&lt;p&gt;我怀疑，怀疑是否将怀疑变成了一种习惯————我怀疑这是相当严重的一件事。不对事件加以肯定而仅仅只是怀疑，很容易被主观偏见带偏而得到一个完全虚无的结果并且深信不疑。可以看到，我在第一次读这篇小说时，唯一肯定的人物是大卫，而对议论的米考伯夫妇则是完全地归谬。太荒唐了……我现在不用怀疑了，我若以后仍是这种思维模式，除了自嗨毫无意义可言。&lt;/p&gt;
&lt;p&gt;当然，辩证来说，倒也不能立马全部否定我之前的思维模式。只是现在再静下心来想想，肯定背景，米考伯夫妇虽然负债累累，生活不顺，但当米考伯先生面对一个陌生的儿童，“语调中带有一种屈尊俯就的口气”，主动为“我”领路，给予身处陌生城市的“我”以善意时，当米考伯太太面对借宿男孩掏出的两三先令，“吻了吻我”，定要“我”把钱放回口袋时，我想这便是狄更斯想要构筑的“一个谦卑的市民世界”：哪怕爱慕虚荣的人，都有他的善良所在。&lt;/p&gt;
&lt;h2&gt;原文（图片）&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20240926_225351.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20240926_225404.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>作文与随笔——在笔随心动背后，我们所缺乏的是什么？</title><link>https://saro.pub/o-my-prose</link><guid isPermaLink="true">https://saro.pub/o-my-prose</guid><description>碰壁！啊，好啊，让我们来写作文吧~</description><pubDate>Sun, 15 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;博主欲写一篇文章，结果写了堆&lt;del&gt;删除线&lt;/del&gt;。痛定思痛，深刻反省，遂成此篇水货。&lt;/p&gt;
&lt;h2&gt;原文&lt;/h2&gt;
&lt;p&gt;我这人爱写随笔，当然也自认为擅长写随笔。可前几天我却碰了钉子：在获得灵感之后，我却无法将其表达出来，当面说或许也不赖，写到纸面上就难了。我试图将前因后果解释清楚，可惜几匹白纸全然承受不住如此原始的力量。失败、重来，再一次失败。我不禁想，笔随心动的技巧，为何突然不行了呢？计……呃,我想我总是忽略了一点,忽略了本应与随笔“同级”的作文。作文，作文有何不同呢?&lt;/p&gt;
&lt;p&gt;不知大家看过今年的高考作文题目没有。本身我便不大关心，又听得什么 AI 之类的字眼、“偏向城里的学生”等流言，自然更是不曾浏览过。只是今天语文课讲了，不得不拉出来看看“无心作文”的洋相。说来可笑，洋相不曾见着一点，倒是全然照出自己的丑貌，吓得我赶忙打开这本子，以在最后补救些许。&lt;/p&gt;
&lt;p&gt;为什么我把作文与随笔分得很开？因为不愿随笔的“随”被作文的“作”所禁锢。那时我义愤填膺地写下这句话，老师却评价：两者应和谐统一。我那时不懂，以至于留下隐患———只是那时我没发现，只是现在有些严重。&lt;/p&gt;
&lt;p&gt;“笔随心动”看似优美，实则犯了大忌，忘记了书面语与口头表达的区别。嘴巴不思考随心一张一合，人们说你是“出口成章”。但此“章”非彼章，写字不动脑就任其恣意妄为，即应被贬为“幼稚”。“幼稚”并非是全坏的，它可以拉近与读者之间的距离，让人感到真实与亲切、感到舒适，进而幸福。但我们不能忽略它在根本上的问题，那就是幼稚的文本无法构建一个完整清晰的说理逻辑，也就无法写出各种需要明确陈述观点的文章——口头表达往往大长以至于难以凸出重心。&lt;/p&gt;
&lt;p&gt;我写不出那篇文章，因为我幼稚的、平铺直叙的语言无法支撑出一个良好的观点；我讨厌作文喜爱随笔，正因为我缺乏准确有用的语言勾勒条条框框，而蜗居于自己的舒适圈中。重看高考作文,重点是 AI 吗？不是，重点在于“问题”。如何剖析“问题”避 免将其狭隘地归为“诈骗”“麻烦”之类，正是语文所考察的。只是很多人，或我，习惯于潦草地阅读而不加以思考，才将此题荒谬地归为“偏心”。&lt;/p&gt;
&lt;p&gt;在笔随心动的背后，我们所缺乏的是什么？也许我们还小，只能写出幼稚的文字。 也许我们大了，仍想回到小时候去。收手吧，华丽的词藻，一切已在不言中,&lt;/p&gt;
&lt;h2&gt;原文（图片）&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20240915_225213.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;已死的神圣殿堂&lt;/h2&gt;
&lt;h3&gt;前言【旧】&lt;/h3&gt;
&lt;p&gt;撰写这篇文章遇到了很多困难，我居然没办法一下子完成它。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;前后态度的转变是一个很大的问题：因为我并不是因为这一件事情而当场改变的，如何叙述原因就成了一个难题——至少我不能直接略过第一部分。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;如何引出题目也是个难题，这总是太突兀了——开始写了才发现很多东西都没有考虑周到，毕竟才一天，时间还是太少。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;补充信息【旧】&lt;/h3&gt;
&lt;p&gt;博主本来想在学校里面写好回来打的，结果写了一堆废稿（&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20240912_222803.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20240912_222818.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;作文与随笔&lt;/h2&gt;
&lt;p&gt;作文可以翻译为 &lt;strong&gt;&amp;quot;essay&amp;quot;&lt;/strong&gt;，而随笔则可以翻译为 &lt;strong&gt;&amp;quot;informal essay&amp;quot;&lt;/strong&gt; 或 &lt;strong&gt;&amp;quot;prose&amp;quot;&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Essay&lt;/strong&gt; 通常指比较正式、有结构性的文章，像学校里的作文、议论文等。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Informal essay&lt;/strong&gt; 或 &lt;strong&gt;prose&lt;/strong&gt; 则更加随意，表达个人观点、感受。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>圆锥曲线魔法-1</title><link>https://saro.pub/conic-section-1</link><guid isPermaLink="true">https://saro.pub/conic-section-1</guid><description>圆锥曲线中遇到非对称韦达定理怎么办？什么是同构 + 齐次化？</description><pubDate>Wed, 11 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;这只是博主对自己最近学习的一些内容的整理喵（不能算是笔记吧？），仅作分享交流用，一起加油！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;老师曾说，圆锥曲线，只要你有&lt;strong&gt;强&lt;del&gt;大&lt;/del&gt;的计&lt;del&gt;算&lt;/del&gt;能&lt;del&gt;力&lt;/del&gt;&lt;/strong&gt;，那就行了。可是，&lt;strong&gt;仅仅&lt;/strong&gt;有这显然是不行的。诚然，圆锥曲线这种&lt;strong&gt;死&lt;/strong&gt;题目只要嗯算便可，但是你总不能一道题目死磕个五六十分钟吧？所以掌握一些方法是很必要的！刚好老师讲了一些&lt;strong&gt;奇技淫巧&lt;/strong&gt;，赶忙记录一下。&lt;/p&gt;
&lt;p&gt;因为博主太烂懒得打数学公式了，所以很多题解都用图片展示了唔。&lt;/p&gt;
&lt;h3&gt;非对称韦达定理&lt;/h3&gt;
&lt;p&gt;众所周知，圆锥曲线最常见的题型就是联立方程组得到韦达定理，再通过几何关系利用韦达定理解决问题。但是有的时候几何关系化简后尴尬了，居然没有对称的韦达定理表达式？只留下单个的根，这怎么办呢？&lt;/p&gt;
&lt;h4&gt;例题一&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;求证有过椭圆的焦点$F(1,0)$交椭圆$\frac{x^{2}}{4^{2}}+\frac{y^{2}}{3^{2}}=1$于$M$、$N$，有$A$、$B$为左右顶点，设$MA$、$NB$有斜率$k_{1}$、$k_{2}$，有$\frac{k_{1}}{k_{2}}$为定值。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：反设直线得韦达定理求解。&lt;/p&gt;
&lt;h4&gt;例题二&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;已知$C:y^2=4x$、$A(x_1,y_1)$、$B(x_2,y_2)$分别在一、四象限，且$x_1x_2+y_1y_2=\frac{9}{4}$，求$\Delta A B O$和$\Delta A F O$面积的和的最小值。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：反设直线得韦达定理+主元法用基本不等式。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这道题目我自己有点奇怪，因为我做的时候没有遇到不良结构的问题，用基本不等式就直接拿出来了。所以我这个方法和非对称韦达定理的关系不大，可能是我自己使用的方法避免了这个问题，只是连我自己也不明白我是怎么做到的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;题解&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20240911_222213.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;同构法 + 齐次化&lt;/h3&gt;
&lt;p&gt;我总想用几句话概括这六个字的精髓，发现太难了。同构法不就是找结构相似的多项式吗？说说简单，但是要能找到&lt;strong&gt;确切有用的&lt;/strong&gt;很难，换句话说，你应该明白自己需要什么，再去同构。这几句话就概括不来了。&lt;/p&gt;
&lt;p&gt;齐次化相信我不用多说了。不过我觉得例题二的方法应该没几个人见过，如此巧妙的构思——不仅仅是变形，直线的设法也很有讲究——还真不是随随便便能想得到的。答案放出来一看很少很简单，自己上手做做可就不同了。&lt;/p&gt;
&lt;h4&gt;例题一&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;已知$C:y^2=4x$，过焦点$F$的直线$AB$交$C$于$A$、$B$，其中$A$在$y$轴左侧且$k_{AB}&amp;gt;0$。现$P(1,0)$连结$A$、$B$交$C$与$E$、$F$两点，问是否存在$\overrightarrow{AB}=\lambda\overrightarrow{EF}$?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：通过相似三角形建立同构。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;下面我有一个向量写错了，以我文本打的为准！&lt;/p&gt;
&lt;p&gt;还有小题一嘴，这个题目我刚开始自己做傻了吧唧用两点式算了半天结果算出了 lambda 和斜率的关系，绷不住了。没想到最后斜率算出来带进去倒是对的，只是那个时候已经过去一节自修课了……&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;例题二&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;已知$A(2,1)$在$C:\frac{x^{2}}{a^{2}}+\frac{y^{2}}{a^{2}-1}=1$上，$l$交$C$于$P$、$Q$，有直线$AP$、$AQ$的斜率之和为$0$，求$l$的斜率。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：修改原椭圆方程迎合所求。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;此题最通用的方法就是&lt;strong&gt;死算&lt;/strong&gt;，这里提供的题解算是另辟蹊径了（&lt;strong&gt;奇技淫巧&lt;/strong&gt;）。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20240911_222236.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>记录一场雨</title><link>https://saro.pub/inner</link><guid isPermaLink="true">https://saro.pub/inner</guid><description>哭得稀里哗啦……好久没有这样单纯地伤心过了，感觉自己还是那个四年级的小孩子罢了</description><pubDate>Sun, 25 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;好奇怪啊……真的开始写了，却不知道从哪里写起——只是觉得这是最真实的情感，就强迫着自己写下来。因为我清楚而又痛心地明白，要是现在再不写下来，那就再也没有机会了：过去了就过去了……就像雨落下……干了就无影踪了……&lt;/p&gt;
&lt;p&gt;刚开始其实并不是什么重要的事情，只是觉得老师的某些做法不太恰当，自己也需要去找一些适合个人的学习方法，所以早上洋洋洒洒写了一千多字，夹在本子里偷偷送给老师。本来我写这一千多字就是为了防止老师主动来找我聊天——可最后也是不消说的，第二节晚自习写到一半，老师还是给我叫出去了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/3faf1153d8349372e66e71dd4f3811f3.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;只能说是趁着这个机会吧——毕竟平时真的很少可以和老师面对面聊聊——我就把自己的想法一五一十地说了。刚开始还很平常，就是聊聊我为什么会这样做嘛：之前化学笔记都是太琐碎的东西，上课记了就记了而没有整理，导致最后复习起来就很困难、也难以抓住重点。比如到底哪些物质可以与 NaOH 反应，我到现在脑子里也没有一个清晰的想法：因为原笔记实在是过于泛泛而谈而没有重点了。作为化学高考班的学生，这种事情肯定是不能有的。所以我现在开始做一件新的事情：把平常的那些大条的笔记都记在课本上面，而在这个条目上完之后，再根据老师所补充的内容重新整理出最最重要的东西。如此，课本和笔记本的分工就很明了了。笔记本瘦身了，我复习起来也更加得心应手。&lt;/p&gt;
&lt;p&gt;老师问我说，那为什么不每天整理而是要留到休息日整理呢？我挠挠头说平常实在是太忙了，要不是今天是星期天返校自修，不然连现在都是没有时间的。&lt;/p&gt;
&lt;p&gt;老师又问，那你这一千字的文章又写了多久呢？&lt;/p&gt;
&lt;p&gt;我断然知道不能说得太久，加上自己本身确实也没在意，就胡诌了个“二十分钟”。我说这个对我来说是很重要的一件事情，所以不能这样用时间衡量；我说我整个整理笔记和写文章的过程耗费了我在图书馆的一个上午，虽然可能有点久，但我觉得很有效果；我说我一直相信人定胜天，所以困扰我的并不是自己智商的问题，而是对一件事情的态度问题。只是我自己也很难克服人性中最懒惰或者得过且过的状态，所以我有时间就逼着我去图书馆——这种看起来很做作的方式来强迫我全身心投入。&lt;/p&gt;
&lt;p&gt;我说，学生总是有一种羞耻情感：不敢与群体的主流观点对立、或是做一些看起来特立独行的事情。比如我其实很想多找找老师聊天，因为我觉得师生之间直接的对话太少了，而这应该是很重要的。可对我来说，主动去找老师总是一件羞耻的事情，会让别人觉得自己很做作——就像一定要去图书馆一样做作——所以我才会写那篇文章，只是因为我不希望我类似于这样主动或者被动地去和老师面对面的聊天。虽然我内心其实很渴望，但是我平常只能，或者是只想做一个普普通通的学生。&lt;/p&gt;
&lt;p&gt;我说，可是，可是我内心总觉得我不应该和他们一样……不过我要先说我自己并没有多少好——现在没有别的人，我可是真真切切地告诉你了啊！以前初中的时候我可差了，每天也就知道打游戏，混个段一百，三年过来 steam 游戏时间都 3000+ 小时了？您问我那后面怎么突然好了？我说也只是因为出去集训了一次，才发现段一百是不够了，后面半年好好读书了而已——可那时候我是不对的——因为仅仅是把自己封闭起来，而没有找到真正的内源动力。到最后也不过是超过录取分数七八分勉强上了一中，提前班期末考试也只有段六七十的水平，真的还是很自卑的，还是没有找到真正学习的方法……&lt;/p&gt;
&lt;p&gt;我说，你知道吗，那个时候我看到了一个超级厉害的小朋友啊……初中到高中的那个暑假，我去杭州培训的时候，有一位下半年才上初一的小朋友，不远万里从天津来到杭州浙理工学习信息技术竞赛。我还记得他那时候的作息：每天早上六点钟起床，然后跑步锻炼，来浙理工打早上三个小时的信息学竞赛。那个时候，他在我们这一群准高中生和一堆 ACM 大学生的机房里面取得了第一名啊！但是他下午就不见了，后面才知道他下午还要去上数学、物理、化学三门课的竞赛，做作业做到零点，然后再睡觉，周而复始。可你知道吗？这可不是他父母安排的，是他自己要来的。是他自己听说有信息学竞赛，小孩子又对电脑感兴趣，才求着父母亲给他带到杭州培训来。数学竞赛的老师对他说，他可以去上数学竞赛；物理竞赛的老师对他说，他可以去上物理竞赛；化学竞赛的老师对他说，他可以去上化学竞赛；就连现在信息技术也是全机房第一名。我想这是不能假的，因为他确实是第一名，而且他每天确实过得很开心——这一眼就看得出来，就数他每天最活跃了，小孩子肯定比我们这些人有活力啊……&lt;/p&gt;
&lt;p&gt;我曾想，这些人不过是传说——谁受得了呢？可现在他确实是在我的眼前了。要知道他到现在也才初二啊……他说他自己倒是不想走竞赛，纯粹是感兴趣，目标是靠中科大少年班——他总是和任何人都聊得来。&lt;/p&gt;
&lt;p&gt;我说，那个时候对我的冲击太大了。我想不管是做什么事情，凡事要有这样的干劲，怎么可能做不好呢？所以我觉得这种发自内心的原生动力才是决定事情的关键——或者说是对一件事情的态度吧。&lt;/p&gt;
&lt;p&gt;我说，您还记得您之前来我们班里面说化学竞赛的事情吗？您说您相信我们都有实力的，只是态度可能有所欠缺所以没有考好。您知道我同桌那个时候多气愤吗：态度态度！又是态度问题！老师死活都觉得是态度问题……现在没有别的人，我就对您说吧，他啊，上个学期化学作业都是抄抄的啦，他有什么资格说这种话呢？我觉得您说的是很对的，确实是态度问题啊，因为我自己感受很深，很多时候自己就是很明白地，清楚这里确实是当时偷懒的缘故——态度嘛、动力嘛。所以我真的不知道为什么他要那样说了，但是我也没有资格或者没有必要去阻止他抄作业，这不是讨人嫌弃的事情吗？也希望我说了这些后您不要去找他的麻烦啊……&lt;/p&gt;
&lt;p&gt;我说，我总是希望有一个好的环境压着自己，把自己变得和那个小朋友一样——至少表面上那么自律勤奋。这也是为什么我现在有时间就溜到图书馆，因为在家里总是控制不住自己：都玩了 3000 小时了，都学习这么久了，为什么不偷偷休息偷偷玩会呢？&lt;/p&gt;
&lt;p&gt;我说，我曾经有一个美好的幻想：我想提前班可是全市最顶尖的一批学生啊！像我这种吵闹的人去了那总可以把自己初中养成的散漫习惯改了吧！结果是有点……奇怪的吧……原来这个世界上真的存在这么吵的一个班级……连普通班都不如了。要不是校领导看我们是提前班的学生，估计扣分都扣光了，只有吵到另一栋楼的高三学长时，校领导才不得不出面制止——真是有活力的孩子们啊。&lt;/p&gt;
&lt;p&gt;我说，只是那个时候我却是成了最安静的那一个。我想大家下课总是在交流知识吧，或者一起聊聊休息一下也不错，总是学习确实也不是个事。可是教室里面却是到处可见的粉笔头、纸团，可能对于高中生来说，这些东西确实是太好玩了吧……我总觉得提前班的氛围不应该是这样，可是他们确实又个个比我厉害，个顶个的聪明机智，我那时死学也只能在中游徘徊。&lt;/p&gt;
&lt;p&gt;我说，到后来也是一个契机吧。我有一个习惯，就是尽可能每天写一篇日记来——我前面是说我没时间整理笔记，这只是因为我觉得写日记来认识自己比整理笔记更加重要。我说了，我觉得“人定胜天”，所以我觉得我更有必要解决我内心深处的问题。我曾思考过“我是谁”这个问题，那个时候我给出了一个答案：我说我是被别人定义的一个我。我觉得我是被社会大众定义的，如果没有人认可我的名字，那我的名字就没有了；如果我没有认可我做过一件事情，那么我就是没有做过的。这种思想挺恐怖的，因为这意味着我不得不去追寻所有人的认同——成为圣人可能才是我的目标吧。可实际上我也不是圣人，当然也不可能是圣人。所以就在这种交接中徘徊，很痛苦。&lt;/p&gt;
&lt;p&gt;我想，也许我不过是一个可怜的、虚伪的、服从于最低劣的欲望而又希望装作圣人的伪君子吧，也许我也不过是希望做一个和他们一样单纯的普通的学生吧。因为说这么多，我也不总是凝固在自己的位置上漠然地看着他们的一切。我这个是很喜欢写文章写随笔的，那个时候写了一篇“独善其身”的随笔。我说人与人其实是分离不开的啦……所以如果从外来看，我与他们其实并没有什么区别，只是我没有扔过纸团和粉笔头罢了吧。&lt;/p&gt;
&lt;p&gt;我说，但我内心总是不允许的……如此我就常常自责：哎哎哎！你明明知道自己有很多不足，怎么胆敢和他们那些人一同玩耍呢？你明明知道还要古诗文未背，怎么胆敢和他们一起谈天说地呢？不光光是这些，有一些行为我真的是忍受不了的：之前我们数学老师不是张老师吗？我真的不知道为什么他们为什么这么不喜欢张老师，说张老师教的烂，说是张老师害得他们数学成绩差。我明白，老师之间会有差距，即使学校已经把最好的老师给了我们，也可能会有一些不同。可是为何要如此憎恨她？更有甚者，从寝室抄起晾衣杆，直接把张老师打倒在地……张老师的桌面是谁都看到的，试卷上面密密麻麻的都是自己用红笔写的题解——虽然可能有点笨，总是被人嘲笑为什么用如此繁杂的方法——可她的态度到底有什么问题呢？以至于严重到让同学抄起晾衣杆劈头盖脸猛打一顿呢？心理课上大家仍是吵吵嚷嚷的，老师让大家画一个”人“，有人就画了那位已经转学的同学背着另一个的背影。顿时全班欢呼雀跃，好似看到英雄一般大呼小叫。我真的不懂，那位同学不管怎么说，自己一顿打下去害得张老师一个星期不能上班，怎么最后还成了英雄人物呢……&lt;/p&gt;
&lt;p&gt;我说，可是我自己又不敢发表自己的观点。我明白，要是现在有谁站起来为张老师说话，一定会起到非常好的转移注意力的作用……我不知道有没有和我一个想法的人，至少我看来，作为一位认真的老师，无论如何也不应该被这样对待……为什么……为什么要这样呢？&lt;/p&gt;
&lt;p&gt;啊啊，我不知道为什么忽地哭了。你要说我心疼老师也行吧……只是一哭就停不下来了，停不下来了。我说，我说我真的不知道为什么，为什么，为什么要这样，为什么，为什么这个班是这样的，这样的。但是我自己也做不了什么，也不敢说什么。&lt;/p&gt;
&lt;p&gt;我哭，我哭为什么自己就是就是做不到呢？明明我，明明我很清楚自己应该做什么，可是却总是被别的什么东西吸引了、干扰了。我想说环境问题，是环境带偏我的！可是我又不能总是说这种话，为什么我自己不能做到“独善其身”呢？道理我懂得，我懂得，可是，可是我就是做不到。我与那些我所厌恶的人没什么两样：没有时间了我也抄答案写了得了；说说知道 NaOH 的问题可是一个学期了也没有解决。我只不过是一个自以为“人定胜天”的人吧……连这种事情都克服不了，我真的，真的好伤心。&lt;/p&gt;
&lt;p&gt;我哭，我哭我为什么连一个可以交流的人都没有呢？上面的话可以和同学说吗？谁会听呢！最后又要被冠上“你成绩好啊”这种莫名其妙的话，干什么呢……我没有发表自己观点的权力，也不敢独自来找老师聊聊，只能随波逐流般狂乱地舞蹈，只能在日记里面默默地祈祷。&lt;/p&gt;
&lt;p&gt;我哭，我哭之前四年级的班主任对我说的话，我还是没有听进去：我知道你是一个对自己要求很高的人，但是你没法要求每个人都向你一样。我哭，还是不要像我一样了，像我这种懦弱又虚伪的人，还是不要像我一样了，还是不要像我一样了。&lt;/p&gt;
&lt;p&gt;我哭，我哭得稀里哗啦的。我早就说过我不应该来这里，我早就知道我来这里我肯定控制不住自己。好久没哭了，因为我觉得没有必要——这一次也一样。我又伤心了，伤心自己也许不应该自作多情，要是不写就不会耗这么久了。&lt;/p&gt;
&lt;p&gt;老师也一直耐心地听我讲，也时不时对我说一些话。虽然那些道理我自己脑子里、日记里已经写过千百回了，可听到别人说出来却是有一种不一样的感觉……老师说，要感谢你呀，你真的是很善良呐。确实，有些同学可能只看重一些方面，比如老师教学水平怎么样。不过有你在班级里，大家也会慢慢改变的吧，还是要感谢你呢。&lt;/p&gt;
&lt;p&gt;我哭得更厉害了，别感谢我，别感谢我了……我这种人怎么敢当呢，啊啊啊，为什么呢。&lt;/p&gt;
&lt;p&gt;我哭，因为我明白，不管我现在如何地伤心，明天还是会恢复原状，还是会得过且过，一拖再拖，然后再在日记本中狠狠地教育自己一番。如此循环往复，我知道的。所以我说，哭这种事情是没有必要的吧，反正它又不能改变什么。&lt;/p&gt;
&lt;p&gt;我哭，但我想我从来没有如此伤心地哭过。感觉自己还是那个四年级的小孩子，没有长大一点。面对倾倒在地面上的树叶，什么也做不了。不论我如何叫喊，最后只能由我自己捡起，再把它们放回垃圾桶里。&lt;/p&gt;
&lt;p&gt;我哭，我想我哭什么呢，我也不知道……&lt;/p&gt;
&lt;p&gt;第三节课下课了，我不敢出去——我知道我现在的眼眶红得羞人——有人进办公室，我赶忙低下头来，生怕别人看到我的样子。听着外边的欢声笑语，大家回家了嘛……我突然觉得自己应该也是他们中的一员，应该开开心心地回家。不用考虑这些莫名其妙的事情，不用执着这些似有似无的道理。反正到最后也一样。若不是我现在强迫自己写下这四千字，怎么也会化为一场虚无的梦境，不见。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>日记——对待生活的一种态度</title><link>https://saro.pub/diary</link><guid isPermaLink="true">https://saro.pub/diary</guid><description>日记？</description><pubDate>Fri, 23 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;原文&lt;/h2&gt;
&lt;p&gt;我总算是该来聊聊这本作为我“人生缩影”的小册子——日记本了。我发现，写日记会有一种神奇的力量：让你忽略时间尺度的长短，顷刻只需一眼，便可以将你拉回故事当天。记忆不再是虚无缥缈的“很久以前”，而是有板有眼的“几月几天”。我说，日记是一种对待生活的态度，教会你深切地体会每一瞬间。&lt;/p&gt;
&lt;p&gt;在“很久以前”，我还不知道日记为何物。仅是觉得生活每天早已被单调地填满，就不再去想那个被认定为“作业性质”的日记本。小学六年、初中三年，我就这样如此充实地度过了九年。可是，接下来的套路你们也都懂得，不就是啥也不记得后才想起日记的好然后重新感叹一回吗？不不不……肤浅了、单调了。如果日记只是如流水账般记录事情，最多不过是成为又一个填满每天的乏味任务，而不能真正地体会到写日记的独到乐趣。如此，还是听我慢慢说来吧。&lt;/p&gt;
&lt;p&gt;如何让每天变得独一无二？这个问题似乎变得奇怪……因为每天本来就是独一无二的。可我再问你，你真的能记住这“独一无二”的每一天吗？从未想过，也无必要。在这种每天被制度化的世界里，“天”与“天”的独立性被破坏，它们不再单独存在而更像是一个整体：比如工作日和休息日。这也许就是为什么鲜有人写日记，因为确实难以找到值得记录几百字的一个瞬间。长此以往，总会造成一个结果：感觉时间过得太快了。毕竟一个星期从七天压缩成了“工作日”和“休息日”两天，谁说时间过得不快呢？&lt;/p&gt;
&lt;p&gt;所以——终于要拎出我的观点了——在这个短时间并不会发生剧变的世界中，找到一个时间锚点是很困难的，也很不牢靠。我们往往忽略了一位重要的、控制我们人生轨迹的人——我们自己。一切的变化中，变化最大的莫过于我们自己；一切的永恒中，陪到最后的仅有我们自己。何必总是去挖掘别人内心而忽略自己？何必总是去等待惊喜的瞬间而又忘了自己？曾几何时，有人问我，问我喜欢吃什么、穿什么。我一时哽住，因为我正像那些一个星期只有两天的人们一样，早已习惯了制式的饭菜与服装&lt;a href=&quot;https://www.saroprock.com/%E5%8D%9A%E4%B8%BB%E5%9C%A8%E5%AD%A6%E6%A0%A1%E9%87%8C%E9%9D%A2%E4%BD%8F%E4%BA%86%E5%8D%81%E5%B9%B4%EF%BC%88%E4%BD%8F%E6%A0%A1%EF%BC%89&quot;&gt;^1&lt;/a&gt;，却连生活中最重要的吃、穿都未曾关注过。我回答说，我不知道。我忽地伤心得很了：一个人活了十几年，连自己喜欢穿什么、吃什么都答不上来，我到底是活了个什么呢？&lt;/p&gt;
&lt;p&gt;不过，这并不是我开始写日记的缘由。我刚开始写日记，仅仅只是为了测试一下我能坚持多少天，顺便记下几个人名地点，免得我总忘了。第一篇日记着实有趣：众所周知，正常人不写日记，所以我现在要变成不正常人了。这多少带点“标新立异”的味道——其实从这里就能一窥我当时的心境如何了。后面，我也遇到了相同的问题：没东西好写了嘛！于是为了完成“目标”似的，我不得不开始大谈我脑子里的奇思妙想，以至于很多时候全文几百字，与当天是“毫无干系”的，全都是我脑中的不算思考的思考。搞笑的是，我自己还专门写过几篇日记吐槽自己这般“脱离日记”的行为，也许吐槽对象也包括它们自己。&lt;/p&gt;
&lt;p&gt;可你听了我前面讲的那些话后，还会觉得那些东西真的是“毫无干系”、“脱离日记”的吗？我每天的所思所想，难道不恰恰是日记本身？想通这点后，我便无所顾忌了，而我自己也早已爱上了这个本用来测试自己的奇怪任务。它给了我一个难得的空间，可以记录自己的一切。这在平时是不被重视且羞于启齿的内容，可现在，我终于可以坦然地面对真实的自己了——我对自己的认识太少了。&lt;/p&gt;
&lt;p&gt;所以现在在学校，只要抽得出半个小时，我一定认认真真地写完一篇日记来。它教会了我在这个平淡的世界中寻找色彩——我自己就是最鲜艳的色彩；告诉了我无论如何都不要忘记自己这一颗真实、而又毫无保留的心——这是我最看重的东西。日记，不是千篇一律的流水账；不是那年今日的备忘录；更不是阴晴圆缺的“天气记录本”。日记，是一种对待生活的态度。当你写不下日记的时候，那就是它在警醒你：孩子，何不问问你自己？&lt;/p&gt;
&lt;p&gt;双子座的我十分迷信地认为世上总有一个人等着我去找寻，那便是我的知音。现在发现，我想得确实不错，我确实一直在等自己的回眸。&lt;/p&gt;
&lt;p&gt;人在路途，幸而有一本册子只陪着我。照顾好自己，过好每一天，我想，这就是日记教会我，对生活的一种态度&lt;a href=&quot;https://www.saroprock.com/%E6%88%91%E6%80%BB%E8%A7%89%E5%BE%97%E6%88%91%E8%A6%81%E8%A1%A8%E8%BE%BE%E7%9A%84%E4%B8%8D%E6%98%AF%E8%BF%99%E4%B8%AA%EF%BC%8C%E4%BD%86%E6%98%AF%E5%8F%88%E9%9A%BE%E4%BB%A5%E5%BD%A2%E5%AE%B9%E3%80%82&quot;&gt;^2&lt;/a&gt;。&lt;/p&gt;
&lt;h2&gt;原文（图片）&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20240823_230245.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20240823_230249.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>局外人</title><link>https://saro.pub/outsider</link><guid isPermaLink="true">https://saro.pub/outsider</guid><description>第一篇“不负责任”的随笔</description><pubDate>Wed, 21 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文实际撰写日期为 &lt;code&gt;August 18 2024&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;原文&lt;/h2&gt;
&lt;p&gt;之前有人推荐我去看一本加缪的小说《局外人》，刚好手头无书好看，便从图书馆中借了一本来，同时还附了一本《鼠疫》。&lt;/p&gt;
&lt;p&gt;看完后，我突然明白他为何推荐这本书给我了。在之前，我曾写了一篇五千字的长文，记录了一下自己的心迹。简单来说，就是对这世界的环境失望了：限制互联网上太多负能量的内容，他们发出来大多只是为了找寻一份安慰或鼓励——这本身挺好。可问题是，我们对于他们来说，不过是一个&lt;strong&gt;局外人&lt;/strong&gt;罢了。一点点微不足道的安慰并不能改变他们所生活的环境，更不可能让他们忘记自己所经历过的事。我们这种局外人又做不了什么，反而会被这种情绪反噬，在我看来这是得不偿失的&lt;a href=&quot;https://www.saroprock.com/%E5%85%B6%E5%AE%9E%E8%BF%99%E9%87%8C%E8%A1%A8%E8%BE%BE%E7%9A%84%E4%B8%8D%E5%A4%AA%E5%A5%BD%EF%BC%8C%E6%B2%A1%E6%9C%89%E6%B8%85%E6%A5%9A%E5%9C%B0%E9%98%90%E6%98%8E%E6%88%91%E7%9A%84%E8%A7%82%E7%82%B9%E3%80%82%E4%B8%8D%E8%BF%87%E5%AF%B9%E4%BA%8E%E8%BF%99%E7%AF%87%E6%96%87%E7%AB%A0%E6%9D%A5%E8%AF%B4%E5%80%92%E4%B9%9F%E4%B8%8D%E9%87%8D%E8%A6%81%E4%BA%86%E2%80%A6%E2%80%A6&quot;&gt;^1&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;所以那时我说，一昧从外界找帮助是不会有用的，而是靠自己的！&lt;/p&gt;
&lt;p&gt;但看完《局外人》后，我又不得不面对一种情况……&lt;/p&gt;
&lt;p&gt;故事的主人公确是犯了罪，这没错。可问题在于他自己成为了自己事情的“局外人”：律师是法律安排找的；辩词不是自己口中说的；意识是被强加的。整个过程中，他仿佛成了一个符号，可以被自由地挪动在各大报纸上。前因后果是不重要的、本人的想法是可以不听的。反倒是之前去参加母亲葬礼的事被一次次炒作，将他与另一个罪犯相提并论，最终在民众面前“人头落地”。&lt;/p&gt;
&lt;p&gt;记者只是为了更高的稿费；律师只是为了一次完美的辩护&lt;a href=&quot;https://www.saroprock.com/%E2%80%9C%E5%AE%8C%E7%BE%8E%E7%9A%84%E8%BE%A9%E6%8A%A4%E2%80%9D%E5%B9%B6%E4%B8%8D%E8%83%BD%E2%80%9C%E6%8C%BD%E6%95%91%E2%80%9D%E4%BB%80%E4%B9%88%E3%80%82&quot;&gt;^2&lt;/a&gt;；看似善良的神父也仅是执着于自己的信仰。无人关心这个事情的主角，主角成了&lt;strong&gt;局外人&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如此被裹挟的结果，主角好像也无力回天。也许他唯一能做的，不过是在上空，默默地看着自己被审判，然后死在广场上。&lt;/p&gt;
&lt;p&gt;漠然地做了这么久的局外人&lt;a href=&quot;https://www.saroprock.com/%E4%B8%BB%E8%A7%92%E6%9C%AC%E8%BA%AB%E7%9A%84%E8%A1%8C%E4%B8%BA%E4%B9%9F%E6%98%AF%E4%B8%80%E4%B8%AA%E2%80%9C%E5%B1%80%E5%A4%96%E4%BA%BA%E2%80%9D%EF%BC%8C%E6%AF%94%E5%A6%82%E5%88%9A%E5%BC%80%E5%A7%8B%E6%8E%A5%E5%88%B0%E6%AF%8D%E4%BA%B2%E6%AD%BB%E8%AE%AF%E5%90%8E%E5%BC%95%E5%87%BA%E7%9A%84%E4%B8%80%E7%B3%BB%E5%88%97%E4%BA%8B%E4%BB%B6%E2%80%A6%E2%80%A6%E5%BB%BA%E8%AE%AE%E7%9C%8B%E5%8E%9F%E8%91%97%E3%80%82&quot;&gt;^3&lt;/a&gt;，没想到最后成了自己的局外人。&lt;/p&gt;
&lt;p&gt;第一篇随笔，没什么思考，字也很差；最多的用处可能是证明我看了书。&lt;/p&gt;
&lt;h2&gt;原文（图片）&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20240821_225849.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;关于本文&lt;/h2&gt;
&lt;p&gt;推荐此书的人是：&lt;a href=&quot;https://nickchen.top/&quot;&gt;Nick Chen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;看完第一本后，本来想好好地写一篇读后感。可是……也是自己的原因吧，最终也没有写成。不管是从读后感还是回信的角度来说，这篇文章都是不合格的，以至于我不得不加上脚注来进一步阐明我的观点。不过既然写了——虽然没有推敲，虽然连字都是歪七扭八的——真实的思想就是不能放过的宝贵财产。正如我博客介绍所说的一样——这是一本本子。本子倒也应该记录一些简单平常的东西。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>酸碱质子理论</title><link>https://saro.pub/078817e</link><guid isPermaLink="true">https://saro.pub/078817e</guid><description>又称布仑斯惕-劳里酸碱理论，也称布-洛酸碱学说（英语：Brønsted–Lowry acid–base theory），是丹麦化学家约翰内斯·尼古劳斯·布仑斯惕和英国化学家托马斯·马丁·劳里于1923年各自独立提出的一种酸碱理论。该理论认为：凡是可以释放质子（氢离子，H+）的分子或离子为酸（布仑斯惕酸），凡是能接受氢离子的分子或离子则为碱（布仑斯惕碱）</description><pubDate>Mon, 19 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;到底什么是酸、什么是碱？&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;通过前几年在化学教科书&lt;a href=&quot;https://www.saroprock.com/%E7%89%B9%E6%8C%87%E4%BA%BA%E6%95%99%E7%89%88%E3%80%82&quot;&gt;^1&lt;/a&gt;中的学习，我们对酸与碱有如下的定义：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;凡是在&lt;strong&gt;水溶液&lt;/strong&gt;中电离出的阳离子&lt;strong&gt;皆为&lt;/strong&gt; $H^+$ 的物质叫做酸（acid）；&lt;/li&gt;
&lt;li&gt;凡是在&lt;strong&gt;水溶液&lt;/strong&gt;中电离出的阴离子&lt;strong&gt;皆为&lt;/strong&gt; $OH^-$ 的物质叫做碱（base）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;上面的酸碱定义其实是 Arrhenius 酸碱理论。可以发现，上述定义对酸和碱的分类具有两个明显的限制条件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;只能在&lt;strong&gt;水溶液&lt;/strong&gt;中进行酸碱反应；&lt;/li&gt;
&lt;li&gt;必须产生特定的离子——酸产生 $H^+$ ，碱产生 $OH^-$ 。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;然而，随着化学研究的不断深入，我们发现这些限制使得酸碱理论的应用范围大大受限。在非水溶液、或者不涉及 $H^+$ 或 $OH^-$ 的反应中，上述定义变得不再适用。因此，科学家们需要一个更为广泛的理论来解释这些现象。&lt;/p&gt;
&lt;p&gt;于是，在1923年，丹麦化学家约翰内斯·尼古劳斯·布仑斯惕（Johannes Nicolaus Brønsted）和英国化学家托马斯·马丁·劳里（Thomas Martin Lowry）分别独立提出了一种新的酸碱理论，称为&lt;strong&gt;Brønsted–Lowry 酸碱理论&lt;/strong&gt;。该理论打破了传统的水溶液限制，为理解和解释酸碱反应提供了更为广泛的视角。&lt;/p&gt;
&lt;h3&gt;在我们学习中的问题&lt;/h3&gt;
&lt;p&gt;如果我们仅仅局限于 Arrhenius 酸碱理论，就难以解决一些问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;为什么 $NaHCO_3$ 的水溶液是碱性的？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;根据 Arrhenius 的定义，碱是指在水中电离出 $OH^-$ 的物质。然而，$NaHCO_3$的水溶液中并不直接产生 $OH^-$，但它的水溶液却表现出碱性。事实上，$HCO_3^-$ 离子在水中可以接受一个质子（$H^+$），形成$H_2CO_3$，同时生成 $OH^-$：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;为什么 $NH_4Cl$ 的水溶液是酸性的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在水中，$NH_4Cl$ 会电离成 $NH_4^+$ 和 $Cl^-$。根据 Arrhenius 理论，$Cl^-$ 和 $NH_4^+$ 本身都不生成 $OH^-$ 或 $H^+$。但在 Brønsted–Lowry 理论中，$NH_4^+$ 可以作为酸，释放出一个质子，这个过程导致溶液中的 $H^+$ 浓度增加，使得溶液呈酸性&lt;a href=&quot;https://www.saroprock.com/%E6%88%91%E4%B8%AA%E4%BA%BA%E4%B8%80%E8%88%AC%E8%A7%A3%E9%87%8A%E4%B8%BA%E7%94%9F%E6%88%90%E5%BC%B1%E7%A2%B1%E4%B8%80%E6%B0%B4%E5%90%88%E6%B0%A8%E5%AF%BC%E8%87%B4%E3%80%82&quot;&gt;^2&lt;/a&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;del&gt;在我刚学化学的时候，这对我来说确实是个未解之谜。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;这些例子说明，尽管 Arrhenius 酸碱理论在某些情况下有效，但它的局限性使得我们无法解释某些现象。Brønsted–Lowry 理论则为这些问题提供了更广泛的解释。&lt;/p&gt;
&lt;h2&gt;Brønsted–Lowry 酸碱理论&lt;/h2&gt;
&lt;h3&gt;定义&lt;/h3&gt;
&lt;p&gt;根据 Brønsted–Lowry 酸碱理论，&lt;strong&gt;酸&lt;/strong&gt;被定义为一种能够&lt;strong&gt;给予质子（$H^+$）&lt;strong&gt;的物质，而&lt;/strong&gt;碱&lt;/strong&gt;则是能够&lt;strong&gt;接受质子&lt;/strong&gt;的物质。这种定义不再局限于水溶液中的特定离子，因此更具普遍性。&lt;/p&gt;
&lt;p&gt;在这个理论框架下，酸碱反应被认为是质子的转移过程：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;酸&lt;/strong&gt;：质子（$H^+$）的&lt;strong&gt;供体&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;碱&lt;/strong&gt;：质子（$H^+$）的&lt;strong&gt;受体&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种观点不仅适用于水溶液中的反应，也适用于非水溶液的反应，甚至可以应用于气相反应。&lt;/p&gt;
&lt;p&gt;比如在液氨中 $NH_4Cl$ 与 $NaNH_2$ 所发生的反应[^3]：&lt;/p&gt;
&lt;p&gt;[^3]: 摘自普通化学反应原理（第四版）第 155 页。&lt;/p&gt;
&lt;p&gt;$$
NH_4^++NH_2^-\rightleftharpoons 2NH_3
$$&lt;/p&gt;
&lt;p&gt;这其实与水溶液中的酸碱中和十分类似，只不过没有氢离子和氢氧根离子。&lt;/p&gt;
&lt;h3&gt;共轭酸碱对&lt;/h3&gt;
&lt;p&gt;在 Brønsted–Lowry 理论中，每一种酸在失去质子后，会形成一种对应的碱，称为&lt;strong&gt;共轭碱&lt;/strong&gt;。同样，每一种碱在接受质子后，会形成对应的酸，称为&lt;strong&gt;共轭酸&lt;/strong&gt;。这种酸碱对被称为&lt;strong&gt;共轭酸碱对&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;举个例子，盐酸（$HCl$）在水中溶解时，失去一个质子（$H^+$），形成氯离子（$Cl^-$）。在这个反应中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$HCl$ 是酸，它的共轭碱是 $Cl^-$；&lt;/li&gt;
&lt;li&gt;水（$H_2O$）作为碱，接受了质子，形成了 $H_3O^+$ &lt;a href=&quot;https://www.saroprock.com/%E4%BA%8B%E5%AE%9E%E4%B8%8A%EF%BC%8C%E6%B0%A2%E7%A6%BB%E5%AD%90%E5%9C%A8%E6%B0%B4%E6%BA%B6%E6%B6%B2%E4%B8%AD%E6%80%BB%E6%98%AF%E5%BD%A2%E6%88%90%E7%A8%B3%E5%AE%9A%E7%9A%84%E6%B0%B4%E5%90%88%E7%A6%BB%E5%AD%90%E3%80%82%E5%9B%A0%E4%B8%BA%E5%AE%83%E5%8D%8A%E5%BE%84%E5%B0%8F%EF%BC%8C%E7%94%B5%E8%8D%B7%E5%AF%86%E5%BA%A6%E9%AB%98%EF%BC%8C%E5%BE%88%E9%9A%BE%E5%8D%95%E7%8B%AC%E5%AD%98%E5%9C%A8%E3%80%82&quot;&gt;^4&lt;/a&gt;，它是水的共轭酸。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以根据碳酸（$H_2CO_3$）在水中溶解的情况，我们可以知道 $HCO_3^-$ 、 $CO_3^{2-}$ 都是共轭碱，也就是，“在水中可以接受一个质子（$H^+$）”，这样就可以很好地解释为什么很多碳酸盐都是碱性了&lt;a href=&quot;https://www.saroprock.com/%E5%BD%93%E7%84%B6%EF%BC%8C%E7%90%86%E8%A7%A3%E6%88%90%E7%94%9F%E6%88%90%E5%BC%B1%E9%85%B8%E4%B9%9F%E6%98%AF%E5%8F%AF%E4%BB%A5%E7%9A%84%E3%80%82%EF%BC%88%E6%84%9F%E8%A7%89%E5%85%B6%E5%AE%9E%E6%98%AF%E5%90%8C%E4%B8%80%E4%B8%AA%E9%81%93%E7%90%86%EF%BC%89&quot;&gt;^5&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;不过这里面的 $HCO_3^-$ 倒是个有趣的料。它既能给出质子作为酸，也能接受质子作为碱，故称其为两性电解质，如下所示：&lt;/p&gt;
&lt;p&gt;$$
HCO_3^-+H_2O\rightleftharpoons H_3O^++CO_3^{2-}
$$&lt;/p&gt;
&lt;p&gt;$$
HCO_3^-+H_2O\rightleftharpoons OH^-+H_2CO_3
$$&lt;/p&gt;
&lt;p&gt;具体显酸性还是碱性，这就要看两个反应向右进行倾向性的大小了。&lt;/p&gt;
&lt;h2&gt;结尾&lt;/h2&gt;
&lt;p&gt;本文内容并不多，只是盐的概念似乎需要重新认识。许多盐类例如 $NH_4Cl$ 中的 $NH_4^+$ 是酸；$NaAc$[^6] 中的 $Ac^-$ 是碱；“纯碱”和“小苏打”中分别含有碱 $CO_3^{2-}$ 和 $HCO_3^-$ 。盐的&amp;quot;水解”其实就是组成它的酸或碱与溶剂 $H_2O$ 分子间质子传递的过程……&lt;/p&gt;
&lt;p&gt;[^6]: $Ac^-$ 意为醋酸根离子。&lt;/p&gt;
&lt;p&gt;博主在学习化学反应原理时突然发现此理论，感觉茅塞顿开，故特意撰写此文。感谢《普通化学反应原理（第四版）》的大力支持，学化学的同学必买此书！&lt;del&gt;其实这篇文章应该是上个星期二写的，我拖了一个星期其实是懒货了。&lt;/del&gt;&lt;/p&gt;
&lt;h2&gt;脚注&lt;/h2&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>唉！这世界！</title><link>https://saro.pub/the-world-past</link><guid isPermaLink="true">https://saro.pub/the-world-past</guid><description>看到一些东西，随便写写吧</description><pubDate>Fri, 02 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Part 1&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;和平的世界是保护弱者的，蛮好。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;可身份又是自己给的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我这个人很喜欢上网，但很少发表评论，只是粗略地浏览这形形色色的一切。不过不知道为什么，我发现现在发表负能量来寻找共情的内容越来越多了。搞到后来，大家要是刷到一个比较开心正能量的视频，评论区里肯定有感谢大数据给他们推流的——看得出来，大家还是希望看一些可以激励人的视频、文章，但是这并不能抵挡那些“负能量”内容的传播。&lt;/p&gt;
&lt;p&gt;不过我首先要界定一些事情：我说的负能量内容，大多是那些类似于“黑化”“丧”的内容，而且经常和“自杀”“自残”等词沾边。他们大多是经历了一段悲惨的经历，或者是身处于一个极端的环境。以 B 站（BB 空间）动态为代表，评论大多数是安慰、共情的，说实话环境真的很好，现在 B 站还有“暖言猫猫”这种 UP（其实是机器人），每次看到，虽然知道是机器人，但还是挺感人的——网络因为他们而温暖，不是吗？&lt;/p&gt;
&lt;p&gt;到现在我发表的还是正面的内容……说出这句话就代表我要切换了。因为我在一次又一次作为那些“安慰的人”的过程中，我的耐心、同情心渐渐地被磨灭了，我发现这些什么安慰共情完全是……虚无，很虚无。虚无到什么程度？虚无到最后连那个寻求安慰的人都默不作声了。如果你真的接触过那些人的话，你一定能真切地感受到——他们的问题，而且问题不是一般的大。也许你看到我上面的话会很生气：&lt;strong&gt;他们那些遭受的、经历的，你体会过吗？怎么能如此“大言不惭”呢？&lt;/strong&gt; 确实，我也经常这样觉得，觉得我自己是不是太冷血了，看到悲惨的人，连共情的能力都没有了？&lt;/p&gt;
&lt;p&gt;呵呵，我怎么可能不共情，只是我自己一次又一次地压抑。为什么？因为……&lt;/p&gt;
&lt;p&gt;我是谁？我只不过是一个网友；他是谁？他只不过是网上的一个符号。那些事情是真的吗？我不知道。我唯一知道的就是我是真实的，我是真实的；我唯一能做的就是安慰：“摸摸”、“抱抱”、“不要伤心了”……等等没有什么用的空话。情绪价值固然是价值，但是这点价值简直就是搞笑，让我去安慰人，也许还不如让“暖言猫猫”去安慰得了。但是他知道我是一个活生生的人，而不是一个 AI ，所以他寄托于我，我也这样被束缚。&lt;/p&gt;
&lt;p&gt;这种负能量是很恐怖的。那几年搞得我也很虚无，每天就是觉得自己好没用啊！为什么连安慰一个人都做不到呢？看到别人的痛苦，自己却什么都做不了，很无助啊……&lt;/p&gt;
&lt;p&gt;后面有一次，他拉了一个群。他说，他要去烈火中燃烧了。我当时其实已经没有什么感觉了，觉得，唉你要死就死了吧，我也不用再这样了。搞笑的是什么，群里面可是有十几个人的，跟什么一样，一个个全都围着他转，更有甚者连演唱会都不听了，跑出去要给他打电话。那个时候我是震惊的：不是哥们，原来你“不孤单”啊，这么多人在你身旁，还是不行吗？&lt;/p&gt;
&lt;p&gt;最后他销声匿迹了，但是仅限那一个晚上。第二天他说药效太强晕了没跳下去……&lt;/p&gt;
&lt;p&gt;好好，后面我的耐心与同情心真的已经耗尽了。我不知道你是不是真的，也许你不过是个乐子人来消耗大家情绪而已。但我知道我是真的，我不希望再这样了。说到底我不过是一个网友，我能做什么？什么也做不了。我不能让你忘记你的那些痛苦的回忆，也不能改变你所身处的环境，我又不是超人。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;当然这些还是建立在他没有骗人这个事实基础上的……&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这种人太多了，他只是其中之一。他们就这样在网站寻求在现实中得不到的那些……什么呢……我也不知道，我觉得他们什么都有了……有无微不至照顾他们心情的朋友……你说现实是吧，那他们的家境也比我好得多了，一天到晚去国外玩，我到现在还没出国过呢。&lt;/p&gt;
&lt;p&gt;有时候我在想谁才是那个所谓的“弱者”。我这种网上的小透明尚且不谈……更何况是那些没得上网的。我发现没有人会安慰我，只有我一直在安慰别人。&lt;/p&gt;
&lt;p&gt;所以后来就，就算了吧。但是现在这种风气好像又杀回来了。我曾经以为环境最好的 B 站，到处充斥着这种情绪。一有什么不舒服，好像天塌了一样，发到 BB 空间，然后就会有几千条评论在下面随声附和。嗯嗯，蛮好蛮好。&lt;/p&gt;
&lt;p&gt;这种恐怖的不是发空间的本人，而是那些看空间的人。我说了，你不知道那些发 BB 空间的到底是不是真的。那些自爆自己复制粘贴的多了去了，不要说藏着掖着的了。但是我可以确定那几千个评论里面肯定有真实的人存在。他们看见了会怎么想？我觉得我不用再说了。而且这种情绪一积累，发的人就会越来越多：有的人是真的破防了，哭哭发一个；有的人觉得这样子就有几千点赞哇，那我复制一下也发一下哈哈，望周知！&lt;/p&gt;
&lt;p&gt;哈哈，然后现在 BB 空间没有哭的我都不习惯了。尤其是我自己亲身近距离接触过那些人之后。什么狗屁同情心，哥们自己过的没舒服多少，现在还得供着你的心情，谁来安慰我？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;和平的世界是保护弱者的，蛮好。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;可身份又是自己给的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;一切的一切，只要你展现得足够可怜……那就不用我说什么了&lt;/p&gt;
&lt;h2&gt;Part 2&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;俗话说，“授之以鱼不如授之以渔”。让弱者强大需要他自己成长起来，需要别人去帮他认清自己存在的一些不足，光靠共情是没有用的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;可和平的世界是保护弱者的，你有什么资格去指出他的不足？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你说了，不好意思，你就是破坏环境的罪人。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;上个学期，我们班主任突然来班级里面讲了一件事情：实验班有一位同学，每天做作业做到凌晨两三点钟！她的父母也很心疼她，那个时候她来办公室和老师哭诉这件事，老师也不知道怎么办（我们这四个班的老师是学校给的最好的，人也很好！）老师也心疼呐，这不能不心疼哇！如此努力的孩子，还不是家长逼的情况下，肯定是要鼓励才是。&lt;/p&gt;
&lt;p&gt;可是你看这还鼓励！？再鼓励人没了！我那个时候控制变量分析了一下：大家都是一个学校，我是提前班，她是实验班。实验班作业肯定比提前班少，而且加上她是通校的，时间也比我多。可是我能在第一节晚自习做完作业，她却做到两三点。这……很难说不是她自己的学习模式出现了问题，可能还是初中那套死方法吧……她的精神值得鼓励，但是做法上面肯定有不妥的地方。&lt;/p&gt;
&lt;p&gt;所以我们老师就为难了：你说要只是安慰她，好像也没有什么作用，这下课时间一哭，今天晚上说不定熬的又更晚了呢；你说要是减作业，那不可能，怎么会因为你一个人拖累其他百来个人的进度呢；你说要是指出她的问题……她现在的精神状态脑子里只想着自己好委屈，怎么会和你好好分析，说不定你一说，她一急，那就真自由落体了。&lt;/p&gt;
&lt;p&gt;唉，老师难啊。那个时候就来我们班说这件事，我自己觉得也很难办。后面我把时间线往后延了延：你说她这样，到最后成绩肯定好不起来（好吧倒数），高考完了她是什么心情？失望吧，伤心吧。为什么自己这么努力，结果还是这样呢？于是她也可以控制变量分析了：自己和别人在一个学校里面上学，但是自己学习时间更长、更努力。至于这个结果怎么解释……嗯……我知道了！一定是这可恶的中式教育哇！！！看看这教育制度，害得我们这种努力学习的孩子没好学校读！呀呀呀！&lt;/p&gt;
&lt;p&gt;当然上面都是我主观臆想的内容……只是看网上抨击教育制度的人，其实也猜得差不多了。很明显能感受得到，网上看到的和现实中遇到的人完全不是一批人（这也要看个人）。网上把什么大家聚在一起补习的画面渲染得很恐怖——什么监狱？但是，我这个人也是刚刚十天补习回来，也是在那种一百多个人一个房间的巨大教室。压抑吗？（我上课不专心我认错）放眼望去，绝大部分都是专心听课的，少部分（&lt;del&gt;我&lt;/del&gt;）就在脑子里想点自己的事情。你要说压抑，那……其实真的没有。当时还和前面的江西同学聊天，他们也真的是不辞辛苦从江西赶到浙江来上课的。人也很好，幽默风趣。你说是逼的？那我只能说你无敌了。&lt;/p&gt;
&lt;p&gt;网上的人好像给这种学习，套了一层恐怖滤镜。但是作为一个土生土长的浙江人，虽然节假日几乎没有、一个星期一天左右的休息时间、现在还八月十号开学，但是我个人感觉真的没有那么恐怖，甚至于，我还渴望去上学，因为我自己在家里只会摆烂，在学校里都是同学，都是活生生的人，可比在家里有意思多了。&lt;/p&gt;
&lt;p&gt;好像偏题了？其实没有。【个人观点】&lt;strong&gt;因为那些抨击教育制度的人，正是上面那些，自以为认真努力好学上进，实则弄错了方向的同学。&lt;/strong&gt; 他们的预期是什么？是只要有巨量的投入，就可以获得足够好的回报。可是这就像玩游戏只会 AAA，却没发现自己本身的属性太差了，或者是练了一堆不适合自己的连招。你能去说他们菜吗？不行不行。一说，他就说：你看看你有我努力吗？不就是脑子聪明一点，就可以否认我的努力了？&lt;/p&gt;
&lt;p&gt;确实，我们不能否认他们的努力。但事实就是这样，你也必须去接受。&lt;/p&gt;
&lt;p&gt;可惜他们不愿意接受，就像我说，他们已经形成了一个逻辑，而你，你是谁？你又不是有什么奇异能力的人，说说话是说不过他们的。为什么？因为你成绩比他们好啊！你成绩比他们好有什么资格去说他们？是不是很奇怪，可是事实就是这样。&lt;/p&gt;
&lt;p&gt;但最后我还是要回到正题。我伤心的不是我说服不了他们，我伤心的是我堵不住他们的嘴！他们毕业后的时间可多的很，可以在网上大肆评论。就像那些泛滥的负能量空间一样，这种言论也早已泛滥了。&lt;/p&gt;
&lt;p&gt;这时候你再想想，这些言论的受众是谁？不就是那些压力还不太大的低年级学生吗？他们心里会怎么想？一个人第一次定义一件事之后，往往很难再改变了——因为他们思维的方式已经改变了。你说学校是监狱，他就会去找学校与监狱的共同点，最后得出结论：学校还真的是个大型监狱！你说老师只会偏袒那些学习成绩好的学生，他就会处处留意，最后得出结论：老师都是冲着什么奖金去的！&lt;/p&gt;
&lt;p&gt;我这个人是经常找老师聊天的，那时候开学第一天的晚上我就找班主任聊了半个小时。其实老师和大家一样，都是活生生的人。你会失去耐心，会失去同情心，老师也一样。上面说到的那个实验班同学对你来说也许只是三年里面的一件小事，对于教了几十年书的老师来说，可就不是小事了。就像我在 &lt;strong&gt;Part 1&lt;/strong&gt; 种说的一样，你刚开始想去帮一个人，可最后你发现你什么也做不了，你渐渐就麻木而失望了。老师也是一样的。&lt;/p&gt;
&lt;p&gt;可悲的是，大家往往太过关心自己的麻木，丝毫不关心那个自以为是自己死对头的“老师”。唉，每当看到挑起师生对立的评论，我的心真的凉了一半。不管怎么说，老师是一直在你身边的，你不去找老师聊聊，不去了解他，反而当老师主动找你时，把他理解成网上人说的：“你学习不好才来找你。”，这，唉，很令人伤心啊。&lt;/p&gt;
&lt;p&gt;现在网络环境就是这样的，各种挑对立的视频，将原本普通的事情放大，害了无辜的人。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/view.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;这个视频很有意思。&lt;/p&gt;
&lt;p&gt;视频本身没什么意思，内容就是主人公在荧幕前讲述他是如何被老师区别对待的。（具体就是有一次老师说体育活动后考试，主人公去找老师说体育活动后考试效果不好。但是老师因为他是倒数没有理他。后面大家考得都不好，老师主动找了成绩好的同学问为什么没考好，同学说因为刚运动完静不下来。随后老师就宣布以后考试都在体育活动之前）有意思的是弹幕，这里面的弹幕可真的是太复杂了，我分成四类：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;觉得自己也被区别对待然后共情的&lt;/li&gt;
&lt;li&gt;觉得自己还没经历过但是同情主人公的&lt;/li&gt;
&lt;li&gt;觉得这种事情稀疏平常的&lt;/li&gt;
&lt;li&gt;觉得主人公过于脆弱的&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;四种个个都有其动因，我写这个也不是为了说明孰对孰错。分析一下：主人公自己有尝试去找老师沟通吗？有的，这肯定是好的。但是老师没有回应，这正常吗？也正常。整个事情正常吗？如果从外人角度，正常，毕竟只有你一个人说肯定不行，后面改是考虑了其他同学的意见；但是从影响角度来说，不正常，你搞的一个人面色苍白然后现在被采访发了个视频有个四百多万播放肯定不正常。有遇到过这种事情的人吗，有，肯定有，社会也需要这种视频，让更多人了解到，哦，原来老师这样看似正常的行为是会真切影响到一个人的（看一件事最后还是要看影响而不是看当事人的想法）。但是，整个视频的氛围完全没有起到它应该有的效果。这个视频变成了什么呢？变成了学生与毕业后走上社会的那一批曾受憋屈的人的战场：后者指责前者太脆弱了，前者没有社会经验不能反抗只能抱团取暖。在我看来，整个视频不仅没有起到让大家反思的效果，反而加剧了大家的失望：学生看到这件事情，对中式教育的失望又添了一层，也许他以后也会觉得自己的老师就是这样的；那些早就毕业的人的戾气则又加了一层，恨为什么这种再寻常不过的事情可以有如此多的播放呢？&lt;/p&gt;
&lt;p&gt;多搞笑啊这个……主人公是好的，他做了行动，阐明了自己的心声。可看视频的人却只是把这一切当成了自己将会或者曾经遇到过的事情，他们默认他们的世界没有那些好老师，没有那些好的环境，只留下这苍白的一副面孔。&lt;/p&gt;
&lt;p&gt;主人公去找过老师，虽然失败了，但是那些看视频的人也许从来都不会想想去找老师聊聊，去声明自己应有的权利。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The End&lt;/h2&gt;
&lt;p&gt;其实上面两个内容内核差不多。他们把网上的一切看得太重：第一种是急切在网上找安慰的，第二种则是在网上找共情、或者批判共情的。可是他们却又不得不面对现实的一切：第一种不得不面对他心中的那个糟糕透顶的世界；第二种不得不面对被视作监狱的学校或者社会。唉……可是网上的一切，到头来是什么呢，是虚的，你也许永远不知道屏幕背后的是什么，你只知道你自己是真的，仅此而已。让那些东西，在互联网上泛滥而影响现实，怎么想，也太恐怖了。&lt;/p&gt;
&lt;p&gt;我曾经看到一个评论，它说：以前的人们都是积极向上的，虽然社会有时候会出问题，但大家都觉得明天会更好；疫情过后，整个社会好像一下子就垮了，各行各业都不景气，学生毕业也不知道去哪里，大家都很迷茫。&lt;/p&gt;
&lt;p&gt;我经常觉得和有些人聊天很累，因为你不知道他们到底是怎么想的。发一个笑脸，他到底是笑呢还是嘲讽呢；你自己发一个哈哈还不够，万一别人觉得你是在敷衍他怎么办。我小时候就看到一个例子：以前发“哈哈哈”就是大笑，现在不发个三行就不算笑了。&lt;/p&gt;
&lt;p&gt;情绪在贬值，在异化。如果面对面还好，你可以通过他的语气表情分析得出来他到底是什么意思，因为这个很难用意志控制；可网上就不一样了，聊天框是可以编辑的。到最后，大家都不相信对方了，也就渐渐变得不再真实了。&lt;/p&gt;
&lt;p&gt;可不仅仅是这些……我发现现实也越来越假。我的同学（没有指责的意思，因为他们也是被这种信息误导的人）总是在班级里大喊大叫传播一些谣言。最简单的就是淀粉肠了，我买个香肠跟我说不能买，说三一五曝光了哇！不能不能买！最后一看纯纯谣言……太可怕的，这种虚构的东西真的在影响现实社会。&lt;/p&gt;
&lt;p&gt;同学说这个学期换数学老师，大家欢呼雀跃（不喜欢数学老师）；过了几天又说不换了，大家又懊恼得要死；再过几天又说要换，那就麻烦大家再跳一遍吧……情绪就是这么廉价，一个人的嗓子就可以控制整个班的喜怒哀乐。&lt;/p&gt;
&lt;p&gt;好像确实是越写越偏了，不过既然是一边想一边写的，思路断层应该也不大。“The End”确实是要 end 了，不然这文章太长，也鲜有人看完。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>Cauchy 不等式</title><link>https://saro.pub/cauchy</link><guid isPermaLink="true">https://saro.pub/cauchy</guid><description>有关于 Cauchy （柯西）不等式的一些有意思的内容</description><pubDate>Thu, 25 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import Collapse from &amp;quot;../../components/mdx/Collapse.astro&amp;quot;;
import Diff from &amp;quot;../../components/mdx/Diff.astro&amp;quot;;
import Error from &amp;quot;../../components/mdx/Error.astro&amp;quot;;
import Info from &amp;quot;../../components/mdx/Info.astro&amp;quot;;
import Kbd from &amp;quot;../../components/mdx/Kbd.astro&amp;quot;;
import Success from &amp;quot;../../components/mdx/Success.astro&amp;quot;;
import Warning from &amp;quot;../../components/mdx/Warning.astro&amp;quot;;
import TimeLine from &amp;quot;../../components/mdx/TimeLine.astro&amp;quot;;
import LinkCard from &amp;quot;../../components/mdx/LinkCard.astro&amp;quot;;&lt;/p&gt;
&lt;p&gt;&lt;Info&gt;此页面正在编辑中……&lt;/Info&gt;&lt;/p&gt;
&lt;h2&gt;Cauchy 不等式&lt;/h2&gt;
&lt;p&gt;Cauchy 不等式，中文一般译为&lt;strong&gt;柯西不等式&lt;/strong&gt;。只要学过不等式的应该都很熟悉，它最常见的形式（二维形式）长这样：&lt;/p&gt;
&lt;p&gt;$$
(a^2+b^2)(c^2+b^2)\ge(ac+bd)^2
$$&lt;/p&gt;
&lt;p&gt;当然它不仅仅有二维形式，一般形式则是这样：&lt;/p&gt;
&lt;p&gt;$$
\sum\limits_{i=1}^na_i^2\sum\limits_{j=1}^nb_j^2\ge\left(    \sum\limits_{i=1}^n    a_ib_i\right)^2,(n\in\mathbb N^+)
$$&lt;/p&gt;
&lt;p&gt;在高中范围的不等式题目中，利用 Cauchy 可以消去未知项得到常数项，也就是求最大、最小值。两侧内容可以通过柯西反号来变换。&lt;/p&gt;
&lt;h2&gt;Cauchy 不等式的证明&lt;/h2&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>Sperner 定理</title><link>https://saro.pub/sperner</link><guid isPermaLink="true">https://saro.pub/sperner</guid><description>Sperner 定理的证明与例题</description><pubDate>Tue, 23 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import Collapse from &amp;quot;../../components/mdx/Collapse.astro&amp;quot;;
import Diff from &amp;quot;../../components/mdx/Diff.astro&amp;quot;;
import Error from &amp;quot;../../components/mdx/Error.astro&amp;quot;;
import Info from &amp;quot;../../components/mdx/Info.astro&amp;quot;;
import Kbd from &amp;quot;../../components/mdx/Kbd.astro&amp;quot;;
import Success from &amp;quot;../../components/mdx/Success.astro&amp;quot;;
import Warning from &amp;quot;../../components/mdx/Warning.astro&amp;quot;;
import TimeLine from &amp;quot;../../components/mdx/TimeLine.astro&amp;quot;;
import LinkCard from &amp;quot;../../components/mdx/LinkCard.astro&amp;quot;;&lt;/p&gt;
&lt;h2&gt;前言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;这是我个人在 2024 暑期外出培训时自己写的笔记，仅摘录一些简单又有用的内容。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Sperner 定理&lt;/h2&gt;
&lt;p&gt;Sperner 定理：设$A$为$n$元集合，它的$k$个子集$A_{1},A_{2},...,A_{k}$互不包含，有$k_{max}=C_{ n}^{[\frac{n}{2}]}$。&lt;/p&gt;
&lt;h2&gt;Sperner 证明&lt;/h2&gt;
&lt;p&gt;&lt;Warning&gt;这是我上课时糊涂听加自己总结的证明，不一定严谨。&lt;/Warning&gt;&lt;/p&gt;
&lt;p&gt;我们新定义一个结构叫做“最大链”，它是长这样的：&lt;/p&gt;
&lt;p&gt;$$
\phi \subset S_{1}\subset S_{2}\subset S_{3}\subset ... \subset S_{n}={1,2,3,...,n}=A
$$&lt;/p&gt;
&lt;p&gt;其中$S_{i+1}$比$S_{i}$多一个元素，显然，这个链条是最长的，故称之为“最大链”。这个概念有什么用呢？我们可以发现以下特点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在$n$元集合$A$中，一共有$n!$条最大链；&lt;/li&gt;
&lt;li&gt;所有的最大链中的所有集合包含了$A$的所有子集；&lt;/li&gt;
&lt;li&gt;若$A_{i}$在一条最大链上，则$A_{j}$不可能和$A_{i}$在同一条链上；&lt;/li&gt;
&lt;li&gt;一个子集$A_{i}$所“占据”的最大链有$card(A_{i})![n-card(A_{i})]!$条。&lt;/li&gt;
&lt;li&gt;在理想情况下，只要还有剩余的最大链，就不会出现重合。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;所以，现在问题被转换成了，如何在$n!$条最大链构成的集合中放入尽可能多的子集并且保证每一条最大链最多只包含一个子集。&lt;/p&gt;
&lt;p&gt;因为“在理想情况下，只要还有剩余的最大链，就不会出现重合”，所以我们希望每一个子集所“占据”的最大链尽可能少。可以发现，当$card(A_{i})=[\frac{n}{2}]$时，子集$A_{i}$所“占据”的最大链最少。则一共可以放入$\frac{n!}{[\frac{n}{2}]!(n-[\frac{n}{2}])!}$个集合。显然这个数就是$C_{ n}^{[\frac{n}{2}]}$。&lt;/p&gt;
&lt;h2&gt;Sperner 例题&lt;/h2&gt;
&lt;Info&gt;
  11个小朋友每天要有人上台表演，问至少需要几天才能让每个人都看到过其他10个人在台上给自己表演？
&lt;/Info&gt;

&lt;p&gt;我们可以列一个表格来表示每天每人的表演情况：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;天数&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;第一个人&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;第二个人&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;...&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;第十一个人&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;一&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;...&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;二&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;...&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;三&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;...&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;四&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;...&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;五&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;...&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;六&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;...&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;七&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;...&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;八&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;...&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;九&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;...&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;十&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;...&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;十一&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;...&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这里我们把每一个的表演场次安排看作一个集合，里面的每一个元素包含了表演的天数，也就是说不表演的天数是不放在里面的。题目要求&lt;strong&gt;任意两个人都互相给对面表演过&lt;/strong&gt;，那么就是要求出现下面的结构：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;天数&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;第$i$个人&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;第$j$个人&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;$n$&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;$m$&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;这个结构我们不好直接考虑什么时候存在，让我们想想什么时候两个人没有互相表演：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;两个人表演场次完全相同，也就是两个人的表演场次安排集合相同；&lt;/li&gt;
&lt;li&gt;两个人只有一个人为另一个表演过，也就是两个人的表演场次安排集合相互包含。&lt;/li&gt;
&lt;/ol&gt;
&lt;Warning&gt;
  重复一次，表演场次安排集合中只有表演的天数，没有不表演的天数，所以当只有一个人为另一个人表演时，两个集合之间存在包含关系。
&lt;/Warning&gt;

&lt;p&gt;下面是两个例子：&lt;/p&gt;
&lt;p&gt;两个人都没有为对方表演过：此时两个集合相同。&lt;/p&gt;
&lt;p&gt;$$
A_{i} = {1,3,7,9,11}
$$&lt;/p&gt;
&lt;p&gt;$$
A_{j} = {1,3,7,9,11}
$$&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;天数&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;第$i$个人&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;第$j$个人&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;一&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;二&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;三&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;四&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;五&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;六&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;七&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;八&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;九&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;十&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;十一&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;只有一个人为另一个人表演过：此时两个集合存在包含关系。&lt;/p&gt;
&lt;p&gt;$$
A_{i} = {1,3,7,9,11}
$$&lt;/p&gt;
&lt;p&gt;$$
A_{j} = {1,3,7}
$$&lt;/p&gt;
&lt;p&gt;$$
A_{j} \subset A{_i}
$$&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;天数&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;第$i$个人&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;第$j$个人&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;一&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;二&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;三&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;四&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;五&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;六&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;七&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;八&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;九&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;十&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;strong&gt;十一&lt;/strong&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;那么显然当两个人的表演安排场次互不包含时，就出现了我们需要的结构。也就是说，让两个人互相为对方表演，需要让他们两个的表演安排场次集合互不包含。&lt;/p&gt;
&lt;p&gt;现在的问题是，有没有足够的互不包含子集为所有小朋友分配而不重复？&lt;/p&gt;
&lt;p&gt;我们可以通过&lt;strong&gt;Sperner 定理&lt;/strong&gt;获得在不同天数下最多的方案数：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;一天：不用考虑；&lt;/li&gt;
&lt;li&gt;两天：$C_{2}^{[\frac{2}{2}]} = 2$，最多只有两种，无法分配；&lt;/li&gt;
&lt;li&gt;三天：$C_{3}^{[\frac{3}{2}]} = 3$，最多只有三种，无法分配；&lt;/li&gt;
&lt;li&gt;四天：$C_{4}^{[\frac{4}{2}]} = 6$，最多只有六种，无法分配；&lt;/li&gt;
&lt;li&gt;五天：$C_{5}^{[\frac{5}{2}]} = 10$，最多只有十种，无法分配；&lt;/li&gt;
&lt;li&gt;六天：$C_{6}^{[\frac{6}{2}]} = 20$，可以分配；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;综上，至少需要六天。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>你好！世界！</title><link>https://saro.pub/2024-1-2</link><guid isPermaLink="true">https://saro.pub/2024-1-2</guid><description>对之前的一些总结，拜拜~我自己</description><pubDate>Fri, 12 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;酝酿&lt;/h2&gt;
&lt;p&gt;想了半天，却不知从何写起。&lt;/p&gt;
&lt;p&gt;我发现我陷入了一个怪圈，但是又很难说。&lt;/p&gt;
&lt;p&gt;在&lt;em&gt;2024 年 5 月 5 日&lt;/em&gt;解决困扰我好几年的问题后，我本以为我就可以“无敌”了……当然是不可能的。既然不知道从何写起，就写点故事吧。我不知道说什么的时候，就会开始讲故事，写文章也差不多吧。&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Part 1&lt;/h3&gt;
&lt;p&gt;其实也不能算是故事，自己有点体会而已：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;前几天，我自己写的博客主题 Frosti 总算是把灯塔评分跑到 400 了。喜出望外，突然发现自己一直在 twikoo 群潜水，遂发了一下 lighthouse 截图——这个不是重点，重点是从那一天开始后，我慢慢开始关注这个我曾经看都不看的 twikoo 群。那时候有一个人叫做&lt;strong&gt;简艾&lt;/strong&gt;，如果混静态博客群的人肯定是知道他的，简直就是仙人，太搞笑了，只可惜我这里发不了聊天记录……&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;后面大家为了来看&lt;strong&gt;简艾&lt;/strong&gt;的乐子，把糖果屋、waline 的群友都吸引过来了，也就是那个晚上，我一下子加了三个群。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;其实本来没什么事情，大家看看乐子交流技术，蛮好的。可问题是，不了解不知道，我本来以为群里面都是大学生怎么样的，结果年龄一个比一个小？？？一个个初中小学的，不是哥们，这么离谱吗？我不知道我为什么是这个反应。想到之前在 Unity 群里，我也是和他们一样，天天拿自己的技术水群，扯一点有没有的术语，感觉混得还挺好的说。结果现在，我倒是成了看他们聊天的人了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;我这个人虽然喜欢一个人安安静静地做自己的事情（也就是我为什么很少看群里），但是真的看到大家都热热闹闹的，心里还是有些不甘……因为我&lt;strong&gt;个人&lt;/strong&gt;认为来说（这种话只能在自己博客上说说，公开说被骂成啥都不知道了），我的能力比他们那些只会套轮子、复制的人要强多了（一个个美化结果连数学公式都不会配我真的绷不住了）。尤其是他们开始聊信息技术的时候，我怎么说也是拿了提高组一等的……他们一口一个“被迫学文化课”，我不禁想问：“你们都是冲着 NOI 金牌保送去的吗？”不管怎么说，他们才初中，我作为一个高中生，什么有用什么没有用我还是分得清的。信息技术除了 NOI 之外没有任何用。你真的不要和我说 NOIP 在哪个学校有什么用，可以有政策什么的。我和你说好了，你有能力 NOIP 一等，你不会想去那些学校的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;所以感觉像是回旋镖一样……想到自己以前的扯皮，自己会不会也是这样呢？最后这样，我还是想帮帮他们——因为我自己踩过这些坑，所以不想让别人再重走自己的老路——但是这不可能，也太理想了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;比如我自己体会吧，你去网上找别人的组件，很大可能是下面这样：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;组件装半天，终于装上了；&lt;/li&gt;
&lt;li&gt;发现样式配不上，但是原作者的 CSS 自己又很难修改；&lt;/li&gt;
&lt;li&gt;发现功能不行，但是不知道怎么改，完全看不懂；&lt;/li&gt;
&lt;li&gt;莫名其妙出 BUG 了，自己不会修；&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;所以我看到他们问怎么装什么什么的时候，我真的挺想说，兄弟，你自己学一下自己写吧——毕竟我自己都写了一个主题了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;但是这种话显然不能说。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;说了，别人就觉得你在装逼，总之是肯定会让别人不爽的结果。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;如果到时候别人问了你一个不熟悉的领域，那就是小丑。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;好吧，也许我本来就是小丑，为别人考虑这么多干什么呢。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;但是看到这样浪费时间，技术没提升就算了，结果难道很好吗？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;礼貌引用一下别人的博客，我只能说这就是过度美化的后果 ⬇️&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/58fb8fed49193b4f41b0e1bebde3497b.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我觉得，如果自己的博客打开都要很久的话，怎么也不好吧。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;但是他们这样确实得到了我曾经梦寐以求的东西：足够的关注、足够的话题、以及足够多的“朋友”。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;我抱着自己的博客，好像从来没有人关注过要把博客弄得快一些，要把自己的技术提升的厉害一些……同一批人在三个群里高强度水群，我做不到。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;所以我又走了，真的走了。我知道群里面有很多大佬，所以没什么技术又没有脸皮的小朋友，就自己灰溜溜地逃走了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Part 2&lt;/h3&gt;
&lt;p&gt;我骂骂我自己而已。&lt;/p&gt;
&lt;p&gt;感觉回家了，真的是什么也做不出来。&lt;/p&gt;
&lt;p&gt;本来之前在学校里计划得多好呢，干嘛干嘛……然后全部泡汤了。&lt;/p&gt;
&lt;p&gt;今天我想休息……不行，老爸说墙有点裂了（无非是墙外面刷的一层有一点点裂），找了几个人来修。嗯好吧，东西全部整出来，用尼龙包上。第一天磨，第二天涂，第三天磨。就这样吧……每天早上把床和桌子用尼龙包好，晚上回来面对的不是灰尘就是油漆味。那几天我躺在床上，不知道望着什么……好奇怪，自己回家了，却什么也做不了，连自己回自己家，躺着休息都不行。&lt;/p&gt;
&lt;p&gt;你说真不能休息吗？那也不是不行。只是我自己的怨气侵蚀了自己，然后就怏怏不乐——我当然知道没有必要，但是不管怎么想还是很伤心。&lt;/p&gt;
&lt;p&gt;结束后，我想“报复”休息一下。但是也不行……同学找我，父母找我，我也不能推却。我想说：让我休息一下吧。可是想到妈妈工作这么久才有这一天休息，又狠不下心——怎么能这样呢？还算儿子吗？于是就这样兜兜转转，马上过去五天了。&lt;/p&gt;
&lt;p&gt;我很清楚，同学也好家长也罢，都不可能占用我一天的时间。只不过是当我忙完那些事后，一想就要休息了，就什么都不想干了而已。所以我最后才说，是我的问题，我应该骂骂自己为什么这么偷懒。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;正文&lt;/h2&gt;
&lt;p&gt;开始写正文了，但是我想偷懒了。&lt;/p&gt;
&lt;p&gt;1.7k 字了啊，我想着，要不就不写了吧。&lt;/p&gt;
&lt;p&gt;……&lt;/p&gt;
&lt;p&gt;所以我说这就是我的问题，但是我也不能变成一个没有感情的机器人。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;2024 年 5 月 5 日&lt;/em&gt;的改变是什么呢？我简单说一下吧：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我是谁？&lt;/strong&gt; 对于这个经典问题，小时候的我给出了自己的答案：我是由别人定义的我，如果没人承认我的名字，那我就没有名字了……就是那么简单，但成了我的准则。所以我不得不去追求那些别人对我的定义，追求那些认可。&lt;/p&gt;
&lt;p&gt;直到&lt;em&gt;2024 年 5 月 5 日&lt;/em&gt;，我才发现这个回答的漏洞：我把我自己的地位放太低了。你看，我不是不认可我自己，而是我没有认可我自己的资格，就像 &lt;strong&gt;#Part 1&lt;/strong&gt; 中说的一样，我就是怕别人对我的评价，才不敢发……我很难亲口说我自己有多么的厉害，因为&lt;strong&gt;我没有认可我自己的资格&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;你没有感到奇怪吗？其实，我本来就没有变过。&lt;/p&gt;
&lt;p&gt;我以为&lt;em&gt;2024 年 5 月 5 日&lt;/em&gt;后，我就逃出了这个牢笼，事实证明，没有。&lt;/p&gt;
&lt;p&gt;我还是不能把自己放上来。&lt;/p&gt;
&lt;p&gt;我还是那么胆小、懦弱。&lt;/p&gt;
&lt;p&gt;我对一切只停留在叙述。&lt;/p&gt;
&lt;p&gt;你看，我写故事写了 1.7k 字，正文才几百字。&lt;/p&gt;
&lt;p&gt;也许本来就是一些没有意义的内容，所以正文也写不出来了。&lt;/p&gt;
&lt;p&gt;只有那些情绪，带着事情的情绪留下来了，想到就是那样吧。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>在 Frosti 中使用 mdx</title><link>https://saro.pub/frosti-mdx</link><guid isPermaLink="true">https://saro.pub/frosti-mdx</guid><description>使用 mdx 创建更多组件！</description><pubDate>Fri, 12 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import Collapse from &amp;quot;../../components/mdx/Collapse.astro&amp;quot;;
import Diff from &amp;quot;../../components/mdx/Diff.astro&amp;quot;;
import Error from &amp;quot;../../components/mdx/Error.astro&amp;quot;;
import Info from &amp;quot;../../components/mdx/Info.astro&amp;quot;;
import Kbd from &amp;quot;../../components/mdx/Kbd.astro&amp;quot;;
import Success from &amp;quot;../../components/mdx/Success.astro&amp;quot;;
import Warning from &amp;quot;../../components/mdx/Warning.astro&amp;quot;;
import TimeLine from &amp;quot;../../components/mdx/TimeLine.astro&amp;quot;;
import LinkCard from &amp;quot;../../components/mdx/LinkCard.astro&amp;quot;;&lt;/p&gt;
&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;本文介绍如何在 &lt;code&gt;mdx&lt;/code&gt; 中使用 Frosti 提供的组件来实现普通 &lt;code&gt;md&lt;/code&gt; 无法实现的功能。&lt;/p&gt;
&lt;h2&gt;正文&lt;/h2&gt;
&lt;h3&gt;开始&lt;/h3&gt;
&lt;p&gt;首先你需要创建一个 &lt;code&gt;mdx&lt;/code&gt; 文件，很简单，把文件的后缀名改成 &lt;code&gt;.mdx&lt;/code&gt; 即可。&lt;/p&gt;
&lt;h3&gt;引入&lt;/h3&gt;
&lt;p&gt;Frosti 提供的组件放在 &lt;code&gt;/blog&lt;/code&gt; 和 &lt;code&gt;/page&lt;/code&gt; 文件夹下，请您在文档属性（frontmatter）下写入一下内容：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-astro&quot;&gt;import Collapse from &amp;quot;../../components/mdx/Collapse.astro&amp;quot;
import Diff from &amp;quot;../../components/mdx/Diff.astro&amp;quot;
import Error from &amp;quot;../../components/mdx/Error.astro&amp;quot;;
import Info from &amp;quot;../../components/mdx/Info.astro&amp;quot;;
import Kbd from &amp;quot;../../components/mdx/Kbd.astro&amp;quot;
import Success from &amp;quot;../../components/mdx/Success.astro&amp;quot;;
import Warning from &amp;quot;../../components/mdx/Warning.astro&amp;quot;;
import TimeLine from &amp;quot;../../components/mdx/TimeLine.astro&amp;quot;;
import LinkCard from &amp;quot;../../components/mdx/LinkCard.astro&amp;quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;示例&lt;/h3&gt;
&lt;h4&gt;折叠页面&lt;/h4&gt;
&lt;p&gt;&lt;Collapse title=&quot;这是一段示例文本。&quot;&gt;这是藏起来的内容！&lt;/Collapse&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-astro&quot;&gt;&amp;lt;Collapse title=&amp;quot;这是一段示例文本。&amp;quot;&amp;gt;这是藏起来的内容！&amp;lt;/Collapse&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;对比&lt;/h4&gt;
&lt;p&gt;&lt;Diff r=&quot;/r.png&quot; l=&quot;/l.png&quot;&gt;&lt;/Diff&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-astro&quot;&gt;&amp;lt;Diff r=&amp;quot;/r.png&amp;quot; l=&amp;quot;/l.png&amp;quot;&amp;gt;&amp;lt;/Diff&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;错误&lt;/h4&gt;
&lt;p&gt;&lt;Error&gt;也许哪里出错了？&lt;/Error&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-astro&quot;&gt;&amp;lt;Error&amp;gt;也许哪里出错了？&amp;lt;/Error&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;警告&lt;/h4&gt;
&lt;p&gt;&lt;Warning&gt;嘿！小心有坑！&lt;/Warning&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-astro&quot;&gt;&amp;lt;Warning&amp;gt;嘿！小心有坑！&amp;lt;/Warning&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;消息&lt;/h4&gt;
&lt;p&gt;&lt;Info&gt;这只是一条消息。&lt;/Info&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-astro&quot;&gt;&amp;lt;Info&amp;gt;这只是一条消息。&amp;lt;/Info&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;成功&lt;/h4&gt;
&lt;p&gt;&lt;Success&gt;恭喜你部署成功啦！&lt;/Success&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-astro&quot;&gt;&amp;lt;Success&amp;gt;恭喜你部署成功啦！&amp;lt;/Success&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;键盘&lt;/h4&gt;
&lt;p&gt;&lt;Kbd&gt;Ctrl&lt;/Kbd&gt; + &lt;Kbd&gt;C&lt;/Kbd&gt; 以复制文本。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-astro&quot;&gt;&amp;lt;Kbd&amp;gt;Ctrl&amp;lt;/Kbd&amp;gt; + &amp;lt;Kbd&amp;gt;C&amp;lt;/Kbd&amp;gt; 以复制文本。
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;时间线&lt;/h4&gt;
&lt;p&gt;&amp;lt;TimeLine
  items={[
    { year: &amp;quot;1984&amp;quot;, event: &amp;quot;First Macintosh computer&amp;quot; },
    { year: &amp;quot;1998&amp;quot;, event: &amp;quot;iMac&amp;quot; },
    { year: &amp;quot;2001&amp;quot;, event: &amp;quot;iPod&amp;quot; },
    { year: &amp;quot;2007&amp;quot;, event: &amp;quot;iPhone&amp;quot; },
    { year: &amp;quot;2015&amp;quot;, event: &amp;quot;Apple Watch&amp;quot; },
  ]}
/&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-astro&quot;&gt;&amp;lt;TimeLine
  items={[
    { year: &amp;quot;1984&amp;quot;, event: &amp;quot;First Macintosh computer&amp;quot; },
    { year: &amp;quot;1998&amp;quot;, event: &amp;quot;iMac&amp;quot; },
    { year: &amp;quot;2001&amp;quot;, event: &amp;quot;iPod&amp;quot; },
    { year: &amp;quot;2007&amp;quot;, event: &amp;quot;iPhone&amp;quot; },
    { year: &amp;quot;2015&amp;quot;, event: &amp;quot;Apple Watch&amp;quot; },
  ]}
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;链接卡片&lt;/h4&gt;
&lt;p&gt;&lt;LinkCard
  title=&quot;Frosti&quot;
  desc=&quot;我的博客项目！&quot;
  url=&quot;https://github.com/EveSunMaple/Frosti&quot;
  img=&quot;/favicon.ico&quot;
/&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-astro&quot;&gt;&amp;lt;LinkCard
  title=&amp;quot;Frosti&amp;quot;
  desc=&amp;quot;我的博客项目！&amp;quot;
  url=&amp;quot;https://github.com/EveSunMaple/Frosti&amp;quot;
  img=&amp;quot;/favicon.ico&amp;quot;
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>杠铃还是哑铃</title><link>https://saro.pub/weights</link><guid isPermaLink="true">https://saro.pub/weights</guid><description>两头的重量只由中间的细杆来衡量</description><pubDate>Sun, 26 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文实际撰写日期为 &lt;code&gt;March 16 2024&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;前几天闲来无事看读者时，忽然看到了一篇义章。讲的是父母在子女眼中的 m 个阶段：小时候，觉得父母就是活神仙，无所不能；而到了想要独立却无不依靠父母的时候，情况就变了：“活神仙”成了“老顽固”，觉得自己处处受限，恨不得马上离开父母成家立业；等真到了那年纪时，却发现社会上的毒打比家中的“顽固”可怕多了，于是就叹起气来——恨父母为啥不是高官或富翁，免得自己打拼；最后成家了，自己成为了父母，才明白父母之心，于是又回到小时候那样，对父母毕恭毕敬地对待。可是“树欲静而风不止”人生大把的时光早已过去，这样的孝心又能有几年呢？&lt;/p&gt;
&lt;p&gt;作者说，这就像是一个哑铃——两头重，中间又细又轻。那些在两端沉甸甸的重量都只能交给青年的自己、与中年的父母去承担。悲哀的是，大生中最精彩的时间也在这。自己幡然醒悟时，回过头来，却发现自已仍处在这中间，因为自己的子女也在重走自己的老路。&lt;/p&gt;
&lt;p&gt;我内心五味杂陈，因为我自已也是局中人。若要分开来，我许是在第二阶段的了。对父母曾经的那些崇拜，早已远去，留下的只有抱怨了。开始，我庆幸自己早些看到了这篇文章，我和我的父母所受的压力可以小一些……但就在我思考如何改变时，我才发现自己在这局中早已无法再回头了。为什么呢？因为那是从&lt;strong&gt;客观事实&lt;/strong&gt;而来的抱怨。显然，这难以改变。比如我父亲总爱睡懒觉，每次我早起做完所有事情后，他才慢悠悠地、把衣服穿好再出门去。回来晚了，也总得埋怨几句……我思考，为什么父亲起晚我就会生气呢？他也忙了一星期，睡一次懒觉也不行吗？于是我打算不理踩这事，可就像被裹挟而无法回头一般，不论我如何揭制，我内心仍有怒气，被憋着，很难受。那时我很惊讶，惊讶于自己明明意识到这是不必要的，内心却仍有一团火着着——这是什么不可抗力？这个问题，身为局中人的我可能要到老了才可以想清楚。这让我有些但心起来，想我现在才 16 岁，等我想情楚时，那是过了多长的时间跨度啊。这可不是哑铃，反是成杠铃了。想了几天后，我给出了我这个年龄能想出的答案： 这是被社会成员身所裹挟的结果&lt;/p&gt;
&lt;p&gt;具体来说，就是我们常常把自己身为子女的身份忘记了。在不同的社群中，我们总有一个被他人所定义的“身份”：学校里，老师会有告诉你，你是一位学生；若工作了，老板则会说你是他的员工。学生与员工有各自的职责，在这个社群里，大家都认可你的身份，你做起事来就有了依据，有了标准，他人不断重复你的身份，你在心中就有了定义——我就应该是这样的。可正如我说的，我们常常把自己身为于女的身份志记了，因为没有人会提醒你：你是首先是一位子女。等回家后，那些本来是为了让社群正常运行的规则，突然就起了冲突。比如身为学生的我自然就不会容忍有人浪费时间，不会容忍父母在自己学习时突然间进来，不会容忍在我上了半年学后，他们居然连什么是&lt;strong&gt;学考&lt;/strong&gt;&lt;a href=&quot;https://www.saroprock.com/%E6%99%AE%E9%80%9A%E9%AB%98%E4%B8%AD%E5%AD%A6%E4%B8%9A%E6%B0%B4%E5%B9%B3%E8%80%83%E8%AF%95&quot;&gt;^1&lt;/a&gt;都不知道。于是昔日的崇拜与敬仰不再，被社会裹挟的我们碍于放下自己的身份，一次又一次地让父母寒了心。等到想起自己的不该，要不是已经晚了；要不就像我一样，无力、而清楚地痛苦着。&lt;/p&gt;
&lt;p&gt;曾经，在一次八十大寿的宴席上，我望着大屏慕上一个熟悉又陌生的老头子，看他小时候出门上学的照片、穿着军装精神抖撒的照片、成家立业后的合照、再到现在的四世同堂。我觉得，这些照片就是他的人生啊！我在几分钟内看完的照片，是八十年以来的每个重要瞬间汇聚起来的。低头，可是，我这一个了解了他一生八十年的人，却连他的名字都不知道。一想，等我到那时， 我可以拿出这一组照片，作为我的一生吗？&lt;/p&gt;
&lt;p&gt;父亲又回了乡下。不知怎得，我忽得哭了。以前，我不知道父亲为何要花这么多的时间去接爷爷奶奶；不知道爷爷奶奶为何总不让他送最后却又妥了协；不知道为什么在外的妈妈总要给我买一堆东西，我也总是妥协了。有一种难言之情在心头，什么杠铃哑铃，明明是最重的两端，却是中间的“棍”在苦苦支撑。这么一看，应是两头细中间粗，他们上有老下有小，身在洪流，又怎么说呢？&lt;/p&gt;
&lt;p&gt;放下笔，我转头看见我同桌写了一张小小的纸条：&lt;strong&gt;星期三，老爸生日。&lt;/strong&gt;&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>独善其身</title><link>https://saro.pub/out</link><guid isPermaLink="true">https://saro.pub/out</guid><description>这看起来很不错——但，我们真的能做到吗</description><pubDate>Fri, 03 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;“穷则独善其身，达则兼济天下”。当一个人处于困境时，可能会选择独自承担、自我调整，这样可以更好地专注于解决自身问题，寻找出路；而当一个人达到一定的境界，拥有了一定的资源和能力时，就会考虑如何去帮助他人，去影响更广泛的社会，实现更大的价值——这看起来很不错——但，我们真的能做到所谓的“独善其身”&lt;a href=&quot;https://www.saroprock.com/%E2%80%9C%E7%8B%AC%E5%96%84%E5%85%B6%E8%BA%AB%E2%80%9D%E5%8E%9F%E6%8C%87%E4%BF%AE%E8%BA%AB%E5%85%BB%E6%80%A7%EF%BC%8C%E4%BF%9D%E5%85%A8%E5%B7%B1%E8%BA%AB%EF%BC%8C%E4%B8%8D%E7%AE%A1%E4%B8%96%E4%BA%8B%EF%BC%9B%E7%8E%B0%E5%A4%9A%E6%8C%87%E5%8F%AA%E9%A1%BE%E8%87%AA%E5%B7%B1%EF%BC%8C%E4%B8%8D%E7%AE%A1%E4%BB%96%E4%BA%BA%E3%80%82%E5%90%AB%E8%B4%AC%E4%B9%89%E3%80%82&quot;&gt;^1&lt;/a&gt;吗？&lt;/p&gt;
&lt;p&gt;何为“独善其身”？孟子认为，穷、达都是身外事，只有道义是根本——问题就在这里——什么是“道义”？有人说，道义是指人们在行为上应当遵循的道德准则和价值观念，可什么又是“应当遵循”的呢？如果一直这样问下去，你会发现这问题是无穷无尽的了，因为根本没有一个可以脱离社会、脱离他人而定义“道义”的一句话，也就是，“道义”建立在人的基础上。人作为社会的构成成员，行为和思想都受到社会和文化的影响。因此，“道义”的形成和发展也是在人类社会的交往和互动中逐步产生的。正是因为人类对于善恶、正义与公平的共同认知和追求，才形成了道义这一共同的价值基准。&lt;/p&gt;
&lt;p&gt;如此，我们应该回归主线再问一句：我想要的“独善其身”究竟是建立在自己的基础上的，还是建立在其他人的基础上的？这好像是一个“傻”问题，我都说独善其身了，还管迂腐的尘世如何？可别忘记了，你追求的“道义”，追求的“善”，没有他人，根本就没有！但若说“建立在其他人的基础上”，好似完全违背了这一句话的含义。在这个永恒的追问中，我不禁思考：“独善其身”是否真的意味着与社会脱离、与他人无关？或者说，我们是否真的能够在孤立的境界中找到真正的独善？&lt;/p&gt;
&lt;p&gt;一直以来，我都很讨厌我们班里面那些人，不理解他们为什么总是如此的吵闹，不愿意静下来好好聊，就连集体荣誉感也没有的。所以，我一直希望“独善其身”，尝试不与他们交流，自己安安静静地坐着，可以不用去想他们……吗？也许是我太懦弱了，每次自己默默看着他们在那里玩耍时，我也按捺不住，觉得自己不应该如此“离群索居”。但每次和他们交流后，又觉得自己犯错了，就应该一直坐着，坐在自己的小世界里，不用去想他们……可是我还是做不到，反反复复。&lt;/p&gt;
&lt;p&gt;我想我做不到”独善其身“，所以恨自己，恨自己为什么管不住自己，为什么不能遵循内心的”道义“一往无前呢？&lt;/p&gt;
&lt;p&gt;可道义啊，我想我现在应是明白了。&lt;/p&gt;
&lt;p&gt;费孝通先生在《乡土社会》关于人的关系说的很好——水波纹。虽然在理论上，“完全的独善其身”是一种可能，但实际上，我们生活在一个相互依存的社会中。我们的行为和选择往往会影响到他人，就像水波纹一样，扩散开来。一样的，别人的行为也会影响我们。而当我们谈及“独善其身”时，也许更应该理解为个体在处理困境时的自我调整和内在修养。这种自我修养，并不是孤立的个体主义，而是在个体与社会之间建立的一种和谐关系。在个体面临困境时，通过自我调整、自我成长，不仅是为了个体的自我实现，更是为了更好地融入社会，为社会的进步和发展做出积极的贡献。&lt;/p&gt;
&lt;p&gt;因此，我们应该认识到，真正的“独善其身”并不意味着与社会、与他人无关。相反，它更应该被理解为个体在处理困境、实现自我价值的过程中，与社会、与他人共同成长的一种方式。若是追求“完全的独善其身”，行孤立的个体主义，所谓”道义“就不存在了。&lt;/p&gt;
&lt;p&gt;我坐在位置上，想着我们班这么活跃，也蛮好吧。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>舔狗的幸运</title><link>https://saro.pub/the-world</link><guid isPermaLink="true">https://saro.pub/the-world</guid><description>人间，在人之间才叫人间</description><pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;“人间，在人之间才叫人间”是我很喜欢的一句话。这就是“人间”这两个字的意义吧，我想。可平常，人是总在的，间，确是没有的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;我又打开他给我的那一封信。&lt;/p&gt;
&lt;p&gt;稚嫩的字体，毫无保留的表达。我还是没能想明白他怎么敢这样做的：太鲁莽，太不切实际。我很钦佩那些可以将自己的苦难默默讲给别人听的人——谁都有大大小小的苦难，不是吗——敢于面对别人的鄙夷，苦于内心孤寂而无法排遣的时光，与另一个人交心，确是一件美好的事情啊。我重新回味了一遍，唉，然后又合上，再把他的小夜灯放进我的大书包里面带回家去。&lt;/p&gt;
&lt;p&gt;我总是少说自己的“苦难”的，我怕，我怕他们觉得我，只是卖弄苦难的小丑。以至于写下这篇文章，都得重复考虑好几次。每每重看那一封信，总觉得不真实，普天之下怎会有如此愚笨的人！哈哈，真以为每一个人都是像你想的一样吗？那些结伴出行，“浴乎沂，风乎舞雩，咏而归”的人，可是了解你？可他空间里却都是这样的情景：无数出游的照片，与无数活跃的留言。我一下子不知道这苦难来自于何方……明明他自己把自己描写得如此孤独与弱小，现实中，怎么会这样呢。&lt;/p&gt;
&lt;p&gt;后来一想，其实我也差不多……但到底哪差不多，我也不知道。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;又一次在发呆。&lt;/p&gt;
&lt;p&gt;音乐课上，老师和自发前来帮忙的家长在讨论五四歌咏比赛——高一下唯一一次集体活动——的安排，台上忙，台下的小人儿也是没有闲着的。有的在拼了命的写作业，好像这合唱与他们无关；有的在拼了命的聊天，哎呀，真是有意思的事情；还有的，就是我，独自在发呆。&lt;/p&gt;
&lt;p&gt;其实本来我旁边也有一位同学，只是他都不愿意看我一眼，也是静静地坐着——这也蛮好。后来他受不了了，一换座位，声音就比谁，都大了。我是知道他的，他有的团体。想到就在中午吃饭时，我拿晚了，看到有空位，就和正在激烈讨论题目的他们坐一桌了。我没法关掉自己的耳朵，也一五一十地听着，但越听越不对劲。于是在他们得出了一个“标准答案”后，我提出了自己的观点，结果：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“你这样想就不要考了！”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我不知道他为什么要这样说我，甚至连我的理由也不愿听的，扒拉几口，留下这一句话就走了。其他人也群起而攻之，逐一分析我的答案有多么的荒谬。拿饭晚的我，连他们的吃饭速度也赶不上，最后还是剩下我一个人留在八人的桌子上默默吃饭。&lt;/p&gt;
&lt;p&gt;我真的很伤心，为什么，为什么要这样子做。我看看我旁边的空位子，听不见越来越淡下去的老师的声音，我突然觉得自己不属于这里——我本是晚一年上学的，本来，我在高二。听说，高二的提前班与我们班是两个风格，一个安静，一个吵闹。我不知道哪一个更好，只是在走过高二的门前时，也会看看他们的样子，我的样子？&lt;/p&gt;
&lt;p&gt;下课了，回到教室。呆呆的我突然被抓住了：“施杭是对的！他说的是对的！”我不知道怎么的就成了一根棍子，横竖过不去，只能被别人肆意挥舞、打击。我才不关心这题目到底孰对孰错，听到这个消息，也完全开心不起来。我只是，伤心，伤心别人连听我说话的耐心都没有。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;加了一个小朋友的微信。&lt;/p&gt;
&lt;p&gt;那时候听人说，新一届创新班有一个人说和我很熟，还在体测时给我拍了照。我顿时来了兴趣，因为实际上，我完全不认识他！你说，一个陌生人说对别人说和你很熟，你能不好奇吗？我就一直想着要找到他，看看他的样子，了解了解他到底是个什么人。想着想着，几个星期就过去了，幸好，找到了。&lt;/p&gt;
&lt;p&gt;但，这只是误传，我不该加他。&lt;/p&gt;
&lt;p&gt;不知道怎么说，我觉得我犯了一个天大错误。是我太主动了？还是我确实是太奇怪了。当我等了十分钟消息只等来一个问号时，我败了。别人说，我这行为和舔狗没什么两样。&lt;/p&gt;
&lt;p&gt;我彻彻底底的败了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/QQ%E6%88%AA%E5%9B%BE20240501202701.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;我从未见过如此有杀伤力的文字。&lt;/p&gt;
&lt;p&gt;写到这里，我不想写了。写什么，越写，显得我矫情，显得我非要别人了解我似的无理取闹。但当我看到这几个字时，内心真的有一种抑制不住的暴怒。&lt;/p&gt;
&lt;p&gt;所以我只能羡慕他了。羡慕他，羡慕当他被一个人近乎癫狂地渴望交流时，还可以悠哉游哉地看小说，还可以毫不在意地说：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“想问一下 15 班人都是这样吗？”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我想他一定有很多朋友，有很多可爱的人在他身边……&lt;/p&gt;
&lt;p&gt;所以我只能羡慕他了。&lt;/p&gt;
&lt;p&gt;也许我在他眼里只是一个莫名其妙的神经病，15 班也是“神经”班。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;我又打开信，又走过高二，但我懒得想了，人间，我不知道去哪里找了。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>我所做的一切都小于时间</title><link>https://saro.pub/2a1491e</link><guid isPermaLink="true">https://saro.pub/2a1491e</guid><description>只是随风飘散了</description><pubDate>Sun, 14 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;太快了，一下子来嵊中已整整一年了。这一年，从提前班到现在，不说身份，就连这个学校也变了太多。从来时的吵闹与不恭，到如今的安静而坦然——我觉得我爱上这学校了，不只是它的樱花与雨，还有在这里的人们——新一届提前班又来了。&lt;/p&gt;
&lt;p&gt;没有疫情，他们来得规矩，以至于鲜有人发现他们已经到了，就在楼下，在空教室中摆了几张桌椅，在这之上放着人，这些后辈们。他们将在这里开启人生的新篇章，唉，如此美好的年华。&lt;/p&gt;
&lt;p&gt;可惜我没有时间去在乎他们——我已经不是提前班了，自然也不能像他们一样，因为免于中考而沾沾自喜——时间这条绵延不绝的河流似乎受到了雨的影响，变得湍急而难以遏制了：以前，它是一条涓涓细流，恰好可以从我的指缝流过。我可以随意地摆弄它，或是嘲弄般地感受它从指尖流过的冰凉感。后来，它成为了一条宽宽的河流，幸好，我也有了自己的一叶扁舟，得以在这之上自由飘荡。当夜晚繁星点缀天空时，我在其中安卧；当第一缕光从东方出现时，我已漂到了对岸……时间于我如平地，自有大把富余令我挥霍。&lt;/p&gt;
&lt;p&gt;窗外的雨还在下，樱花啊，也被打去了她自己的白色衣裳，露出本被遮盖的绿叶来——也许它本应该是红的，但我不想管这些——一片片，一片片地落在那一支支细流上，这是多么复杂的水网啊！而它们将会汇聚，汇聚，汇聚到那个我不愿意再看的地方。&lt;/p&gt;
&lt;p&gt;四面八方的雨都来了，时间长河已然……到了汛期。无数的水花在之上翻涌……而又瞬间被淹没。我细看，有白色，红色，还有绿色。这一次，我并没有得到什么东西——只有小木舟。但显然，它不足以征服这汹涌残暴的洪流，我只能呆呆地站在岸边。也许有一天汛期会结束吧，我想。&lt;/p&gt;
&lt;p&gt;我想起我地理课上学过的知识来，一下，开始往下游跑去，希望能找到一个足够平静的地方。可怜我双脚太不利索，连那红的绿的都赶不上，只能任凭它们消失在我的视野之中。&lt;/p&gt;
&lt;p&gt;风随着水，肆无忌惮，吹得我瑟瑟发抖——冰凉！我爱的樱与雨，一并被这无尽长河一一带走了。&lt;/p&gt;
&lt;p&gt;可惜我没有时间去在乎他们，想是我学习还不够好，不然怎么会找不到渡河点呢？&lt;/p&gt;
&lt;p&gt;窗外的雨仍在倾盆而下，樱花被雨水打得落英缤纷……但我只看到远处的几个人影。&lt;/p&gt;
&lt;p&gt;“创新班们又走了啊。”&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>原罪</title><link>https://saro.pub/306bb00</link><guid isPermaLink="true">https://saro.pub/306bb00</guid><description>一个”完美主义者“的独白</description><pubDate>Sat, 02 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;center&gt;&lt;strong&gt;那些被给予厚望的孩子们&lt;/strong&gt;&lt;/center&gt;

&lt;p&gt;&lt;del&gt;太快了，一下子来嵊中已整整一年了。这一年，从提前班到现在，不说身份，就连心境也变了太多。从来时的吵闹与不恭，到如今的安静而坦然——我觉得我爱上这学校了，不只是它的樱花与雨，还有在这里的人们——新一届提前班又来了。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;没有疫情，他们来得规矩，以至于鲜有人发现他们已经到了，就在楼下，在空教室中摆了几张桌椅，在这之上放着人，后辈们。他们将在这里开启人生的新篇章，如此美好的年华。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;但我却听不见这篇章被打开时的窸窣声。&lt;/del&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;“唰唰唰”，我又一次毫不留情地划掉了我写好的一段文字——它的尸体就在上面。只是因为没有了思路，它就该去“死”，但又不能“死”得太过草率，于是我用尺子细细地量好，一点不差地划上条横线。但杂乱无章的修正带，有大有小的字体，若有若无的笔锋，和被打上“已死”标签的文字……这一切都令我抓狂，我又考虑要不要全都涂掉，甚至撕掉一页&lt;/p&gt;
&lt;p&gt;“够了！”就我在想这些疯狂的举动时，我一下子怔住了。就同齐宣王一样，我忽得不知道我为何要这样做了。这些文字“犯罪”了吗？它们是触犯了什么法律，或是做了什么令人谴责的事情了吗？就要夺去它作为文章的权利，甚至将这连带的一面统统抹去吗？就算是为了纸张的美观而言，全涂与撕去并不会比现在的枷锁好上多少——我觉得我有些偏执了。&lt;/p&gt;
&lt;p&gt;我开始回想其它的一些事情：如果一个字写得丑，我会毫不留情地涂掉它，想来这是为了美观。可涂改地方的墨汁往往肆意飞溅，手一碰便到处都是。如此，脏乱的地方更多了，我只能再涂……如此重复，直至我的手没有沾上任何墨水——而此时原件早已不堪入目了——我“满意”地获得了一份更为脏乱的书写，即使这牺牲了很多，我还是乐此不疲；其它方面也一样，考试时，若我觉得答案需要更改，便会毫不留情地划掉原答案，重新作答，即使保留原答案并不会损失什么——甚至可以骗一点分数，我还是会整齐划掉。如果改错了，那再抄一次就是了，这很费时间，我还是乐此不疲。我想这些文字犯下的罪，一定是很深重的，不然，我这个理性的人不会花如此多的时间与精力去“惩戒”它们。但，原谅我找不出罪过。甚至“惩戒”了这些罪犯后，社会的治安不仅没有更好，反而更混乱了，以至于我不得不忙于新罪犯的判决……最后，罪犯都被清除了，可也没多少人了。“散了吧”我说，于是仅存的文字也被抹去了。&lt;/p&gt;
&lt;p&gt;我一个人坐在凳子上，望着这些由我亲手制作，后又亲手杀害的文字的尸体，沉思。心是好的，结果却残忍。我的偏执没有带来任何好处，我浪费了时间与精力，仅有的文字与纸也破败了。&lt;/p&gt;
&lt;p&gt;于是，我想，这是我的罪，我所犯下的傲慢之罪——我的原罪。&lt;/p&gt;
&lt;p&gt;人，总是想以最低的成本去达成自己的目标。每次看故事时，那些反派总是一个或几个上去轮流送死，直到最后无人可送，被主角爆杀而终——我觉得这些反派好傻啊！明明一下可以解决的事，难道多几个人给你丢脸了吗？可人呐，自以为稳操胜券时总是会膨胀的，能少用力就少用力，不然就是胜之不武、丢脸了，但结果就不言而喻了。&lt;/p&gt;
&lt;p&gt;可当我们嘲笑这些反派时，却没有想过，这种事情其实太多了：历史上、现实中，还包括现在的我。但以少胜多的战役往往被人传颂，那些真正在平日里发生的例子却鲜有人识。我们渴望是前者，却常常是后者。写作时，卷面要端正，每一个字都要精益求精，可涂来改去，本想的完美作文，最后总是“无疾而终”。我太傲慢了，明明知道字改与不改，段落删与不删都没有区别……却自以为改的字一定会好，重写的文章绝对更加有力。于是留下一段段尸体，只是因为我觉得它们不配为好作文，它们就应该被抹去；答题时，明明知道答案划与不划都不会影响评分……却耻于火力覆盖，坚决不多答一点——这又是何等的傲慢？不是“答案”的文字就去“死”，可这“答案”难道不是你妄自评判的标签？&lt;/p&gt;
&lt;p&gt;我就是这样一个虚假的“完美主义者”，有最干净的书桌与最乱的卷面，有最整齐的笔记与最荒谬的答案。我就是一个不自量力而傲慢的“欺骗者”，这是我的原罪。&lt;/p&gt;
&lt;p&gt;于是我忏悔，想洗脱我的罪责。&lt;/p&gt;
&lt;p&gt;我打开日记本，想记录今天的感想。顺便看看我在此曾犯下的一切。&lt;/p&gt;
&lt;p&gt;但这次不同了，日记本中的字却是活的、鲜活的。没有尸体，也没有规矩。但冥冥之中，它们又整齐地排在那儿，像我所期望的一样干净又整洁。是啊！多么奇怪的一件事——我这种连一段话都难以写出的人儿，每天却可以写下整整一页的日记来！我数了数，几个月，约莫有两万个字的量了。这两万个字是真正活着的，而且我从不为此感到疲劳与难过。我又返回去看了一眼左上角的尸体……&lt;/p&gt;
&lt;p&gt;我笑了。&lt;/p&gt;
&lt;p&gt;我与他们有什么不同呢？我也不过是那些被给予厚望的孩子们罢了。我也想尽心尽力，十全十美，没有一步差错，没有一丝多余。&lt;/p&gt;
&lt;p&gt;日记里的我好卑微，无不在反省自己，不过，确是不见了之前的傲气。看来我还是明白的很呐！我想。这就是我所犯下的傲慢之罪——我的原罪。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/651465c6304671c6f347ad3349d1f93.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/f0a009f78958165ad3b5e8e5aa26725.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>既是自己亦是客</title><link>https://saro.pub/d745c01</link><guid isPermaLink="true">https://saro.pub/d745c01</guid><description>我与物皆不可能无尽也，只是，与其白白叹息，不如与客对话……</description><pubDate>Sat, 24 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;写着无聊的语文作业，忽然看到一个题目，顿时来了兴趣。它问：”苏子最后说服了客人吗？&amp;quot;这确是一个很有趣的问题：《赤壁赋》中的客人，作者并没有做过多描写，所谓的“客喜而笑”，兴许是苏子与自己的和解。&lt;/p&gt;
&lt;p&gt;看任何一件事情，应从正反、内外来辩证。同样的，关于这一个问题，若仅看最后一段，似乎苏子与客最后达成了共识，圆满结束。但是，我内心有一个疑问：能够说出如此一段的客，难道连“逝者如斯，而未尝往也”的道理都不知道吗？这不对，也不应该。&lt;/p&gt;
&lt;p&gt;在仔细读读客讲的话，发现其与苏子所说的，是同一个载体。但不同的是，客将自己置身于那滚滚长江之中，将生命寄托与小小的蜉蝣之中，嗟叹时光短促。实际上，客从来没有将苏子所说的否认过、或真伪过，因为他是从人的角度观察，不是说曹孟德之后便无人了，只是孟德不在了。而苏子却将人的视角拉高了&lt;code&gt;n&lt;/code&gt;倍，从长江中抽离，俯瞰长江之水——这自然是很简单的，长江一直都在，并没有消失；孟德已死，但你我仍存，人类亦存。苏子将这种宏大的视角套到了人的身上，告诉客“物与我皆无尽也”。在我看来，这也算得上是诡辩了。&lt;/p&gt;
&lt;p&gt;客不会不知道长江“而未尝往也”，他只是无奈了。他知道，在这个时候，再以人的视角来看，只有悲，与哀。他不可能真如苏子所说的从世俗抽离，苏子的话只是引导，他本就知道。&lt;/p&gt;
&lt;p&gt;所以有人说，这是苏子的自我解脱，所谓客与苏子，不过是内心的两个方面而已。客永远也不可能被说服，因为客所说的，是客观事实，是不可否认的。客只是向苏子妥协了，从无意义的嗟叹中抽离，以更高的视角宽慰自己。这是客的无奈，更是苏子的无奈。&lt;/p&gt;
&lt;p&gt;我与物皆不可能无尽也，只是，与其白白叹息，不如与客对话——既是自己也是客。我是自己的客，亦是世界的客。我走了，从这个世界路过，正如长江滚滚向前。我与客的对话，亦是与世界对话，乃是真的“造物者之无尽藏也”。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>用 Astro 搭建一个高性能博客</title><link>https://saro.pub/5c04b85</link><guid isPermaLink="true">https://saro.pub/5c04b85</guid><description>一篇简单的 Astro 博客部署教程</description><pubDate>Fri, 23 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import Info from &amp;quot;../../components/mdx/Info.astro&amp;quot;;
import Error from &amp;quot;../../components/mdx/Error.astro&amp;quot;;
import Warning from &amp;quot;../../components/mdx/Warning.astro&amp;quot;;
import Success from &amp;quot;../../components/mdx/Success.astro&amp;quot;;&lt;/p&gt;
&lt;h2&gt;前言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;本篇文章的目的旨在读者无须在多个窗口间跳动即可完成 Astro 的部署与个性化。&lt;strong&gt;需要下载的内容可在本页面一键下载&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;为什么选择 Astro&lt;/h2&gt;
&lt;p&gt;关于这个问题，你可以访问它的官方网站：&lt;a href=&quot;https://docs.astro.build/zh-cn/concepts/why-astro/&quot;&gt;为什么是 Astro? | Docs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;Info&gt;如果你想了解我的想法，请移动至本文结尾&lt;/Info&gt;&lt;/p&gt;
&lt;h2&gt;需要的环境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;为了让 Astro 在你的系统上运行，你需要安装 &lt;a href=&quot;https://nodejs.cn/&quot;&gt;&lt;strong&gt;Node.js&lt;/strong&gt;&lt;/a&gt;、版本 &lt;code&gt;v18.14.1&lt;/code&gt; 或更高版本。&lt;blockquote&gt;
&lt;p&gt;点击下载：&lt;a class=&quot;btn&quot; href=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/asset/node-v20.11.1-x64.msi&quot; target=&quot;_blank&quot;&gt; node-v20.11.1-x64&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;[可选] 安装 &lt;strong&gt;pnpm&lt;/strong&gt;：&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install -g pnpm
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;我还需要什么&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;一个 &lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt; 账号&lt;/li&gt;
&lt;li&gt;一个合适的代码编辑器&lt;/li&gt;
&lt;li&gt;掌握一定的 &lt;strong&gt;&lt;em&gt;魔法-Magic&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;创建你的博客项目&lt;/h2&gt;
&lt;Warning&gt;
  {&quot; &quot;}
  Astro 不像 Hexo，可以安装多个主题，然后只用写几个配置文件就好了——还能随便切换主题。Astro
  每个主题就是一个项目，而每位作者用的 `frontmatter` 格式可能都不一样，所以为了避免频繁迁移项目，请先选好自己要使用的主题。{&quot; &quot;}
&lt;/Warning&gt;

&lt;h3&gt;选择你需要的主题&lt;/h3&gt;
&lt;p&gt;Astro 像 Hexo 一样，也有很多主题可用（&lt;del&gt;更好的说法是项目模板&lt;/del&gt;）。你可以在 &lt;a href=&quot;https://astro.build/themes/&quot;&gt;&lt;strong&gt;Themes | Astro&lt;/strong&gt;&lt;/a&gt; 挑选自己需要的主题，这里我选择简单好用的 &lt;a href=&quot;https://github.com/satnaing/astro-paper&quot;&gt;&lt;strong&gt;AstroPaper&lt;/strong&gt;&lt;/a&gt; 作为示例。&lt;/p&gt;
&lt;h3&gt;拷贝主题 / 项目模板（仓库）&lt;/h3&gt;
&lt;p&gt;只需要使用包管理器即可（推荐使用 pnpm）：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# npm 6.x
npm create astro@latest --template satnaing/astro-paper
# npm 7+, extra double-dash is needed:
npm create astro@latest -- --template satnaing/astro-paper
# yarn
yarn create astro --template satnaing/astro-paper
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;完成后的目录如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;/
├── public/
│   ├── assets/
│   │   └── logo.svg
│   │   └── logo.png
│   └── favicon.svg
│   └── astropaper-og.jpg
│   └── robots.txt
│   └── toggle-theme.js
├── src/
│   ├── assets/
│   │   └── socialIcons.ts
│   ├── components/
│   ├── content/
│   │   |  blog/
│   │   |    └── some-blog-posts.md
│   │   └── config.ts
│   ├── layouts/
│   └── pages/
│   └── styles/
│   └── utils/
│   └── config.ts
│   └── types.ts
└── package.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装必要的内容：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm installl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你迫不及待想看看自己的博客，可以启动 Astro 开发服务：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你应该能在终端中看到 Astro 正在以开发模式运行的提示信息。&lt;/p&gt;
&lt;p&gt;在浏览器中输入 &lt;code&gt;http://localhost:4321/&lt;/code&gt; 即可即时预览。&lt;/p&gt;
&lt;h3&gt;个性化你的博客&lt;/h3&gt;
&lt;h4&gt;config.ts&lt;/h4&gt;
&lt;p&gt;里面包含了网站的一些基本信息，下面是 &lt;a href=&quot;https://github.com/satnaing/astro-paper&quot;&gt;&lt;strong&gt;AstroPaper&lt;/strong&gt;&lt;/a&gt; 的 &lt;code&gt;config.ts&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;// file: src/config.ts
export const SITE = {
  website: &amp;quot;https://astro-paper.pages.dev/&amp;quot;,
  author: &amp;quot;Sat Naing&amp;quot;,
  desc: &amp;quot;A minimal, responsive and SEO-friendly Astro blog theme.&amp;quot;,
  title: &amp;quot;AstroPaper&amp;quot;,
  ogImage: &amp;quot;astropaper-og.jpg&amp;quot;,
  lightAndDarkMode: true,
  postPerPage: 3,
  scheduledPostMargin: 15 * 60 * 1000, // 15 minutes
};
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;选项&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;website&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;您部署的网站 URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;author&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;您的姓名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;desc&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;您的网站描述。对于 SEO 和社交媒体分享很有用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;title&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;您的网站名称&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;ogImage&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;您网站的默认 OG 图像。对于社交媒体分享很有用。OG 图像可以是外部图像 URL，也可以放置在&lt;code&gt;/public&lt;/code&gt;目录下&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;lightAndDarkMode&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;启用或禁用网站的&lt;code&gt;明亮和暗黑模式&lt;/code&gt;。如果禁用，将使用主色彩方案。此选项默认启用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;postPerPage&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;您可以指定每个帖子页面上显示多少帖子。（例如：如果将 SITE.postPerPage 设置为 3，则每页只显示 3 篇帖子）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;scheduledPostMargin&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;在生产模式下，具有将来&lt;code&gt;pubDatetime&lt;/code&gt;的帖子将不可见。但是，如果帖子的&lt;code&gt;pubDatetime&lt;/code&gt;在接下来的 15 分钟内，它将是可见的。如果您不喜欢默认的 15 分钟间隔，可以设置&lt;code&gt;scheduledPostMargin&lt;/code&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;新文章&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;blog/&lt;/code&gt; 文件夹中放的就是你的文章，用一般的 &lt;code&gt;MarkDown&lt;/code&gt; 格式编写即可，注意里面的 &lt;code&gt;frontmatter&lt;/code&gt;，不同的主题可能有不同的 &lt;code&gt;frontmatter&lt;/code&gt; 规则，详见主题仓库的 &lt;code&gt;README.md&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;下面是 &lt;a href=&quot;https://github.com/satnaing/astro-paper&quot;&gt;&lt;strong&gt;AstroPaper&lt;/strong&gt;&lt;/a&gt; 的 &lt;code&gt;frontmatter&lt;/code&gt; 规则：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;属性&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;th&gt;备注&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;title&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文章的标题。 (h1)&lt;/td&gt;
&lt;td&gt;必填&lt;sup&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;description&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文章的描述。用于文章摘要和文章的站点描述。&lt;/td&gt;
&lt;td&gt;必填&lt;sup&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;pubDatetime&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;发布的日期时间，使用 ISO 8601 格式。&lt;/td&gt;
&lt;td&gt;必填&lt;sup&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;modDatetime&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;修改的日期时间，使用 ISO 8601 格式。 （仅在博客文章修改时添加此属性）&lt;/td&gt;
&lt;td&gt;可选&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;author&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文章的作者。&lt;/td&gt;
&lt;td&gt;默认 = SITE.author&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;slug&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文章的 Slug。此字段是可选的，但不能是空字符串。 (slug: &amp;quot;&amp;quot;❌)&lt;/td&gt;
&lt;td&gt;默认 = slugified 文件名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;featured&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;是否在首页的特色部分显示此文章&lt;/td&gt;
&lt;td&gt;默认 = false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;draft&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;将此文章标记为&amp;#39;未发布&amp;#39;。&lt;/td&gt;
&lt;td&gt;默认 = false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;tags&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;此文章的相关关键词。以数组 yaml 格式编写。&lt;/td&gt;
&lt;td&gt;默认 = others&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;ogImage&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文章的 OG 图像。对于社交媒体分享和 SEO 很有用。&lt;/td&gt;
&lt;td&gt;默认 = SITE.ogImage 或生成的 OG 图像&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;canonicalURL&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;规范的 URL（绝对路径），以防文章已经存在于其他来源。&lt;/td&gt;
&lt;td&gt;默认 = &lt;code&gt;Astro.site&lt;/code&gt; + &lt;code&gt;Astro.url.pathname&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;部署你的博客项目&lt;/h2&gt;
&lt;p&gt;随便找一个托管平台部署即可，这里使用 &lt;code&gt;Vercel&lt;/code&gt; 。&lt;/p&gt;
&lt;h3&gt;将你的项目托管至 GitHub&lt;/h3&gt;
&lt;p&gt;这个不用多说了吧：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git init
git add README.md
git commit -m &amp;quot;first commit&amp;quot;
git branch -M main
git remote add origin 你的仓库地址
git push -u origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;托管 Vercel&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;进入 &lt;a href=&quot;https://vercel.com/&quot;&gt;Vercel&lt;/a&gt; 然后注册一个账号；&lt;/li&gt;
&lt;li&gt;新建一个项目；
&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/97775e103ec12b1948f80056fac26354.png&quot; alt=&quot;&quot;&gt;&lt;/li&gt;
&lt;li&gt;选择你刚刚创建的仓库（这里拿之前的举例子）；
&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/523d70223b1e6415b5a6c3d64e786ef9.png&quot; alt=&quot;&quot;&gt;&lt;/li&gt;
&lt;li&gt;点击 &lt;code&gt;Deploy&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;看到满屏的烟花了吗？你成功了！
&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/3a044d73989b13aecd6758293ab9f0d9.png&quot; alt=&quot;&quot;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;可能遇到的问题&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;克隆项目时报错了&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;这可能是 npm 镜像的问题，推荐使用官方镜像 + 使用魔法。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;del&gt;博主之前就是用了其他镜像导致祭了&lt;/del&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm config set registry https://registry.npmjs.org/
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;项目自己就报错了&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;因为 Astro 的博客就是一个独立的项目：&lt;/p&gt;
&lt;p&gt;所以这个很难有一个通用的解法，下面是可能的问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;启用了作者的实验性内容（我就遇到过）；&lt;/li&gt;
&lt;li&gt;文章格式不符合项目要求或者文件路径错误；&lt;/li&gt;
&lt;li&gt;……&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;本地没问题，部署报错了&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;看看 &lt;code&gt;pnpm-lock.yaml&lt;/code&gt; 和 &lt;code&gt;package.json&lt;/code&gt; 有没有问题。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;其他（待添加）&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;尾声——我为什么选择 Astro&lt;/h2&gt;
&lt;p&gt;搭建个人博客有很多种途径，作者本人（我）曾在此吃了不少苦头。刚开始我买了云服务器准备使用 WordPress 搭建网站，结果发现这对服务器的要求太高了，WP 还会出一些奇怪的 BUG （比如某一个重要 .js 突然祭了，就写不了文章了）。于是乎，我找到了成本更低也更快捷的方法——Hexo。它拥有庞大的社区，解决方案也很成熟，很适合我这种没有基础的小白。问题就是，单从我个人体验来说，Hexo 并不像它简介说的一样快速，它太臃肿了，尤其是对于某些主题来说，东西太多太杂，资源浪费严重。如果你曾使用&lt;a href=&quot;https://pagespeed.web.dev/analysis/https-old-saroprock-com/hf4ci40qpw?hl=en&amp;form_factor=mobile&quot;&gt;PageSpeed Insights (web.dev)&lt;/a&gt;测试过 Hexo 站点，会发现它真的慢……&lt;/p&gt;
&lt;p&gt;下面是用 Butterfly 搭建的一个 Hexo 站点，仅有两篇文章：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/0baf905c14088e62e3ba11b9eff51bbd.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;我的老博客：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/623cd59dc2400922b54af34b3ecce512.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;更不用说其他的了……&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/fc5bd25a6a6b47a6ad0057d8b08b8533.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;而下面是我现在的博客：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/b455bc18eb247c4822f8c5408269e979.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;就我个人而言，Astro 是一个优于 Hexo 的替代品，那么我为什么不用 Astro 呢？&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>清楚？明白？</title><link>https://saro.pub/21f9fda</link><guid isPermaLink="true">https://saro.pub/21f9fda</guid><description>很多时候我们连定义都没下就开始讨论了</description><pubDate>Sun, 18 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;这篇文章算是对之前想法的一些总结归纳，其中还有很多不严谨或者未经推敲的部分，换句话说，也许我自己都不清楚我在讲什么，是对或是错。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;高中正式的第一个学期结束了，我如愿以偿拿到了班级前十的好成绩。而每到大考结束，考了前十的人都会多一个额外任务：分享自己的学习方法。这时候我就开始琢磨了——我要分享什么好呢~奇怪的是，我的脑海中没有一点思绪。我心心念念盼了那么久的机会，等到真的到我手上的时候，我居然不知道应该说什么！？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;因为我发现我根本没有什么所谓的学习方法！&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;del&gt;在提出这个暴论之前，我应该明确的一点就是：我指的是没有确切的，一以贯之的学习方法。也许在别人眼里，我是一个自律的人，可事实上，我没有定过一天计划、任务，更不要说什么做错题本的习惯了。如果硬拿一点来说，就是有时间写写日记，在里面吐槽一些事情，似乎也不是什么重要的线索……&lt;/del&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;前面的只是引子，真正内容在下面&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3&gt;坚信客观事实，不加主观修饰&lt;/h3&gt;
&lt;p&gt;我在我们班里总看见一类人：他们每天唯一的生活好像只有做作业了——自习课做作业；上主副课做作业；下课做作业；午休做作业；竞赛做作业；就连晚上寝室里面也开个手电筒做作业……问题是，往往每天晚自习下课说做不完作业的人，刚好就是同一批人。我于是陷入了沉思：&lt;strong&gt;兄弟，你已经废了这么多功夫做作业了，你怎么还是做不完啊！？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这类人是很擅长自我安慰的：&lt;strong&gt;我已经这么努力了……（别人就不会说我了吧）&lt;/strong&gt; 如此这般，往往会形成滚雪球的情景：今天任务没完成，留到明天；明天又没有完成，继续拖……最后拖到回家，家里则奋笔疾书继续补，嗯，这样一个星期的轮回就完成了。&lt;/p&gt;
&lt;p&gt;别说做作业了，做别的事情也是一样的。这种行为毫无疑义是有问题存在的，可是你又说不得他们：你有他们认真吗？你看过他们的笔记、错题本吗？你看过他们挑灯夜读的样子吗？你自己又是什么样的呢……可惜事实不会骗人，他们往往是成绩吊车尾的几个，虽然全段不差，但是在提前班着实是不够看的层面。&lt;/p&gt;
&lt;p&gt;我看过他们的样子，也看过他们的笔记、错题本。说实话，我是真的为他们心痛，有如此精力却不愿意花时间整理反思，这样浪费时间，最后又获得了什么呢？&lt;/p&gt;
&lt;p&gt;这也不能算是假努力，但这结果往往比假努力更为糟糕。假努力是你自己清楚的，是有问题的，但是这种情况给自己铺设了一条后路：&lt;strong&gt;我已经很努力了。&lt;/strong&gt; 于是人就会&lt;code&gt;不思进取&lt;/code&gt;，反而更差了，陷入一种恶性循环。&lt;/p&gt;
&lt;p&gt;因为我们没有明确客观事实的因果关系。&lt;/p&gt;
&lt;p&gt;我不需要知道你是怎么怎么想的，不考虑你到底是为了什么也要这样做。我只需要明确一个&lt;code&gt;事实&lt;/code&gt;：&lt;strong&gt;你这样做，是达不到你当前想要的&lt;code&gt;所谓的目的&lt;/code&gt;（为什么是所谓下面有）的&lt;/strong&gt;。这是无法辩驳的，因为你每天做的事情不断地在论证这一点。那么，你就应该承认自己的过失（如果你想改变的话），并且停止一切的主观修饰，不要给自己加滤镜了，别人只是不好意思说出来，如果你自己都被自己骗了，那就只能装一辈子了。&lt;/p&gt;
&lt;p&gt;我知道这很残酷，尤其是对于那些人来说。但，这就是事实，这是不能改变的。不是别人的学习方法拿来一用就好的，不是每天埋头做作业就好的。如果发现实际与设想有偏差，就应该立足于实际，而不是用设想麻痹自己！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这回答了我为什么不随便说几个学习方法糊弄一下，因为这很可能产生误解，达不到原有的效用。那么，我们应该怎么办呢？很简单，从内心出发，清楚自己到底想要什么，明白应该改变什么，你就会找到属于自己的一套方法，这是独一无二的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3&gt;清楚想要什么，明白改变什么&lt;/h3&gt;
&lt;p&gt;经典问题之一：&lt;strong&gt;什么是学习？什么能算学习？学习的定义是什么？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;你也许会说，这是一个没有答案的问题，或者说出自己的见解。两种都可以接受，但是关键不是这个问题的答案，关键是你有没有一条可以说服自己并且可以致用的&lt;code&gt;定义&lt;/code&gt;？很多人都忽略了这一点，以为这是一个开放性的问题就不需要回答了。可仔细想想很可笑了，每天在学习的人，居然连学习的定义都不知道？那你怎么知道你是否在学习？或者你不在学习？这难道依你的意志而改变吗？不会，对一个人来说，这也是客观事实的一种。&lt;/p&gt;
&lt;p&gt;经典问题之二：&lt;strong&gt;你学习是为了什么。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;为了什么？不同的人会有不同的答案——这很正常。但是如果我过一会再问你呢？几天后？一个月后？你的答案会与第一次相同吗？这很难吧……毕竟就我自己而言，也不能找到一条终身侍奉的真理来指引我，所以我现在仍然不得不面对这个问题，并且加以修改。&lt;/p&gt;
&lt;p&gt;上面两个问题也许太空太大了，不过我们可以把这个思路拓展一下，反思我们平常做的一些事情。就拿最普通的——&lt;code&gt;做错题本&lt;/code&gt;这个方法来讲吧。你对做错题本的定义是什么？是把题目干干净净抄写一次然后附上解析，还是抄一次题目重做一遍，还是标记错题位置以便后续查找复习？你以为的&lt;code&gt;做错题本&lt;/code&gt;其实也有很多种方式去实现，问题就在于没有搞清&lt;code&gt;自己的定义&lt;/code&gt;就火急火燎地忙于实践，这不是和上文讲的例子一样可笑又无助吗？&lt;/p&gt;
&lt;p&gt;你做错题本是为了什么？我这里就坦白说了，很多人，包括我，做错题本都是被迫的，被迫于完成老师的任务。那么这样一来，事情就变质了。也许你拿第一种&lt;code&gt;把题目干干净净抄写一次然后附上解析&lt;/code&gt;做了好几本错题本，甚至还被老师公开表扬。但这并不能改变什么东西，用之前的话来说，我不管你内心如何想的，总之你确是没有在写完错题本之后再仔细看过那些题目了，这些也许只是你炫耀的资本。但，我要强调的是客观事实，这就会引出后面的结果——错题本对你没有任何帮助。这时候又回到前面了，因为你现在不仅仅有了炫耀的资本，还有了安慰的资本：&lt;strong&gt;老师说的我都做了，你看我写了这么多，还被表扬了呢~&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;复习错题是你&lt;code&gt;所谓的目的&lt;/code&gt;，至于真正的……那就要看你如何想的了。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其实我也明白，没有人会有那种奇怪的目的。但是不妨在做事之前好好想一想，我到底是为了什么？我到底在做着什么？我们往往会被自己蒙骗——我们不希望自己拥有一个坏心情，不希望浪费。于是只能尽一切力量合法化自己的行为，深陷泥潭。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;真实的是什么？虚假的是什么？那些学习方法真的是法宝吗？那些不良行为真的是阻碍吗？施行蒙骗我们的不仅有我们自己，还有我们周围的一切。我们应该勤问：&lt;strong&gt;事实是什么&lt;/strong&gt;？以自己内心出发，探求客观事实的因果关系，在敢于承认自己的错误的基础上对别人的想法进行批判论证，然后下好定义，明确目的，再加以施行。&lt;/p&gt;
&lt;p&gt;一切应该建立在事实之上，而不是主观臆断上。每每问起那两个问题，我们总会说：&lt;strong&gt;我当然知道&lt;/strong&gt;。但，你真的清楚了吗？你真的明白了吗？你真的认真思考过背后的逻辑，抛开主观的蒙蔽了吗？还是只是，套用那些成功经验呢？&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>在网络的另一头相遇</title><link>https://saro.pub/758b7a0</link><guid isPermaLink="true">https://saro.pub/758b7a0</guid><description>跌跌又撞撞，你会是我曾经所期望的那个他吗？</description><pubDate>Mon, 08 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;之前在学校里看主持人大赛的时候，有一个题目让我印象很深：“&lt;strong&gt;成功路上，总是与知音相伴&lt;/strong&gt;”。可我觉得，这句话应该是“&lt;strong&gt;成功的路上，总是与孤独相伴&lt;/strong&gt;”。哎，每每说到这种事，总是让我想起先前的一段时光，那时候我老是希望能找到一个真正的朋友——一位可以倾心交流的人。可结果……我往往成了小丑……有一句话令我彻底破防了：&lt;/p&gt;
&lt;p&gt;“&lt;strong&gt;你和我之前见过的人都不一样，很少有人会像你一样说心里话……不太适应。为什么不能像别的人一样呢，每天过开心就好了呀&lt;/strong&gt;”&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;“朋友，难道只是这样吗？”我轻声地问自己，为什么我终于鼓起勇气和别人坦白时，却没人要听呢……难道真的是我太不合群了吗，还是我本来就不适合这样……&lt;/p&gt;
&lt;p&gt;不知道又有多少次，当我以为可以在网上找到寄托时，他们却一个又一个地离开了。最后只剩下我了，而我也已经上了高中，也不知道还可以把这项未尽的事业推到多远。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;……其实本来还写了很多，但是正如《乡土中国》中所说，文字仍然只是一个工具，一个不太完善的工具。现在我确是倒不出更多墨水来了，否则思想就歪了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;我和他的相遇只是偶然，我已不是之前那个一天到晚追求所谓朋友的我了，一切都很平静，他问我答，仿佛这次聊天仍然会像之前几次一样，没几天就结束了，扔进池塘里，泛不起一点涟漪。他还和我讲过他自己的一个宏伟目标，做一个高三毕业纪念程序。我有点好笑，倒不是笑他过于自大，只怕这愿望过于天真了。他把一切都列出来，很认真的给我看他的想法。原谅我不愿意再接触这种项目，因为之前的很多都化为了泡影。&lt;/p&gt;
&lt;p&gt;“&lt;strong&gt;算了，我也不关心，这个，你需要我帮什么呢&lt;/strong&gt;”&lt;/p&gt;
&lt;p&gt;一切都很正常，他把我拉进了 github 的共同开发的名单。我没多想，只是我自己的项目都没时间做，哪有功夫管你呢。于是我就一直躺在名单里面装死，顺便看看项目怎么样罢了。后来，他还把我拉近他的小群里面让我当顾问，“哎，又是这种无聊的过家家游戏”，我想到，一切都很正常。&lt;/p&gt;
&lt;p&gt;但是他做了一件让我想不到的事情……正中我的眉心。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;方便发一下你家地址吗？提前一个月的新年礼物 ⬇️
&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/IMG_20240106_173930.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我承认我被吓傻了，这这这我什么都没做怎么就，怎么就可以呢。&lt;/p&gt;
&lt;p&gt;我感觉他怎么和我之前一样，那么天真呢……&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;我：&lt;/strong&gt;“想不好给你送什么（没什么拿得出手的）”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;他：&lt;/strong&gt;“没有关系，感觉你帮了我忙, 这是应该的。” （其实没有帮什么忙的我愧疚感++）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我：&lt;/strong&gt;“哎哎哎那也不至于这样吧”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;他：&lt;/strong&gt;“几十块钱没啥”&lt;/p&gt;
&lt;p&gt;……&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;他：&lt;/strong&gt;“其实不光是因为你帮了忙, 我觉得更多是因为”&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://saroprock.oss-cn-hangzhou.aliyuncs.com/img/fcd2b623e8767aba207018e72248f0cc.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;我承认我真的被吓傻了……&lt;/p&gt;
&lt;p&gt;从小到大，这种话只有我对别人说，我也写过这种信，但是结局很悲惨。&lt;/p&gt;
&lt;p&gt;我陷入了沉默。这个世界上，竟然还有人能做出这种事！？虽然我并不能完全理解他的做法，但想起曾经那些孤独的时光，突然觉得……&lt;/p&gt;
&lt;p&gt;或许，当初我被孤独困扰时，是因为我过于在意表达自己，急于敞开心扉了。却没有想到，每个人都不同，每一次交往都需要过程，需要时间。有时候，真正的知音可能会悄然而至，而我们却未曾察觉。或许，在追求友谊的过程中，我过于焦虑，让自己变得有些刻意。&lt;/p&gt;
&lt;p&gt;他的诚挚和天真，让我反思了很多。或许，我应该更加开放一些，不要过于拘谨。毕竟，人与人之间的联系，就像一场旅行，需要一点点勇气，一点点耐心，去发现彼此的美好，而不是急于要求对方与自己产生深刻的共鸣。&lt;/p&gt;
&lt;p&gt;在这个瞬间，他在我眼中的形象，发生了翻天覆地的变化，我决定给自己一次机会，抓住他，哪怕是，面对之前我的不作为。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我：&lt;/strong&gt;“其实你对我来说也差不多……”&lt;/p&gt;
&lt;p&gt;我突然觉得自己也好天真，他只是送了一个小礼物，我却再一次变得和之前一样了。&lt;/p&gt;
&lt;p&gt;“你不怕再一次扑空吗？”我问我自己。&lt;/p&gt;
&lt;p&gt;“扑空又如何呢？人生就是一场冒险，而每一次尝试都是一次成长。就算扑空了，也不过是一段经历罢了。”我回答道，“毕竟，我也不缺这一段经历了。”&lt;/p&gt;
&lt;p&gt;在这个寂静的时刻，我不禁想起了那句“成功路上，总是与知音相伴”。或许，我错过了很多人，但这一次，我不想再错过他，不论有意无意。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;他：&lt;/strong&gt;“不好和你说太多, 不然我的信就剧透完了”&lt;/p&gt;
&lt;p&gt;明明已经在配送了，我却要走了……今天是等不到你的信了，这算是上天的安排吗？&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>从”数字识别“看人工智能理解问题</title><link>https://saro.pub/9dabd8c</link><guid isPermaLink="true">https://saro.pub/9dabd8c</guid><description>全国中学生科普科幻作文大赛比赛作文</description><pubDate>Sat, 23 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;都说 2023 年是 AI 元年。诚然，在人工智能蓬勃发展的今天，从刚开始的“新奇玩意”，现在的人工智能更为成熟与完善。不同于先前的人工智能只能在特定内容中大放异彩，现在的人工智能还可以解决泛化问题：天文地理，古今中外，几乎无所不能。但是，看似“无敌”的人工智能却总是在基础问题——尤其是数学问题上面出错，这不得不让人怀疑，人工智能它真的“理解”了文本、图像吗？还是仅仅装作了解“东拼西凑”呢？&lt;/p&gt;
&lt;p&gt;关于这个问题，让我们把时光转移到人工智能刚刚出现的那一段时间，去挖掘它的本质。其中最具代表性的项目就是“数字识别”了，它是人工智能在计算机视觉领域中的一个经典问题，通过这个问题，我们可以深入探讨人工智能在理解和解决问题时的一般性原理。我们不会深入了解其中的实现方式，仅仅通过其原理探讨理解问题。&lt;/p&gt;
&lt;p&gt;“数字识别”的目标是让计算机系统能够自动辨识和理解手写或印刷的数字，这里我们讨论相对简单的点阵数字识别。在点阵数字识别中，每个数字由一个网格，其中每个元素表示一个像素的状态，通常是黑色（点亮）或白色（未点亮）。而这些一张张的“点阵图”，就被称作为“数据集”，每个点阵图有一个答案（标签），这就是我们人工智能在训练时的“训练数据”。有了“学习资料”，就需要“学生”，所谓的神经网络就是我们的“学生”。神经网络通常由多个层组成，包括输入层、隐藏层和输出层。这输入层就像眼睛、耳朵，用来接收数据；隐藏层就像人的大脑，用来处理数据；这最后的输出层就是人的嘴巴了，返回最终的结果。&lt;/p&gt;
&lt;p&gt;与人的大脑类似的，在神经网络中有很多“神经元”，也称为节点或感知器。每个神经元接收来自输入的信号后对这些信号进行加权求和，并通过激活函数产生输出。在神经网络中，每一个神经元都链接了一条“单向边”。边上有一个“权重（w）”，代表了神经元链接的强度。通过激活函数，每次经过边时，就可以得到下一个神经元的状态，公式为“输出 = 激活函数 (∑i wi⋅xi)”。可以看见，激活函数是相同的，唯一有变化的就是权重了。这恰恰是整个神经网络的关键，一组合适的权重，就可以输出正确的结果。权重通过反向传播算法在训练过程中进行调整，以最小化网络输出与实际标签之间的误差。这调整权重的过程，也正是人工智能学习的过程。&lt;/p&gt;
&lt;p&gt;最后我们终于得到了“一个”结果。真的是一个吗？其实不然。我们的人工智能有“十张嘴巴”，分别代表 1234567890 十个数字，每个“嘴巴”上有一个“置信度”，代表模型对某个类别的预测概率。最后，程序只会输出置信度最高的结果，看似只有“一个”结果而已。&lt;/p&gt;
&lt;p&gt;讲了这么多基础知识，也许你已经发现了，整个神经网络的运算过程与真正的大脑有本质上的区别，其输出的结果（不是最后输出）也有天壤之别。若只看最后的结果，也许并不能发现什么明显区别，但“置信度”就是人工智能露出的马脚。我们经常说“1 是 1，2 是 2”，而并不是“这个数字有 83.237%的可能是 1”。在人脑中，这种“置信度”是不存在的，也是不需要的。也许有人会说：“那我看不清数字的时候，我也会猜一个最有可能的数字呀。”，这也是不一样的：人工智能不是“猜”出来的，而是“算”出来的。它的运作模式就确定了它在训练完毕之后，面对没有标签的训练集，其权重是不会改变的——也就是说，输入相同的内容，其返回的也是相同的，本质只是通过神经网络将结果“泛化”了，而没有真正意义上的“猜测”。&lt;/p&gt;
&lt;p&gt;举个文本例子：比如我现在输入了“1+1=?”。如果是人脑，可能会直接说“2”。但人工智能就不同了，它可以直接“算”出上百个结果，“答案是 2”的置信度为 99.28%；“1+1=2”的置信度为 99.93%；“答案是 3”的置信度为 0.72%……当然，在不同神经网络中，所谓的“置信度”可能略有不同。但不可否认的是，人工智能仅仅是“算”出一个最可能的答案，而不是“算出答案”。也许你问 ChatGPT 什么是“+”，它会告诉你一堆定义理论，但是它实际上完全不能理解什么是“+”，其回答也不过是用海量数据堆砌起来的其中一张嘴巴而已了。如果从这个方面来说，人工智能甚至不如计算器——毕竟后者是真的“理解”数学运算的。&lt;/p&gt;
&lt;p&gt;“数字识别”也好，“1+1”也罢。不论从哪方面看，得出的结果是相同的：“人工智能并不理解问题”。它缺乏对问题的内在理解，无法理解数字的概念，而只是通过学习大量样本数据中的模式来进行分类。即使在数字识别等任务上表现良好，但并不意味着人工智能理解了问题的本质。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>新的起点</title><link>https://saro.pub/9b5c986</link><guid isPermaLink="true">https://saro.pub/9b5c986</guid><description>一切都从头开始</description><pubDate>Sat, 02 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;我再一次把我的博客重置了。&lt;/p&gt;
&lt;p&gt;我也不知道我为何如此沉浸于这过程：推倒，重来，再推倒，在重来……从米拓，到 WordPress ；从 Hexo，到如今的 Astro。那些炫酷，华丽，甚至令人眼花缭乱的特效，无一不在勾引着我幼小的心灵——为什么呢？从我接触的 CUI 到 GUI，到前端博客完全不是一个量级：本来需要死死敲代码才能实现的效果，而现在，现在只需要 pull 、 copy 一下就好了。可当裁缝终归不是不行的，于是我不停的 pull 、 push……到如今，我的提交次数已经超过了一千次。&lt;/p&gt;
&lt;p&gt;巨量的提交次数却没有提升我的水平。我仍然是连一句前端代码都看不懂的 noob ，面对巨量的、重复的“Butterfly 美化日志”，我能做的只有对着报错发呆。回过头来，博客只有寥寥 20 几篇，彻底成为了一个臃肿的花架子。&lt;/p&gt;
&lt;p&gt;博客本身的功能就很有限，现在看来，它甚至只能算是一个归档。可我却妄图使它变成一个“社交中心”：评论、说说、图库……说到底，我写博客，不是想要给予，只是想要索取。索取什么？不过是点击量、评论量、赞助量这种虚无缥缈的数据罢了。&lt;/p&gt;
&lt;p&gt;人总会经历这种过程，我也理解以前的自己。但人是要改变的，总不能再这样下去了。没有真材实料，用博客制造所谓“空中楼阁”，骗取关注，是我所不齿的&lt;/p&gt;
&lt;p&gt;我再一次把我的博客重置了。&lt;/p&gt;
&lt;p&gt;没有带上之前的 28 篇文章，是因为我认为，这是一个新的起点。&lt;/p&gt;
&lt;p&gt;我希望，当有一天我再一次回过头来翻阅这篇文章时，它再不是孤独的。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【线性代数】生成函数在非常系数与非齐次的线性递推关系的应用(编辑中)</title><link>https://saro.pub/114d58c</link><guid isPermaLink="true">https://saro.pub/114d58c</guid><description>生成函数在非常系数与非齐次线性递推关系中的应用方法</description><pubDate>Sun, 13 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;我们之前说了 k 阶常系数线性递推方程的解法，可以使用特征方程求解。今天我们就来学习以下有关于&lt;code&gt;生成函数&lt;/code&gt;的内容，它是一种在组合数学和离散数学中非常有用的工具，用于处理序列和计数问题。它可以将序列转换成多项式，从而使得处理序列的操作变得更加方便。在解决非齐次线性递推关系（也称为线性递推方程）时，生成函数可以提供一种有效的方法。&lt;/p&gt;
&lt;h2&gt;生成函数&lt;/h2&gt;
&lt;h3&gt;概念&lt;/h3&gt;
&lt;p&gt;生成函数本身不代表什么特殊意义，生成函数是无限的，对其求解是无意义的，它仅仅作为一个工具来使用。&lt;/p&gt;
&lt;p&gt;生成函数是一个形式幂级数，通常用来表示一个数列的各项。生成函数的一般形式如下：&lt;/p&gt;
&lt;p&gt;$$
F(x) = a_0 + a_1 x + a_2 x^2 + a_3 x^3 + \ldots
$$&lt;/p&gt;
&lt;p&gt;其中，$a_0, a_1, a_2, \ldots$ 是数列的各项，$x$ 是一个变量。生成函数可以是有限的（当数列是有限项时）或无限的（当数列有无穷多项时）。同时我们也可以看到，函数中的自变量 $x$ 好像并没有什么意义，他的取值并不影响序列的表示，因此我们称这种函数为&lt;strong&gt;形式幂级数&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;那么这时候就有小伙伴要问了，既然生成函数本身是一个无限长的函数，那么我们要如何使用它呢？&lt;/p&gt;
&lt;p&gt;其实很简单，我们前面说了，生成函数可以将序列转换成多项式，那么如果我们能够计算出一个数列的生成函数，我们就可以知道这个数列的通项——也就是说，当我们可以把前面一般形式中的 $a_0 + a_1 x + a_2 x^2 + a_3 x^3 + \ldots$ 表示出来，我们就完成了我们的目标，对于这个无限函数本身来说，这不是我们关心的内容。&lt;/p&gt;
&lt;h3&gt;应用&lt;/h3&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;序列的计数：&lt;/strong&gt; 生成函数可以将序列的每一项与幂级数的相应项联系起来。通过操作生成函数，可以进行加法、乘法等操作，从而获得序列的某些性质，如总项数、平均值等。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;组合计数：&lt;/strong&gt; 生成函数在组合数学中应用广泛。例如，如果我们有若干种物品，每种物品有不同的数量，我们可以使用生成函数来计算不同方式选择这些物品的总数。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;解决递推关系：&lt;/strong&gt; 对于线性递推关系，生成函数可以转化为一个多项式方程，从而帮助我们求解递推关系中的项。&lt;strong&gt;形式幂级数&lt;/strong&gt;在齐次递推关系中，生成函数的转化可以非常直接。对于非齐次递推关系，我们可以将问题转化为齐次递推关系的形式，然后使用特定的技巧来解决。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h3&gt;在常数性齐次递推中&lt;/h3&gt;
&lt;p&gt;之前我们说了，在这种一般情况下，我们使用特征方程可以求出其通项，我们今天尝试使用生成函数解决此类问题。&lt;/p&gt;
&lt;p&gt;我们要构建生成函数 $H(x)$，使其满足递推关系。首先，将每一项 $h_n$ 与 $x^n$ 相关联：&lt;/p&gt;
&lt;p&gt;$$H(x) = h_0 + h_1 x + h_2 x^2 + h_3 x^3 + \ldots$$&lt;/p&gt;
&lt;p&gt;然后考虑我们已知的递推关系：$h_n = 5h_{n-1} + 6h_{n-2}$，可以写出下面三个函数。&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
H(x) &amp;amp;= h_0 + &amp;amp;h_1 x&amp;amp; + &amp;amp;h_2 x^2&amp;amp; + &amp;amp;h_3 x^3&amp;amp; + &amp;amp;h_4 x^4&amp;amp; + &amp;amp;h_5 x^5&amp;amp;+\ldots \
5xH(x) &amp;amp;= &amp;amp;5h_0x&amp;amp; + &amp;amp;5h_1 x^2&amp;amp; + &amp;amp;5h_2 x^3&amp;amp; + &amp;amp;5h_3 x^4&amp;amp; + &amp;amp;5h_4 x^5&amp;amp;+\ldots \
6x^2H(x) &amp;amp;= &amp;amp;&amp;amp;&amp;amp;6h_0x^2&amp;amp; + &amp;amp;6h_1 x^3&amp;amp; + &amp;amp;6h_2 x^4&amp;amp; + &amp;amp;6h_3 x^5&amp;amp;+\ldots \
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;因为$h_n = 5h_{n-1} + 6h_{n-2}$，所以我们很容易发现从第三位开始，它们相加都满足$h_n x^n = 5h_{n-1} x^n + 6h_{n-2} x^n$的样子，则可以得到生成函数如下：&lt;/p&gt;
&lt;p&gt;$$H(x) = h_0 - 5h_0x + h_1x+ 5xH(x) + 6x^2H(x)$$&lt;/p&gt;
&lt;p&gt;那么我们已经有了生成函数方程：&lt;/p&gt;
&lt;p&gt;$$H(x) = h_0 - 5h_0x + h_1x+ 5xH(x) + 6x^2H(x)$$&lt;/p&gt;
&lt;p&gt;接下来，我们可以整理这个方程，将 $H(x)$ 的项整合在一起：&lt;/p&gt;
&lt;p&gt;$$H(x) - 5xH(x) - 6x^2H(x) = h_0 - 5h_0x + h_1x$$&lt;/p&gt;
&lt;p&gt;将 $H(x)$ 提取出来，得到：&lt;/p&gt;
&lt;p&gt;$$(1 - 5x - 6x^2)H(x) = h_0 - 5h_0x + h_1x$$&lt;/p&gt;
&lt;p&gt;现在，我们可以将方程两边除以 $(1 - 5x - 6x^2)$，从而求解出最终的生成函数 $H(x)$：&lt;/p&gt;
&lt;p&gt;$$H(x) = \frac{h_0 - 5h_0x + h_1x}{1 - 5x - 6x^2}$$&lt;/p&gt;
&lt;p&gt;我们已经有了最终的生成函数 $H(x)$，接下来的步骤是将其&lt;strong&gt;重新&lt;/strong&gt;展开成幂级数形式，然后找到系数，以得到数列 ${h_n}$ 的通解，让我们继续吧。&lt;/p&gt;
&lt;p&gt;首先，我们要分解分母 $1 - 5x - 6x^2$，得到 $(1 - 6x)(1 + x)$。&lt;/p&gt;
&lt;p&gt;然后，我们将分式进行部分分解，得到：&lt;/p&gt;
&lt;p&gt;$$\frac{h_0 - 5h_0x + h_1x}{1 - 5x - 6x^2} = \frac{A}{1 - 6x} + \frac{B}{1 + x}$$&lt;/p&gt;
&lt;p&gt;接下来，我们可以计算系数 $A$ 和 $B$，&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
A(1 + x) + B(1 - 6x) &amp;amp;= h_0 - 5h_0x + h_1x\
A + Ax + B - 6Bx &amp;amp;= h_0 - 5h_0x + h_1x\
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;得到：$A = \frac{h_0 + h_1}{7}$；$B = \frac{6h_0 - h_1}{7}$。&lt;/p&gt;
&lt;p&gt;然后将分式展开成幂级数的形式：&lt;/p&gt;
&lt;p&gt;$$\frac{h_0 - 5h_0x + h_1x}{1 - 5x - 6x^2} = (\frac{h_0 + h_1}{7}) \cdot \frac{1}{1 - 6x} + (\frac{6h_0 - h_1}{7}) \cdot \frac{1}{1 + x}$$&lt;/p&gt;
&lt;p&gt;使用几何级数的展开，几何级数的展开公式是：&lt;/p&gt;
&lt;p&gt;$$\frac{1}{1 - r} = 1 + r + r^2 + r^3 + \ldots$$&lt;/p&gt;
&lt;p&gt;其中，$r$ 是一个实数，通常称为公比。这个级数在 $|r| &amp;lt; 1$ 的情况下是收敛的，即当公比的绝对值小于 1 时，级数的和会收敛到一个有限的值。&lt;/p&gt;
&lt;p&gt;如果公比 $r$ 的绝对值大于等于 1，那么级数就会发散，没有有限的和。&lt;/p&gt;
&lt;p&gt;对于这个公式，我们简单证明一下：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
&amp;amp;设\ &amp;amp;S &amp;amp;= 1 + r + r^2 + r^3 + \ldots\
&amp;amp;则\ &amp;amp;rS &amp;amp;= r + r^2 + r^3 + r^4 + \ldots\
&amp;amp;得\ &amp;amp;(1-r)S&amp;amp;=1\
&amp;amp;综上所述 &amp;amp;S=\frac{1}{1 - r} &amp;amp;= 1 + r + r^2 + r^3 + \ldots\
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;在生成函数的推导中，几何级数展开经常用于将分式进行展开成幂级数形式。在这种情况下，我们通常需要确保公比 $r$ 的绝对值小于 1，以确保级数收敛。&lt;/p&gt;
&lt;p&gt;还有 $1 + r$ 的情况如下：&lt;/p&gt;
&lt;p&gt;$$\frac{1}{1 + r} = 1 - r + r^2 - r^3 + \ldots$$&lt;/p&gt;
&lt;p&gt;那么我们把原式进行几何数级展开，我们可以得到：&lt;/p&gt;
&lt;p&gt;$$(\frac{h_0 + h_1}{7}) \cdot (1 + 6x + 36x^2 + 216x^3 + \ldots) + (\frac{6h_0 - h_1}{7}) \cdot (1 - x + x^2 - x^3 + \ldots)$$&lt;/p&gt;
&lt;p&gt;现在，我们将每一项展开并合并：&lt;/p&gt;
&lt;p&gt;$$\frac{h_0 + h_1}{7} + \frac{h_0 + h_1}{7} \cdot (6x) + \frac{h_0 + h_1}{7} \cdot (36x^2) + \ldots + \frac{6h_0 - h_1}{7} + \frac{6h_0 - h_1}{7} \cdot (-x) + \frac{6h_0 - h_1}{7} \cdot (x^2) + \ldots$$&lt;/p&gt;
&lt;p&gt;将各项整合：&lt;/p&gt;
&lt;p&gt;$$\frac{h_0 + h_1}{7} + \frac{6h_0 + 6h_1}{7}x + \frac{36h_0 + 36h_1}{7}x^2 + \ldots + \frac{6h_0 - h_1}{7} - \frac{6h_0 - h_1}{7}x + \frac{6h_0 - h_1}{7}x^2 + \ldots$$&lt;/p&gt;
&lt;p&gt;将各项系数与幂次结合，得到合并后的幂级数形式：&lt;/p&gt;
&lt;p&gt;$$h_0 + h_1x + \left(6h_0 + 5h_1\right)x^2 + \left(30h_0 + 31h_1\right)x^3\ldots$$&lt;/p&gt;
&lt;p&gt;那么它最后的通项公式如下：&lt;/p&gt;
&lt;p&gt;$$h_n = (\frac{h_0 + h_1}{7}) \cdot 6^n + (\frac{6h_0 - h_1}{7}) \cdot (-1)^n$$&lt;/p&gt;
&lt;p&gt;所以我们实际上是进行了一次展开-&amp;gt;合并-&amp;gt;展开的过程，刚开始我们定义了一个生成函数，但是由于都是未知项，我们无法直接求得确切值。所以我们通过合并成$\frac{h_0 - 5h_0x + h_1x}{1 - 5x - 6x^2}$的形式，把原先无穷个未知项变成了已知的$h_0$与$h_1$。最后我们再重新展开，就得到了一个可用于求解的幂级数形式。&lt;/p&gt;
&lt;h3&gt;在常数性非齐次递推中&lt;/h3&gt;
&lt;p&gt;终于上正片了，在一般情况下，递&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【线性代数】k阶常系数线性递推方程</title><link>https://saro.pub/72f1eeb</link><guid isPermaLink="true">https://saro.pub/72f1eeb</guid><description>k阶常系数线性递推方程与特征方程求解方法</description><pubDate>Sat, 12 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;之前我们在矩阵专栏里面讲了线性 DP 优化，可以把$O(n)$的递推转移优化到天才的$O(k^3\log n)$，但是这种只能优化类似于$h_n = 5h_{n-1} + 6h_{n-2}$这种范围不太大的线性递推方程（其构成的整体叫做&lt;strong&gt;数列&lt;/strong&gt;)，而且由于$k$是立方，如果矩阵太大，说不定还不如$O(n)$（$k$在 300 的立方就已经超时了)。所以我们能不能归纳出一个公式呢？直接变成$O(1)$！当然是可以的，这就是我们今天要将的&lt;code&gt;k阶常系数线性递推&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;补充说明一下，上面说的$O(1)$只是一种情况，因为我们把情况推广到了&lt;code&gt;k阶常系数线性递推&lt;/code&gt;，所以具体优化程度要看方程是什么样子的，比如可以把$O(n^2)$优化到$O(n)$也是其中一种。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;k 阶常系数线性递推方程&lt;/h2&gt;
&lt;h3&gt;概念&lt;/h3&gt;
&lt;h4&gt;什么是数列&lt;/h4&gt;
&lt;p&gt;数列是一组按照一定规律排列的数字序列，其中每个数字称为序列的项。数列在数学中广泛用于建立模型、描述变化以及解决各种实际问题。数列可以是有限的（包含有限个项）或无限的（包含无限个项）。&lt;/p&gt;
&lt;p&gt;数列的一般形式可以表示为：&lt;/p&gt;
&lt;p&gt;$$a_1, a_2, a_3, \ldots, a_n, \ldots$$&lt;/p&gt;
&lt;p&gt;其中，$a_n$ 表示数列的第 n 项。数列中的项可以是实数、复数或其他数值类型。&lt;/p&gt;
&lt;p&gt;数列的种类和性质多种多样，根据项之间的规律，可以将数列分为不同的类型，如等差数列、等比数列、斐波那契数列等。以下是一些常见的数列类型：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;等差数列（Arithmetic Sequence）：&lt;/strong&gt; 在等差数列中，每一项与前一项的差值都是相同的常数，称为公差。例如，$2, 5, 8, 11, \ldots$ 就是一个公差为 3 的等差数列。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;等比数列（Geometric Sequence）：&lt;/strong&gt; 在等比数列中，每一项与前一项的比值都是相同的常数，称为公比。例如，$3, 6, 12, 24, \ldots$ 就是一个公比为 2 的等比数列。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;斐波那契数列（Fibonacci Sequence）：&lt;/strong&gt; 斐波那契数列是一种特殊的数列，其中每一项是前两项之和。通常以 $F_1 = 1$ 和 $F_2 = 1$ 作为起始项，然后依次为 $1, 1, 2, 3, 5, 8, \ldots$。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;调和数列（Harmonic Sequence）：&lt;/strong&gt; 调和数列的每一项是其倒数的和。例如，$1, \frac{1}{2}, \frac{1}{3}, \frac{1}{4}, \ldots$ 就是一个调和数列。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;我们这里研究的递推方程所构成的整体都是一个&lt;strong&gt;数列&lt;/strong&gt;，正如斐波那契数列一样，它们是特殊的数列，有自己的递推方程，在一般情况下，我们称作&amp;quot;k 阶常系数线性齐次递推&amp;quot;。&lt;/p&gt;
&lt;h4&gt;什么是&amp;quot;k 阶常系数线性齐次递推&amp;quot;&lt;/h4&gt;
&lt;p&gt;&amp;quot;k 阶常系数线性齐次递推&amp;quot; 是一个数学术语，用来描述一个特定类型的递推关系。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;递推关系&lt;/strong&gt;： 是一个数列中的每一项都是前面某几项的函数，通常用一个递推式来表示。递推式可以是线性的，也可以是非线性的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;齐次递推关系&lt;/strong&gt;： 是指递推式右边等于零的情况，即没有外部驱动力，数列只受自身前几项的影响。这可以表示为一种自我包含的数学模型。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;常系数&lt;/strong&gt;： 表示递推式中的系数是常数，即不随着数列的变化而变化。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;k 阶&lt;/strong&gt; 指的是递推式中涉及到的项与其前面的 k 项相关。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;所以，&amp;quot;k 阶常系数线性齐次递推&amp;quot; 也就是指一个数列满足一个线性的、齐次的、常系数递推关系，其中每一项与其前面的 k 项有关。这种递推关系可以表示为：&lt;/p&gt;
&lt;p&gt;$$ a&lt;em&gt;n = c_1 a&lt;/em&gt;{n-1} + c&lt;em&gt;2 a&lt;/em&gt;{n-2} + \ldots + c&lt;em&gt;k a&lt;/em&gt;{n-k} + f(n)$$&lt;/p&gt;
&lt;p&gt;其中，$a_n$ 表示数列的第 $n$ 项，$c_1, c_2, \ldots, c_k$ 是常数系数，$a_{n-1}, a_{n-2}, \ldots, a_{n-k}$ 是数列的前 $k$ 项。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;最后的$f(n)$可以是一个常数或者多项式，如果$g_n$等于 0，那么最后移项得到的递推式右边就是零，也就是满足&lt;strong&gt;齐次递推关系&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;解这种递推关系通常涉及找到递推式的通解，从而得到数列的&lt;code&gt;通项公式&lt;/code&gt;。这可以通过使用代数、数学归纳法等方法来实现。&lt;/p&gt;
&lt;p&gt;我们今天就是讲讲如何用代数方法求出这个所谓的&lt;code&gt;通项公式&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;齐次情况&lt;/h3&gt;
&lt;p&gt;我们先来分析&lt;strong&gt;常系数&lt;/strong&gt;和&lt;strong&gt;齐次&lt;/strong&gt;的情况，也就是最后的$g_n$为零的情况，那么对于一个 k 阶常系数线性齐次递推关系，我们可以假设它的通解是一个指数形式，然后把这个带入递推方程，最后得到一个&lt;strong&gt;特征方程&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;无重根时&lt;/h4&gt;
&lt;p&gt;对于一个 k 阶常系数线性齐次递推关系：&lt;/p&gt;
&lt;p&gt;$$
a_n = c_1 a_{n-1} + c_2 a_{n-2} + \ldots + c_k a_{n-k}
$$&lt;/p&gt;
&lt;p&gt;其特征方程可以通过假设数列的通解具有指数形式，然后代入递推关系来得到。&lt;/p&gt;
&lt;p&gt;假设数列的通解形式为：&lt;/p&gt;
&lt;p&gt;$$
a_n = r^n
$$&lt;/p&gt;
&lt;p&gt;代入递推关系得到：&lt;/p&gt;
&lt;p&gt;$$
r^n = c_1 r^{n-1} + c_2 r^{n-2} + \ldots + c_k r^{n-k}
$$&lt;/p&gt;
&lt;p&gt;将上述方程整理为零等式：&lt;/p&gt;
&lt;p&gt;$$
r^n - c_1 r^{n-1} - c_2 r^{n-2} - \ldots - c_k r^{n-k} = 0
$$&lt;/p&gt;
&lt;p&gt;这个零等式称为特征方程。解这个特征方程，即找到它的根（也称为&lt;strong&gt;特征根&lt;/strong&gt;），将会揭示递推关系的解的性质。（这就是我们之前说的&lt;code&gt;是指递推式右边等于零的情况&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;但请注意，特征方程的根可能是实数也可能是复数，具体取决于递推关系中的常数系数。解特征方程后，通解可以表示为特征根的线性组合。&lt;/p&gt;
&lt;p&gt;需要注意的是，在某些情况下，特征方程可能有&lt;strong&gt;重复根&lt;/strong&gt;（以下简称重根），这可能会导致解的形式稍有不同。解特征方程并找到相应的通解是解决 k 阶常系数线性齐次递推关系的关键步骤之一。关于重根的解决方案这里先按下不表，我们可以在后面用导数解决。&lt;/p&gt;
&lt;h5&gt;求特征根与通解&lt;/h5&gt;
&lt;p&gt;比如我们前言中说的 $h_n - 5h_{n-1} + 6h_{n-2} = 0$，我们可以按照之前提到的方法来找到其通解。&lt;/p&gt;
&lt;p&gt;首先，写出特征方程，我们假设通解具有指数形式：&lt;/p&gt;
&lt;p&gt;$$r^n - 5r^{n-1} + 6r^{n-2} = 0$$&lt;/p&gt;
&lt;p&gt;然后，尝试解特征方程以找到特征根 $r$。我们将特征方程分解为 $(r - 2)(r - 3) = 0$，我们得到两个特征根：$r_1 = 2$ 和 $r_2 = 3$。&lt;/p&gt;
&lt;p&gt;现在，我们可以使用这些特征根来构建通解。递推关系的通解是特征根的线性组合，即：&lt;/p&gt;
&lt;p&gt;$$h(n) = \sum_{i} A_i \cdot r_i^n$$&lt;/p&gt;
&lt;p&gt;那么对于这个式子来说，通解的一般形式为：&lt;/p&gt;
&lt;p&gt;$$h_n = A \cdot r_1^n + B \cdot r_2^n$$&lt;/p&gt;
&lt;p&gt;代入特征根 $r_1 = 2$ 和 $r_2 = 3$，我们可以得到以下通解：&lt;/p&gt;
&lt;p&gt;$$h_n = A \cdot 2^n + B \cdot 3^n$$&lt;/p&gt;
&lt;p&gt;这就是 $h_n - 5h_{n-1} + 6h_{n-2} = 0$ 的通解。我们可以根据初始条件（例如$h_1$和$h_2$）来确定常数 $A$ 和 $B$ 的值，从而得到特定的数列解。&lt;/p&gt;
&lt;p&gt;总结一下，也就是对于 $h_n - 5h_{n-1} + 6h_{n-2} = 0$ 这个递推关系方程来说，其转化后的特征方程的解为特征根 $r_1 = 2$ 和 $r_2 = 3$，通解为 $h_n = A \cdot 2^n + B \cdot 3^n$，其中 $A$ 和 $B$ 是待定常数，可以通过初始条件来确定。&lt;/p&gt;
&lt;p&gt;那么假设 $h_1 = 2$ ， $h_2 = 5$，求解过程如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;当 $n = 1$ 时，根据初始条件 $h_1$：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$h_1 = A \cdot 2^1 + B \cdot 3^1$$&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;当 $n = 2$ 时，根据初始条件 $h_2$：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$h_2 = A \cdot 2^2 + B \cdot 3^2$$&lt;/p&gt;
&lt;p&gt;现在我们有一个包含两个方程（一个针对 $h_1$，另一个针对 $h_2$）和两个未知数（$A$ 和 $B$）的线性方程组。我们可以用这个线性方程组来解常数 $A$ 和 $B$：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;根据 $h_1$ 的初始条件，$h_1 = 2$：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$2 = 2A + 3B$$&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;根据 $h_2$ 的初始条件，$h_2 = 5$：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$5 = 4A + 9B$$&lt;/p&gt;
&lt;p&gt;解方程组后，我们就可以得到 $A$ 和 $B$ 的值，然后将它们代入通解 $h_n = A \cdot 2^n + B \cdot 3^n$ 中，从而得到特定的数列解。（求解得 $A = -1; B = 1$)&lt;/p&gt;
&lt;p&gt;这样我们就把原矩阵快速幂中的$k^3$优化了，只剩下了快速幂的$O(\log n)$，这在 $k$ 极大时是很有效的。&lt;/p&gt;
&lt;h4&gt;有重根时&lt;/h4&gt;
&lt;p&gt;当特征方程有重复的特征根时，情况会有所不同，让我们通过一个具体的例子来说明如何处理。考虑以下的齐次递推关系：&lt;/p&gt;
&lt;p&gt;$$h_n - 4h_{n-1} + 4h_{n-2} = 0$$&lt;/p&gt;
&lt;p&gt;首先，我们写出特征方程并求解特征根：&lt;/p&gt;
&lt;p&gt;$$r^2 - 4r + 4 = 0$$&lt;/p&gt;
&lt;p&gt;这是一个重复特征根的情况，可以因式分解为 $(r - 2)^2 = 0$，因此有一个重复的特征根 $r = 2$。&lt;/p&gt;
&lt;p&gt;现在，我们写出新的&lt;strong&gt;特征解&lt;/strong&gt;，我们把它叫做对应的&lt;strong&gt;齐次解&lt;/strong&gt;（在一般情况下，特征解所对应的齐次解就是它本身），那么递推关系的通解是所有齐次解的线性组合，即：
$$h(n) = \sum_{i} (A_{1i} + A_{2i} n + A_{3i} n^2 + \ldots) \cdot r_i^n$$&lt;/p&gt;
&lt;p&gt;对于当前情况来说，就是下面的样子：&lt;/p&gt;
&lt;p&gt;$$h_{h_2}(n) = (A_1 + A_2 n) \cdot 2^n$$&lt;/p&gt;
&lt;p&gt;这里，我们引入了多项式项 $A_1 + A_2 n$，其中 $A_1$ 和 $A_2$ 是待定常数。&lt;/p&gt;
&lt;p&gt;最后，我们写出通解，将原特征根和齐次解结合：&lt;/p&gt;
&lt;p&gt;$$h(n) = h_{h_2}^{(1)}(n) + h_{h_2}^{(2)}(n) = (A_1 + A_2 n) \cdot 2^n + B \cdot 2^n$$&lt;/p&gt;
&lt;p&gt;这就是考虑了重复特征根的递推关系的通解。通解中包含了一个多项式项和一个指数项，分别对应于重复特征根的齐次解和原特征根。&lt;/p&gt;
&lt;p&gt;要确定待定常数 $A_1, A_2$ 和 $B$，我们可以使用初始条件。例如，如果我们知道初始条件 $h_0 = 1$ 和 $h_1 = 4$，可以将这些值代入通解中，然后解方程组来求解待定常数。&lt;/p&gt;
&lt;h3&gt;非齐次情况&lt;/h3&gt;
&lt;p&gt;说完齐次情况，我们来说说非齐次情况，也就是$f(n)$不为零的时候。&lt;/p&gt;
&lt;h4&gt;叠加原理&lt;/h4&gt;
&lt;p&gt;需要注意的是，k 阶常系数线性递推方程具有一个叠加原理，这是因为线性方程的性质导致了这种叠加性质。&lt;/p&gt;
&lt;p&gt;考虑一个 k 阶常系数线性递推方程，形式如下：&lt;/p&gt;
&lt;p&gt;$$a_k h_n + a_{k-1} h_{n-1} + \ldots + a_1 h_{n-k+1} + a_0 h_{n-k} = f(n)$$&lt;/p&gt;
&lt;p&gt;其中，$a_k, a_{k-1}, \ldots, a_1, a_0$ 是常数系数，$g_n$ 是非齐次项（可能是已知函数或数列）。&lt;/p&gt;
&lt;p&gt;叠加原理表明，如果我们有两个线性递推方程：&lt;/p&gt;
&lt;p&gt;$$a_k h_n^{(1)} + a_{k-1} h_{n-1}^{(1)} + \ldots + a_1 h_{n-k+1}^{(1)} + a_0 h_{n-k}^{(1)} = f(n)^{(1)}$$&lt;/p&gt;
&lt;p&gt;和&lt;/p&gt;
&lt;p&gt;$$a_k h_n^{(2)} + a_{k-1} h_{n-1}^{(2)} + \ldots + a_1 h_{n-k+1}^{(2)} + a_0 h_{n-k}^{(2)} = f(n)^{(2)}$$&lt;/p&gt;
&lt;p&gt;那么这两个方程的和也是一个满足叠加原理的方程：&lt;/p&gt;
&lt;p&gt;$$a_k (h_n^{(1)} + h_n^{(2)}) + a_{k-1} (h_{n-1}^{(1)} + h_{n-1}^{(2)}) + \ldots + a_1 (h_{n-k+1}^{(1)} + h_{n-k+1}^{(2)}) + a_0 (h_{n-k}^{(1)} + h_{n-k}^{(2)}) = f(n)^{(1)} + f(n)^{(2)}$$&lt;/p&gt;
&lt;p&gt;这意味着，如果我们有两个递推方程及其相应的非齐次项，我们可以将这两个方程相加，从而得到一个新的递推方程，其非齐次项是原来两个方程的非齐次项的和。&lt;/p&gt;
&lt;p&gt;这种叠加原理在解决复杂问题时非常有用，因为它允许我们将问题分解为更简单的部分，然后将这些部分的解组合在一起——这个就是我们破获非齐次状态的关键。&lt;/p&gt;
&lt;h4&gt;解决方式&lt;/h4&gt;
&lt;p&gt;联系之前的叠加原理，我们进行逆操作求解：首先把原来的递推方程分成两份，找到对应齐次递推关系的通解，然后再找到非齐次项的特解。将齐次解和非齐次特解相加，就可以得到非齐次递推关系的通解。&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;找到齐次递推关系的通解：&lt;/strong&gt; 首先，忽略非齐次项，找到对应的齐次递推关系的通解。这可以通过之前提到的特征解法来完成，其中需要解特征方程并得到齐次解。假设齐次递推关系的通解为 $h_h(n)$。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;找到非齐次项的特解：&lt;/strong&gt; 现在，考虑非齐次项。根据非齐次项的形式，选择一个合适的特解形式。这可以通过待定系数法来完成，假设非齐次项的特解为 $h_p(n)$。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;写出非齐次递推关系的通解：&lt;/strong&gt; 非齐次递推关系的通解是齐次解和非齐次特解的和，即 $h(n) = h_h(n) + h_p(n)$。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;总结起来，求解非齐次的常系数线性递推关系的通解需要分别找到对应齐次递推关系的通解和非齐次项的特解，然后将它们通过叠加原理相加。在找到特解时，通常需要根据非齐次项的形式和问题的性质来选择适当的特解形式。这种方法适用于解决一般形式的非齐次递推关系。&lt;/p&gt;
&lt;p&gt;回到之前的题目，我们可以将给定的齐次递推关系 $h_n - 5h_{n-1} + 6h_{n-2} = 0$ 加上一个常数项 $c$，得到非齐次递推关系：&lt;/p&gt;
&lt;p&gt;$$h_n - 5h_{n-1} + 6h_{n-2} = c$$&lt;/p&gt;
&lt;p&gt;现在，让我们按照之前的步骤来求解这个非齐次递推关系的通解。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;找到齐次递推关系的通解：&lt;/strong&gt; 首先，考虑齐次部分 $h_n - 5h_{n-1} + 6h_{n-2} = 0$。我们已经知道其特征方程是 $r^2 - 5r + 6 = 0$，可以分解为 $(r - 2)(r - 3) = 0$，得到特征根 $r_1 = 2$ 和 $r_2 = 3$。因此，齐次递推关系的通解是：
$$h_h(n) = A \cdot 2^n + B \cdot 3^n$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;找到非齐次项的特解：&lt;/strong&gt; 现在考虑非齐次项 $c$。由于这是一个常数项，我们可以选择特解为一个常数，即 $h_p(n) = D$，其中 $D$ 是待定常数。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;写出非齐次递推关系的通解：&lt;/strong&gt; 非齐次递推关系的通解是齐次解和非齐次特解的和，即：
$$h(n) = h_h(n) + h_p(n) = A \cdot 2^n + B \cdot 3^n + D$$&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这就是带有常数项的非齐次递推关系的通解。在确定待定常数 $A, B$ 和 $D$ 时，我们同样可以使用初始条件来求解。将初始条件代入通解中，解方程组来确定这些常数，从而得到特定的数列解。&lt;/p&gt;
&lt;h3&gt;非常系数&lt;/h3&gt;
&lt;p&gt;特征解法虽然比较万能，但是在处理特定形式的非齐次项时可能会比较麻烦，特别是当非齐次项的形式比较复杂或者无法与齐次解相关联的情况。&lt;/p&gt;
&lt;p&gt;而对于非常系数的线性递推关系，特别是当非齐次项具有一般形式时，生成函数是一种非常强大的工具，可以用来解决问题。生成函数可以将递推关系转化为代数方程，从而更容易地求解非齐次递推关系的通解。&lt;/p&gt;
&lt;p&gt;因此关于非常系数的线性递推关系的解法，此篇暂时按下不表，待以后讲生成函数时再详细解释其解法。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【数论】初等数论与线性代数综合（整合中）</title><link>https://saro.pub/671e510</link><guid isPermaLink="true">https://saro.pub/671e510</guid><description>初等数论与线性代数综合知识导航页面</description><pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;此篇为导航，由几篇子博客构成。&lt;/p&gt;
&lt;h2&gt;导航&lt;/h2&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;关于数学符号：队列中&lt;/li&gt;
&lt;li&gt;高斯消元入门：队列中&lt;/li&gt;
&lt;li&gt;矩阵乘法入门：&lt;a href=&quot;https://www.saroprock.com/post/67047465.html&quot;&gt;【线性代数】矩阵乘法与线性 DP 优化 | SaroProck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;生成函数入门：&lt;a href=&quot;https://www.saroprock.com/post/91e1624a.html&quot;&gt;【线性代数】生成函数在非常系数与非齐次的线性递推关系的应用(编辑中) | SaroProck&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【数论】费马小定理</title><link>https://saro.pub/2f594e8</link><guid isPermaLink="true">https://saro.pub/2f594e8</guid><description>费马小定理详解及其在模逆元计算中的应用</description><pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;费马小定理（Fermat&amp;#39;s Little Theorem）是数论中的一个重要定理，它与素数和模运算相关。定理的表述如下：&lt;/p&gt;
&lt;p&gt;对于任意素数 $p$，如果 $a$ 是一个整数，且 $a$ 不是 $p$ 的倍数，则有 $a^{p-1} ≡ 1 (\mod p)$。&lt;/p&gt;
&lt;h2&gt;应用&lt;/h2&gt;
&lt;h3&gt;模逆元计算&lt;/h3&gt;
&lt;p&gt;在模运算中，给定两个整数 $a$ 和 $p$，我们想要找到整数 $b$，使得 $(a \times b) \mod p = 1$。这里 $a$ 和 $p$ 必须互质，即它们没有共同的因子。费马小定理提供了一种计算模逆元的方法：&lt;/p&gt;
&lt;p&gt;根据费马小定理，如果 $a$ 和 $p$ 互质（$a$ 不是 $p$ 的倍数），则有 $a^{p-1} ≡ 1 (\mod p)$。将等式两边同时乘以 $a^{-1}$（a 的模 p 逆元），得到 $a^{-1} ≡ a^{p-2} (\mod p)$。这意味着 $a^{p-2}$ 就是 $a$ 在模 $p$ 下的逆元。&lt;/p&gt;
&lt;p&gt;所以，如果要计算 $a$ 在模 $p$ 下的逆元，只需计算 $a^{p-2} \mod p$，即可得到 $b$，使得 $(a \times b) \mod p = 1$。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【数据结构】Splay树</title><link>https://saro.pub/121673e</link><guid isPermaLink="true">https://saro.pub/121673e</guid><description>Splay树（伸展树）数据结构详解，包含旋转操作与区间操作</description><pubDate>Wed, 09 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;Splay（伸展树）是一种灵活多变的高级数据结构，可以很方便的执行各种动态的区间操作。由丹尼尔·斯立特 Daniel Sleator 和罗伯特·恩卓·塔扬 Robert Endre Tarjan 在 1985 年发明。&lt;/p&gt;
&lt;p&gt;Splay 是一颗二叉搜索树，它建立在二叉搜索树（BST）之上，当然也是平衡树的一种，下面简单介绍一下 BST 与平衡树：&lt;/p&gt;
&lt;p&gt;首先介绍 BST，也就是所有平衡树的开始，他的名字是二叉查找树.&lt;/p&gt;
&lt;p&gt;给定一棵二叉树，每一个节点有一个权值,命名为&lt;strong&gt;关键码&lt;/strong&gt;，而 BST 性质就是，对于树中任何一个节点,都满足以下性质：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;这个节点的关键码不小于它的左子树上,任意一个节点的关键码&lt;/li&gt;
&lt;li&gt;这个节点的关键码不大于它的右子树上,任意一个节点的关键码&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后我们就可以发现这棵树的中序遍历，就是一个关键码单调递增的节点序列，说的直白点,就是一个排好序的数组（注意是非严格单调递增序列）。&lt;/p&gt;
&lt;p&gt;我们知道，在一颗查找二叉树（BST）中，插入过程的均摊时间复杂度为$O(\log n)$，但是在一些特殊情况，BST 树会退化成一条链，导致时间复杂度从$O(\log n)$退化到$O(n)$，这是不可以的，所以产生了一种数据结构——&lt;code&gt;平衡树&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;平衡树最主要的功能就是&lt;code&gt;旋转&lt;/code&gt; ，通过等价的旋转，可以最优化 BST 的深度，例如下面的两棵 BST 树的对比，他们实质上是等价的，但是第一颗不平衡，操作时会造成不必要的时间浪费。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img1.imgtp.com/2023/08/08/yP2oBg4X.svg&quot; alt=&quot;不平衡的树&quot;&gt;
&lt;img src=&quot;https://img1.imgtp.com/2023/08/08/tHb2MZof.svg&quot; alt=&quot;平衡的树&quot;&gt;&lt;/p&gt;
&lt;p&gt;当然除此之外，平衡树还有以下功能（来自&lt;a href=&quot;https://zh.wikipedia.org/wiki/%E5%B9%B3%E8%A1%A1%E6%A0%91&quot;&gt;平衡树 - 维基百科&lt;/a&gt;）：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;旋转（$rotate$）：几乎所有平衡树的操作都基于&lt;a href=&quot;https://zh.wikipedia.org/wiki/%E6%A0%91%E6%97%8B%E8%BD%AC&quot; title=&quot;树旋转&quot;&gt;树旋转&lt;/a&gt;操作（也有部分基于重构，如&lt;a href=&quot;https://zh.wikipedia.org/wiki/%E6%9B%BF%E7%BD%AA%E7%BE%8A%E6%A0%91&quot; title=&quot;替罪羊树&quot;&gt;替罪羊树&lt;/a&gt;），通过旋转操作可以使得树趋于平衡。对一棵查找树（$search tree$）进行查询、新增、删除等动作，所花的时间与树的高度成比例，并不与树的容量成比例。如果可以让树维持平衡，也就是让高度维持在$O(\log⁡ n)$左右，就可以在$O(\log⁡ n)$的复杂度内完成各种基本操作。&lt;/li&gt;
&lt;li&gt;插入（$insert$）：在树中插入一个新值。&lt;/li&gt;
&lt;li&gt;删除（$delete$）：在树中删除一个值。&lt;/li&gt;
&lt;li&gt;查询前驱（$predecessor$）：前驱定义为小于$x$，且最大的数。&lt;/li&gt;
&lt;li&gt;查询后继（$successor$）：后继定义为大于$x$，且最小的数。
如果维护同时节点大小（$size$），还可以支持以下操作：&lt;/li&gt;
&lt;li&gt;查询排名（$rank$）：排名定义为比$x$小的数的个数加一。&lt;/li&gt;
&lt;li&gt;查询第$k$大：即排名为$k$的数。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;那么实际上 Splay 树（伸展树）的原理是基于类似程序局部性原理的假设：一个节点在一次被访问后，这个节点很可能不久再次被访问。Splay 树的做法就是在每次一个节点被访问后，我们就把它推到树根的位置。正像程序局部性原理的实际效率被广泛证明一样，Splay 树在实际的搜索效率上也是非常高效的。尽管存在最坏情况下单次操作会花费$O(n)$的时间，但是这种情况并不是经常发生，而实际证明伸展树能够保证$m$次连续操作最多花费$O(m \log n)$的时间。&lt;/p&gt;
&lt;h2&gt;Splay&lt;/h2&gt;
&lt;p&gt;所有平衡树的思路都是维护一颗 BST 树的&lt;code&gt;平衡状态&lt;/code&gt;，也就是不改变中序遍历结果的前提之下，尽可能减少 Splay 树的深度。&lt;/p&gt;
&lt;p&gt;前面我们说过了，Splay 的主要思想是：&lt;strong&gt;对于查找频率较高的节点，使其处于离根节点相对较近的节点&lt;/strong&gt;。当然我们统计每一个点的查找次数是不现实的，我们可以理解每一次被查到的节点频率比较高，说白了就是你把每次查找到的点搬到根节点去，这样就可以保证查找的效率。&lt;/p&gt;
&lt;p&gt;每次移动的过程就是旋转的过程（$rotate$），在 Splay 中有两种旋转，分别叫做&lt;code&gt;单旋&lt;/code&gt;与&lt;code&gt;双旋&lt;/code&gt;，我们将他们设计为$rotate$函数与$splay$函数。在设计之前，我们需要先定义一颗 BST 树，如下：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;因为 OI 多是面向过程设计，下列写法并不在生产环境适用，若要应用于生产环境中，请使用 Class+指针面向对象设计 BST 树。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;struct Node
{
    int fa;    // 节点父亲
    int val;   // 节点权值
    int cnt;   // 权值出现次数
    int size;  // 子树大小
    int ch[2]; // 左儿子与右儿子（方便运算）
    Node()
    {
        fa = 0;
        val = 0;
        cnt = 0;
        size = 0;
        ch[0] = ch[1] = 0;
    }
    Node(int Fa, int Val, int Cnt, int Size, int R, int L)
    {
        fa = Fa;
        val = Val;
        cnt = Cnt;
        size = Size;
        ch[0] = L;
        ch[1] = R;
    }
} tree[N];
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;设计旋转&lt;/h3&gt;
&lt;h4&gt;单旋（rotate）&lt;/h4&gt;
&lt;p&gt;首先考虑一下，我们要把一个点挪到根，那我们首先要知道怎么让一个点挪到它的父节点。单旋函数就是这个功能。&lt;/p&gt;
&lt;h5&gt;情况一&lt;/h5&gt;
&lt;p&gt;考虑下面的情况，我们要把节点 3 移动到它的父亲节点 2 之上（字母节点代表一颗子树）：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img1.imgtp.com/2023/08/09/WILfOT7w.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;这时候如果我们让 X 成为 Y 的父亲，只会影响到 3 个点的关系：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Y 与 3，3 与 2，3 与 1
根据二叉排序树的性质
Y 会成为 2 的左儿子
2 会成为 3 的右儿子
3 会成为 1 的儿子（与原来 2 与 1 的情况相同）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;经过变换之后，大概是这样：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img1.imgtp.com/2023/08/09/86N2zOFC.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h5&gt;情况二&lt;/h5&gt;
&lt;p&gt;那么反过来，我们把这个时候的节点 2 移到 3 节点之上，与第一个图是相同的，这就是第二种情况。&lt;/p&gt;
&lt;h5&gt;代码&lt;/h5&gt;
&lt;p&gt;首先我们写一个$get$函数，以获取此节点是其父亲的哪一个儿子：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;bool get(int x) { return x == tree[x].ch[1]; }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我们假设是从 u-&amp;gt;v，设计函数$rotate$如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;void rotate(int u, int v)
{
    int u_fa = tree[u].fa; // u_fa = v;
    int v_fa = tree[v].fa; // u的目标父亲
    int son_u = get(u);    // u在其父亲的位置
    int son_v = get(v);    // v在其父亲的位置
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;观察上图，我们发现节点 3 的 Y 子树的父亲更改了，可以发现下面两个规律：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Y 子树的位置与 3 在 2 中的位置相反&lt;/li&gt;
&lt;li&gt;Y 子树在 2 的目标位置与 3 在 2 中的位置相同&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;那么我们先获取 Y 子树的位置，然后再把这几个要改变的点相互连接就好了：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;void rotate(int u)
{
    int v = tree[u].fa;
    // int u_fa = tree[u].fa;           // u_fa = v;
    int v_fa = tree[v].fa;              // u的目标父亲
    int son_u = get(u);                 // u在其父亲的位置
    int son_v = get(v);                 // v在其父亲的位置
    int change = tree[u].ch[son_u ^ 1]; // 获取u中需要更改的子树节点
    // 把这颗子树接到v的u位置：
    tree[change].fa = v;
    tree[v].ch[son_u] = change;
    // 把v接到u中不同的位置
    tree[v].fa = u;
    tree[u].ch[son_u ^ 1] = v;
    // 把u接到v原来的父亲中
    tree[u].fa = v_fa;
    tree[v_fa].ch[son_v] = u;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;双旋（splay）&lt;/h4&gt;
&lt;p&gt;$splay(u,v)$是实现把 u 节点直接搬到 v 节点。&lt;/p&gt;
&lt;p&gt;最简单的办法，对于 u 这个节点，每次单旋直到 v。&lt;/p&gt;
&lt;p&gt;但是，众所周知出题老师拥有极强的卡时能力，可能会构造数据把单旋卡成$n^2$，具体原因我也不清楚啦，反正不要这样用就好了，下面我们来写$splay$函数吧~&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;OI-Wiki 把$splay$分成了六种情况啊！六种！太麻烦了，实际上就三种啦。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5&gt;情况一&lt;/h5&gt;
&lt;p&gt;我们的目标节点 v 就是 u 的父亲，那么就直接$rotate$吧！&lt;/p&gt;
&lt;h5&gt;情况二&lt;/h5&gt;
&lt;p&gt;三个点连成了一条线……&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img1.imgtp.com/2023/08/09/nEH2Djho.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;这时候先把 2 旋转上去，再把 3 旋转上去就好了&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;else if (get(u) == get(tree[u].fa)) rotate(tree[u].fa), rotate(x);
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;情况三&lt;/h5&gt;
&lt;p&gt;三个点歪七扭八，不知道是什么东西……&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img1.imgtp.com/2023/08/09/nMcNiWs3.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;这时候把 3 旋转两次就好啦&lt;/p&gt;
&lt;h5&gt;代码&lt;/h5&gt;
&lt;p&gt;全部代码如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;void splay(int u, int v)
{
    v = tree[v].fa; // 方便写下面的代码
    while (tree[u].fa != v)
    {
        if (tree[tree[u].fa].fa == v) rotate(u);
        else if (get(u) == get(tree[u].fa)) rotate(tree[u].fa), rotate(x);
        else rotate(u), rotate(u);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;功能函数&lt;/h3&gt;
&lt;p&gt;Splay 最伟大的两个函数写好了，我们就要实现他作为一颗 BST 树的功能了，一个一个来，我们慢慢讲，因为下面的内容可能还需要修改上面的两个旋转函数。&lt;/p&gt;
&lt;h4&gt;清空节点&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;void clear(int u) { tree[u].ch[0] = tree[u].ch[1] = tree[u].fa = tree[u].fa = tree[u].size = tree[u].cnt = 0; }
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;维护 Size&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;void maintain(int u) { tree[u].size = tree[tree[u].ch[0]].size + tree[tree[u].ch[1]].size + tree[u].cnt; }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我们每一次旋转都会改变节点的 Size 值，因此要在$rotate$函数的最后添加这两句：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;maintain(u); // 维护u的size
maintain(v); // 维护v的size
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最后完成的$rotate$函数如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;void rotate(int u)
{
    int v = tree[u].fa;
    // int u_fa = tree[u].fa;           // u_fa = v;
    int v_fa = tree[v].fa;              // u的目标父亲
    int son_u = get(u);                 // u在其父亲的位置
    int son_v = get(v);                 // v在其父亲的位置
    int change = tree[u].ch[son_u ^ 1]; // 获取u中需要更改的子树节点
    // 把这颗子树接到v的u位置：
    tree[change].fa = v;
    tree[v].ch[son_u] = change;
    // 把v接到u中不同的位置
    tree[v].fa = u;
    tree[u].ch[son_u ^ 1] = v;
    // 把u接到v原来的父亲中
    tree[u].fa = v_fa;
    tree[v_fa].ch[son_v] = u;
    maintain(u); // 维护u的size
    maintain(v); // 维护v的size
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;插入操作&lt;/h4&gt;
&lt;p&gt;插入操作是一个比较复杂的过程，具体步骤如下（假设插入的值为 $k$）：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;如果树空了，则直接插入根并退出。&lt;/li&gt;
&lt;li&gt;如果当前节点的权值等于 $k$ 则增加当前节点的大小并更新节点和父亲的信息，将当前节点进行 Splay 操作。&lt;/li&gt;
&lt;li&gt;否则按照二叉查找树的性质向下找，找到空节点就插入即可（请不要忘记 Splay 操作）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;我们定义一个新变量&lt;code&gt;root&lt;/code&gt;，来代表根节点的位置。&lt;/p&gt;
&lt;p&gt;实现代码如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;void insert(int k)
{
    int now = root; // 从根节点开始
    if (root == 0)  // 如果没有根节点就新建一个
    {
        tree[++tot].fa = 0;                 // 根节点没有父亲
        tree[tot].val = k;                  // 初始化值
        tree[tot].cnt = tree[tot].size = 1; // 初始化cnt与size
        root = tot;                         // 把根定为现在加入的新节点
    }
    else
    {
        while (1)
        {
            tree[now].size++;       // 走过这个点，代表它的大小增加了
            if (tree[now].val == k) // 如果k值与这个点相同，就放进去
            {
                tree[now].cnt++;  // 值的个数加一
                splay(now, root); // 把更新的点旋转到根
                return;
            }
            int nxt = k &amp;lt; tree[now].val ? 0 : 1; // 按照BST找节点
            if (!tree[now].ch[nxt])              // 如果找不到就加一个新的
            {
                tree[++tot].fa = now;               // 新节点的父亲就是当前的
                tree[tot].val = k;                  // 初始化值
                tree[tot].cnt = tree[tot].size = 1; // 初始化cnt与size
                tree[now].ch[nxt] = tot;            // 加入当前节点的儿子
                splay(tot, root);                   // 把新节点移动到根
                return;
            }
            now = tree[now].ch[nxt]; // 向下走
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同时还要注意每一次 Splay 是把当前节点移动到根，所以要在$splay$最后更新&lt;code&gt;root&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;void splay(int u, int v)
{
    v = tree[v].fa; // 方便写下面的代码
    while (tree[u].fa != v)
    {
        if (tree[tree[u].fa].fa == v) rotate(u);
        else if (get(u) == get(tree[u].fa)) rotate(tree[u].fa), rotate(x);
        else rotate(u), rotate(u);
        root = u;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;查询 k 的排名&lt;/h4&gt;
&lt;p&gt;根据二叉查找树的定义和性质，显然可以按照以下步骤查询 $k$ 的排名：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;如果 $k$ 比当前节点的权值小，向其左子树查找。&lt;/li&gt;
&lt;li&gt;如果 $k$ 比当前节点的权值大，将答案加上左子树$size$和当前节点$cnt$的大小，向其右子树查找。&lt;/li&gt;
&lt;li&gt;如果 $k$ 与当前节点的权值相同，将答案加$1$并返回。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;实现代码如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;int rank(int k)
{
    int ans = 0;    // 累计答案
    int now = root; // 从根开始
    while (1)
    {
        if (k &amp;lt; tree[now].val) // 如果比它小就向左找
        {
            now = tree[now].ch[0];
        }
        else
        {
            ans += tree[tree[now].ch[0]].size; // 否则加上左子树的大小
            if (k == tree[now].val)             // 如果找到了
            {
                splay(now, root); // 把找到的节点移动到根
                return ans + 1;   // 返回答案
            }
            ans += tree[now].cnt;  // 否则加上这个点的权值数
            now = tree[now].ch[1]; // 然后继续向右找
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;查询排名 k 的数&lt;/h4&gt;
&lt;p&gt;设 $k$ 为剩余排名，具体步骤如下：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;如果左子树非空且剩余排名 $k$ 不大于左子树的大小 $size$，那么向左子树查找。&lt;/li&gt;
&lt;li&gt;否则将 $k$ 减去左子树的和根的大小。如果此时 $k$ 的值小于等于 $0$，则返回根节点的权值，否则继续向右子树查找。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;实现代码如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;int kth(int k)
{
    int now = root; // 从根开始
    while (1)
    {
        if (tree[now].ch[0] &amp;amp;&amp;amp; k &amp;lt;= tree[tree[now].ch[0]].size) // 如果在左子树中
        {
            now = tree[now].ch[0]; // 向左找
        }
        else
        {
            k -= tree[now].cnt + tree[tree[now].ch[0]].size; // 减去当前的和左子树的和
            if (k &amp;lt;= 0)                                      // 如果减完了，说明在当前节点
            {
                splay(now, root);     // 把找到的节点移动到根
                return tree[now].val; // 返回真实值
            }
            now = tree[now].ch[1]; // 否则继续向右找
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;查询前驱&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;前驱定义为小于 $x$ 的最大的数，那么查询前驱可以转化为：将 $x$ 插入（此时 $x$ 已经在根的位置了），前驱即为 $x$ 的左子树中最右边的节点，最后将 $x$ 删除即可。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;实现代码如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;int pre()
{
    int now = tree[root].ch[0];
    if (!now) return now;                          // 如果没有左子树，直接返回
    while (tree[now].ch[1]) now = tree[now].ch[1]; // 在左子树中一直向右走
    splay(now, root);               // 把找到的节点移动到根
    return now;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;查询后继&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;后继定义为大于 $x$ 的最小的数，查询方法和前驱类似：$x$ 的右子树中最左边的节点。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;实现代码如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;int nxt()
{
    int now = tree[root].ch[1];
    if (!now) return now;                          // 如果没有右子树，直接返回
    while (tree[now].ch[0]) now = tree[now].ch[0]; // 在右子树中一直向左走
    splay(now, root);                              // 把找到的节点移动到根
    return now;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;删除操作&lt;/h4&gt;
&lt;p&gt;删除操作也是一个比较复杂的操作，具体步骤如下：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;首先将 $x$ 旋转到根的位置。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果 （有不止一个 $x$），那么将 $tree[x].cnt$ 减 $1$ 并退出。&lt;/li&gt;
&lt;li&gt;否则，合并它的左右两棵子树即可。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;void del(int k)
{
    rank(k);
    if (tree[root].cnt &amp;gt; 1) // 如果此节点数量足够
    {
        tree[root].cnt--; // 仅仅把cnt减一
        maintain(root);
        return;
    }
    if (!tree[root].ch[0] &amp;amp;&amp;amp; !tree[root].ch[1]) // 如果只有一个点
    {
        clear(root); // 直接删掉
        root = 0;
        return;
    }
    if (!tree[root].ch[0]) // 如果没有左子树
    {
        int now = root;          // 从根开始
        root = tree[root].ch[1]; // 定义新根为右儿子
        tree[root].fa = 0;       // 重置父亲
        clear(now);              // 删掉原来的根
        return;
    }
    if (!tree[root].ch[1]) // 如果没有右子树
    {
        int now = root;          // 从根开始
        root = tree[root].ch[0]; // 定义新根为左儿子
        tree[root].fa = 0;       // 重置父亲
        clear(now);              // 删掉原来的根
        return;
    }
    // 如果左右子树都存在
    int now = root, x = pre();       // 从根开始，同时获得新根
    tree[tree[now].ch[1]].fa = x;    // 定义原根右儿子的父亲为新根
    tree[x].ch[1] = tree[now].ch[1]; // 定义新根的右儿子为原根右儿子
    clear(now);                      // 删掉原来的根
    maintain(root);                  // 重置新根
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;最终 Splay 模板&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#define N 100005

using namespace std;

struct Node
{
    int fa;    // 节点父亲
    int val;   // 节点权值
    int cnt;   // 权值出现次数
    int size;  // 子树大小
    int ch[2]; // 左儿子与右儿子（方便运算）
    Node()
    {
        fa = 0;
        val = 0;
        cnt = 0;
        size = 0;
        ch[0] = ch[1] = 0;
    }
    Node(int Fa, int Val, int Cnt, int Size, int R, int L)
    {
        fa = Fa;
        val = Val;
        cnt = Cnt;
        size = Size;
        ch[0] = L;
        ch[1] = R;
    }
} tree[N];
int tot;  // 不算重的节点个数
int root; // 根节点

bool get(int u) { return u == tree[u].ch[1]; }

void maintain(int u) { tree[u].size = tree[tree[u].ch[0]].size + tree[tree[u].ch[1]].size + tree[u].cnt; }

void clear(int u) { tree[u].ch[0] = tree[u].ch[1] = tree[u].fa = tree[u].fa = tree[u].size = tree[u].cnt = 0; }

void rotate(int u)
{
    int v = tree[u].fa;
    // int u_fa = tree[u].fa;           // u_fa = v;
    int v_fa = tree[v].fa;              // u的目标父亲
    int son_u = get(u);                 // u在其父亲的位置
    int son_v = get(v);                 // v在其父亲的位置
    int change = tree[u].ch[son_u ^ 1]; // 获取u中需要更改的子树节点
    // 把这颗子树接到v的u位置：
    tree[change].fa = v;
    tree[v].ch[son_u] = change;
    // 把v接到u中不同的位置
    tree[v].fa = u;
    tree[u].ch[son_u ^ 1] = v;
    // 把u接到v原来的父亲中
    tree[u].fa = v_fa;
    tree[v_fa].ch[son_v] = u;
    maintain(u); // 维护u的size
    maintain(v); // 维护v的size
}

void splay(int u, int v)
{
    v = tree[v].fa; // 方便写下面的代码
    while (tree[u].fa != v)
    {
        if (tree[tree[u].fa].fa == v) rotate(u);
        else if (get(u) == get(tree[u].fa)) rotate(tree[u].fa), rotate(x);
        else rotate(u), rotate(u);
        root = u;
    }
}

void insert(int k)
{
    int now = root; // 从根节点开始
    if (root == 0)  // 如果没有根节点就新建一个
    {
        tree[++tot].fa = 0;                 // 根节点没有父亲
        tree[tot].val = k;                  // 初始化值
        tree[tot].cnt = tree[tot].size = 1; // 初始化cnt与size
        root = tot;                         // 把根定为现在加入的新节点
    }
    else
    {
        while (1)
        {
            tree[now].size++;       // 走过这个点，代表它的大小增加了
            if (tree[now].val == k) // 如果k值与这个点相同，就放进去
            {
                tree[now].cnt++;  // 值的个数加一
                splay(now, root); // 把更新的点旋转到根
                return;
            }
            int nxt = k &amp;lt; tree[now].val ? 0 : 1; // 按照BST找节点
            if (!tree[now].ch[nxt])              // 如果找不到就加一个新的
            {
                tree[++tot].fa = now;               // 新节点的父亲就是当前的
                tree[tot].val = k;                  // 初始化值
                tree[tot].cnt = tree[tot].size = 1; // 初始化cnt与size
                tree[now].ch[nxt] = tot;            // 加入当前节点的儿子
                splay(tot, root);                   // 把新节点移动到根
                return;
            }
            now = tree[now].ch[nxt]; // 向下走
        }
    }
}

int rank(int k)
{
    int ans = 0;    // 累计答案
    int now = root; // 从根开始
    while (1)
    {
        if (k &amp;lt; tree[now].val) // 如果比它小就向左找
        {
            now = tree[now].ch[0];
        }
        else
        {
            ans += tree[tree[now].ch[0]].size; // 否则加上左子树的大小
            if (k == tree[now].val)             // 如果找到了
            {
                splay(now, root); // 把找到的节点移动到根
                return ans + 1;   // 返回答案
            }
            ans += tree[now].cnt;  // 否则加上这个点的权值数
            now = tree[now].ch[1]; // 然后继续向右找
        }
    }
}

int kth(int k)
{
    int now = root; // 从根开始
    while (1)
    {
        if (tree[now].ch[0] &amp;amp;&amp;amp; k &amp;lt;= tree[tree[now].ch[0]].size) // 如果在左子树中
        {
            now = tree[now].ch[0]; // 向左找
        }
        else
        {
            k -= tree[now].cnt + tree[tree[now].ch[0]].size; // 减去当前的和左子树的和
            if (k &amp;lt;= 0)                                      // 如果减完了，说明在当前节点
            {
                splay(now, root);     // 把找到的节点移动到根
                return tree[now].val; // 返回真实值
            }
            now = tree[now].ch[1]; // 否则继续向右找
        }
    }
}

int pre()
{
    int now = tree[root].ch[0];
    if (!now) return now;                          // 如果没有左子树，直接返回
    while (tree[now].ch[1]) now = tree[now].ch[1]; // 在左子树中一直向右走
    splay(now, root);                              // 把找到的节点移动到根
    return now;
}

int nxt()
{
    int now = tree[root].ch[1];
    if (!now) return now;                          // 如果没有右子树，直接返回
    while (tree[now].ch[0]) now = tree[now].ch[0]; // 在右子树中一直向左走
    splay(now, root);                              // 把找到的节点移动到根
    return now;
}

void del(int k)
{
    rank(k);
    if (tree[root].cnt &amp;gt; 1) // 如果此节点数量足够
    {
        tree[root].cnt--; // 仅仅把cnt减一
        maintain(root);
        return;
    }
    if (!tree[root].ch[0] &amp;amp;&amp;amp; !tree[root].ch[1]) // 如果只有一个点
    {
        clear(root); // 直接删掉
        root = 0;
        return;
    }
    if (!tree[root].ch[0]) // 如果没有左子树
    {
        int now = root;          // 从根开始
        root = tree[root].ch[1]; // 定义新根为右儿子
        tree[root].fa = 0;       // 重置父亲
        clear(now);              // 删掉原来的根
        return;
    }
    if (!tree[root].ch[1]) // 如果没有右子树
    {
        int now = root;          // 从根开始
        root = tree[root].ch[0]; // 定义新根为左儿子
        tree[root].fa = 0;       // 重置父亲
        clear(now);              // 删掉原来的根
        return;
    }
    // 如果左右子树都存在
    int now = root, x = pre();       // 从根开始，同时获得新根
    tree[tree[now].ch[1]].fa = x;    // 定义原根右儿子的父亲为新根
    tree[x].ch[1] = tree[now].ch[1]; // 定义新根的右儿子为原根右儿子
    clear(now);                      // 删掉原来的根
    maintain(root);                  // 重置新根
}

int main()
{
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【博弈论】博弈论与SG函数</title><link>https://saro.pub/f5099c0</link><guid isPermaLink="true">https://saro.pub/f5099c0</guid><description>博弈论与SG函数，NIM游戏与ICG游戏公平组合游戏分析</description><pubDate>Mon, 07 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前文&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;有两个游戏者：$A$和$B$。有$n$颗石子。
约定：两人轮流取走石子，每次可取 1、2 或 3 颗。$A$先取，取走最后一颗石子的人获胜。
问题：$A$有没有必胜的策略？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这类经典的 NIM 游戏（Impartial CombinatorialGames——ICG 游戏的一种）可以通过&lt;strong&gt;博弈论&lt;/strong&gt;与&lt;strong&gt;Sprague-Grundy 数——SG 函数&lt;/strong&gt;解决，当然其前提要求是 ICG 游戏，也就是公平组合游戏，它往往要满足以下要求。&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;两名选手；&lt;/li&gt;
&lt;li&gt;两名选手轮流行动，每一次行动可以在有限合法操作集合中选择一个；&lt;/li&gt;
&lt;li&gt;游戏的任何一种可能的局面(position)，合法操作集合只取决于这个局面本身；局面的改变称为“移动”(move)。&lt;/li&gt;
&lt;li&gt;若轮到某位选手时，该选手的合法操作集合为空，则这名选手判负。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文将详细介绍如何通过基础博弈论与 SG 函数通过归纳数学解决此类问题。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;需要说明的是，棋类游戏都不是 ICG 游戏，包括封面的国际象棋。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;从 ICD 到 DAG 的转化&lt;/h2&gt;
&lt;p&gt;DAG（&lt;strong&gt;有向无环图&lt;/strong&gt;）可以用来代表任意一个 ICG 游戏。我们把 ICG 假设我们有两种点，一种为值为 1，代表从这个状态出发，先手必胜；另一种值为 0，代表从这个状态出发，先手必败。对于两种状态，把每一条有向边看作是状态的转移，我们可以得出以下连边规则：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;一个状态是必败状态当且仅当它的所有后继都是必胜状态&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;一个状态是必胜状态当且仅当它至少有一个后继是必败状态&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;第一条规则的含义很清楚了，如果我不管怎么走，我走之后对于对方来说永远都是必胜的，那么对我来说我这个状态就是必败的。&lt;/p&gt;
&lt;p&gt;第二条规则也是一个道理，如果我从这个状态转移能够让我的对手进入必败状态，那么对于当前的我来说我这个状态就是必胜的。&lt;/p&gt;
&lt;p&gt;需要注意的是，虽然我们的有向边是从起点-&amp;gt;终点的，且终点值为 0。但是实际上我们应该倒推，从一个状态的子状态可以得到这个状态，换句话说就是从终点 0 开始向后走，用现在处理的状态得到前一个状态。&lt;/p&gt;
&lt;p&gt;但是这样会有问题，我们 1-&amp;gt;1 的不好处理，不仅不知道实际情况，也不好知道转移的结果，所以需要用到下文的 SG 函数来辅助求解我们每一个状态的 SG 数，用 SG 数代替 01。&lt;/p&gt;
&lt;h2&gt;Sprague-Grundy 数的推导&lt;/h2&gt;
&lt;p&gt;SG 是 Sprague-Grundy 的缩写，查阅后才发现是两个人名，它使用起来非常简单，但是推导过程有些复杂。如果我们忽略推导过程直接去研究它的使用的话，你会有一种在运用魔法的感觉。因为你完全猜测不到它其中的原理，所以我们需要详细解释一下它的推导过程，这样才能加深理解。&lt;/p&gt;
&lt;p&gt;首先我们定义一个概念，在一个状态节点$i$中，如果$SG[i]$大于零，则是&lt;strong&gt;必胜状态&lt;/strong&gt;，如果如果$SG[i]$等于零，则是&lt;strong&gt;必败状态&lt;/strong&gt;。那么这样就可以分开 1-&amp;gt;1 的情况。&lt;/p&gt;
&lt;p&gt;那么根据我们上面的守则，我们可以写出下面的更新过程：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;首先获得一个状态的所有子状态&lt;/li&gt;
&lt;li&gt;如果子状态中有 0，说明这个是一个&lt;strong&gt;必胜状态&lt;/strong&gt;，给它打上一个&lt;strong&gt;与子状态不同的&lt;/strong&gt;标记&lt;/li&gt;
&lt;li&gt;如果子状态都大于 0，说明这是一个&lt;strong&gt;必败状态&lt;/strong&gt;，就打上标记 0&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个面向过程的更新多少有点繁琐，我们可以写一个$mex$函数一次解决，具体写法如下：&lt;/p&gt;
&lt;p&gt;$$ SG_{}\left(A\right)=mex\left\lbrace SG\left(B\right)\left|A\rightarrow B\right.\right\rbrace $$&lt;/p&gt;
&lt;p&gt;式子中的&lt;strong&gt;A 和 B 表示状态&lt;/strong&gt;，$A\rightarrow B$表示$A$状态可以达到$B$状态，也就是$B$是$A$的子状态。mex 是一个定义在集合上的函数，返回的是不属于这个集合的最小非负整数。比如$mex(0, 1)= 2$，$mex(0, 2) = 1$, $mex(0,1, 2, 3)=4$。那么我们就把上面啰嗦的三句话整合成了等价的一个$mex$函数。&lt;/p&gt;
&lt;p&gt;最后还有一点，就是我一个子状态可能包含几个“孙状态”。比如有一道例题如下：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在一个平面上有$n$个点勾勒了一个凸四边形的轮廓，有两个游戏者$A$和$B$，每一个人可以连接任意两个点画出一条实线，要求实线不能交叉，一个点也不能被多次选择，问谁胜？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在这个题目中，我举一个例子：当$n$为 4 时，我有两种子状态：连相近的两条边，剩下两个可以连接的边；还有连对角的两条边，剩下两个孤立的点。第一个很好判断，子状态就是$SG(2)$。而第二个子状态却是用两个孙状态拼起来的，也就是一个$SG(1+1)$，这与$SG(2)$是不等价的，我们规定$SG(A + B) = SG(A) xor SG(B)$，如果有多个孙状态，就是他们的异或和，如此一来就可以正常表示一个子状态了。&lt;/p&gt;
&lt;h2&gt;SG 的结论推导&lt;/h2&gt;
&lt;p&gt;这个是博弈论最最困难的地方，像通过 SG 函数与$mex$你可以很轻松求出每一个状态的 SG 值，但是实际应用中总是不切实际的——你不可能枚举每一个子状态再计算。这就要求选手通过有限的打表推断出普遍规律，这总是很难的。&lt;/p&gt;
&lt;p&gt;每一道题目的结论都不相同，但宗旨就是——把对手扔到必败状态。具体来说就是我们可以锁定最后几个失败的状态找到他们与众不同的特点，虽然在中间满足这些特点的状态不一定是必败的，但是我们可以确定 ICG 游戏一定是会结束的，所以如果你可以让对手一直保持这个特点，那么只要走到终点状态，对手一定是必败的。&lt;/p&gt;
&lt;p&gt;SG 的结论推导需要多刷多看才能找出其奥妙所在，有时候也可以根据题面找线索，比如二分图想到最大连通分量这些。但最后还是要看选手自己对数的理解——实在不行也有 SG 陪着你不是吗，不论如何，ICG 游戏只有先手必胜和先手必败两种情况，虽然打表找规律这种方法不甚高明，但是在比赛中也无可厚非了。&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【线性代数】矩阵乘法与线性DP优化</title><link>https://saro.pub/b8b0b8d</link><guid isPermaLink="true">https://saro.pub/b8b0b8d</guid><description>矩阵乘法与线性DP优化，使用矩阵快速幂优化线性动态规划</description><pubDate>Thu, 03 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;现在有一道题目如下：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;输入一个整数 n ($n \leq 10^{18}$)， 求第 n 个斐波那契数。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;众所周知斐波那契数列的递推公式是：$f_i = f_{i-1} + f_{i-2}$。通过$O(N)$的时间递推可以在 1s 内求出前 1e8 的斐波那契数，但是题目的范围是 1e18，这要怎么办呢？这时候就要引出我们今天要学习的内容——矩阵与矩阵乘法了。&lt;/p&gt;
&lt;h2&gt;概念&lt;/h2&gt;
&lt;h3&gt;什么是矩阵（matrix）&lt;/h3&gt;
&lt;p&gt;下面是一个$2 \times 2$的矩阵，其中&lt;code&gt;a&lt;/code&gt;，&lt;code&gt;b&lt;/code&gt;，&lt;code&gt;c&lt;/code&gt;，&lt;code&gt;d&lt;/code&gt;，是里面的元素，矩阵里的元素可以是数字符号或者数学式。&lt;/p&gt;
&lt;p&gt;$$\begin{bmatrix}{a} &amp;amp; {b} \ {c} &amp;amp; {d}\end{bmatrix}$$&lt;/p&gt;
&lt;p&gt;关于矩阵的其他内容我们不再延申，你现在只要知道矩阵是这么样的一个东西就可以了。&lt;/p&gt;
&lt;p&gt;矩阵可以用字母代表，那么矩阵 $A_{n \times m}$ 本质上是一个 n 行 m 列的二维数组。&lt;/p&gt;
&lt;h3&gt;矩阵乘法&lt;/h3&gt;
&lt;p&gt;矩阵之间可以相乘，并且满足结合律与分配律——不满足交换律，在$n \times m(n \ne m)$这种不是&lt;code&gt;正方形&lt;/code&gt;的矩阵中，交换前后两个矩阵相乘会导致结果矩阵的形状不同，我们会在后面解释。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;矩阵相乘时，相乘矩阵的宽高必须有一个相同，否则无法配对。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;比如下面这个式子，把矩阵$A \times B = C$，可以这样写：&lt;/p&gt;
&lt;p&gt;$$ C*{n\times s}=A*{n\times m}:\times B_{m\times s} $$&lt;/p&gt;
&lt;p&gt;那么它实际上就等于：&lt;/p&gt;
&lt;p&gt;$$ C*{ij}=\sum A*{ik}\times B_{kj}\left(1:\le:k:\le:m\right) $$&lt;/p&gt;
&lt;p&gt;其中 k 的遍历过程也就是&lt;code&gt;相乘矩阵的宽高必须有一个相同&lt;/code&gt;的原因，否则匹配不了。&lt;/p&gt;
&lt;p&gt;写成代码形式，就和弗洛伊德很像，可以把弗洛伊德看成是魔改的矩阵乘法：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;for(int i = 1; i &amp;lt;= an; i++)
    for(int k = 1; k &amp;lt;= am; k++)
        for(int j = 1; j &amp;lt;= bm; j++)
            c[i][j] = c[i][j] + a[i][k] * b[k][j];
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;用矩阵优化线性 DP&lt;/h2&gt;
&lt;p&gt;回到前言我们说的题目，这里回顾一下：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;输入一个整数 n ($n \leq 10^{18}$)， 求第 n 个斐波那契数。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我们每一次转移可以用一个矩阵表示：&lt;/p&gt;
&lt;p&gt;$$ \left[{f_{i-1}},:f_{i-2}\right]\times\left[\begin{matrix}{1} &amp;amp; {1} \ {1} &amp;amp; {0}\end{matrix}\right]=\left[{f_i},:f_{i-1}\right] $$&lt;/p&gt;
&lt;p&gt;因为是线性的，所以我们很容易发现，每一转移其实就是当前的状态矩阵乘上我们的$\left[\begin{matrix}{1} &amp;amp; {1} \ {1} &amp;amp; {0}\end{matrix}\right]$，那么每转移一次，i 就加一，我们先处理出$f_1,f_2$，那么通过$n-2$次转移，我们就可以得到$f_n$的值。&lt;/p&gt;
&lt;h3&gt;延伸&lt;/h3&gt;
&lt;p&gt;所有类似于这样的线性 DP 都可以用矩阵来转移，比如$f_i = f_{i-1} + f_{i-3} + f_{i-4}$，这种转移，我们可以构造下面这一个转移矩阵：&lt;/p&gt;
&lt;p&gt;$$ \begin{bmatrix}1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \ 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\end{bmatrix} $$&lt;/p&gt;
&lt;p&gt;然后使用快速幂可以把时间复杂度从$O(N)$优化到$O(k^3 \log N)$ ，其中 k 是状态是数量，也就是转移矩阵的边长。&lt;/p&gt;
&lt;p&gt;下面是实例代码，可以解决$f_i = f_{i-1} + f_{i-3} + f_{i-4}$求解$f_n$并且$n \leq 10^{18}$的情况。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这里因为乘的顺序不一样（交换了），矩阵不能使用交换律，所以转移矩阵稍有不同。（实际上一般情况下习惯把系数放在第一行，也就是代码中转移矩阵的样子）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;vector&amp;gt;
using namespace std;

typedef long long ll;
typedef vector&amp;lt;vector&amp;lt;ll&amp;gt;&amp;gt; matrix;

matrix multiply(matrix a, matrix b, ll mod)
{
    ll n = a.size();
    matrix c(n, vector&amp;lt;ll&amp;gt;(n));
    for (ll i = 0; i &amp;lt; n; i++)
        for (ll j = 0; j &amp;lt; n; j++)
            for (ll k = 0; k &amp;lt; n; k++)
                c[i][j] = (c[i][j] + a[i][k] * b[k][j]) % mod;
    return c;
}

matrix matrix_pow(matrix a, ll n, ll mod)
{
    ll m = a.size();
    matrix res(m, vector&amp;lt;ll&amp;gt;(m));
    for (ll i = 0; i &amp;lt; m; i++)
        res[i][i] = 1;
    while (n)
    {
        if (n &amp;amp; 1)
            res = multiply(res, a, mod);
        a = multiply(a, a, mod);
        n &amp;gt;&amp;gt;= 1;
    }
    return res;
}

int main()
{
    matrix a = {{1, 0, 1, 1},
                {1, 0, 0, 0},
                {0, 1, 0, 0},
                {0, 0, 1, 0}}; // 转移矩阵
    ll n;
    scanf(&amp;quot;%lld&amp;quot;, &amp;amp;n); // 2, 4, 6, 9
    matrix ans = matrix_pow(a, n - 4, 10007);
    printf(&amp;quot;%lld&amp;quot;, (ll)(2 * ans[0][3] + 4 * ans[0][2] + 6 * ans[0][1] + 9 * ans[0][0]) % 10007);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【题解】7月11到7月17典例复习</title><link>https://saro.pub/8a7ff04</link><guid isPermaLink="true">https://saro.pub/8a7ff04</guid><description>7月11到7月17日典例复习题解，涵盖数论、快速幂、最大生成树与并查集</description><pubDate>Mon, 17 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;因为网盘还没有搭建好，题面 PDF 无法上传，所以暂时没有题面&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;7 月 17 日&lt;/h2&gt;
&lt;h3&gt;1. maruyu&lt;/h3&gt;
&lt;p&gt;是一道让我非常头疼的数论题面，刚刚好让我好好复习一下。&lt;/p&gt;
&lt;p&gt;回顾一下题面，要用$n + 1$艘船运送$k$种物质，而且要满足以下两个条件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;没有任何一种物质同时被$0 \sim n - 1$艘船运输；&lt;/li&gt;
&lt;li&gt;第$1\sim n$艘船没有运输全部$k$种物资；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;现在问你：&lt;strong&gt;一共有多少种运输方案？&lt;/strong&gt;（对 1e9 + 7 取模）&lt;/p&gt;
&lt;h4&gt;题解&lt;/h4&gt;
&lt;p&gt;那么看起来很难（确实很难），我们用一个矩阵来理解。&lt;/p&gt;
&lt;p&gt;假设每一行从左往右从 0 开始，到$n$结束；每一列由上而下从 1 开始，从$k$结束。&lt;/p&gt;
&lt;p&gt;我们规定 0 代表第$i$艘船选择了第$j$种物质；1 就代表选择。那么我们可以用(i, j)来表示一个状态，从这里开始分析；&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;首先明确题面，我们不需要运输完所有的$k$种物资，那么我们从 1 到$k$枚举一个实数$i$，代表有$i$种物质没有被取走；&lt;/li&gt;
&lt;li&gt;那么我们很简单可以知道这样一共有${C}_{k}^{i}\times2^i$种情况&lt;/li&gt;
&lt;li&gt;接下来我们开始考虑其他的取走的物品的情况&lt;ol&gt;
&lt;li&gt;因为头尾的两艘船十分特殊，我们先不考虑它们，先考虑$1\sim n - 1$；&lt;/li&gt;
&lt;li&gt;每一条船可以取也可以不取，一共是$2 ^ {n - 1}$种情况&lt;/li&gt;
&lt;li&gt;因为我们现在不知道头尾的情况，我们先去掉都是 1 和都是 0 的情况，也就是-2&lt;/li&gt;
&lt;li&gt;我们再考虑前后两个特殊的值，把刚才的式子再乘以$2^2$；&lt;/li&gt;
&lt;li&gt;最后我们要把刚刚去掉的全部都是 1 和 0 的情况补回来，有下面四种合法情况&lt;ol&gt;
&lt;li&gt;0 111111111111...111&lt;/li&gt;
&lt;li&gt;0 111111111111...110&lt;/li&gt;
&lt;li&gt;1 000000000000...001&lt;/li&gt;
&lt;li&gt;1 000000000000...000&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;那么此时我们单个物资的情况就是$\left(2^{n-1}-2\right)\times4+4$；&lt;/li&gt;
&lt;li&gt;最后此时我们有$k - i$种物质被取走了，那么最后的结果是${\left(\left(2^{n-1}-2\right)\times4+4\right)}^{k - i}$&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;现在我们可以得到一个式子$\sum_{i=:1}^k{C}_{k}^{i}\times2^i\times{\left(\left(2^{n-1}-2\right)\times4+4\right)}^{k - i}$；&lt;/li&gt;
&lt;li&gt;但是这样我们处理非常麻烦，需要化简（使用二项式定理）：&lt;ol&gt;
&lt;li&gt;二项式定理：$(a+b)^k=\sum_{i=:0}^k{C}_{k}^{i}\times a^i\times b^{k-i}$&lt;/li&gt;
&lt;li&gt;我们把$\left(2^{n-1}-2\right)\times4+4$用一个变量$R$代替，重写得到 $\sum_{i=:1}^k{C}_{k}^{i}\times2^i\times{r}^{k - i}$；&lt;/li&gt;
&lt;li&gt;容易发现$\sum_{i=:0}^k{C}_{k}^{i}\times2^i\times{r}^{k-i}=\left(r+2\right)^k$，但是这里的$i$是从 0 开始的，我们还需要减去；&lt;/li&gt;
&lt;li&gt;最终化简结果为$\sum_{i=:1}^k{C}&lt;em&gt;{k}^{i}\times2^i\times{\left(\left(2^{n-1}-2\right)\times4+4\right)}^{k-i}=\sum&lt;/em&gt;{i=:1}^k{C}_{k}^{i}\times2^i\times{r}^{k-i}=\left(2^{}+r\right)^k-r^k$&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;最后使用快速幂计算输出。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;注意最后有减法，不要忘记加上 mod 之后再减避免出现负数&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;FIX 代码&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;cmath&amp;gt;
#define fastio                   \
    ios::sync_with_stdio(false); \
    cin.tie(0);                  \
    cout.tie(0)
#define ll long long
#define mod 1000000007

using namespace std;

ll pow(ll a, ll b)
{
    a %= mod;
    ll ans = 1;
    for(; b; b &amp;gt;&amp;gt;= 1)
    {
        if (b &amp;amp; 1) ans = ans * a % mod;
        a = a * a % mod;
    }
    return ans;
}

int main()
{
    fastio;
    freopen(&amp;quot;maruyu.in&amp;quot;, &amp;quot;r&amp;quot;, stdin);
    freopen(&amp;quot;maruyu.out&amp;quot;, &amp;quot;w&amp;quot;, stdout);
    int t;
    scanf(&amp;quot;%d&amp;quot;, &amp;amp;t);
    while (t--)
    {
        ll n, k;
        scanf(&amp;quot;%lld%lld&amp;quot;, &amp;amp;n, &amp;amp;k);
// 首先明确题目，我们不需要取完所有的K种物品
// 那么我们枚举i(1~k)假设有i种物品没有被取
// 一共就是C(i, k) * 2 ^ i种情况
// 开始考虑其他取走的物品
// 因为题目有两个条件，我们先考虑不受影响的1~n - 1
// 每一条船可以取也可以不取，一共是2 ^ (n - 1)种情况
// 那么如果都是1或者都是0是会影响的，我们暂时去掉-2
// 考虑前后两个，都有01两种情况，一共四种使用乘法公式
// 最后我们要把之前去掉的情况补回来，有下面四种情况
// - 0 111111111111...111
// - 0 111111111111...110
// - 1 000000000000...001
// - 1 000000000000...000
// 那么最后我们还要计算所有剩下的情况，一共是^(k - i)
// 此时结果是：i : [1~K] C(i, k) * (2 ^ i) * ((2 ^ (n - 1)) * 4 + 4) ^ (k - i)
// 我们可以用二项式定理化简：
// - 二项式定理：(a + b) ^ k = i : [0~k] C(i, k) * a ^ i * b ^ (k - i)
// 我们把(2 ^ (n - 1)) * 4 + 4)当做r
// 此时式子为                         i : [1~K] C(i, k) * 2 ^ i * r ^ (k - i)
// 显然我们发现这个式子和 (2 + r) ^ k = i : [0~k] C(i, k) * 2 ^ i * r ^ (k - i)很像
// 但是我们的i是从1开始的，二项式定理的i是从0开始
// 所以我们最后要剪去多余的0
// 最后化简的式子为: (2 + r) ^ k - r ^ k
// 整理得 ans = 2 ^ k * ((2 ^ n - 1) ^ k - (2 ^ n - 2) ^ k)
        printf(&amp;quot;%d\n&amp;quot;, pow(2LL, k) * (pow(pow(2ll, n) - 1, k) - pow(pow(2LL, n) - 2, k) + mod) % mod);
    }
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. truck&lt;/h3&gt;
&lt;p&gt;我本来的想法是二分答案验证联通，但是发现复杂度为$O(Q * \log N(N + M))$，得分 60Pt。&lt;/p&gt;
&lt;h4&gt;题解&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;思路来自 HYX 大佬，而非 std&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;主要思想：&lt;code&gt;最大生成树&lt;/code&gt;&amp;amp;&lt;code&gt;并查集&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;首先我们使用&lt;code&gt;pair&lt;/code&gt;离线存贮所有的提问，因为是无向图，我们要双向存储。其中 first 代表的是目标节点，second 代表的是提问编号。&lt;/p&gt;
&lt;p&gt;我们把所有的边放在一个&lt;code&gt;vector&lt;/code&gt;中，然后定义以边权从大到小排序，用来做最大生成树；&lt;/p&gt;
&lt;h5&gt;为什么这样做？&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;翻译一下题面，就是我们要找两点之间简单路径上面最大的最小值！
可能有点拗口，就是在保证联通的情况下，我们这一条路径上面的最小值尽可能大
那么我们就可以用最大生成树，把边从大到小依次添加，直到 uv 在同一个连通块里面
那么此时添加的这一条边就是 uv 两点之间简单路径上面最大的最小值，也就是答案
那么就很简单了，我们从大到小添加边，然后合并，直到 uv 合并，记录 ans
那么我们只需要遍历提问，然后操作并查集，通过&lt;code&gt;路径压缩&lt;/code&gt;和&lt;code&gt;启发式合并&lt;/code&gt;完全可以通过题目&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;算法实现&lt;/h4&gt;
&lt;p&gt;联系我们之前强连通分量的内容，其实我们这里并查集做的事情差不多，就是把几个点合并成一个点。那么我们先定义一个数组&lt;code&gt;fa&lt;/code&gt;代表这个点从属于哪个大点。刚开始&lt;code&gt;fa&lt;/code&gt;是他们自己，每次把小的合并到大的，更新&lt;code&gt;fa&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这里我们写一个函数来获得他从属于哪一个大点。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;int get_fa(int a)
{
    return a == fa[a] ? a : fa[a] = get_fa(fa[a]);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里我们&lt;code&gt;fa[a] = get_fa(fa[a])&lt;/code&gt;是路径压缩，把父亲直接指向根，节省时间。&lt;/p&gt;
&lt;p&gt;最后我们写合并函数。前面我们说了用&lt;code&gt;pair&lt;/code&gt;来存储询问，那么其实每一次合并时也合并了询问，我们也要把询问放入并查集-&amp;gt;我说过这就和合并几个点相同，其实刚开始每一个点都是一个大点，只不过他们只包含自己而已。&lt;/p&gt;
&lt;p&gt;分析查询询问的过程，如果我们查询到的询问的目标在同一个大点中，说明只要连接这一条边，他们就联通了，此时我们把这一次询问的答案记录为此时的边权；如果不再一个大点中，我们就把它合并到一起，进入下一次合并的过程。&lt;/p&gt;
&lt;p&gt;最后我们把这个大点归属到需要合并的点中，那么下一次&lt;code&gt;get_fa&lt;/code&gt;时，里面所有小点的&lt;code&gt;fa&lt;/code&gt;都会更新。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;void merge(int sm, int la, int val)
{
    for (auto temp : que[sm])
    {
        int v = temp.first;
        int id = temp.second;
        if (get_fa(v) == la) ans[id] = val;
        else que[la].push_back(temp);
    }
    fa[sm] = la; // 合并
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;代码&lt;/h4&gt;
&lt;p&gt;注意我们要保证时间复杂度在 log 内，需要严格把小的合并到大的，也就是所谓的启发式合并。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;queue&amp;gt;
#define fastio                   \
    ios::sync_with_stdio(false); \
    cin.tie(0);                  \
    cout.tie(0)
#define N 100005
#define T_u 1
#define T_v 2

using namespace std;

struct truck
{
    int u, v;
    int val;
    truck(int a, int b, int c)
    {
        u = a;
        v = b;
        val = c;
    }
    truck()
    {
        u = 0;
        v = 0;
        val = 0;
    }
};

vector&amp;lt;truck&amp;gt; edge;            // 直接存储无向边
vector&amp;lt;pair&amp;lt;int, int&amp;gt;&amp;gt; que[N]; // 保存从N到&amp;lt;first&amp;gt;的第&amp;lt;second&amp;gt;次询问
int fa[N];                     // 并查集的父亲代表元素
int ans[300005];

bool cmp(truck a, truck b)
{
    return a.val &amp;gt; b.val;
}

int get_fa(int a)
{
    return a == fa[a] ? a : fa[a] = get_fa(fa[a]);
}

void merge(int sm, int la, int val)
{
    for (auto temp : que[sm])
    {
        int v = temp.first;
        int id = temp.second;
        if (get_fa(v) == la)
            ans[id] = val;
        else
            que[la].push_back(temp);
    }
    fa[sm] = la;
}

int main()
{
    fastio;
    freopen(&amp;quot;truck.in&amp;quot;, &amp;quot;r&amp;quot;, stdin);
    freopen(&amp;quot;truck.out&amp;quot;, &amp;quot;w&amp;quot;, stdout);
    int n, m;
    scanf(&amp;quot;%d%d&amp;quot;, &amp;amp;n, &amp;amp;m);
    for (int i = 1; i &amp;lt;= m; i++)
    {
        int u, v, w;
        scanf(&amp;quot;%d%d%d&amp;quot;, &amp;amp;u, &amp;amp;v, &amp;amp;w);
        edge.push_back(truck(u, v, w));
    }
    for (int i = 1; i &amp;lt;= n; i++)
        fa[i] = i;
    int q;
    scanf(&amp;quot;%d&amp;quot;, &amp;amp;q);
    for (int i = 1; i &amp;lt;= q; i++)
    {
        int u, v;
        ans[i] = -1;
        scanf(&amp;quot;%d%d&amp;quot;, &amp;amp;u, &amp;amp;v);
        que[u].push_back({v, i});
        que[v].push_back({u, i});
    }
    sort(edge.begin(), edge.end(), cmp);
    for (truck temp : edge) // 从大开始合并
    {
        int sm = get_fa(temp.u);
        int la = get_fa(temp.v);
        if (sm == la)
            continue;
        if (que[sm].size() &amp;gt; que[la].size())
            swap(sm, la); // 启发式合并
        merge(sm, la, temp.val);
    }
    for (int i = 1; i &amp;lt;= q; i++)
        printf(&amp;quot;%d\n&amp;quot;, ans[i]);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;7 月 16 日&lt;/h2&gt;
&lt;h3&gt;1. xor&lt;/h3&gt;
&lt;h4&gt;题解&lt;/h4&gt;
&lt;p&gt;因为题面中 b 是严格递增的，那么我们可以不走回头路，在$O(N^2)$解决问题。&lt;/p&gt;
&lt;p&gt;总的来说就是先存储前面两个元素 xor 的值有几个，然后在后面匹配。&lt;/p&gt;
&lt;h4&gt;代码实现&lt;/h4&gt;
&lt;p&gt;首先定义$cnt_{k}[x]$的含义是&lt;code&gt;当第三个元素在k位置时&lt;/code&gt;前两个元素 xor 的值为 x 的匹配个数。&lt;/p&gt;
&lt;p&gt;我们先定一个指针$k$来指代第三个元素的位置。那么每次移动指针$k$时可以通过遍历&lt;code&gt;a[i] xor a[k]&lt;/code&gt;，就可以直接处理好我们需要的$cnt_{k + 1}$，这段操作不计时间复杂度。&lt;/p&gt;
&lt;p&gt;然后我们从&lt;code&gt;k + 1&lt;/code&gt;开始遍历第四个元素&lt;code&gt;l&lt;/code&gt;的位置，每次&lt;code&gt;ans += cnt[a[k] ^ a[l]]&lt;/code&gt;，也就是加上当前能够匹配上的元素。&lt;/p&gt;
&lt;p&gt;遍历 k 和 l，时间复杂度为$O(N^2)$，可以解决问题。&lt;/p&gt;
&lt;h4&gt;代码&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#define N 1048576 // 注意 2^20
#define ll long long

using namespace std;

ll n, ans;
ll cnt[N];
int a[N];

int main()
{
    freopen(&amp;quot;xor.in&amp;quot;, &amp;quot;r&amp;quot;, stdin);
    freopen(&amp;quot;xor.out&amp;quot;, &amp;quot;w&amp;quot;, stdout);
    scanf(&amp;quot;%lld&amp;quot;, &amp;amp;n);
    for (int i = 1; i &amp;lt;= n; i++)
    {
        scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[i]);
    }
    for (int k = 1; k &amp;lt;= n; k++)
    {
        for (int l = k + 1; l &amp;lt;= n; l++)
        {
            ans += cnt[a[k] ^ a[l]];
        }
        for (int i = 1; i &amp;lt; k; i++)
            cnt[a[i] ^ a[k]]++;
    }
    printf(&amp;quot;%lld&amp;quot;, ans);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2. multiplication&lt;/h4&gt;
&lt;h4&gt;题解&lt;/h4&gt;
&lt;p&gt;反正我们不知道谁是谁，我们直接假设元素从小到大排列整齐，方便分析。&lt;/p&gt;
&lt;p&gt;那么排好之后是一个$[0, p-1] \times [0, p-1]$的一个$p \times p$矩阵，很像我们的 99 乘法表。&lt;/p&gt;
&lt;p&gt;那么用我们聪明的小脑袋想一想，如果是$n \times p (n &amp;lt; p)$，那么很显然十位就是$n$。但是我们最大为$(p-1) \times (p-1)$，简单拆开就是$p^2-2p+1$，刚刚好得到的数字为$[p-2][1]$；&lt;/p&gt;
&lt;p&gt;根据这个规律我们可以写出这样一个对应表：&lt;/p&gt;
&lt;p&gt;|我们从 0 到 p-1 的数字| p-1 |
| :title: 【题解】7 月 11 到 7 月 17 典例复习
tags:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;比赛&lt;/li&gt;
&lt;li&gt;题解&lt;/li&gt;
&lt;li&gt;复习&lt;/li&gt;
&lt;li&gt;数论&lt;/li&gt;
&lt;li&gt;快速幂&lt;/li&gt;
&lt;li&gt;最大生成树&lt;/li&gt;
&lt;li&gt;并查集
categories:&lt;/li&gt;
&lt;li&gt;OI 学习笔记&lt;/li&gt;
&lt;li&gt;题解
abbrlink: 427ba869
pubDate: 2023-07-17 00:00:00
badge: old&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;-----: | :-----------: |
| 0 | [0][0] |
| 1 | [0][p-1] |
| 2 | [1][p-2] |
| 3 | [2][p-3] |
| ... | ... |
| p-1 | [p-2][1] |&lt;/p&gt;
&lt;p&gt;容易发现，一个正整数数在 p 进制下乘以 p-1，它的十位刚刚好就是它自己减一。&lt;/p&gt;
&lt;p&gt;但是回过来，我们这个矩阵既不是有规律的，甚至于我们都不知道数字是几，但是我们可以通过其他方法记录这个值。&lt;/p&gt;
&lt;p&gt;我们知道一个数最大时的十位是它自己减一，这说明什么？说明在之前的十位它都曾出现过。假设有一个数字三，乘以 p-1 得到一个数字十位为 2，这说明它在这个矩阵中一定有十位为 0，1，2 的数字。因为即使 p 最小最小为 3 时，每一次相乘也就是在之前的基础上加三，十位同时进一位，不可能有进两位的情况。&lt;/p&gt;
&lt;p&gt;那么就简单了，我们只需要统计一个数在这个矩阵的一行中的数字的十位所出现的种类数，就是它。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;0 需要特判，因为 0 乘以任何数都是 0&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;代码&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;unordered_map&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;cmath&amp;gt;
#define ll long long

using namespace std;

const int N = 2000 + 5;
int num[N];
int p;

int main()
{
    freopen(&amp;quot;multiplication.in&amp;quot;, &amp;quot;r&amp;quot;, stdin);
    freopen(&amp;quot;multiplication.out&amp;quot;, &amp;quot;w&amp;quot;, stdout);
    scanf(&amp;quot;%d&amp;quot;, &amp;amp;p);
    for (int i = 1; i &amp;lt;= p; i++)
    {
        int tot = 0;
        bool zero = true;
        unordered_map&amp;lt;int, int&amp;gt; hash;
        for (int j = 1; j &amp;lt;= p; j++)
        {
            int a, b;
            scanf(&amp;quot;%d%d&amp;quot;, &amp;amp;a, &amp;amp;b);
            if (a != b) zero = false;
            if (hash.count(a)) continue;
            else { tot++; hash[a] = a; }
        }
        if (!zero) num[i] = tot;
    }
    for (int i = 1; i &amp;lt;= p; i++) printf(&amp;quot;%d &amp;quot;, num[i]);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. four&lt;/h3&gt;
&lt;h4&gt;题解&lt;/h4&gt;
&lt;p&gt;这个题目很复杂，很烦躁，要静……&lt;/p&gt;
&lt;p&gt;但是理解了之后，也非常的简单……&lt;/p&gt;
&lt;p&gt;首先方案达到了$2^{40}$级别，基本上属于摆烂的节奏，我们把它先分成两半再匹配，分开来是为了防止暴力爆炸，分成两份是保证脑子不爆炸。&lt;/p&gt;
&lt;p&gt;我们先把分开来的 20 个元素变成$2^{20}$个元素，可以直接这样写：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;for (int i = l; i &amp;lt; r; i++)
{
    vector&amp;lt;int&amp;gt; t = temp; // instead dfs
    for (int x : temp)
        t.push_back(x + a[i]);
    temp = t;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后容我来讲解一下判断方法：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;我们先在前后各$2^{20}$中选出两个元素&lt;/li&gt;
&lt;li&gt;通过&lt;code&gt;pw&lt;/code&gt;取模拿出这两个元素的一段&lt;/li&gt;
&lt;li&gt;然后相加这两项，那么我们可以简单判断是否在&lt;code&gt;pw + 1&lt;/code&gt;位存在 4&lt;ul&gt;
&lt;li&gt;如果相加的值在[4 * 10^pw, 4.999... * 10^pw]或者[14 * 10^pw, 14.999... * 10^pw]&lt;/li&gt;
&lt;li&gt;就说明在这种情况之下的&lt;code&gt;pw + 1&lt;/code&gt;为 4&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;就这么简单……我也想不到还有什么好说的了，自行阅读代码理解吧。&lt;/p&gt;
&lt;h4&gt;代码&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;array&amp;gt;
#define ll long long

using namespace std;

int a[44];
vector&amp;lt;array&amp;lt;int, 2&amp;gt;&amp;gt; le; // left
vector&amp;lt;array&amp;lt;int, 2&amp;gt;&amp;gt; ri; // right
ll ans;
int n;

vector&amp;lt;array&amp;lt;int, 2&amp;gt;&amp;gt; init(int l, int r)
{
    vector&amp;lt;int&amp;gt; temp{0}; // init 0
    for (int i = l; i &amp;lt; r; i++)
    {
        vector&amp;lt;int&amp;gt; t = temp; // instead dfs
        for (int x : temp)
            t.push_back(x + a[i]);
        temp = t;
    }
    // 第一位是我们取出来的，第二位则是我们保存的这个数原有的值
    vector&amp;lt;array&amp;lt;int, 2&amp;gt;&amp;gt; ret; // first save now. second save old
    for (int x : temp)
        ret.push_back({0, x});
    return ret;
}

void reorder(vector&amp;lt;array&amp;lt;int, 2&amp;gt;&amp;gt; &amp;amp;str, int pw)
{
    vector&amp;lt;array&amp;lt;int, 2&amp;gt;&amp;gt; v[10];
    for (auto [_, x] : str)
    {
        // 这里我们重新取出pw + 1位并用第一个数字排序
        int head = (x / pw) % 10; // str_head -&amp;gt; |*^****...|
        int val = x % (pw * 10);  // str_val -&amp;gt; (int)|*****...|
        v[head].push_back({val, x});
    }
    str.clear(); // remove
    for (int i = 0; i &amp;lt;= 9; i++)
        for (auto temp : v[i])
            str.push_back(temp);
}

ll calc(int d)
{
    // 假设都符合
    int r = ri.size(); // if all
    ll temp = 0;
    for (int l = 0; l &amp;lt; le.size(); l++)
    {
        // cmp now &amp;gt; d ? check-&amp;gt;NO : check-&amp;gt;YES
        // 我们相加判断一下这个是否符合要求
        while (r &amp;gt; 0 &amp;amp;&amp;amp; ri[r - 1][0] + le[l][0] &amp;gt; d)
            r--; // cmp fail -&amp;gt; r-- -&amp;gt; find other
        temp += r;
    }
    return temp;
}

int main()
{
    freopen(&amp;quot;four.in&amp;quot;, &amp;quot;r&amp;quot;, stdin);
    freopen(&amp;quot;four.out&amp;quot;, &amp;quot;w&amp;quot;, stdout);
    scanf(&amp;quot;%d&amp;quot;, &amp;amp;n);
    for (int i = 0; i &amp;lt; n; i++)
        scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[i]);
    le = init(0, n / 2); // 20 -&amp;gt; 2^20
    ri = init(n / 2, n); // 20 -&amp;gt; 2^20

    for (int i = 0, pw = 1; i &amp;lt;= 8; i++, pw *= 10)
    {
        reorder(le, pw); // -&amp;gt; reorder -&amp;gt; cmp now -&amp;gt; check
        reorder(ri, pw); // -&amp;gt; reorder -&amp;gt; cmp now -&amp;gt; check
        // now -&amp;gt; [4 * 10^pw, 5 * 10^pw - 1]
        // or: -&amp;gt; [14 * 10^pw, 15 * 10^pw - 1]
        ans += calc(5 * pw - 1) - calc(4 * pw - 1) + calc(15 * pw - 1) - calc(14 * pw - 1);
    }
    printf(&amp;quot;%lld&amp;quot;, ans);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;7 月 15 日&lt;/h2&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【题解】7月11日比赛题解备份</title><link>https://saro.pub/5ff0ff6</link><guid isPermaLink="true">https://saro.pub/5ff0ff6</guid><description>7月11日比赛题解备份，包含重复字符串、KMP算法等题目解析</description><pubDate>Wed, 12 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;&lt;strong&gt;一．重复字符串&lt;/strong&gt;(powerstr):&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;30&lt;/strong&gt;分做法：枚举&lt;/p&gt;
&lt;p&gt;长度范围只有 1000 时，我们可以枚举 k， 取字符串第 1 个到第 k 个字符作为子串 T，然后去验证剩下的字符串是否都是 T 重复得来&lt;/p&gt;
&lt;p&gt;时间复杂度 O(n^2)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;100&lt;/strong&gt;分做法：&lt;strong&gt;KMP&lt;/strong&gt;，&lt;strong&gt;Next&lt;/strong&gt;数组&lt;/p&gt;
&lt;p&gt;假设字符串为 S，长度为 N，子串 T 重复 K 次后得到串 S，那么 T 的长度一定为 L = N/K(要整除)，则$T = S[1...L]$，将 S 拆分成 K 份，每份长度为 L，则有&lt;/p&gt;
&lt;p&gt;$$S[1...L] = S[L+1...2L] = S[2L+1...3L] = ... = S[(K-1)L+1...KL]$$&lt;/p&gt;
&lt;p&gt;由于要保证 K 最大，势必 L 要取最小，所以根据 Next 函数的定义，有$Next[KL] = (K-1)L;$&lt;/p&gt;
&lt;p&gt;即$Next[N] = N - L$，所以$L = N - Next[N];$&lt;/p&gt;
&lt;p&gt;但是得出的长度 L 还要保证能被 N 整除，所以如果不能整除说明 L = N，即 K = 1；而如果能整除，那么$K = N / (N - Next[N]);$&lt;/p&gt;
&lt;p&gt;因而我们只要对字符串 S 做一趟 KMP，对其求 Next 数组，剩下的就是上述结论&lt;/p&gt;
&lt;p&gt;时间复杂度$O(n)$&lt;/p&gt;
&lt;h2&gt;二．Fibonacci 进制(fib):&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;100&lt;/strong&gt;分做法：&lt;strong&gt;DP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;N 很大，先尝试几个小数据。可以发现，每个 Fibonacci 表示的长度，和 Fibonacci 数大小有关（1,2,3,5,8,13,21……），这些值最高位上是 1，后面全是 0，即第一个 Fibonacci 表示长度为 i 的数是$fib[i]$。因此按照长度对 Fibonacci 表示进行分类，长度为 i 的数有$fib[i-1]$个，看做是第 i 组。那么第 i 组的总长度$len[i] = fib[i-1]*i$。&lt;/p&gt;
&lt;p&gt;接下来，看 1 出现的次数。长度为 i 的数的表示中，第 i-1 位肯定是 0。&lt;/p&gt;
&lt;p&gt;$Sum[i]$表示前 i 组的 1 的个数。可以得到如下式子：$Sum[i]=sum[i-1]+fib[i-1]+sum[i-2]$。第 i 组首位 1 的个数为$fib[i-1]$，$i-1$位为 0，那么最后的 i-2 位的情况，恰好为 1~i-2 组的所有情况。&lt;/p&gt;
&lt;p&gt;整体算法也就明了了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;求出 N 位所在的 Fibonacci 表示的数的长度 t&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;求 1~t 中 Fibonacci 表示中 1 出现的个数。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;继续求解剩余字符的 1。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;最后一个暴力扫描&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;例如求解得到最后对应 Fibonacci 表示为 x=100100&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;对于长度为 1~5 的 Fibonacci 表示中 1 的个数为$sum[5]$，i&amp;lt;=100000 中 1 的个数即为$sum[5]+1$。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;对于 100000&amp;lt;i&amp;lt;=100100,最高位都是 1，共有$fib[3]$个，后三位 1 的个数为$sum[2]+1$。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;1 的总个数为$sum[5]+1+fib[3]+sum[2]+1$。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最后细节比较多，要实现的仔细一些。&lt;/p&gt;
&lt;h2&gt;三.发奖金(reword):&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;100*分做法：组合&lt;/strong&gt;+&lt;strong&gt;质因数分解&lt;/strong&gt;+&lt;strong&gt;逆元&lt;/strong&gt;+&lt;strong&gt;中国剩余定理&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;题目相当于求 n 个数的和不超过 m 的方案数。
首先如果是恰好等于 m，那么就等价于求方程$x_{1} + x_{2} + ... + x_{n} = m$的解的个数，利用插板法可得到公式：$C(n + m - 1, m)$
现在要求不大于 m 的，相当于对$i = 0 ... m$对$C(n + i - 1, i)$求和，根据 pascal 递推式可以得到答案为$C(n + m, m)$
现在就需要求$C(n + m, m) \mod P$&lt;/p&gt;
&lt;p&gt;这里我们主要要解决如何快速计算$n! \mod P$&lt;/p&gt;
&lt;p&gt;以及当分母有$m! \mod P$的情况&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;当 n,m 都比较小的时候，同时 P 为比较大的素数时，可以直接利用逆元求解，当 n,m 比较大的时候，见下面两种情况（以下参考魏铭 2011 年国家集训队作业）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;当 P 为素数的情况：&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我们发现$n! \mod P$的计算过程是以 P 为周期的，举例如下：&lt;/p&gt;
&lt;p&gt;$$n = 10, P = 3$$
$$n! = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10$$
$$= 1 * 2 * 4 * 5 * 7 * 8 * 10 *  3 * 6 * 9$$
$$= (1 * 2)^3 * 3^3 * (1 * 2 * 3)$$&lt;/p&gt;
&lt;p&gt;最后一步中的$1 * 2 *3$可递归处理。&lt;/p&gt;
&lt;p&gt;因为 P 的倍数与 P 不互质，所以 P 的倍数不能直接乘入答案，应当用一个计数器变量 cnt 来保存答案中因子 P 的个数。&lt;/p&gt;
&lt;p&gt;我们提前预处理出$fac[i] = 1 * 2 * 3 * … * (i – 1) * i \mod P$，函数 calcfac(n)返回$n! \mod P$的值，power(a, b, c)返回$a^b \mod c$的值，可用快速幂在$O(logb)$的时间内完成。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;typedef long long LL;
LL calcfac(LL n)
{
    if (n &amp;lt;P) return fac[n];
    LL seg = n / P, rem = n % P;
    LL ret = power(fac[P - 1], seg, P); //fac[P - 1]重复出现了seg次
    ret = ret * fac[rem] % P; //除去seg次fac[P – 1]外，剩下的零头
    cnt += n / P; //提出n / P个因子P
    ret = ret * calcfac(n / P) % P; //递归处理
    return ret;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;于是$n! \mod p$的计算可在$O(logn)$的时间内解决。&lt;/p&gt;
&lt;p&gt;对于分母中的 n!，方法是相似的。若 a 为正整数，$a * a’ = 1(\mod P)$，那么我们称 a’为 a 的逆元，记作 a-1，并有$b / a(\mod P) = b * a-1(\mod P)$。这样我们只需要把预处理$fac[i] = 1 * 2 * 3 * … * (i – 1) * i \mod P$更换为$inv[i] = 1-1 * 2-1 * 3-1* … * (i – 1) -1 * i-1 \mod P$，其计算方法与分子中的 n!计算相差无几，具体可参考我的代码。求逆元可以使用扩展欧几里得算法。&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;当 p 为合数时&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;对于某些测试点，我们发现 P 分解后只有 2 个因子，并且不相同，所以我们可以对这两个因子分别运行算法 2，最后用中国剩余定理合并即可。&lt;/p&gt;
&lt;p&gt;对于剩下的数据，可以对 P 进行质因数分解，得到$P = p1^{c1} * p2^{c2} * … * pt^{ct}$。&lt;/p&gt;
&lt;p&gt;对于每个$1≤i≤t$，以$pi^{ci}$为模运行算法 2，最后用中国剩余定理合并。这里$pi^{ci}$不一定为质数，不过只需对原算法稍加修改即可。令$P = pi^{ci}$，$fac[i] = 除去pi的倍数外i的阶乘$。例如$pi = 3,ci = 2$，那么$fac[10] = 1 * 2 * 4 * 5 * 7 * 8 * 10$，除去了 3 的倍数 3、6 和 9。阶乘依然是以 P 为周期的，calcfac(n)与算法 2 主体相同，只是统计因子个数时，应使用$ret += n / pi$而不是$ret += n / P$，递归处理时也应该是 calcfac(n / pi)而不是 calcfac(n / P)。&lt;/p&gt;
&lt;p&gt;时间复杂度$O(t * n)$&lt;/p&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【数论】gcd、exgcd、质数筛法、逆元与同余方程组复习（已废弃）</title><link>https://saro.pub/e1ed6d2</link><guid isPermaLink="true">https://saro.pub/e1ed6d2</guid><description>gcd、exgcd、质数筛法、逆元与同余方程组数论复习笔记（已废弃）</description><pubDate>Tue, 04 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;这是我面对自己稀烂不堪的数论后奋笔疾书写出来的一篇复习笔记。算是对我前几个月学习&lt;strong&gt;过&lt;/strong&gt;的初等数论的一次总结整理，一个下午的时间可能不够全面，望各位大佬海涵。&lt;/p&gt;
&lt;h2&gt;最大公约数&lt;/h2&gt;
&lt;p&gt;这里我们使用&lt;code&gt;欧几里得算法&lt;/code&gt;（也称为辗转相除法）来计算最大公约数——简称“gcd”。因为是复习笔记，这里就不详细讲解原理了，记住公式即可。&lt;/p&gt;
&lt;p&gt;算法流程： $gcd( m , n ) = gcd( n , m % n)$&lt;/p&gt;
&lt;p&gt;那么直到最后变成$gcd(m , 0)=m$,m 最后的取值也就是 m 和 n 的最大公约数。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;用于计算 gcd(m,n)的过程：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如果 n=0，返回值 m 则作为结果。通过计算过程结束，否则进入第二步。&lt;/li&gt;
&lt;li&gt;第二步：m 除以 n，将余数赋值给 r；&lt;/li&gt;
&lt;li&gt;第三步：将 n 的值赋给 m，将 r 的值赋值给 n。返回第一步&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;我们通过三元运算符&lt;code&gt;?:&lt;/code&gt;很容易写出函数 gcd：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;int gcd(int m, int n)
{
    return n == 0 ? m : gcd(n, m % n);
    // 翻译如下
    // if(n == 0) return m;
    // return gcd(n, m % n);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;例题 P2441&lt;/h3&gt;
&lt;p&gt;非常水的一道绿题。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;题目链接：&lt;a href=&quot;https://www.luogu.com.cn/problem/P2441&quot;&gt;P2441 角色属性树 - 洛谷&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;cmath&amp;gt;
#define N 200005

using namespace std;

int fa[N]; // father
int val[N];
int n, k;

int gcd(int m, int n)
{
    return n == 0 ? m : gcd(n, m % n);
}

int dfs(int crd, int w)
{
    int d = -1;
    int v = fa[crd];
    if(!v) return -1;
    if(gcd(w, val[v]) &amp;gt; 1) d = v;
    else d = dfs(v, w);
    return d;
}

int main()
{
    scanf(&amp;quot;%d%d&amp;quot;, &amp;amp;n, &amp;amp;k);
    for(int i = 1; i &amp;lt;= n; i++) scanf(&amp;quot;%d&amp;quot;, &amp;amp;val[i]);
    for(int i = 1; i &amp;lt; n; i++)
    {
        int u, v;
        scanf(&amp;quot;%d%d&amp;quot;, &amp;amp;u, &amp;amp;v);
        fa[v] = u;
    }
    for(int i = 1; i &amp;lt;= k; i++)
    {
        int u, crd;
        scanf(&amp;quot;%d%d&amp;quot;, &amp;amp;u, &amp;amp;crd);
        if(u == 1) printf(&amp;quot;%d\n&amp;quot;, dfs(crd, val[crd]));
        else
        {
            int a;
            scanf(&amp;quot;%d&amp;quot;, &amp;amp;a);
            val[crd] = a;
        }
    }
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;扩展欧几里得算法&lt;/h2&gt;
&lt;p&gt;假设我们现在有一个方程$am + bn = gcd(m, n)$，求 a，b 的解。&lt;/p&gt;
&lt;h3&gt;计算特解&lt;/h3&gt;
&lt;p&gt;扩展欧几里得算法可以解决这个问题——“简称 exgcd”。我们在 gcd 函数中添加另外两个参数 a 和 b，代表方程中的 a 和 b。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;算法流程是这样的：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先按正常方法算出 gcd(m, n)&lt;/li&gt;
&lt;li&gt;回溯时遵从以下公式
从回溯时开始，初始化 a = 1; b= 0;&lt;ol&gt;
&lt;li&gt;a = b;&lt;/li&gt;
&lt;li&gt;b = a - b * (m / n);&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;最后返回 gcd(m, n)&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;因为我们计算时 a 与 b 相互引用，加上最后回溯时返回最大公约数，我们定义两个局部变量 c 与 x 当工具人协助我们完成算法。同时为了获取此方程的一个特解，我们把 a 与 b 引用(&amp;amp;)。&lt;/p&gt;
&lt;p&gt;代码如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;int exgcd(int m, int n, int&amp;amp; a, int&amp;amp; b) // 回溯时改变a与b的原值
{
    if(n == 0) { a = 1; b = 0; return m; } // n = 0计算结束，回溯开始
    int d = exgcd(n , m % n, a, b); // 工具人d存值
    int c = a; a = b; b = c - b * (m / n); // 工具人c
    return d;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;计算通解&lt;/h3&gt;
&lt;p&gt;这时候我们得到的 a 和 b 只不过是一组特解，我们可以通过 d 写出通解：&lt;/p&gt;
&lt;p&gt;$$ \left(a:+:\frac{b}{d}k,:b:+:\frac{a}{d}k\right):k\epsilon\mathbb{Z} $$&lt;/p&gt;
&lt;h3&gt;扩展情况&lt;/h3&gt;
&lt;p&gt;假设要求方程$am + bn = g$，求 a，b 的解。&lt;/p&gt;
&lt;p&gt;我们可以先按原来的方法，求出$am + bn = gcd(m, n)$的解。&lt;/p&gt;
&lt;p&gt;然后把 a，b，gcd(m, n)同时乘上 g / gcd(m, n)就可以了。注意$gcd(m, n) | g$。&lt;/p&gt;
&lt;h2&gt;质数筛法&lt;/h2&gt;
&lt;p&gt;很蠢的埃式筛我们就不扯了，它浪费时间的地方就是重复筛——比如 15 被 3 和 5 筛了两次。&lt;/p&gt;
&lt;p&gt;我们直接拿出欧拉筛，规定每个数字只被它最小的质因数筛去，复杂度降为$O(N)$。&lt;/p&gt;
&lt;p&gt;直接上代码：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#define N 100005
bool not_prime[N];
int prime[N], tot;
for(int i = 2; i &amp;lt;= N; i++)
{
    if(!not_prime[i]) primt[++tot] = i;
    for(int j = 1; j &amp;lt;= n &amp;amp;&amp;amp; i * prime[j] &amp;lt;= N; j++)
    {
        not_prime[i * prime[j]] = true;
        if(i % prime[j] == 0) break;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;逆元&lt;/h2&gt;
&lt;p&gt;逆元是一个很神奇的东西，你可以理解成广义上的倒数。&lt;/p&gt;
&lt;p&gt;什么是倒数？任意一个数乘上一个倒数，结果为 1，相当于除了它自己。那么举个例子，有些题目要求你对答案取模，众所周知乘法加法一边运算一边取模是不会影响正确性的，但是要是来个除，你就不得不把它计算完全之后再取模——有可能爆 long long。&lt;/p&gt;
&lt;p&gt;那么逆元就出现了！逆元就是一个数在一个取模环境下的倒数，乘上它就等于除以原来的数字，就与加法乘法一样了。我们这样定义逆元：&lt;/p&gt;
&lt;p&gt;假设 a，b 满足以下条件（模 m 意义下的等价类集合）&lt;/p&gt;
&lt;p&gt;$$ a,b\epsilon\mathbb{Z}_m $$&lt;/p&gt;
&lt;p&gt;同时满足$ab:\equiv:1:(\mod:m)$，我们就说 b 是 a 的逆元，或者 a 是 b 的逆元。是不是很简单？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;逆元可不只有一个哦！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;求解逆元&lt;/h3&gt;
&lt;p&gt;求解逆元有很多方法，这里我们就只联系上下文，讲一下如何通过 exgcd 求解逆元。&lt;/p&gt;
&lt;p&gt;我们简单想一想，假设我们要求 a 的逆元 b，如果$ab \mod m = 1$，是不是说明$ab - mk = 1$呢？而这里我们的&lt;code&gt;a&lt;/code&gt;和&lt;code&gt;m&lt;/code&gt;是已知的，我去，这不就是$am + bn = g$的形式吗！你说一个减一个加？这有什么关系？不就相当于$am + (-k)m = 1$吗？其实是没有区别的。&lt;/p&gt;
&lt;p&gt;那就轻轻松松了，结合我们之前 exgcd 的铺垫，我们直接使用&lt;code&gt;exgcd(a, m, b, k)&lt;/code&gt;运行完毕之后&lt;code&gt;b/d&lt;/code&gt;就是 a 的一个逆元了。&lt;del&gt;当然如果&lt;code&gt;b/d&lt;/code&gt;除不尽那就寄啦&lt;/del&gt;。&lt;/p&gt;
&lt;p&gt;但是我说了，逆元并不只有一个，要是题目要求是最小正整数的逆元怎么办？&lt;/p&gt;
&lt;p&gt;直接上公式：&lt;code&gt;a的逆元 = (b % m + m) % m;&lt;/code&gt;至于为什么，请读者自行证明吧（毕竟是复习笔记）。&lt;/p&gt;
&lt;h3&gt;卢卡斯定理/Lucas 定理&lt;/h3&gt;
&lt;p&gt;假设有一道题目让你求${C}_{n+m}^{n}\mod p$的值，你会怎么求？&lt;/p&gt;
&lt;p&gt;也许你会不屑一顾——我逆元在手，不轻轻松松？&lt;/p&gt;
&lt;p&gt;但是你忘记了一件事……如果有一部分刚好是 p 的倍数，那不就寄啦？&lt;/p&gt;
&lt;p&gt;呵呵，这时候就要请出我们的 Lucas 定理了，专门来解决这种组合数取模的题目。&lt;/p&gt;
&lt;h4&gt;实现&lt;/h4&gt;
&lt;p&gt;假设 A、B 是非负整数，p 是质数。AB 写成 p 进制：$A=a[n]a[n-1]...a[0]$，$B=b[n]b[n-1]...b[0]$。则组合数$C(A,B)$与$C(a[n],b[n])*C(a[n-1],b[n-1])..C(a[0],b[0]) \mod p$同余。即：&lt;/p&gt;
&lt;p&gt;$Lucas(n,m,p)=C(n%p,m%p)*Lucas(n/p,m/p,p)$&lt;/p&gt;
&lt;p&gt;简言之，Lucas 定理是用来求 $C(n,m) \mod p$，p 为素数的值。&lt;/p&gt;
&lt;h4&gt;例题 P3807&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;题目链接：&lt;a href=&quot;https://www.luogu.com.cn/problem/solution/P3807&quot;&gt;P3807 【模板】卢卡斯定理/Lucas 定理&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include&amp;lt;iostream&amp;gt;
#include&amp;lt;algorithm&amp;gt;
#include&amp;lt;cstdio&amp;gt;
#define N 100005

using namespace std;

int t, p;
int n, m;
long long a[N], b[N];

long long lucas(int x,int y)
{
  if(x &amp;lt; y) return 0;
  else if(x &amp;lt; p) return b[x] * a[y] * a[x - y] % p;
  else return lucas(x / p, y / p) * lucas(x % p,y % p) % p;
}

int main()
{
  scanf(&amp;quot;%d&amp;quot;, &amp;amp;t);
  while(t--)
  {
    scanf(&amp;quot;%d%d%d&amp;quot;, &amp;amp;n, &amp;amp;m, &amp;amp;p);
    a[0] = a[1] = b[0] = b[1] = 1;
    for(int i = 2; i &amp;lt;= n + m; i++) b[i] = b[i - 1] * i % p; // 处理成p进制
    for(int i = 2; i &amp;lt;= n + m; i++) a[i] = (p - p / i) * a[p % i] % p;
    for(int i = 2; i &amp;lt;= n + m; i++) a[i] = a[i - 1] * a[i] % p;
    printf(&amp;quot;%lld\n&amp;quot;, lucas(n + m, m));
  }
  return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;同余方程组&lt;/h2&gt;
&lt;p&gt;几个$a:\equiv:b:(\mod:m)$叠在一起就变成了同余方程组。&lt;/p&gt;
&lt;p&gt;例如下面的同余方程组：&lt;/p&gt;
&lt;p&gt;$$ \begin{cases}{a:\equiv:b_1:(\mod:m_1)} \ {a:\equiv:b_2:(\mod:m_2)} \ {a:\equiv:b_3:(\mod:m_3)}\end{cases} $$&lt;/p&gt;
&lt;p&gt;我承认这是一个很吓人的东西，但是推导也不难。&lt;/p&gt;
&lt;p&gt;虽然可以用中国剩余定理做，但是可惜它只能解决模数互质的情况。&lt;/p&gt;
&lt;p&gt;那么我们可以换一种思路，合并同余方程组。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;del&gt;可惜过程我忘光了呜呜呜，老师救我数论&lt;/del&gt;
有时间再补上推理吧——2023/07/05&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;直接上代码：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意暴力计算会超 long long，这里我用了龟速幂等方法成功把其压在了 long long 内。嫌弃麻烦的同学可以直接使用__int128 或者高精度，这里不再赘述。&lt;del&gt;我故意保留了一部分注释，让你知道这是我打的&lt;/del&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cmath&amp;gt;
#define ll long long

using namespace std;

ll Exgcd(ll a, ll b, ll &amp;amp;x, ll &amp;amp;y)
{
    if (b == 0)
    {
        x = 1, y = 0;
        return a;
    }
    ll d = Exgcd(b, a % b, x, y);
    ll z = x; x = y; y = z - (a / b) * y;

    return d;
}

ll qmul(ll a, ll b, ll p)
{
    a %= p;
    b = (b % p + p) % p;
    ll res = 0;
    while (b)
    {
        if (b &amp;amp; 1) { res = (res + a) % p; }
        a = (a + a) % p;
        b &amp;gt;&amp;gt;= 1;
    }
    return res;
}

int main()
{
    ll a1, a2;
    ll b1, b2;
    ll n = 0;
    //freopen(&amp;quot;1.txt&amp;quot;,&amp;quot;r&amp;quot;,stdin);
    scanf(&amp;quot;%lld&amp;quot;, &amp;amp;n);
    scanf(&amp;quot;%lld%lld&amp;quot;, &amp;amp;a1, &amp;amp;b1);
    //printf(&amp;quot;1:\nX = %lld (mod %lld)\n&amp;quot;, b1, a1);
    for(ll i = 2; i &amp;lt;= n; i++)
    {
        scanf(&amp;quot;%lld%lld&amp;quot;, &amp;amp;a2, &amp;amp;b2);
        //printf(&amp;quot;2:\nX = %lld (mod %lld)\n&amp;quot;, b2, a2);
        ll y1 = 0, y2 = 0;
        //a1 * y1 - a2 * y2 = b2 - b1
        //y1 y2 dont know
        ll d = Exgcd(a1, a2, y1, y2);

        ll cnt = a2 / d;
        //y1 = y1 / d;
        //y1 = (y1 % cnt + cnt) % cnt;
        //y1 = (y1 = y1 / d * (b2 - b1) % cnt + cnt) % cnt;
        //y1 = (qmul(b2 - b1, y1, cnt) + cnt) % cnt;
        y1 = (qmul(y1, ((b2 - b1) / d % a2 + a2) % a2, cnt) + cnt) % cnt;

        b1 = y1 * a1 + b1;
        a1 = (a1 * cnt);
        b1 = (b1 % a1 + a1) % a1;
        //printf(&amp;quot;AND:\nX = %lld (mod %lld)\n&amp;quot;, b1, a1);
    }

    //printf(&amp;quot;X = %lld k + %lld \n&amp;quot;, a1, b1);

    ll ans = (b1 % a1 + a1) % a1;
    printf(&amp;quot;%lld&amp;quot;, ans);

    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【图论】割边与割点</title><link>https://saro.pub/8bd6bbb</link><guid isPermaLink="true">https://saro.pub/8bd6bbb</guid><description>Tarjan算法求解无向图割边与割点问题</description><pubDate>Tue, 27 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;概念&lt;/h2&gt;
&lt;p&gt;在无向图中，
割点：去掉一个点及与其相邻的所有边，无向图中的&lt;a href=&quot;https://www.saroprock.com/post/3a57de4f.html&quot;&gt;连通分量&lt;/a&gt;增加，则称该点为割点。
割边：去掉一条边，无向图中的连通分量增加，则称该边为割边。
割点与割边的关系&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;有割点不一定有割边，有割边一定有割点。&lt;/li&gt;
&lt;li&gt;割边的两个端点中一定有一个是割点。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;求解思路&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;割点与割边的求解都使用&lt;a href=&quot;https://www.saroprock.com/tags/Tarjan/&quot;&gt;Tarjan&lt;/a&gt;算法实现&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;求割边&lt;/h3&gt;
&lt;p&gt;求解割边的方法与求解有向图中的强连通分量十分相似，我们可以在原有基础上修改。为什么这样说呢？&lt;/p&gt;
&lt;h4&gt;理论前提&lt;/h4&gt;
&lt;p&gt;我们回顾一下割边的定义，如果去掉这条边，这个图变成了不连通的两个独立的部分。这说明这两部分之间只通过这一条边连接，反过来说就是有两条边连接的两个部分中不存在割边。这就与我们有向图中的强连通分量很像了，我们也可以通过 DFS 树+顶点表示法来表示一个割边。&lt;/p&gt;
&lt;p&gt;虽然这是一幅无向图，但实际上在 DFS 的过程中就已经有了 DFS 序，我们也与有向图的 DFS 树一样有树边与非树边的区别。那么我们现在所有的形式其实与求解强连通分量一样了：给每个结点打上它的 DFS 序和可以回到的结点序，如果两个不一样，说明它与它能回到的结点之间有两条通路连接——说明它们两个之间的边都不可能是割边，因为树边已经连接了里面的所有点，加上这一条非树边，那么每个点到其他点都有了两条通路，不管割掉那一条边都不管用。&lt;/p&gt;
&lt;h4&gt;算法实现&lt;/h4&gt;
&lt;p&gt;因为是无向边，我们还要注意一个小问题——重边。不同于有向图中的重边，这个重边是会实实在在影响到我们的。比如原来两个点只有一条边相连，这样一条边显然是一条割边。但如果是重边呢？那它就不是割边了，我们需要特判这种情况，有两个选择：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;使用 vector，给每一条边加上 id 值，注意添加无向边时两个有向边的结点是相同的，因为它们本质上是一条无向边：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;vector&amp;lt;vector&amp;lt;pair&amp;lt;int, int&amp;gt;&amp;gt;&amp;gt; g(N); // 建图
for(auto i : g[j]); // 遍历
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;换用链式前向星，因为链式前向星自带 id，不用多占空间速度还快，是很好的选择。不过由于一条无向边使用两条有向边&amp;quot;聚合&amp;quot;而成，我们先把边数 tot 赋值为 1，这样只需要通过按位异或就可以判断其属于哪一个结点了：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;int tot = 1; // 注意赋值为一
struct node
{
    int ver;
    int nxt;
} edge[N * 2];

void add(int u, int v)
{
    edge[++tot].ver = v;
    edge[tot].nxt = head[u];
    head[u] = tot;
}

//示例，判断 id 为 a 和 b 的结点是不是同一条无向边
if(a == (b ^ 1))......
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;下面就好办了，与求解强连通分量一样的写法。不过注意我们可以优化一个小地方，在溯回的时候我们可以直接判断&lt;code&gt;if(up[y] &amp;gt; dfn[x])&lt;/code&gt;如果是真的就代表下面的结点回不到x结点——也就是说x结点与y结点之间隔了一条割边，我们直接添加它就可以了：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;namespace e_DCC
{
    vector&amp;lt;int&amp;gt; dcc;
    int dfn[N], up[N], crd = 0;

    void dfs(int x, int from)
    {
        dfn[x] = up[x] = ++crd;
        for(int i = head[x]; i; i = edge[i].nxt)
        {
            int y = edge[i].ver;
            if(!dfn[y])
            {
                dfs(y, i);
                up[x] = min(up[x], up[y]);
                if(up[y] &amp;gt; dfn[x])
                    dcc.push_back(i);
            }
            else if (i != (from ^ 1))
                up[x] = min(up[x], up[y]);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;求割点&lt;/h3&gt;
&lt;h4&gt;不同之处&lt;/h4&gt;
&lt;p&gt;求割点的方法与割边几乎一致，但请注意下面的情况：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img1.imgtp.com/2023/06/27/TmLIqPx7.png&quot; alt=&quot;例子&quot;&gt;&lt;/p&gt;
&lt;p&gt;首先我们很容易的发现如果按照原来的算法这个图啥也不是，因为每个点都可以回到出发点 1，可图上明明有 4、7 这两个割点啊！所以我们应该把原来的&lt;code&gt;up[x] = min(up[x], up[y]);&lt;/code&gt;改成&lt;code&gt;up[x] = min(up[x], dfn[y]);&lt;/code&gt;，防止结点通过多次跳跃割点回到上面。&lt;/p&gt;
&lt;p&gt;而如果我们还是按照原来的判定&lt;code&gt;if(up[y] &amp;gt; dfn[x])&lt;/code&gt;，就会发现当&lt;code&gt;up[y] = dfn[x]&lt;/code&gt;时就漏情况了。所以我们再把缺失的等于号加上。&lt;/p&gt;
&lt;p&gt;然而这还没有完，注意下面的情况，结点一完美满足我们的所有要求，可是它不是割点啊！因此我们还需要特判 DFS 进入的结点，只有当它的子节点数量大于等于二时才是割点，否则取消它的割点资格。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img1.imgtp.com/2023/06/27/Cdl8IYev.png&quot; alt=&quot;示例2&quot;&gt;&lt;/p&gt;
&lt;h4&gt;算法实现&lt;/h4&gt;
&lt;p&gt;根据我们上面的推导，很容易通过 e_DCC 改出 v_DCC 的算法：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;bool cut[N]; // 第i个结点是不是割点

namespace v_DCC
{
    int dfn[N], up[N], crd = 0;
    bool cut[N];

    void dfs(int x, int from)
    {
        dfn[x] = up[x] = ++crd; // init x
        int ch = 0;
        for(int i = head[x]; i; i = edge[i].nxt)
        {
            int y = edge[i].ver;
            if(!dfn[y]) // y not have
            {
                dfs(y, i); ch++;
                up[x] = min(up[x], up[y]);
                if(up[y] &amp;gt;= dfn[x]) cut[x] = true;
            }
            else if (i != (from ^ 1))
                up[x] = min(up[x], dfn[y]);
        }
        if(from == 0 &amp;amp;&amp;amp; ch &amp;lt;= 1) cut[x] = false;
        ans += cut[x];
    }
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【图论】双连通分量</title><link>https://saro.pub/177aa7a</link><guid isPermaLink="true">https://saro.pub/177aa7a</guid><description>双连通分量详解，无向图双连通分量与Tarjan算法</description><pubDate>Tue, 27 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;在学习双连通分量之前请先了解强连通分量，有助于理解双连通分量，其中相同的概念不再赘述。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我的强连通分量笔记在：&lt;a href=&quot;https://www.saroprock.com/post/3a57de4f.html&quot;&gt;【图论】强连通分量&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;概念&lt;/h2&gt;
&lt;p&gt;强连通分量是对于有向图而言的，而双连通分量是对于&lt;strong&gt;无向图&lt;/strong&gt;而言的。&lt;/p&gt;
&lt;h3&gt;割边与割点&lt;/h3&gt;
&lt;p&gt;在无向图中，
割点：去掉一个点及与其相邻的所有边，无向图中的连通分量增加，则称该点为割点。
割边：去掉一条边，无向图中的连通分量增加，则称该边为割边。
割点与割边的关系：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;有割点不一定有割边，有割边一定有割点。&lt;/li&gt;
&lt;li&gt;割边的两个端点中一定有一个是割点。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;详细内容请阅读：&lt;a href=&quot;https://www.saroprock.com/post/eda2fd40.html&quot;&gt;【图论】割边与割点&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;什么是双连通分量&lt;/h3&gt;
&lt;p&gt;根据上面割边与割点的定义，我们可以把双连通分量分成&lt;strong&gt;边双&lt;/strong&gt;和&lt;strong&gt;点双&lt;/strong&gt;两种。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;边双：对于一个图，假如&lt;strong&gt;仅仅对于该图而言&lt;/strong&gt;其中&lt;strong&gt;没有割边&lt;/strong&gt;，那么我们称这个图是&lt;strong&gt;边双联通的&lt;/strong&gt;。那么一个极大的边双连通子图就是母图的&lt;strong&gt;边双连通分量&lt;/strong&gt;。也就是说在这个子图中任意删去一条边，每一个点之间仍然是连通的。&lt;/li&gt;
&lt;li&gt;点双：对于一个图，假如&lt;strong&gt;仅仅对于该图而言&lt;/strong&gt;其中&lt;strong&gt;没有割点&lt;/strong&gt;，那么我们称这个图是&lt;strong&gt;点双联通的&lt;/strong&gt;。那么一个极大的点双连通子图就是母图的&lt;strong&gt;点双连通分量&lt;/strong&gt;。也就是说在这个子图中任意删去一个点和那些与之相邻的边，每一个点之间仍然是连通的。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;需要注意的是点双与强连通分量和边双不同，它会与其他点双相交，需要注意&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;求双连通分量&lt;/h2&gt;
&lt;h3&gt;先观察&lt;/h3&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【图论】强连通分量</title><link>https://saro.pub/4b3082c</link><guid isPermaLink="true">https://saro.pub/4b3082c</guid><description>强连通分量详解，有向图强连通分量与Tarjan算法</description><pubDate>Mon, 26 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;在学习该部分之前，请熟悉此部分的概念。我们使用 Tarjan 算法求解时要用到的概念有：&lt;strong&gt;DFS 树&lt;/strong&gt;，&lt;strong&gt;DFS 森林&lt;/strong&gt;，&lt;strong&gt;DFS 序&lt;/strong&gt;，以及其中的&lt;code&gt;树边&lt;/code&gt;，&lt;code&gt;前向边&lt;/code&gt;，&lt;code&gt;返祖边&lt;/code&gt;与&lt;code&gt;横叉边&lt;/code&gt;。了解它们有助于读者理解 Tarjan 的工作原理。&lt;/p&gt;
&lt;h2&gt;概念&lt;/h2&gt;
&lt;h3&gt;子图的定义&lt;/h3&gt;
&lt;p&gt;假设有$G:=&amp;lt;V,E&amp;gt;G^{\prime}=&amp;lt;V^{\prime},E^{\prime}&amp;gt;$两个图$V^{\prime}\subseteq V$且$E^{\prime}\subseteq E$，则我们称$G&amp;#39;$是$G$的子图。记作$G^{\prime}\subseteq G$。&lt;/p&gt;
&lt;h3&gt;什么是连通分量&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;无向图中，如果在子图$G&amp;#39;$中所有的结点$u$与$v$之间都有&lt;code&gt;通路&lt;/code&gt;，且无法再加入任何一个新的点使之满足，则我们称子图$G&amp;#39;$是母图的一个&lt;code&gt;连通分量&lt;/code&gt;。（此时$G&amp;#39;$是一个极大图）&lt;/li&gt;
&lt;li&gt;有向图中，若仍然满足上述定义，则称子图$G&amp;#39;$是母图的一个&lt;code&gt;强连通分量&lt;/code&gt;。（简称&lt;code&gt;SCC&lt;/code&gt;）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Tarjan 算法&lt;/h2&gt;
&lt;h3&gt;理论前提&lt;/h3&gt;
&lt;p&gt;因为每一个强连通分量都不可以再加入任意一个新的点，显然每一个强连通分量都是&lt;strong&gt;独立&lt;/strong&gt;的，不存在相交的情况。而且强连通分量作为一个子图，显然也是&lt;strong&gt;DFS 树&lt;/strong&gt;中的一颗子树，自然地，我们可以通过对 DFS 树不断剪切 SCC 达到求解 SCC 的目的。&lt;/p&gt;
&lt;p&gt;那么什么时候要剪去 SCC 呢？我们分析剪切 DFS 树的过程，首先我们要找到一个 SCC 中 DFS 树的顶点，这个顶点是 SCC 的入口，在只有树边的 DFS 树中，它在 SCC 中的入度为 0，可以代表整个 SCC，作为剪切的入口。&lt;/p&gt;
&lt;p&gt;那么问题变成了如何寻找顶点。我们知道在 DFS 树中存在&lt;code&gt;返祖边&lt;/code&gt;，同时我们知道&lt;code&gt;在环上的所有结点都是强连通分量的一部分&lt;/code&gt;，因为环上的结点都可以达到环上的任意一个点。那么我们就可以断定存在返祖边的结点一定不是顶点，因为它们对于上面的一个结点存在于同一个强连通分量中——这同时说明了这两点之间的所有结点都在同一个强连通分量中（构成了一个环）。&lt;/p&gt;
&lt;p&gt;当然，这样是不够的，因为我们还存在着横叉边，这导致 DFS 树中的不同子树存在了联系——有可能和别的子树构成环。（其实是不可能的，因为那个时候横叉边其实就是树边）&lt;/p&gt;
&lt;p&gt;试着假设情况，第一种情况就是当我们遍历到这一条横叉边时它所指向的结点已经被遍历过且没有被剪切，这说明什么？说明这个结点和指向的结点一定在一条连通的树边上。为什么呢？假设下面的情况：你说遍历 5 结点的时候 4 结点存在吗？肯定是不存在的，因为 4 就是一个顶点，在回溯的时候就被剪切了。拿遍历 3 结点的时候 2 结点存在吗？肯定也是不存在的，2 结点本身就是一个强连通分量，在回溯的时候就被剪切了。所以在这种情况下只有与 4，6，7 三个结点一样，是强连通分量，因此这个结点也不是顶点。（&lt;code&gt;实质上此时的横叉边就是返祖边&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img1.imgtp.com/2023/06/26/DGf57TS1.png&quot; alt=&quot;图示&quot;&gt;&lt;/p&gt;
&lt;p&gt;第二种情况是遍历到这一条横叉边时它所指向的结点已经被遍历过且被剪切了。那这种情况就类似与上图的 5，3 结点，基于强连通分量的独立性，这个结点与它指向的结点并无关系，直接跳过。&lt;/p&gt;
&lt;p&gt;第三种情况是结点还没有被遍历，这个就不一样了。因为是深度优先算法，这种情况是的边并不是横叉边，而是&lt;code&gt;树边&lt;/code&gt;，直接跳过。&lt;/p&gt;
&lt;p&gt;回顾处理这两种边的情况，会发现只有&lt;code&gt;结点已经被遍历过且没有被剪切&lt;/code&gt;时此结点才不是顶点——也就是存在 SCC，那么我们就好处理了，只需要一次 DFS 就可以完成。至此理论完备，实践开始。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意这中间的结点其实都是 SCC 的一部分，比如上图的 6 是 4，7 中的一部分&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;算法实现&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;关于邻接表的存图方式在&lt;a href=&quot;https://www.saroprock.com/post/e245b9b5.html&quot;&gt;【数据结构】邻接表与链式前向星&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;首先我们使用邻接表存图，之后在新的 namespace 中开始编写我们的代码：&lt;/p&gt;
&lt;h4&gt;找寻顶点&lt;/h4&gt;
&lt;p&gt;因为我们题目的结点编号不方便直接拿来使用求解顶点（因为顶点的编号可能很大也可能很小，我们不能在这里浪费时间），这里我选择定义一个$dfn$数组存贮每个结点的 DFS 序，那么越上面的结点 DFS 序越小，我们就可以使用 min 直接得到结点序了。&lt;/p&gt;
&lt;p&gt;同时定义一个数组$up$存储&lt;code&gt;一个结点能够回溯到的结点&lt;/code&gt;，也就是一个结点通过返祖边与横叉边能够回到的结点。通过上面的分析我们知道顶点的$up$就是它们自己，因此我们只需要判断$up$是否等于$dfn$就可以判断结点是不是顶点。&lt;/p&gt;
&lt;p&gt;然后由我们上面的分析，添加一个$vis$数组记录此结点有没有被剪切，那么判断条件就变成-&amp;gt;如果这个结点还没有被遍历，进入。否则判断它有没有被剪切，如果没有被剪切，就更新现在的$up$数组。&lt;/p&gt;
&lt;p&gt;最后不要忘记夹在环中间的结点，我们在 DFS 回溯的时候让他们取子节点$up$的 min——&lt;strong&gt;如果子节点可以回溯到更上面的结点，那它们也可以&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;至此我们可以写出下面的寻找代码：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; g(N); // 邻接表存图

namespace SCC
{
    int dfn[N], up[N], crd = 0;
    bool vis[N];

    void dfs(int x)
    {
        dfn[x] = up[x] = ++crd; // 初始化结点
        vis[x] = true; // 标记结点存在
        for(int y : g[x])
        {
            if(!dfn[y]) // 如果结点y没有被遍历
            {
                dfs(y); // 进入递归
                up[x] = min(up[x], up[y]); // 回溯时更新
            }
            else // 如果已经被更新同时存在
                if(vis[y]) up[x] = min(up[x], up[y]);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;存贮 SCC&lt;/h4&gt;
&lt;p&gt;因为是 DFS 遍历，我们不如把遍历到的结点都存在一个栈中，树边串联了整个 SCC，我们可以通过栈的出入存储 SCC。&lt;/p&gt;
&lt;p&gt;首先明确代码位置，我们要在回溯之后再执行添加操作。此时整个结点下面的结点（除了被剪切的）都已经存在栈中。如果 x 是顶点，那么由我们&lt;code&gt;顶点代表SCC&lt;/code&gt;的思路，此时 x 与它后面的部分就是 SCC 所包含的部分。得益于剪切的思路，栈中在 x 后面的部分不会包含其他的 SCC（因为在其溯回时已经剪切了）。那我们只需要不断取出栈中元素直到 x 并添加进 vector，就完成了一次添加操作。&lt;/p&gt;
&lt;p&gt;我使用数组$stk$模拟栈，用变量$top$表示栈头，声明&lt;code&gt;vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; scc&lt;/code&gt;存储 SCC。为了泛用，使用数组$bel$记录结点 y 属于哪个 SCC，下面是实现代码：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;if(dfn[x] == up[x]) // 如果此时x是顶点
{
    vector&amp;lt;int&amp;gt; c; // 新建一个临时容器
    while(true)
    {
        int y = stk[top--]; // 取出栈头
        vis[y] = false; // 去掉y的存在标记
        bel[y] = scc.size(); // 记录y属于哪个SCC
        c.push_back(y); // 添加进临时容器
        if(y == x) break; // 如果x被取出了，退出
    }
    scc.push_back(c); // 加入SCC
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;完整代码&lt;/h4&gt;
&lt;p&gt;至此，我们的 Tarjan 算法就完成了，只要&lt;code&gt;using namespace SCC&lt;/code&gt;就可以使用了。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;namespace 是一个好东西&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; g(N); // node_vector

namespace SCC
{
    vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; scc;
    // dfs_list / all_up / scc_style / now_crd
    int dfn[N], up[N], bel[N], crd = 0;
    // node_list / list_crd
    int stk[N], top = 0;
    bool vis[N];

    void dfs(int x)
    {
        dfn[x] = up[x] = ++crd; // init x
        stk[++top] = x; // enter x
        vis[x] = true;
        for(int y : g[x])
        {
            if(!dfn[y]) // y not have
            {
                dfs(y);
                up[x] = min(up[x], up[y]);
            }
            else
                if(vis[y]) up[x] = min(up[x], up[y]);
        }
        if(dfn[x] == up[x]) // if x == x
        {
            vector&amp;lt;int&amp;gt; c; // make a new scc
            while(true)
            {
                int y = stk[top--]; // pop stk
                vis[y] = false; // cut y
                bel[y] = scc.size();
                c.push_back(y);
                if(y == x) break;
            }
            scc.push_back(c);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;例题&lt;/h2&gt;
&lt;h3&gt;B3609 强连通分量&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;题目链接：&lt;a href=&quot;https://www.luogu.com.cn/problem/B3609&quot;&gt;B3609 [图论与代数结构 701] 强连通分量&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;纯纯 Tarjan 例题，题目中黑体字标出的重边和自环并不会影响 Tarjan 的正确性。&lt;/p&gt;
&lt;p&gt;需要注意的是要从小到大输出 SCC，用优先队列或者 sort 都可以，比较简单的一道绿题。&lt;/p&gt;
&lt;h3&gt;P2341 受欢迎的牛 G&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;题目链接：&lt;a href=&quot;https://www.luogu.com.cn/problem/P2341&quot;&gt;P2341 [USACO03FALL / HAOI2006] 受欢迎的牛 G&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;此题运用了 SCC 的用途之一——缩点。&lt;/p&gt;
&lt;p&gt;因为在一个 SCC 中的所有结点都可以不受限制的到达任意一个结点，所以在有些情况下可以把这一堆点的集合直接看成一个点来处理。&lt;/p&gt;
&lt;p&gt;对于缩点的方案，有下面两个：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;第一种，不建立新图，通过一个变量处理重边。下面是通过 BFS 遍历 SCC 缩点后图的示例：&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;void bfs(int i) // 入口
{
    node.push(i); // 放入队列
    while(!node.empty())
    {
        int u = node.front(); // 取出队头
        ins[u] = ++t; // 打上标记
        node.pop();
        for(int x : SCC::scc[u]) // 在这个SCC中取点
        {
            for(int y : g[x]) // 向外扩展
            {
                int nxt = SCC::bel[y]; // 获得这个结点的SCC结点
                if(ins[nxt] == t) continue; // 如果标记相同跳过
                ins[nxt] = t; // 打上相同的标记防止重复遍历
                node.push(nxt); // 放入队列
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;第二种，新建一个新图，下面是新建图的示例：&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; h(N); // 定义新图
for(int i = 1; i &amp;lt;= n; i++)
   for(int y : g[i])
       if(SCC::bel[i] != SCC::bel[y])
           h[SCC::bel[i]].push_back(SCC::bel[y]); // 加边
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;比如这一道题目，我们只需要把所有的 SCC 都缩成一个点，然后找到这个新图的焦点输出里面的元素数量就好了。关于上面两个方法，我个人更喜欢第一个，毕竟不需要新建图而且完美避免了重边和自环的影响。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;不过我们并不需要遍历图，可以用更巧妙的方法&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;因为题目中要求是&lt;code&gt;所有奶牛喜欢&lt;/code&gt;，所以我们只要找出度为零的结点就好啦！注意一下是所有奶牛喜欢，因此如果有两个出度为零的结点，此题目就无解了，注意判断！&lt;/p&gt;
&lt;p&gt;下面是统计出度和结果的代码：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;int deg[N]; // 结点N的出度
int cnt, ans; // 如果cnt &amp;gt; 1说明数据无解
for(int i = 1; i &amp;lt;= n; i++)
    for(int y : g[i]) // 如果两个SCC不同，给父节点的出度++
        if(bel[y] != bel[i]) deg[bel[i]]++;

for(int i = 0; i &amp;lt; scc.size(); i++)
    if(!deg[i]) { cnt++; ans += scc[i].size(); }

if(cnt == 1) printf(&amp;quot;%d&amp;quot;, ans);
else printf(&amp;quot;0&amp;quot;);
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【数据结构】邻接表与链式前向星</title><link>https://saro.pub/acd1d2b</link><guid isPermaLink="true">https://saro.pub/acd1d2b</guid><description>邻接表与链式前向星详解，图的存储方式与效率对比</description><pubDate>Fri, 16 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;邻接表与链式前向星更正：
使用&lt;code&gt;vector存图&lt;/code&gt;的叫做&lt;code&gt;邻接表&lt;/code&gt;
使用&lt;code&gt;数组模拟&lt;/code&gt;的叫做&lt;code&gt;链式前向星&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;邻接表（使用 vector）&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;使用邻接表的优劣：
优势：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;码量少，易操作&lt;/li&gt;
&lt;li&gt;不用担心空间，不易写错&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;劣势：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;cpp11 之前不能使用&lt;code&gt;auto v : i&lt;/code&gt;形式遍历 vector&lt;/li&gt;
&lt;li&gt;在不能开启&lt;code&gt;O2&lt;/code&gt;的题目中较慢（POJ 全占）&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h3&gt;存图方式&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;struct line // 自定义结构体
{
    int ver; // 指向的结点
    int edge; // 边的权值
    line(int v, int e) // 构造函数
    {
        ver = v;
        edge = e;
    }
};

vector&amp;lt;line&amp;gt; g[MAX]; // 新建邻接表
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;遍历方式&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;对于 C++11 后的 OJ，使用如下方式遍历：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// line是结构体的名字
// from是父节点的下标
for(line son : g[crd])
{
    // 示例代码，含义为不经过父节点
    if(son.ver == from) continue;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;对于 C++11 前的 OJ，使用如下方式遍历&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;其实这里建议使用链式前向星，因为不支持 C++11 的 OJ 很可能没有 O2&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// line是结构体名字
for (line son = g.begin(); son != g.end(); son++)
// 下略……
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;添加方式&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// N为边的数量
for(int i = 1; i &amp;lt; N; i++)
{
    int u, v, w;
    scanf(&amp;quot;%d%d%d&amp;quot;, &amp;amp;u, &amp;amp;v, &amp;amp;w);
    g[u].push_back(line(v, w));
    g[v].push_back(line(u, w));
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;链式前向星&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;使用链式前向星的优劣：
优势：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;速度快，无需&lt;code&gt;O2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;不受 C++版本限制，适用于所有题目&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;劣势：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;数组模拟链表，初学者不易理解&lt;/li&gt;
&lt;li&gt;码量多，不理解容易打错，不易 Debug&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h3&gt;存图方式&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;struct line
{
    int ver; // 指向的结点
    int next; // 下一条边
    // int edge; // 边的权值
}node[MAX * 2]; // 新建链式前向星
int head[MAX]; // 表头数组
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;遍历方式&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;for(int son = head[crd]; son; son = node[son].next)
// 下略……
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;添加方式&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// 前向星添加边（使用函数）
// tot为所有边的数量，初始值为0
void add(int u, int v/*, int edge*/)
{
    node[++tot].next = head[u];
    node[tot].ver = v;
    //node[tot].edge = edge;
    head[u] = tot;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【动态规划】背包问题</title><link>https://saro.pub/4775c68</link><guid isPermaLink="true">https://saro.pub/4775c68</guid><description>动态规划背包问题详解，01背包、完全背包与多重背包</description><pubDate>Tue, 13 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;根据&lt;a href=&quot;https://link.zhihu.com/?target=https%3A//zh.wikipedia.org/wiki/%25E8%2583%258C%25E5%258C%2585%25E9%2597%25AE%25E9%25A2%2598&quot;&gt;维基百科&lt;/a&gt;，背包问题（Knapsack problem）是一种组合优化的 NP 完全（NP-Complete，NPC）问题。问题可以描述为：给定一组物品，每种物品都有自己的重量和价格，在限定的总重量内，我们如何选择，才能使得物品的总价格最高。NPC 问题是没有多项式时间复杂度的解法的，但是利用动态规划，我们可以以伪多项式时间复杂度求解背包问题。一般来讲，背包问题有以下几种分类：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;01 背包问题&lt;/li&gt;
&lt;li&gt;完全背包问题&lt;/li&gt;
&lt;li&gt;多重背包问题&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;此外，还存在一些其他考法，例如恰好装满、求方案总数、求所有的方案等。本文接下来就分别讨论一下这些问题。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;前言链接：&lt;a href=&quot;https://zhuanlan.zhihu.com/p/93857890&quot;&gt;动态规划之背包问题系列&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;0-1 背包&lt;/h2&gt;
&lt;p&gt;世上背包千千万，无一不是 01 背包的变体
0-1 背包是学习背包问题的开始，是最简单的背包问题。你拥有的每种物品都只有一件，此时只有取与不取两种情况——也就是 0 和 1 的区别。&lt;/p&gt;
&lt;p&gt;对于容量为 V 的背包，N 件物品（重量为 M，价值为 W），每一件都可以尝试放入背包中，那么顺序就是遍历这 N 件物品，每遍历到一个新的物品，都尝试将当前物品放入背包中，看看是放入后得到的价值高还是不放的价值高，取最高者即可。要求所有物品的重量 M 之和不超过背包的容量 V。&lt;/p&gt;
&lt;p&gt;0-1 背包的一般解是使用一个二维数组$DP[N][V]$存储状态，这个二维数组中的每一个位置$DP[i][j]$代表的意思是&lt;strong&gt;前$i$个物品在容量为$j$的时候可以获取的最大价值是多少&lt;/strong&gt;。状态转移方程是：&lt;/p&gt;
&lt;p&gt;$$
DP[i][j] = max(DP[i - 1][j - M] + W, DP[i - 1][j])
$$&lt;/p&gt;
&lt;p&gt;不过这种形式已经过时了。我们很自然的可以发现每次状态转移时只与此时上一个物品，也就是$i-1$和前面的$j-M$有关，&lt;strong&gt;在$j$后面的数组是不影响的&lt;/strong&gt;。那么我们可以直接使用一维数组$DP[V]$来存储状态。对于每一次转移来说，此时未转移的$DP[j]$其实就等价与$DP[i - 1][j]$，我们只是忽略了第一维的$i - 1$。同时注意转移后并不会影响前面状态的转移，所以我们只要从后往前转移就不会对下次转移产生干扰。状态转移方程为：&lt;/p&gt;
&lt;p&gt;$$
DP[j] = max(DP[j - M] + W, DP[j])
$$&lt;/p&gt;
&lt;h3&gt;伪代码&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// 01背包问题伪代码(空间优化版)
// w[i]代表第i件物品的价值
// m[i]代表第i件物品的重量
dp[0,...,V] = 0
for i = 1,...,N // 从选择一件物品到N件物品
    for j = V,...,w[i] // 遍历所有容量(必须逆向枚举!!!)
        dp[j] = max(dp[j], dp[j − w[i]] + m[i])
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;完全背包&lt;/h2&gt;
&lt;p&gt;完全背包问题和 0-1 背包问题不同的地方在于，&lt;strong&gt;完全背包的每件物品都是无穷多件&lt;/strong&gt;，这样我们就不用像 0-1 背包一样，每次都选择不包括当前物品的背包来尝试添加当前物品（因为每件物品只能添加一次），而是可以在包括当前物品的背包中，选择继续添加当前物品。&lt;/p&gt;
&lt;p&gt;而实现完全背包也很简单：还记得刚才我们 0-1 背包中在 j 循环要中的逆向枚举的原因吗？因为如果正向枚举会就出现状态$DP[j - w[i]]$已经被转移的情况，也就是还原成二维数组后第一维已经改成 i 的情况。这与 0-1 背包的原始转移方程不符，会出现一个物品多次放入的转移。&lt;/p&gt;
&lt;p&gt;可现在这个原来的 BUG 变成了解决完全背包的密码！&lt;strong&gt;我们只需要把 0-1 背包的逆向枚举改成正向枚举就解决了完全背包问题&lt;/strong&gt;。此时一个状态可以从已经被当前状态转移的状态转移而来，而我们 i 循环枚举的就是转移的物品，那么换而言之就是一次转移可以放入多个相同的物品。状态转移方程与 0-1 背包相同：&lt;/p&gt;
&lt;p&gt;$$
DP[j] = max(DP[j - M] + W, DP[j])
$$&lt;/p&gt;
&lt;h3&gt;伪代码&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;我们只需要把逆向枚举改成正向枚举即可&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// 01背包问题伪代码(空间优化版)
// w[i]代表第i件物品的价值
// m[i]代表第i件物品的重量
dp[0,...,V] = 0
for i = 1,...,N // 从选择一件物品到N件物品
    for j = w[i],...,V // 遍历所有容量(正向枚举)
         dp[j] = max(dp[j], dp[j − w[i]] + m[i])
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;多重背包&lt;/h2&gt;
&lt;p&gt;这时候，我们的每种物品除了它的编号 I，价值 W 与重量 M 之外，我们还引入了一个性质 S，代表它的个数。那么问题就变成了：
一共有 N 种物品，第 I（I 从 1 开始）种物品的数量为 S，重量为 M，价值为 W。在总重量不超过背包承载上限 V 的情况下，能够装入背包的最大价值是多少？&lt;/p&gt;
&lt;p&gt;简单暴力的想法就是把第 I 种物品的 S 个物品变成编号为$I_{1},I_{2},I_{3}...I_{S}$的 S 个物品，然后用 0-1 背包求解，简单可行。&lt;/p&gt;
&lt;p&gt;可问题是当 N 与 S 极大时，空间与时间就受不了了，毕竟我们的时间复杂度是$O(V * \Sigma S[i])$，$\Sigma S[i]$在$10^5$级别就寄了。&lt;/p&gt;
&lt;p&gt;所以我们就要通过我们最开始接触的数据结构——变量里找思路了。为什么一串十六位二进制数就可以表示出$(-2^{16} ～ 2^{16}-1)$的十进制数呢？我们是不是也可以用类似的方法把一种物品用极小的个数拆分呢？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;用&lt;code&gt;二进制拆分&lt;/code&gt;！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;采用二进制思想的时候，把物品分为$2^0，2^1，……，2^k，S-2^{(k+1)}-1$。根据之前变量的联想，很明显这样的二进制组合可以组成 1-S 的任意数量物品，和一个一个组合是相同的。这种方法的时间复杂度是$O(V * log(\Sigma S[i]))$。&lt;/p&gt;
&lt;p&gt;拆分完毕后，就可以使用 0-1 背包解决多重背包问题了。&lt;/p&gt;
&lt;p&gt;下面给出一道例题 AC 代码做示范：&lt;/p&gt;
&lt;h3&gt;例题 P1776AC 代码&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;题目链接&lt;a href=&quot;https://www.luogu.com.cn/problem/P1776#submit&quot;&gt;P1776 宝物筛选&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;cmath&amp;gt;
#define MAX 100005

using namespace std;

int N, V;
int W[MAX]; // 记录价值
int M[MAX]; // 记录重量
int DP[MAX]; // 状态转移数组
int tot; // 记录物品个数

int main()
{
    scanf(&amp;quot;%d%d&amp;quot;, &amp;amp;N, &amp;amp;V);
    for(int i = 1; i &amp;lt;= N; i++)
    {
        int w, m, s;
        scanf(&amp;quot;%d%d%d&amp;quot;, &amp;amp;w, &amp;amp;m ,&amp;amp;s);
        for(int j = 1; s - j &amp;gt;= 0; j &amp;lt;&amp;lt;= 1 )  // 二进制拆分优化
        {
            tot++;
            W[tot] = w * j;
            M[tot] = m * j;
            s -= j;
        }
        if(s) // 如果还有剩下的
        {
            tot++;
            W[tot] = w * s;
            M[tot] = m * s;
        }
    }
    //0-1背包
    for(int i = 1;i &amp;lt;= tot; i++)
    {
        for(int j = V; j &amp;gt;= M[i]; j--)
        {
            DP[j] = max(DP[j], DP[j - M[i]] + W[i]);
        }
    }
    printf(&amp;quot;%d&amp;quot;, DP[V]);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;混合背包问题&lt;/h2&gt;
&lt;p&gt;如果将 01 背包、完全背包、多重背包混合起来。也就是说，有的物品只可以取一次（01 背包），有的物品可以取无限次（完全背包），有的物品可以取的次数有一个上限（多重背包）。 就是混合背包问题。&lt;/p&gt;
&lt;p&gt;这个问题其实跟 01 背包、完全背包、多重背包同源，可以使用同一种解决办法，只要在解决问题的时候牢牢记住，无限量的物品实际上等同于背包总容量与单件物品的重量相处所得的件数（最大使用量），因为即使物品数量再多也不可能使用到超过最大使用量的部分，又考虑到件数为 1 的情况是有限量中的特殊情况，所以，这个问题可以转换为一个多重背包问题，进而又可以通过多重背包问题转换成 01 背包问题求解。&lt;/p&gt;
&lt;h3&gt;例题 P1883 樱花&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;题目链接：&lt;a href=&quot;https://www.luogu.com.cn/problem/P1833&quot;&gt;P1833 樱花 - 洛谷&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;cmath&amp;gt;
#define MAX 100005

using namespace std;

inline int read()
{
    char ch = getchar();
    int x = 0, cf = 1;
    while(ch &amp;lt; &amp;#39;0&amp;#39; || ch &amp;gt; &amp;#39;9&amp;#39;)
    {
        if(ch == &amp;#39;-&amp;#39;) cf = -1;
        ch = getchar();
    }
    while(ch &amp;gt;= &amp;#39;0&amp;#39; &amp;amp;&amp;amp; ch &amp;lt;= &amp;#39;9&amp;#39;)
    {
        x = (x &amp;lt;&amp;lt; 3) + (x &amp;lt;&amp;lt; 1) + (ch ^ 48);
        ch = getchar();
    }
    return x * cf;
}

int T; // 可用的时间之和
int N; // 树的数量
int C[MAX];
int M[MAX];
int DP[MAX];
int tot;

int main()
{
    int t1 ,t2 ,t3, t4;
    t1 = read();
    t2 = read();
    t3 = read();
    t4 = read();
    T = (t3 - t1)  * 60 + t4 - t2;
    scanf(&amp;quot;%d&amp;quot;, &amp;amp;N);
    for(int i = 1; i &amp;lt;= N; i++)
    {
        int m, c, p;
        scanf(&amp;quot;%d%d%d&amp;quot;, &amp;amp;m,  &amp;amp;c, &amp;amp;p);
        if(p == 0)
        {
            tot++;
            C[tot] = c;
            M[tot] = m;
            for(int j = M[tot]; j &amp;lt;= T; j++)
                DP[j] = max(DP[j - M[tot]] + C[tot], DP[j]);
        }
        else
        {
            for(int j = 1; p - j &amp;gt;= 0; j &amp;lt;&amp;lt;= 1 )
            {
                tot++;
                C[tot] = c * j;
                M[tot] = m * j;
                p -= j;
                for(int v = T; v &amp;gt;= M[tot]; v--)
                    DP[v] = max(DP[v - M[tot]] + C[tot], DP[v]);
            }
            if(p)
            {
                tot++;
                C[tot] = c * p;
                M[tot] = m * p;
                for(int j = T; j &amp;gt;= M[tot]; j--)
                    DP[j] = max(DP[j - M[tot]] + C[tot], DP[j]);
            }
        }
    }
    printf(&amp;quot;%d&amp;quot;, DP[T]);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【动态规划】状态压缩DP</title><link>https://saro.pub/aca2af1</link><guid isPermaLink="true">https://saro.pub/aca2af1</guid><description>状态压缩DP详解，二进制状态压缩动态规划技巧</description><pubDate>Sat, 10 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;二进制的很多应用离不开&lt;strong&gt;集合&lt;/strong&gt;这个概念，我们都知道在计算机当中，所有数据都是以二进制的形式存储的。一般一个 int 整形是 4 个字节，也就是 32 位 bit，我们通过这 32 位 bit 上 0 和 1 的组合可以表示多大 21 亿个不同的数。如果我们把这 32 位 bit 看成是一个集合，那么&lt;strong&gt;每一个数都应该对应集合的一种状态&lt;/strong&gt;，并且每个数的状态都是不同的。那么我们可不可以用一个数来保存一维的 DP 状态呢？&lt;/p&gt;
&lt;p&gt;这当然是可行的，动态规划的过程是随着&lt;strong&gt;阶段&lt;/strong&gt;的增长，在每一个状态维护上不断扩展的。而对于某些题目，我们扩展时需要记录一个状态集合，保存状态信息，以便进行状态转移。而状态压缩则是把这一个大小不超过 N、元素小于 K 的集合看做是一个 N 位的 K 进制数，以一个$[0, K^N - 1]$之间的十进制整数的形式作为 DP 状态的一维。这样我们就可以只用一个十进制整数，就保存了一个状态信息——这就是状态压缩。&lt;/p&gt;
&lt;p&gt;状态压缩的题目一般只有两种状态（当然也有三种状态的&lt;code&gt;三进制&lt;/code&gt;题目）。这里只讨论最常见的二进制状态压缩，K 进制状态压缩可以以此类推，不再赘述。&lt;/p&gt;
&lt;h2&gt;集合操作&lt;/h2&gt;
&lt;p&gt;在二进制状态 DP 中，我们用一个十进制整数代表一个集合，例如：$9 -&amp;gt; (1001)_{2}$ ，可以等效替换为一个 bool 数组$B[4] = {1, 0, 0, 1}$。下面是集合的常用操作：&lt;/p&gt;
&lt;p&gt;| 操作含义 | 代码 |
| :abbrlink: 122ed47c
mathjax: true
categories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OI 学习笔记&lt;/li&gt;
&lt;li&gt;动态规划
pubDate: 2023-06-10 00:00:00
tags:&lt;/li&gt;
&lt;li&gt;优化&lt;/li&gt;
&lt;li&gt;状态压缩&lt;/li&gt;
&lt;li&gt;DP&lt;/li&gt;
&lt;li&gt;动态规划&lt;/li&gt;
&lt;li&gt;cpp&lt;/li&gt;
&lt;li&gt;OI
title: 【动态规划】状态压缩 DP
badge: old&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;-----------------------------------: | :----------------: |
| 取出整数 n 在二进制表示下的第 k 位 | (n &amp;gt;&amp;gt; k) &amp;amp; 1 |
| 取出整数 n 在二进制表示下的第 0&lt;del&gt;k-1 位（后 k 位） | n &amp;amp; ((1 &amp;lt;&amp;lt; k) - 1) |
| 把整数 n 在二进制下表示的第 k 位取反 | n ^ (1 &amp;lt;&amp;lt; k) |
| 对整数 n 在二进制表示下的第 k 位赋值 1 | n| (1 &amp;lt;&amp;lt; k) |
| 对整数 n 在二进制表示下的第 k 位赋值 0 | n &amp;amp; (&lt;/del&gt; (1 &amp;lt;&amp;lt; k)) |
| 判断整数 n 在二进制表示下的第 k 位是否为真 | n &amp;amp; (1 &amp;lt;&amp;lt; (k - 1)) |&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意了！我们常说的&lt;code&gt;第一位&lt;/code&gt;在二进制表示下其实是&lt;code&gt;第零位&lt;/code&gt;，程序实现时&lt;strong&gt;一定要&lt;/strong&gt;注意当前真正在操作的是哪一位，否则 WA 了很难找出错误。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;上机实践&lt;/h2&gt;
&lt;h3&gt;售货员的难题&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;经典例题，状态压缩 DP 入门题：&lt;a href=&quot;https://www.luogu.com.cn/problem/P1171&quot;&gt;P1171 售货员的难题&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;构思（朴素算法）&lt;/h4&gt;
&lt;p&gt;看一下题目……最短路是吧？但是要求经过所有结点。&lt;/p&gt;
&lt;p&gt;所以优先队列 BFS 最短路这种就不管用啦！那么既然要走过所有村庄，直接枚举全排列输出，暴力省事。时间复杂度为$O(N * N!)$，属于是必死无疑。&lt;/p&gt;
&lt;p&gt;下面给出一段基础搜索代码，包含基础剪枝，得分$80Pt$.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c++&quot;&gt;#include&amp;lt;cstdio&amp;gt;
using namespace std;
int lxy[21][21],hrb[21];
int n,i,j,k,minn=1e9;

int ss(int x,int y,int z)//x表示村子编号，y表示走了几个村子，z表示用的时间
{
    if(z &amp;gt; minn) return 0;//基本最小值剪枝
    if(y == n &amp;amp;&amp;amp; z + lxy[x][1] &amp;lt; minn)
    {
        minn = z + lxy[x][1];
        return 0;
    }//比较求最小值，其中的加lxy[x][1]意思是走回第一个村
    for(int i = 2; i &amp;lt;= n; i++)//循环开始
    {
    if(hrb[i]==0&amp;amp;&amp;amp;i!=x)//深搜模板，没走就搜
    {
        hrb[i] = 1;//打上标记
        ss(i,y + 1, z + lxy[x][i]);
        hrb[i] = 0;//回溯
        }
    }
    return 0;
}

int main()
{
    scanf(&amp;quot;%d&amp;quot;, &amp;amp;n);
    for(i = 1;i &amp;lt;= n; i++)
    for(k = 1;k &amp;lt;= n; k++)
        scanf(&amp;quot;%d&amp;quot;, &amp;amp;lxy[i][k]);//输入
    ss(1, 1, 0);//开搜
    printf(&amp;quot;%d&amp;quot;,minn);
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【动态规划】LIS与LCS（最长上升子序列）</title><link>https://saro.pub/ef75d0a</link><guid isPermaLink="true">https://saro.pub/ef75d0a</guid><description>LIS与LCS最长上升子序列动态规划算法详解</description><pubDate>Sun, 14 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;引子-LIS 问题&lt;/h2&gt;
&lt;p&gt;这几天在学习&lt;strong&gt;DP（动态规划）&lt;/strong&gt;，里面第一个接触到的问题就是&lt;strong&gt;LIS&lt;/strong&gt;问题，这里简单概述如下:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;给定一个长度为$N$的数列$A$，求数值单调递增的子序列的长度最长是多少？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;其中 LIS（最长上升子序列）指的是从序列 A 中选择若干个 i，使得$i_{1}&amp;lt;i_{2}&amp;lt;i_{3}...&amp;lt;i_{n}$的同时满足$A_{i_{1}}&amp;lt;A_{i_{2}}&amp;lt;A_{i_{3}}...&amp;lt;A_{i_{n}}$。&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;LIS 的朴素解法&lt;/h3&gt;
&lt;p&gt;最朴素的想法就是用一个数组$DP[i]$表示在$1-i$范围内的 LIS 长度，初始化$DP[i]$为$1$（它自己一个数作为一个 LIS）。如果在小于$1-i$的范围内有满足 LIS 定义的情况，就可以转移$DP[i]$的值，代表选入这个范围和$A[i]$作为 LIS 的一部分。&lt;/p&gt;
&lt;p&gt;我们要遍历到$DP[i]$时同时遍历所有在$1-i$内的状态，显然每次转移都是$O(N)$的时间复杂度，总复杂度为$O(N^2)$，状态转移方程如下：&lt;/p&gt;
&lt;p&gt;$DP[i] = max(DP[i], DP[j] + 1) | (j &amp;lt; i)$&lt;/p&gt;
&lt;p&gt;显然$O(N^2)$的时间复杂度是无法满足 OIer 的，因此我们要进行优化。&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;LIS 的贪心二分优化&lt;/h3&gt;
&lt;h4&gt;优化思路&lt;/h4&gt;
&lt;p&gt;为什么朴素算法慢呢？因为我们把&lt;strong&gt;所有&lt;/strong&gt;情况枚举了一遍，而最后留下的只有一种。LIS 的朴素算法在那些本不需要枚举的状态上浪费了时间，自然就不行了。&lt;/p&gt;
&lt;p&gt;我们知道，LIS 是一个严格单增的数列，那么在两个 LIS 长度相同的情况下，我们希望它&lt;strong&gt;能扩展到的长度&lt;/strong&gt;尽可能长，自然是希望&lt;strong&gt;LIS 结尾元素尽可能小&lt;/strong&gt;。那么思路就有了，我们使用一个数组$G[i]$保存长度为$i$的 LIS 的结尾元素值记录当前最长的 LIS 长度为$tot$，对于每一个$A[i]$，如果$A[i] &amp;gt; G[tot]$，说明当前可以把$A[i]$接到这一条所谓最长的 LIS 后面，则$G[++tot] = A[i]$。&lt;/p&gt;
&lt;p&gt;那么我们的问题就是如何维护$G$数组。其实很简单，思路就是我们上面的思路，但是有一个问题，如果$A[i] \leq G[tot]$，应该怎么办呢？&lt;/p&gt;
&lt;p&gt;那么根据我们的优化思路，我们要尽可能确保当前$G$数组里面存储的是当前长度为$i$的 LIS 序列的最优解，也就是 &lt;code&gt;结尾元素尽可能小&lt;/code&gt;的情况。所以我们要在$G$数组中找到&lt;strong&gt;第一个&lt;/strong&gt;大于$A[i]$的元素$G[j]$，用$A[i]$更新$G[i]$。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;可是如果单纯遍历，复杂度又双叒叕回到了$O(N^2)$级别，所以……&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;二分优化&lt;/h4&gt;
&lt;p&gt;显然，$G$数组是一个单调递增的数组，自然地可以使用二分查找优化时间复杂度。把时间复杂度降到$O(N,log,N)$级别。&lt;/p&gt;
&lt;h4&gt;代码整合&lt;/h4&gt;
&lt;p&gt;那么到目前为止，我们亲爱的$DP$数组就寿终正寝了，换成了我们新的$G$数组&lt;del&gt;（&lt;code&gt;什么NTR剧情&lt;/code&gt;）&lt;/del&gt;。&lt;/p&gt;
&lt;p&gt;下面是代码示例，基础 LIS：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;cmath&amp;gt;
#define MAX 100005
#define INF 1e9

using namespace std;

int A[MAX]; //存数字
int G[MAX]; //我们亲爱的G数组
int tot = 1;

int main()
{
    int N = 0; //长度
    for(int i = 1; i &amp;lt;= N; i++)
    {
        scanf(&amp;quot;%d&amp;quot;, &amp;amp;A[i]);
        G[i] == INF; //初始化为1e9
    }

    G[1] = A[1]; //我们开始的起点

    for(int i = 2; i &amp;lt;= N; i++)
    {
        if(A[i] &amp;gt; G[tot]) //只要能插入，就先插入
            G[++tot] = A[i]; //初始化最后一个元素值
        else
        {
            int l = 1, r = tot, mid; //新建变量
            while (l &amp;lt; r)
            {
                //基础二分查找
                mid = (l + r) &amp;gt;&amp;gt; 1;
                if(G[mid] &amp;gt; A[i]) r = mid;
                else l = mid + 1;
            }
            G[l] = min(G[l], A[i]); //赋值，加MIN保险
        }
    }

    printf(&amp;quot;%d&amp;quot;, tot); //输出答案

    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;LIS 例题&lt;/h3&gt;
&lt;p&gt;这里给出一道 LIS 模板题：&lt;a href=&quot;https://www.luogu.com.cn/problem/P1020&quot;&gt;导弹拦截&lt;/a&gt; LIS 经典。&lt;/p&gt;
&lt;p&gt;将拦截的导弹的高度提出来成为原高度序列的一个子序列，根据题意这个子序列中的元素是单调不增的（即后一项总是不大于前一项），我们称为&lt;strong&gt;单调不升子序列&lt;/strong&gt;。本问所求能拦截到的最多的导弹，即求&lt;strong&gt;最长的单调不升子序列&lt;/strong&gt;。（其实只要判断改一下就好啦！）&lt;/p&gt;
&lt;h4&gt;第一问&lt;/h4&gt;
&lt;p&gt;没什么好说的，跑一次示例代码完事。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意这里$G$数组递减！请修改二分查找！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;第二问&lt;/h4&gt;
&lt;p&gt;那么既然是&lt;strong&gt;单调不升子序列&lt;/strong&gt;，我们考虑朴素算法，那么$G$数组就要求存储最大的值，每次执行完一次计算，就把选中的元素移除。重复计算，直到全部移除，记录计算次数，输出为答案。&lt;/p&gt;
&lt;p&gt;但是这样显然太笨了！我们要优化优化优化！&lt;/p&gt;
&lt;p&gt;我们不妨改变一下$G$数组的含义，用$G[i]$存第$i$个系统当前能够拦截的高度，同时我们把这些系统按从小到大排列——类似于原来的$G$数组。显然每次遍历到导弹$A[i]$时，我们拿最小的$G[i] \geq A[i]$是最优解。然后更新$G[i]$的值，显然更新之后排列还是从小到大，$G$数组仍然是单调递增的，因此不需要重新排序。当然如果没有满足$G[i] \geq A[i]$的情况，就新增一个系统。&lt;/p&gt;
&lt;p&gt;只要我们仍然保存时间复杂度在$O(N,log,N)$ 级别，可以通过$10^5$的数据。&lt;/p&gt;
&lt;h4&gt;代码整合&lt;/h4&gt;
&lt;p&gt;下面是 AC 代码：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;cmath&amp;gt;
#define MAX 100005
#define INF 1e9

using namespace std;

int A[MAX]; //存数字
int G[MAX];    //我们亲爱的G数组
int tot = 1;

int main()
{
    int N = 0; //长度
    while(~scanf(&amp;quot;%d&amp;quot;,&amp;amp;A[++N])); --N;

    G[1] = A[1]; //我们开始的起点

    for(int i = 2; i &amp;lt;= N; i++)
    {
        if(A[i] &amp;lt;= G[tot]) //只要能插入，就先插入
            G[++tot] = A[i]; //初始化最后一个元素值
        else
        {
            int l = 1, r = tot, mid;
            while (l &amp;lt; r)//获得下标，注意这里G数组递减
            {
                //基础二分查找
                mid = (l + r) &amp;gt;&amp;gt; 1;
                if(G[mid] &amp;gt;= A[i]) l = mid + 1;
                else r = mid;
            }
            G[l] = max(G[l], A[i]); //赋值，加MAX保险
        }
    }

    printf(&amp;quot;%d\n&amp;quot;, tot); //输出答案一

    //重置数据
    tot = 1;
    memset(G, INF, sizeof(G));
    G[1] = A[1];

    for(int i = 2; i &amp;lt;= N; i++)
    {
        int l = 1, r = tot, mid;
        while (l &amp;lt; r)//获得下标，当然也可能没有
        {
            //基础二分查找
            mid = (l + r) &amp;gt;&amp;gt; 1;
            if(G[mid] &amp;gt;= A[i]) r = mid;
            else l = mid + 1;
        }
        if(G[l] &amp;gt;= A[i]) G[l] = A[i]; //如果找得到，赋值
        else G[++tot] = A[i]; //如果找不到，初始化一个新的系统
    }

    printf(&amp;quot;%d\n&amp;quot;, tot); //输出答案二

    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【搜索】优先队列BFS</title><link>https://saro.pub/5f596f8</link><guid isPermaLink="true">https://saro.pub/5f596f8</guid><description>优先队列BFS讲解+例题</description><pubDate>Sun, 14 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;在讲解优先队列 BFS 之前，让我们回顾一下最普通的走迷宫问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;对于一个迷宫，从起点开始，对于四周能扩展的点打上标记并加入队列。直到从队列取出来的点表示的位置为终点时，退出搜索&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;显然，在没有限制的情况下，我们只需要给出一条路径，如果把迷宫看成一个无向图，那么每一条边其实都是边权为一的无向边。但我们如果给每一条边不同的权值，一般的 BFS 就不能解决这个问题了，因为它会在找到一条路径时立刻退出，不能保证最短路径被扩展。实际上这种问题我们可以通过&lt;a href=&quot;https://www.saroprock.com/%E3%80%90%E5%9B%BE%E8%AE%BA%E3%80%91%E6%9C%80%E7%9F%AD%E8%B7%AF&quot;&gt;最短路算法&lt;/a&gt;求解，而今天我们则尝试用优先队列 BFS 进行求解。&lt;/p&gt;
&lt;h2&gt;优先队列 BFS&lt;/h2&gt;
&lt;h3&gt;方法一（不使用优先队列）&lt;/h3&gt;
&lt;p&gt;方法一非常暴力，仍然使用一般的广搜——采用一般的队列。&lt;/p&gt;
&lt;p&gt;这时我们结束条件要进行更改，因为不能保证每一个状态第一次入队时就是最优解，所以只能允许每一个状态被多次更新多次，多次进出队列。也就是结束条件不再是找到终点，而是一直搜索，直到队列为空（迭代思想）。&lt;/p&gt;
&lt;p&gt;此时整个广搜算法对搜索树进行了重复遍历更新，直到“收敛”到最优解。想法很暴力，时间复杂度也很暴力（笑）。在最坏情况下，时间复杂度会从 O(N)增长到 O(N^2)。这跟最短路的&lt;a href=&quot;https://www.saroprock.com/%e3%80%90%e5%9b%be%e8%ae%ba%e3%80%91%e6%9c%80%e7%9f%ad%e8%b7%af/#%E4%BA%8C%E3%80%81Bellmon-Ford_%E7%AE%97%E6%B3%95%E5%92%8C_SPFA&quot;&gt;Bellmon-Ford 算法&lt;/a&gt;差不多（偷懒专用）。&lt;/p&gt;
&lt;h3&gt;方法二（使用优先队列）&lt;/h3&gt;
&lt;p&gt;这里我们把一般队列改成优先队列，相当于一个二叉堆。&lt;/p&gt;
&lt;p&gt;我们可以从队列中取出&lt;strong&gt;当前代价最小的状态进行扩展&lt;/strong&gt;（因为当前所有状态中没有比它更优的，所以以后也不会再更新它没有负权边），然后沿这这一条“最优解”道路往下，同时把其他新状态加入优先队列，不断搜索直到队列为空。&lt;/p&gt;
&lt;p&gt;类比最短路的&lt;a href=&quot;https://www.saroprock.com/%e3%80%90%e5%9b%be%e8%ae%ba%e3%80%91%e6%9c%80%e7%9f%ad%e8%b7%af/#%E4%B8%80%E3%80%81Dijkstra%E7%AE%97%E6%B3%95&quot;&gt;Dijkstra 算法&lt;/a&gt;，优先队列不像朴素 Dijkstra 一样寻找所有结点，BFS 只会寻找当前有&lt;strong&gt;可能为最优解的搜索树结点&lt;/strong&gt;，其逻辑类似于堆优化的 Dijkstra 算法，都是仅在可能情况下寻找最优解。类似的，在 Dijkstra 算法中，每一个结点只会被扩展一次，时间复杂度为$O(N)$。优先队列 BFS 也是如此，&lt;strong&gt;当每一个状态第一次从队列中被取出时，就已经得到了从起始状态到该状态的最优解&lt;/strong&gt;，不管它会不会被再次取出，它已经是最优，我们可以直接跳过。所以在优先队列 BFS 中，&lt;strong&gt;每个结点仍然只被扩展过一次，时间复杂度为$O(N)$&lt;/strong&gt;，加上维护二叉堆的代价，优先队列 BFS 的时间复杂度为$O(N log N)$，这与堆优化的 Dijkstra 算法类似。&lt;/p&gt;
&lt;h2&gt;例题 UVA11367（洛谷评级：紫）&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.luogu.com.cn/problem/UVA11367&quot;&gt;题目跳转&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;观察题目，可以发现这是一道优先队列 BFS+DP。因为这一道题目中引入了油量的概念，所以此时$dist$数组不再是一维数组，而是一个二维数组，它表示所有城市结点和油量结点的集合。&lt;/p&gt;
&lt;p&gt;因此，自然地，我们使用一个结构体$Node$来表示每个结点，$Node$包含三个值：&lt;strong&gt;crd&lt;/strong&gt;，&lt;strong&gt;oil&lt;/strong&gt;以及&lt;strong&gt;cost&lt;/strong&gt;。其中 crd 是当前城市结点的下标 &lt;strong&gt;（我们需要遍历这个城市结点的子城市）&lt;/strong&gt;，oil 是油量下标，代表当前 DP 所存储的油量。cost 则是从起点 S 到此结点的最小花费。同时，我们使用$dist[city][fuel]$数组来存储&lt;strong&gt;被扩展&lt;/strong&gt;结点的最小 cost。&lt;/p&gt;
&lt;p&gt;回顾优先队列 BFS，我们每次取出在当前状态下的最优解——cost 最小的结点，因此我们需要一个小根堆储存$Node$，以 cost 为比较标准，把 cost 最小的结点放在堆顶，每次取出堆顶元素进行扩展。同样的，&lt;strong&gt;因为每次取出的已经是当前结点的最优解&lt;/strong&gt;（优先队列 BFS 的特性），所以我们可以给此结点打上一个 tag、标记，表示此结点已经被扩展过，无需再次扩展。又因为这个特性，我们无需一直搜索直到队列为空——只要有一次堆顶结点为目标结点，&lt;strong&gt;我们就可以直接结束广度优先搜索，返回答案&lt;/strong&gt;。此时目标结点已经是最小值，无需扩展其他结点。&lt;/p&gt;
&lt;p&gt;对于题目的每一个问题，我们都单独进行一次优先队列 BFS，起始状态结点为$Node(start, 0)$（忽略 cost）在每个状态$(crd，oil)$的分支有两条路：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如果此时 oil 小于汽车油量 C，并且子结点的$dist$不是最优 &lt;strong&gt;（$dist[crd][oil + 1] &amp;gt; dist[crd][oil] + 当地油价$）&lt;/strong&gt;，则添加一个新的可能改变值的结点，扩展到新状态$(crd，oil + 1)$，同时给$dist[crd][oil + 1]$赋值为$dist[crd][oil]$加上当地油价的值。&lt;/li&gt;
&lt;li&gt;对于每一条从城市 crd 出发的边，若边权大小 edge 不超过此时油量 oil（能开过去），并且并且子结点的 dist 不是最优 &lt;strong&gt;（$dist[son][oil – edge] &amp;gt; crd结点的cost$）&lt;/strong&gt; ，则添加一个新的可能改变值的结点，扩展到新状态$(son，oil – edge)$，同时给$dist[son][oil – edge]$赋值为 crd 结点的 cost。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我们不断取出当前队列中“花费最少的结点”进行扩展，并且更新$dist$的值，&lt;strong&gt;直到终点 T 第一次被取出&lt;/strong&gt;，则停止广度优先搜索，返回 T 的 cost，输出答案。&lt;/p&gt;
&lt;p&gt;若直到队列为空也没有取出终点 T，&lt;strong&gt;说明没有路可以从起点 S 到终点 T，此时输出 impossible。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;下面是示例代码，结合注释应该可以看懂：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-c++&quot;&gt;//主要思想：优先队列BFS+DP
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;queue&amp;gt;
#define MAX 2005
using namespace std;
int city, road; //当前的城市数和道路数
int C, S, T; //油量C、起点S和终点T
int head[MAX]; //代表一个城市
int toll[MAX]; //每个城市的油价
int edge[MAX * 10]; //储存边的值
int son[MAX * 10]; //子结点链
int ver[MAX * 10]; //代表有向边
/*
注意我们这里用二维数组存结点
因为我们动态规划时要找出最优
所以油量不同的同城市情况也是一个结点
*/
//dist的第一维是当前城市
//dist的第二维是当前油量
int dist[MAX][105]; //存储最小花费
bool tag[MAX][105]; //标记结点
int tot = 0;
struct Node
{
    int crd; //结点下标
    int oil; //到达此结点耗费的油量
    int cost; //到达此结点的总花费
    //结构体函数，方便我们添加结点
    Node(int c, int o, int t)
    {
        //给结点赋值
        crd = c;
        oil = o;
        cost = t;
    }
    //在优先队列中按所花的钱更少的排序，变成小根堆
    bool operator &amp;lt; (const Node &amp;amp;a) const
    {
        //你不用管a是什么，只把符号倒一下就可以了
        return cost &amp;gt; a.cost;
    }
};
priority_queue&amp;lt;Node&amp;gt; q; //存结点Node的小根堆
//没什么好说的邻接表函数
void add(int u, int v, int w)
{
    edge[++tot] = w;
    ver[tot] = v;
    son[tot] = head[u];
    head[u] = tot;
}
int BFS(int start)
{
    while(!q.empty()) q.pop(); //初始化小根堆q
    memset(dist, 0x3f, sizeof(dist)); //初始化dist
    memset(tag, 0, sizeof(tag)); //初始化tag
    q.push(Node(start, 0, 0)); //把起点推入小根堆
    dist[start][0] = 0; //赋值起点
    /*
    因为每次取出结点时，此结点是当前所有状态的最优解
    所以只要我们取出T结点，就可以马上退出广度优先搜索
    */
    //一直计算直到取出T结点
    while(!q.empty())
    {
        Node now = q.top(); //取出最小的结点
        q.pop(); //移出二叉堆
        if(now.crd == T) return now.cost; //如果取出T结点，直接退出
        if(tag[now.crd][now.oil]) continue; //确保此结点没有被扩展过
        tag[now.crd][now.oil] = true; //标记已经扩展过的结点
        //如果油箱没有满且子结点的dist不是最优，则添加一个新的可能改变值的结点
        if(now.oil &amp;lt; C &amp;amp;&amp;amp; dist[now.crd][now.oil + 1] &amp;gt; now.cost + toll[now.crd])
        {
            dist[now.crd][now.oil + 1] = now.cost + toll[now.crd]; //更改此时的结点值
            q.push(Node(now.crd, now.oil + 1, now.cost + toll[now.crd])); //把这个更改过，可能影响下一个子结点的结点入队
        }
        //遍历此结点的子结点
        for(int i = head[now.crd]; i; i = son[i])
        {
            if(now.oil &amp;lt; edge[i]) continue; //如果油量不够开，直接continue
            //如果当前城市的子城市在油量为now.oil – edge[i]的情况不是最优解，则更改
            if(dist[ver[i]][now.oil – edge[i]] &amp;gt; now.cost)
            {
                 dist[ver[i]][now.oil – edge[i]] = now.cost; //更新子城市此时油量的dist
                 q.push(Node(ver[i], now.oil – edge[i], now.cost)); //把这个更改过，可能影响下一个子城市的结点入队
            }
        }
    }
    return -1; //如果队列空了都没能取出T结点，说明没有路可走到T结点
}
int main()
{
    scanf(“%d %d”, &amp;amp;city, &amp;amp;road);
    for(int i = 1; i &amp;lt;= city; i++)
        scanf(“%d”, &amp;amp;toll[i]); //输入当前油价
    for(int i = 1; i &amp;lt;= road; i++)
    {
        int u, v, w;
        scanf(“%d %d %d”, &amp;amp;u, &amp;amp;v, &amp;amp;w);
        u++; v++; //因为我们下标从1开始，这里要把结点下标都加一
        //添加无向边，看成两条重复的有向边
        add(u, v, w);
        add(v, u, w);
    }
    int q;
    scanf(“%d”, &amp;amp;q);
    for(int i = 1; i &amp;lt;= q; i++)
    {
        scanf(“%d %d %d”, &amp;amp;C, &amp;amp;S, &amp;amp;T);
        S++; T++; //因为我们下标从1开始，这里要把起点和终点都加一
        int ans = BFS(S); //开始广度优先搜索
        if(ans == -1) //无解
            printf(“%s\n”, “impossible”);
        else
            printf(“%d\n”,ans);
    }
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item><item><title>【图论】最短路</title><link>https://saro.pub/2480be5</link><guid isPermaLink="true">https://saro.pub/2480be5</guid><description>最短路讲解，从Dijkstra到SPFA</description><pubDate>Sun, 14 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;最短路是图论最重要的算法之一，也是算法难点。经过这篇的学习，你会发现你离成功就差一个最短路的距离（虽然它难以被找到）。最短路是指，某个点到某个点之间的距离最短的路径。&lt;/p&gt;
&lt;h2&gt;必要的知识&lt;/h2&gt;
&lt;p&gt;学会存储一张有向图，我们一般使用&lt;strong&gt;邻接矩阵&lt;/strong&gt;和&lt;strong&gt;邻接表。&lt;strong&gt;因为邻接矩阵的储存方式有时无法满足题目规定的空间复杂度限制，为此这里我们只使用&lt;/strong&gt;邻接表&lt;/strong&gt;储存有向图。储存无向图可以看成是两条相反方向的有向边&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;关于邻接表的存图方式，请浏览&lt;a href=&quot;https://www.saroprock.com/post/e245b9b5.html&quot;&gt;【数据结构】邻接表与链式前向星&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;2023/6/16 修正：
此存图方式应为&lt;code&gt;链式前向星&lt;/code&gt;，邻接表使用&lt;code&gt;vector&lt;/code&gt;而非数组模拟链表，详见上方链接&lt;/p&gt;
&lt;h2&gt;最短路算法&lt;/h2&gt;
&lt;h3&gt;&lt;strong&gt;一、Dijkstra 算法&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1.算法基本介绍&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dijkstra 算法通常是求解单源最短路中最快的算法，但它无法处理存在负权边的情况（原因在正确性证明中）。Dijkstra 本质上是一种贪心算法，通过不断调整每个点的“当前距离”最终得到最优结果，其实后面要讲到的几种算法也大都是采用这种步步逼近的手段。这种不断调整的过程，维基百科上面称为“relax”。以上可能有点抽象，下面是算法的流程。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.算法流程&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;假设现在要求出从某一点 s 到其他所有点的最短距离，对于每个点 v 均维护一个“当前距离”（$dist[v]$）和“是否访问过”($visited[v]$)。首先将$dist[s]$初始化为 0，将其他点的距离初始化为无穷，并将所有点初始化为未访问的。记$u-&amp;gt;v$的边权为$weight[u-&amp;gt;v]$（程序中我们使用 edge 数组存储，下标为$u-&amp;gt;v$这条边的序号，详见&lt;strong&gt;邻接表&lt;/strong&gt;一栏）。然后进行以下步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从所有未访问的点中，找出当前距离最小的，设为 u，并将其标记为已访问的。&lt;/li&gt;
&lt;li&gt;调整 u 的所有边（若是有向图则为出边）连接的并且&lt;strong&gt;未被访问过的&lt;/strong&gt;点：若$weight[u-&amp;gt;v] + dist[u] &amp;lt; dist[v]$, 则将$dist[v]$更新为$dist[u]+weight[u-&amp;gt;v]$。&lt;/li&gt;
&lt;li&gt;重复 1 和 2 步骤，直到所有点都被标记为已访问的，则$dist[i]$即 s 到 i 的最短距离。如果只想求从 s 到某一点的最短距离，那么当该点被标记为访问过之后可直接退出。&lt;/li&gt;
&lt;li&gt;补充：如果除了最短距离之外还想求出具体的路径，只需建立一个$pre$数组，在步骤 2 后添加操作：$pre[v] = u$（前提是$dist[v]$被更新）。&lt;strong&gt;类似于邻接表中 son 数组的链式结构。&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;3.正确性证明&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们证明，当某个点 v 被标记为已访问后，s 到其的最短距离即为$dist[v]$，即在步骤 1 中选出的每个点的当前距离即为最短距离。&lt;/p&gt;
&lt;p&gt;首先容易理解，如果从 s 到 v 的路径只允许经过已访问过的点，那么$dist[v]$是这些路径中最短的。倘若存在一条包含未访问过点（除 v 之外）的更短的路径，设这条路径上第一个未被访问过的点为 m，则显然有$dist[m] &amp;lt; dist[v]$（注意因为 m 是这条路径上第一个未被访问的点，所以沿着这条路径走到 m 的距离一定为$dist[m]$）。而这与 v 的选取方式——从所有未访问过点中选取当前距离最小的相矛盾。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解释一下 Dijkstra 算法为什么不能用于有负权的边的图：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.staticaly.com/gh/EveSunMaple/Web-image/master/posts/text4.png&quot; alt=&quot;text4.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;因为 Dijkstra 算法是通过当前离起点最近的点来更新其他的点的距离，例如上图中的 4 号结点会被 2 号结点更新为 2+3=5，但实际上 4 号结点的最短路径是 4+(-4)=0!，这样你就知道为什么 Dijkstra 算法不能用于有负权的边的图吧。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.代码实现&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里使用邻接表储存有向图，关于邻接矩阵的算法读者可以自己上网查询。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;cmath&amp;gt;
#define MAX 10000
int head[MAX]; //代表一个结点，也是子结点链的起点
int edge[MAX]; //储存边的值
int son[MAX]; //子结点链
int ver[MAX]; //代表有向边
int dist[MAX]; //最短路
bool tag[MAX]; //标记结点
int tot = 0; // 边的数量
using namespace std;
void Dijkstra()
{
    memset(dist, 0x3f, sizeof(dist)); //初始化dist
    memset(tag, 0, sizeof(tag)); //初始化tag
    dist[1] = 0; //设置起点
    //计算除终点以外的结点出发的子结点的最短路
    for(int i = 1; i &amp;lt; N; i++)
    {
        int crd = 0; //父结点下标
        //遍历N个结点，找到dist最小的结点
        for(int j = 1; j &amp;lt;= N; j++)
        {
            if(!tag[j] &amp;amp;&amp;amp; (crd == 0 || dist[crd] &amp;gt; dist[j]))
            {
                crd = j;
            }
        }
        tag[crd] = true; //标记已经走过的点
        //遍历此结点的子结点
        for(int j = head[crd]; j; j = son[j])
        {
            int ne = ver[j];
            dist[ne] = min(dist[ne], dist[crd] + edge[j]); //更新子结点的dist
        }
    }
    return;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;堆优化 Dijkstra：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们使用小根堆对 dist 数组进行维护，每次只扩展有可能改变的结点，我们只需要$O(log N)$的时间即可维护一个二叉堆，而找到最小$dist$结点只需要$O(1)$。&lt;/p&gt;
&lt;p&gt;关于小根堆的实现方法读者可自行查询，这里我们直接存储负值。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;queue&amp;gt;
#include &amp;lt;cmath&amp;gt;
#define MAX 10000
int head[MAX]; //代表一个结点，也是子结点链的起点
int edge[MAX]; //储存边的值
int son[MAX]; //子结点链
int ver[MAX]; //代表有向边
int dist[MAX]; //最短路
bool tag[MAX]; //标记结点
int tot = 0; // 边的数量
using namespace std;
//pair的第一维是dist的相反数（把大根堆转换成小根堆）
//pair的第二维是结点下标
priority_queue&amp;lt;pair&amp;lt;int int&amp;gt;&amp;gt; q; //用二叉堆存结点
void Dijkstra()
{
    memset(dist, 0x3f, sizeof(dist)); //初始化dist
    memset(tag, 0, sizeof(tag)); //初始化tag
    dist[1] = 0; //设置起点
    q.push(make_pair(0, 1)); //把起点加入二叉堆
    //一直计算直到队列为空
    while(q.size())
    {
        int crd = q.top().second; //父结点下标
        q.pop(); //移出二叉堆
        if(tag[crd]) continue; //确保此结点没有被扩展过
        tag[crd] = true; //标记已经走过的点
        //遍历此结点的子结点
        for(int j = head[crd]; j; j = son[j])
        {
            if(dist[crd] + edge[j] &amp;lt; dist[ne])
            {
                 dist[ne] = dist[crd] + edge[j]; //更新子结点的dist
                 q.push(make_pair(-dist[ne], ne)); //把新的二元组插入堆
            }
        }
    }
    return;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;二、Bellmon-Ford 算法和 SPFA&lt;/h3&gt;
&lt;p&gt;首先介绍 bellmon-ford 算法，SPFA（shortest path faster algorithm)是对它的一个改进。&lt;/p&gt;
&lt;p&gt;bellmon-ford 是一种单源最短路算法，时间复杂度是 $O(VE)$，显然不如 Dijkstra 快，但它可以处理负权边和负权环的情况。它基于一个很基本的事实： &lt;strong&gt;对于一个不包含负权环的 V 个点的图，任意两点之间的最短路径至多包含$V-1$条边。&lt;/strong&gt; 如果存在负权环，每次在负权环上走一圈都会使环上的每一个点的距离减少 &lt;strong&gt;（如果计算时步数超过了$V-1$，说明有负权环）&lt;/strong&gt;，因此不存在最短路径。bellmon-ford 算法可以检测出这种情况。&lt;/p&gt;
&lt;p&gt;算法的实现也很简单，根据&lt;strong&gt;三角形不等式&lt;/strong&gt;，对于图中的某一条边$(u,v,t)$,有$dist[v] &amp;lt;= dist[u] + t$成立，就说它满足三角形不等式，可以发现，此不等式就是这一条边在有限范围内的最优解。通过重复扫描边，直到所有边都符合三角不等式，此时 dist 数组就是结果（是不是很暴力很简单）。&lt;/p&gt;
&lt;p&gt;正因为它不像 Dijkstra 这么贪心，不会漏过负权边，所以它可以正确处理有负权边的图的最短路问题。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;cmath&amp;gt;
#define MAX 10000
int edge[MAX]; //储存边的值
int ver[MAX]; //代表有向边出发的结点
int son[MAX]; //代表有向边指向的结点
/*
注意这里ver和son的含义改变了
ver存的是一条边的起点下标
son存的是一条边的终点下标
请读者自己更改添加边函数
*/
int dist[MAX]; //最短路
int tot = 0; // 边的数量
using namespace std;
void BellmonFord()
{
    memset(dist, 0x3f, sizeof(dist)); //初始化dist
    dist[1] = 0; //设置起点
    //循环N – 1次，因为无负环的最短路步数最多为N – 1
    for(int i = 1; i &amp;lt; N; i++)
    {
        //遍历tot条边，找到指向结点dist最小的边
        for(int j = 1; j &amp;lt;= tot; j++)
        {
            if(dist[ver[j]] + edge[j] &amp;lt; dist[son[j]])
            {
                dist[son[j]] = dist[ver[j]] + edge[j];
            }
        }
    }
    return;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;此版本的 Bellmon-Ford 算法不需要邻接表，但&lt;strong&gt;SPFA&lt;/strong&gt;仍然要使用邻接表，望读者一定要熟悉邻接表的使用方法，不要被暴力迷了双眼&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;算法中，$dist[i]$为源点到 i 的当前最短距离。算法最外层是一个$N – 1$次的循环，在每次循环中，算法遍历所有的边并执行操作。&lt;/p&gt;
&lt;p&gt;bellmon-ford 算法不断对每条边进行所谓的松弛（relax）操作，如果 u 到 v 有一条边，那么$dist[u]$减小意味着$dist[v]$可能也可以进行更新，然而由于不知道到底哪些点的当前距离需要更新，bellmon-ford 算法选择暴力地去遍历每条边来检查哪些点的当前距离可以更新 &lt;strong&gt;（这也是我们要优化的地方）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果在某次外层循环中发现所有点的当前距离都没有被更新，那么可以直接停止算法，因为接下来无论再进行多少次循环点的距离也不会被继续更新了。&lt;/p&gt;
&lt;p&gt;bellmon-ford 算法可以判断负权环的存在：只需在算法的最后对每条边再松弛一次，如果发现有点的距离得到更新 &lt;strong&gt;（说明经过$N – 1$次循环仍然有边不满足三角形不等式，而只有负环会出现这种情况，因为负环永远不可能满足三角形不等式）&lt;/strong&gt;，说明存在负权环——因为没有负权环时最短路径的长度至多为$N – 1$。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SPFA：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;从上面的介绍我们知道 bellmon-ford 算法是带着一定的盲目性的，因为三角形不等式是这一条边在有限范围内的最优解，很多时候（比如刚开始赋值无限大）根本不存在最优解，白白浪费了时间。作为对它的优化，SPFA 采用类似 BFS 的思想，使用一个队列，只松弛那些可能更新点的距离的边，也就是那些已经被改变，不再是无限大（也可能再次被改变），可能对下一个结点有影响的结点队列。算法的流程为：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将除源点之外的所有的点当前距离初始化为无穷，并标记为未入队。源点的当前距离为 0，将源点入队。&lt;/li&gt;
&lt;li&gt;取出队首 u，遍历 u 的所有出边，检查是否能更新所连接的点 v 的当前距离。如果 v 的当前距离被更新并且 v 不在队中，则将 v 入队。重复该操作直到队列为空。&lt;/li&gt;
&lt;li&gt;检查是否存在负权环的方法为：记录一个点的入队次数，如果超过$N – 1$次说明存在负权环，因为最短路径上除自身外至多$N – 1$个点，故一个点不可能被更新超过$N – 1$次。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;queue&amp;gt;
#include &amp;lt;cmath&amp;gt;
#define MAX 10000
int head[MAX]; //代表一个结点，也是子结点链的起点
int edge[MAX]; //储存边的值
int son[MAX]; //子结点链
int ver[MAX]; //代表有向边
int dist[MAX]; //最短路
bool tag[MAX]; //标记结点
int tot = 0; //边的数量
int N;
using namespace std;
void BellmonFord()
{
    memset(dist, 0x3f, sizeof(dist)); //初始化dist
    dist[1] = 0; //设置起点
    queue&amp;lt;int&amp;gt; q; //定义队列，存储可能改变的结点
    q.push(1); //把起点添加进队列
    tag[1] = true; //打上标记
    while (!q.empty()) //一直循环，直到队列为空
    {
        int crd = q.front(); //从队列中取一个结点
        q.pop(); //移出队列
        tag[crd] = false; //去掉标记
        //遍历连接crd的子节点
        for(int j = head[crd]; j; j = son[j])
        {
            int ne = ver[j];
            if(dist[crd] + edge[j] &amp;lt; dist[ne])
            {
                dist[ne] = dist[crd] + edge[j];
                if(!tag[ne]) //如果子节点并不在队列中
                {
                    q.push(ne); //加入队列
                    tag[ne] = true; //打上标记
                }
            }
        }
    }
    return;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;三、Floyd 算法&lt;/h3&gt;
&lt;p&gt;Floyd 算法又称为 Floyd-Warshell 算法，其实 Warshell 算法是离散数学中求传递闭包的算法，两者的思想是一致的。Floyd 算法是求解多源最短路时通常选用的算法，经过一次算法即可求出任意两点之间的最短距离，并且可以处理有负权边的情况（但无法处理负权环）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;原理：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Floyd 本质上是动态规划的思想。倘若现在我们想求 i 到 j 的最短路径长度，我们限制这条路径上除 i 和 j 之外只准经过&lt;strong&gt;前&lt;/strong&gt;k 个点（这样的路径称为 k 允许路径），我们在算法的最外层循环每次将 k 加 1，那么当 k 等于点数时求得的结果便是最优的。下面用数学归纳法证明算法的正确性：&lt;/p&gt;
&lt;p&gt;即证明在第 n 次循环后 dist[i][j]为 i 到 j 的最短 n 允许路径，当 n=0 时，i 到 j 不准经过任何点，dist[i][j]即为 weight[i-&amp;gt;j]或者无穷大，显然成立。&lt;/p&gt;
&lt;p&gt;假设 n=k 时成立，那么当 n=k+1 时，倘若 i 到 j 的最短 k+1 允许路径不经过第 k+1 个点，则 dist[i][j]不发生改变。若 i 到 j 的最短 k+1 允许路径经过第 k+1 个点，由归纳假设，此时 dist[i][k+1]为 i 到 k+1 的最短 k 允许路径，dist[k+1][j]为 k+1 到 j 的最短 k 允许路径，故 i 到 j 的最短 k+1 允许路径长为 dist[i][k+1] + dist[k+1][j]。这正是算法中的状态转移方程。&lt;/p&gt;
&lt;p&gt;算法的实现非常简单，是一个三重循环：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;int dist[100][100]; //初始化dist数组
for (int k = 0; k &amp;lt; v; k++)
{
    for (int i = 0; i &amp;lt; v; i++)
    {
        for (int j = 0; j &amp;lt; v; j++)
        {
            dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><dc:creator>サン猫の時間漂流</dc:creator></item></channel></rss>