<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Walter_Fang</title><description>Blog</description><link>https://blog.walterfang.site/</link><language>zh_CN</language><templateTheme>Firefly</templateTheme><templateThemeVersion>6.3.5</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年1月7日 13:02:08</lastBuildDate><item><title>【置顶】致新访客</title><link>https://blog.walterfang.site/posts/welcome/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/welcome/</guid><description>欢迎访问我的博客！这里是我给新访客写的一点东西，如果您是第一次访问，不妨来看看。</description><pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;你好，欢迎访问我的博客！在广阔的互联网中，无论是任何原因，欢迎您来到这个页面！&lt;/p&gt;
&lt;p&gt;这里主要写了一些平时想到的东西以及一些发电内容（x）。做了头图的文章大多是值得一看的，剩下的看心情随便翻翻就行啦ww&lt;/p&gt;
&lt;p&gt;评论系统采用 Waline，可以直接发表评论，不过我看到违规的 or 不合适的评论会删。&lt;/p&gt;
&lt;p&gt;总之，欢迎来这里看看！顺便挂个&lt;a href=&quot;https://blog.walterfang.site/friends/&quot;&gt;友链&lt;/a&gt;（bushi）&lt;/p&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>【置顶】博客维护教程</title><link>https://blog.walterfang.site/posts/blog-tutorial/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/blog-tutorial/</guid><description>本博客在 Firefly 主题下的维护教程。（给我自己看的）</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;好吧这篇文章其实是因为我自己还不是很熟悉 Firefly 主题下的一些文章格式配置以及特殊的 features 所以为了避免写文章时出乱子而给我自己看的。不过如果你想接此了解一下 Firefly 主题的特性也不是不行。文章会按功能分段。&lt;/p&gt;
&lt;h2&gt;KaTeX 支持&lt;/h2&gt;
&lt;h3&gt;行内公式 (Inline)&lt;/h3&gt;
&lt;p&gt;行内公式使用单个 &lt;code&gt;$&lt;/code&gt; 符号包裹。&lt;/p&gt;
&lt;p&gt;例如：欧拉公式 $e^{i\pi} + 1 = 0$ 是数学中最优美的公式之一。&lt;/p&gt;
&lt;p&gt;质能方程 $E = mc^2$ 也是家喻户晓。&lt;/p&gt;
&lt;h3&gt;块级公式 (Block)&lt;/h3&gt;
&lt;p&gt;块级公式使用两个 &lt;code&gt;$$&lt;/code&gt; 符号包裹，会居中显示。&lt;/p&gt;
&lt;p&gt;$$
\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
$$&lt;/p&gt;
&lt;p&gt;$$
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
$$&lt;/p&gt;
&lt;h3&gt;复杂示例&lt;/h3&gt;
&lt;h4&gt;矩阵 (Matrices)&lt;/h4&gt;
&lt;p&gt;$$
\begin{pmatrix}
a &amp;amp; b \
c &amp;amp; d
\end{pmatrix}
\begin{pmatrix}
\alpha &amp;amp; \beta \
\gamma &amp;amp; \delta
\end{pmatrix} =
\begin{pmatrix}
a\alpha + b\gamma &amp;amp; a\beta + b\delta \
c\alpha + d\gamma &amp;amp; c\beta + d\delta
\end{pmatrix}
$$&lt;/p&gt;
&lt;h4&gt;极限与求和 (Limits and Sums)&lt;/h4&gt;
&lt;p&gt;$$
\sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6}
$$&lt;/p&gt;
&lt;p&gt;$$
\lim_{x \to 0} \frac{\sin x}{x} = 1
$$&lt;/p&gt;
&lt;h4&gt;麦克斯韦方程组 (Maxwell&apos;s Equations)&lt;/h4&gt;
&lt;p&gt;$$
\begin{aligned}
\nabla \cdot \mathbf{E} &amp;amp;= \frac{\rho}{\varepsilon_0} \
\nabla \cdot \mathbf{B} &amp;amp;= 0 \
\nabla \times \mathbf{E} &amp;amp;= -\frac{\partial \mathbf{B}}{\partial t} \
\nabla \times \mathbf{B} &amp;amp;= \mu_0\mathbf{J} + \mu_0\varepsilon_0\frac{\partial \mathbf{E}}{\partial t}
\end{aligned}
$$&lt;/p&gt;
&lt;h4&gt;化学方程式 (Chemical Equations)&lt;/h4&gt;
&lt;p&gt;$$
\ce{CH4 + 2O2 -&amp;gt; CO2 + 2H2O}
$$&lt;/p&gt;
&lt;h3&gt;更多符号&lt;/h3&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;Alpha&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\alpha&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$\alpha$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Beta&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\beta&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$\beta$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gamma&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\Gamma&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$\Gamma$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pi&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\pi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$\pi$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infinity&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\infty&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$\infty$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Right Arrow&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\rightarrow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$\rightarrow$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\partial&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$\partial$&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;更多 KaTeX 语法可参考 &lt;a href=&quot;https://katex.org/docs/supported.html&quot;&gt;KaTeX Supported Functions&lt;/a&gt;。&lt;/p&gt;
&lt;h2&gt;Markdown 扩展功能&lt;/h2&gt;
&lt;h3&gt;GitHub 仓库卡片&lt;/h3&gt;
&lt;p&gt;可以通过以下操作添加链接到 GitHub 仓库的动态卡片，在页面加载时，仓库信息会从 GitHub API 获取。 例如：&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;walterfang12/blog&quot;}&lt;/p&gt;
&lt;p&gt;使用代码 &lt;code&gt;::github{repo=&quot;walterfang12/blog&quot;}&lt;/code&gt; 创建 GitHub 仓库卡片。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::github{repo=&quot;walterfang12/blog&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;提醒框&lt;/h3&gt;
&lt;p&gt;支持以下类型的提醒框：&lt;code&gt;note&lt;/code&gt; &lt;code&gt;tip&lt;/code&gt; &lt;code&gt;important&lt;/code&gt; &lt;code&gt;warning&lt;/code&gt; &lt;code&gt;caution&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;:::note
突出显示用户应该考虑的信息，即使在快速浏览时也是如此。
:::&lt;/p&gt;
&lt;p&gt;:::tip
可选信息，帮助用户更成功。
:::&lt;/p&gt;
&lt;p&gt;:::important
用户成功所必需的关键信息。
:::&lt;/p&gt;
&lt;p&gt;:::warning
由于潜在风险需要用户立即注意的关键内容。
:::&lt;/p&gt;
&lt;p&gt;:::caution
行动的负面潜在后果。
:::&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基本语法&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;:::note
突出显示用户应该考虑的信息，即使在快速浏览时也是如此。
:::

:::tip
可选信息，帮助用户更成功。
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;自定义标题&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以自定义提醒框的标题。&lt;/p&gt;
&lt;p&gt;:::note[我的自定义标题]
这是一个带有自定义标题的注释。
:::&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:::note[我的自定义标题]
这是一个带有自定义标题的注释。
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;GitHub 语法&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
也支持 &lt;a href=&quot;https://github.com/orgs/community/discussions/16925&quot;&gt;GitHub 语法&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; [!NOTE]
&amp;gt; 也支持 GitHub 语法。

&amp;gt; [!TIP]
&amp;gt; 也支持 GitHub 语法。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;剧透&lt;/h3&gt;
&lt;p&gt;您可以为文本添加剧透。文本也支持 &lt;strong&gt;Markdown&lt;/strong&gt; 语法。&lt;/p&gt;
&lt;p&gt;内容 :spoiler[被隐藏了 &lt;strong&gt;哈哈&lt;/strong&gt;]！&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;内容 :spoiler[被隐藏了 **哈哈**]！
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Mermaid 图表&lt;/h2&gt;
&lt;h3&gt;流程图示例&lt;/h3&gt;
&lt;p&gt;流程图非常适合表示流程或算法步骤。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;graph TD
    A[开始] --&amp;gt; B{条件检查}
    B --&amp;gt;|是| C[处理步骤 1]
    B --&amp;gt;|否| D[处理步骤 2]
    C --&amp;gt; E[子过程]
    D --&amp;gt; E
    subgraph E [子过程详情]
        E1[子步骤 1] --&amp;gt; E2[子步骤 2]
        E2 --&amp;gt; E3[子步骤 3]
    end
    E --&amp;gt; F{另一个决策}
    F --&amp;gt;|选项 1| G[结果 1]
    F --&amp;gt;|选项 2| H[结果 2]
    F --&amp;gt;|选项 3| I[结果 3]
    G --&amp;gt; J[结束]
    H --&amp;gt; J
    I --&amp;gt; J
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;时序图示例&lt;/h3&gt;
&lt;p&gt;时序图显示对象之间随时间的交互。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sequenceDiagram
    participant User as 用户
    participant WebApp as 网页应用
    participant Server as 服务器
    participant Database as 数据库

    User-&amp;gt;&amp;gt;WebApp: 提交登录请求
    WebApp-&amp;gt;&amp;gt;Server: 发送认证请求
    Server-&amp;gt;&amp;gt;Database: 查询用户凭据
    Database--&amp;gt;&amp;gt;Server: 返回用户数据
    Server--&amp;gt;&amp;gt;WebApp: 返回认证结果
    
    alt 认证成功
        WebApp-&amp;gt;&amp;gt;User: 显示欢迎页面
        WebApp-&amp;gt;&amp;gt;Server: 请求用户数据
        Server-&amp;gt;&amp;gt;Database: 获取用户偏好
        Database--&amp;gt;&amp;gt;Server: 返回偏好设置
        Server--&amp;gt;&amp;gt;WebApp: 返回用户数据
        WebApp-&amp;gt;&amp;gt;User: 加载个性化界面
    else 认证失败
        WebApp-&amp;gt;&amp;gt;User: 显示错误消息
        WebApp-&amp;gt;&amp;gt;User: 提示重新输入
    end
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;甘特图示例&lt;/h3&gt;
&lt;p&gt;甘特图非常适合显示项目进度和时间线。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gantt
    title 网站开发项目时间线
    dateFormat  YYYY-MM-DD
    axisFormat  %m/%d
    
    section 设计阶段
    需求分析      :a1, 2023-10-01, 7d
    UI设计                 :a2, after a1, 10d
    原型创建        :a3, after a2, 5d
    
    section 开发阶段
    前端开发      :b1, 2023-10-20, 15d
    后端开发       :b2, after a2, 18d
    数据库设计           :b3, after a1, 12d
    
    section 测试阶段
    单元测试              :c1, after b1, 8d
    集成测试       :c2, after b2, 10d
    用户验收测试   :c3, after c2, 7d
    
    section 部署
    生产环境部署     :d1, after c3, 3d
    发布                    :milestone, after d1, 0d
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;类图示例&lt;/h3&gt;
&lt;p&gt;类图显示系统的静态结构，包括类、属性、方法及其关系。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;classDiagram
    class User {
        +String username
        +String password
        +String email
        +Boolean active
        +login()
        +logout()
        +updateProfile()
    }
    
    class Article {
        +String title
        +String content
        +Date publishDate
        +Boolean published
        +publish()
        +edit()
        +delete()
    }
    
    class Comment {
        +String content
        +Date commentDate
        +addComment()
        +deleteComment()
    }
    
    class Category {
        +String name
        +String description
        +addArticle()
        +removeArticle()
    }
    
    User &quot;1&quot; -- &quot;*&quot; Article : 写作
    User &quot;1&quot; -- &quot;*&quot; Comment : 发表
    Article &quot;1&quot; -- &quot;*&quot; Comment : 拥有
    Article &quot;1&quot; -- &quot;*&quot; Category : 属于
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;状态图示例&lt;/h3&gt;
&lt;p&gt;状态图显示对象在其生命周期中经历的状态序列。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;stateDiagram-v2
    [*] --&amp;gt; 草稿
    
    草稿 --&amp;gt; 审核中 : 提交
    审核中 --&amp;gt; 草稿 : 拒绝
    审核中 --&amp;gt; 已批准 : 批准
    已批准 --&amp;gt; 已发布 : 发布
    已发布 --&amp;gt; 已归档 : 归档
    已发布 --&amp;gt; 草稿 : 撤回
    
    state 已发布 {
        [*] --&amp;gt; 活跃
        活跃 --&amp;gt; 隐藏 : 临时隐藏
        隐藏 --&amp;gt; 活跃 : 恢复
        活跃 --&amp;gt; [*]
        隐藏 --&amp;gt; [*]
    }
    
    已归档 --&amp;gt; [*]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;饼图示例&lt;/h3&gt;
&lt;p&gt;饼图非常适合显示比例和百分比数据。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pie title 网站流量来源分析
    &quot;搜索引擎&quot; : 45.6
    &quot;直接访问&quot; : 30.1
    &quot;社交媒体&quot; : 15.3
    &quot;推荐链接&quot; : 6.4
    &quot;其他来源&quot; : 2.6
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;嵌入视频&lt;/h2&gt;
&lt;p&gt;只需从 YouTube 或其他平台复制嵌入代码，然后将其粘贴到 markdown 文件中。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: 在文章中嵌入视频
published: 2023-10-19
// ...
---

&amp;lt;iframe width=&quot;100%&quot; height=&quot;468&quot; src=&quot;https://www.youtube.com/embed/5gIf0_xpFPI?si=N1WTorLKL0uwLsU_&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;YouTube&lt;/h3&gt;
&lt;p&gt;&amp;lt;iframe width=&quot;100%&quot; height=&quot;468&quot; src=&quot;https://www.youtube.com/embed/5gIf0_xpFPI?si=N1WTorLKL0uwLsU_&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/p&gt;
&lt;h3&gt;Bilibili&lt;/h3&gt;
&lt;p&gt;&amp;lt;iframe width=&quot;100%&quot; height=&quot;468&quot; src=&quot;//player.bilibili.com/player.html?bvid=BV1fK4y1s7Qf&amp;amp;p=1&amp;amp;autoplay=0&quot; scrolling=&quot;no&quot; border=&quot;0&quot; frameborder=&quot;no&quot; framespacing=&quot;0&quot; allowfullscreen=&quot;true&quot; &amp;amp;autoplay=0&amp;gt; &amp;lt;/iframe&amp;gt;&lt;/p&gt;
&lt;h2&gt;文章的 Front-matter&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;---
title: 我的第一篇博客文章
published: 2023-09-09
description: 这是我新 Astro 博客的第一篇文章。
image: ./cover.jpg
tags: [前端, 开发]
category: 前端开发
draft: false
---
&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;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章标题。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;published&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章发布日期。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pinned&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;是否将此文章置顶在文章列表顶部。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章的简短描述。显示在首页上。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;image&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章封面图片路径。&amp;lt;br/&amp;gt;1. 以 &lt;code&gt;http://&lt;/code&gt; 或 &lt;code&gt;https://&lt;/code&gt; 开头：使用网络图片&amp;lt;br/&amp;gt;2. 以 &lt;code&gt;/&lt;/code&gt; 开头：&lt;code&gt;public&lt;/code&gt; 目录中的图片&amp;lt;br/&amp;gt;3. 不带任何前缀：相对于 markdown 文件的路径&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章标签。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;category&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章分类。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;licenseName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章内容的许可证名称。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;author&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章作者。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sourceLink&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文章内容的来源链接或参考。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;draft&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;如果这篇文章仍是草稿，则不会显示。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;slug&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;自定义文章 URL 路径。如果不设置，将使用文件名作为 URL。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;文章文件的放置位置&lt;/h2&gt;
&lt;p&gt;您的文章文件应放置在 &lt;code&gt;src/content/posts/&lt;/code&gt; 目录中。您也可以创建子目录来更好地组织您的文章和资源。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;src/content/posts/
├── post-1.md
└── post-2/
    ├── cover.png
    └── index.md
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;自定义文章 URL (Slug)&lt;/h2&gt;
&lt;h3&gt;什么是 Slug？&lt;/h3&gt;
&lt;p&gt;Slug 是文章 URL 路径的自定义部分。如果不设置 slug，系统将使用文件名作为 URL。&lt;/p&gt;
&lt;h3&gt;Slug 使用示例&lt;/h3&gt;
&lt;h4&gt;示例 1：使用文件名作为 URL&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;---
title: 我的第一篇博客文章
published: 2023-09-09
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;文件：&lt;code&gt;src/content/posts/my-first-blog-post.md&lt;/code&gt;
URL：&lt;code&gt;/posts/my-first-blog-post&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;示例 2：自定义 Slug&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;---
title: 我的第一篇博客文章
published: 2023-09-09
slug: hello-world
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;文件：&lt;code&gt;src/content/posts/my-first-blog-post.md&lt;/code&gt;
URL：&lt;code&gt;/posts/hello-world&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;示例 3：中文标题使用英文 Slug&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;---
title: 如何使用 Firefly 博客主题
published: 2023-09-09
slug: how-to-use-firefly-blog-theme
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;文件：&lt;code&gt;src/content/posts/firefly-guide.md&lt;/code&gt;
URL：&lt;code&gt;/posts/how-to-use-firefly-blog-theme&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Slug 使用建议&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;使用英文和连字符&lt;/strong&gt;：&lt;code&gt;my-awesome-post&lt;/code&gt; 而不是 &lt;code&gt;my awesome post&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;保持简洁&lt;/strong&gt;：避免过长的 slug&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;具有描述性&lt;/strong&gt;：让 URL 能够反映文章内容&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;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;注意事项&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Slug 一旦设置并发布，建议不要随意更改，以免影响 SEO 和已存在的链接&lt;/li&gt;
&lt;li&gt;如果多个文章使用相同的 slug，后面的文章会覆盖前面的&lt;/li&gt;
&lt;li&gt;Slug 会自动转换为小写&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>活成常人：我的2025</title><link>https://blog.walterfang.site/posts/my-2025/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/my-2025/</guid><pubDate>Sat, 27 Dec 2025 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;ul&gt;
&lt;li&gt;年初入坑 CS2 并加入 Arch 神教。&lt;/li&gt;
&lt;li&gt;3、4 月左右开学并迎接 LingmoOS Team 新成员。&lt;/li&gt;
&lt;li&gt;5、6 月参加市英语、数学素养营并分别取得 3 星、4 星。&lt;/li&gt;
&lt;li&gt;6 月底跳槽另一所外地学校（中考前暂时），并开始异地寄宿学习生活，退出 Arch 神教并回归 Windows 11。&lt;/li&gt;
&lt;li&gt;7 月底去蓉找了 &lt;a href=&quot;https://www.imken.moe/&quot;&gt;Imken&lt;/a&gt;。（大概是今年最开心的一天）&lt;/li&gt;
&lt;li&gt;完美错过 10 月的 CCF CSP 并在日后的 vp 中取得 J2 300pts 和 S2 170pts 的成绩。&lt;/li&gt;
&lt;li&gt;下半年实现高联数学从 0 到 0.1 的突破，并在今年的联赛中取得一试 44 pts 和二试 0 的好成绩。&lt;/li&gt;
&lt;li&gt;年底清理了大量无必要的社交平台好友，并且重回 Arch 神教且开始使用（目前体验过最好的）Wayland 平铺式窗口合成器 &lt;a href=&quot;https://github.com/YaLTeR/niri&quot;&gt;Niri&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;杂七杂八的意义不大的就不放了。&lt;/p&gt;
&lt;h2&gt;关于生活方面&lt;/h2&gt;
&lt;p&gt;从去年夏天加入 Lingmo OS Team 到现在为止也有一年多了吧，这中间通过交流一群（这也是我唯一活跃的群聊）认识了很多人，包括 &lt;a href=&quot;https://github.com/OrPudding/&quot;&gt;OrPudding&lt;/a&gt; 等几位神佬，同时也浅入了 Vela 圈，同时也接触了对于技术方面很懂/一般/不懂/笨笨的人，跟群友的接触中离赛博孔子和赛博傻逼又近了一步（x）。&lt;/p&gt;
&lt;p&gt;今年 7 月底的时候去了一趟蓉找 Imken。除去这次的话，我也已经一年半没出门旅行了。去看了烂尾楼，四院，然后去逛了金沙遗址博物馆，并在万象城试图给 Macbook 样机装 Homebrew 未果，然后蹭了 KFC 就回去了。&lt;/p&gt;
&lt;p&gt;去蓉那几天真的超级开心啊，感觉那会完全没有任何压力，可能算得上是我今年最开心最放松的时候了。其他时间我都是牛马。&lt;/p&gt;
&lt;p&gt;之后就跳槽了外地某中学（这里顺提一嘴到中考前为止是临时的，谣言不轻信）开始了寄宿学习生活。那边的学生成绩都是顶尖级别，我在其中学习就很吃力，压力也很大，并且从 9 月左右到现在在学校里也经历了很多从未设想的很使人心烦的事情，也看到了、参与了一些有关人情世故的纷争，又亲身经历了好几次有关乱七八糟的很让人心烦的事情。现在非常心累，无力。大概形容下就是无动于衷。对于眼前发生的事情完全无能为力又无法作任何反抗。&lt;/p&gt;
&lt;p&gt;差不多就这些吧。今年生活这方面倒还行，家庭也比较稳定，网络上（我身上）也没出啥大乱子，不过比较遗憾的是在蓉只呆了一天，没有去别的地方玩，放假的时候都在打游戏没干什么正事以及亲手葬送掉了和之前以为关系很好的朋友的友谊。&lt;/p&gt;
&lt;p&gt;接下来可能还会有国内出游 or 约面基的计划，不过看来是得在中考之后了。&lt;/p&gt;
&lt;p&gt;但是今年暑假我不会有任何空。&lt;/p&gt;
&lt;h2&gt;游戏方面&lt;/h2&gt;
&lt;h3&gt;音游&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Phigros&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今年实现了飞升！rks 从14出头涨到了 15.59（截至今日），同时也性了好几首之前望而生畏的 IN&amp;amp;AT 16，15也收了好几首，总的来说今年 Phi 进步超大（大部分音游时间确实也都在打 Phi）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Milthm&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;算是后来追起的移动端良作吧，剧情写的很不错，玩法也很新颖，大概是今年玩的第二多的移动端了。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arcaea/Lanota/Malody...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;剩下的移动端今年没怎么玩。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A Dance Of Fire And Ice&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;城镇宽判勉强过。两年了还是没爬出新手村啊。不过玩的也少。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;舞萌DX&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下半年刚入坑，还没玩明白。&lt;/p&gt;
&lt;h3&gt;Galgame&lt;/h3&gt;
&lt;p&gt;推完了冬树 &amp;amp; 冬树 After &amp;amp; 千恋万花 &amp;amp; 不存在的你和我，接下来可能会考虑退魔女的夜宴，不过得看有没有时间。个人感觉做的最好的是不存在的你和我。可能因为 Meta 比较合自己胃口。&lt;/p&gt;
&lt;h3&gt;其他的&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CS2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;寒假刚入坑，然后就染上了。一发不可收拾/wul
&lt;img src=&quot;./cs2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;魔法少女的魔女审判&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;第一次玩弹丸论破，很好玩，不过还没打完一周目。日后还会继续玩。&lt;/p&gt;
&lt;h2&gt;互联网方面&lt;/h2&gt;
&lt;p&gt;还是被动社交，并且现在不是很愿意扩列。不过如果跟我有不少共同话题也聊得来的话可以来找我。欢迎挂友链。&lt;/p&gt;
&lt;p&gt;目前应该是 QQ 和 Bilibili 最活跃，Steam 其次，其他平台不活跃。联系方式翻&lt;a href=&quot;https://blog.walterfang.site/about&quot;&gt;这里&lt;/a&gt;，戳主页那个大大的头像下面的按钮也可。&lt;/p&gt;
&lt;h2&gt;技术方面&lt;/h2&gt;
&lt;p&gt;我也很想成为一位有点技术力的轻度 Developer，可惜我不配。&lt;/p&gt;
&lt;p&gt;身边的很多人都会很多东西，也各自有很多自己的小项目，但我基本上没有。&lt;/p&gt;
&lt;p&gt;今年到目前为止还会折腾的项目如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/walterfang12/LightlyShaders-Plasma6&quot;&gt;LightlyShaders-Plasma6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在我的 Github 上公开了，本来是寒假刚入 Arch 用 KDE 那会为了窗口圆角写的，后来换 Niri 了学业也忙就荒废了。以后有空偶尔会更新。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Autonomic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下半年换了米环9p 之后为了控制在校使用时间写的一个锁机类快应用，还不是很完善，写好了会公开。（可能要圈点米）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LingmoArm&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;应该是我有生以来整过最大的活了。把自家的 &lt;a href=&quot;https://www.lingmo.org/&quot;&gt;Lingmo OS&lt;/a&gt; 移植到 ARM 平台上，现在已经完成了一小半，预计年假时完成。&lt;/p&gt;
&lt;p&gt;剩下的先不放了吧，省的到时候又鸽子。&lt;/p&gt;
&lt;h2&gt;关于学业&lt;/h2&gt;
&lt;p&gt;非常感谢新学校的全体老师、教练（新英语老师除外），我的 whk 相比以前提升了很多，社会背起来也快了，语文也进步了，就是现在科学有点拖后腿。特别谢谢两位 MO 教练，帮我用少量时间追上了大量高联的知识。我也想努力在 MO 这条路上继续走下去！&lt;/p&gt;
&lt;p&gt;这里还要预祝自己减肥成功，中考加油。&lt;/p&gt;
&lt;h2&gt;另外的&lt;/h2&gt;
&lt;p&gt;今年总体来说虽然波折很多，但是也算是总体比较顺利的一年。收到了新学校老师 &amp;amp; 教练组的生日祝福，重新捡起了和 Imken 的关系（和我一样因为学业原因很难聊上），认识了几位新的网友，和原校同学的关系经历了⬆⬇⬆⬇⬆的过程，认识了几位神佬以及被几位陌生人 &amp;amp; 萌新认作佬并收获了中考祝福（很感动很感谢）。&lt;/p&gt;
&lt;p&gt;音乐平台切换到了 wyy，歌品提升不少，同时也多了解了一些技术圈的知识，换上了 AtlasOS + Arch(Niri) 的双系统配置（舒服！）&lt;/p&gt;
&lt;p&gt;特别感谢（无先后顺序）我自己，我的家长，Imken，Lingmo OS 开发组全体成员，scm，Ashivd（原校同学），（原校同学），（原校同学），Lingmo OS 交流 1 群几位聊得来的群友，刮风落雪，以及 machrui。&lt;/p&gt;
&lt;h2&gt;浏览器自动补全&lt;/h2&gt;
&lt;p&gt;由于数据来自 &lt;code&gt;Google Chrome&lt;/code&gt; 但我今年用了小半年的 &lt;code&gt;Zen Browser&lt;/code&gt; 和 &lt;code&gt;Qute Browser&lt;/code&gt; 所以数据可能有一定误差，图一乐就行。&lt;/p&gt;
&lt;p&gt;A: &lt;code&gt;arch.icekylin.online&lt;/code&gt;
这个是一点都不意外吧，毕竟从今年年初入 &lt;code&gt;Arch&lt;/code&gt; 神教开始自己好说歹说也起码装了百来次 &lt;code&gt;Arch&lt;/code&gt;，基本每次都要翻这个教程。&lt;/p&gt;
&lt;p&gt;B: &lt;code&gt;blog.imken.moe/&lt;/code&gt;
蛤？我今年看了这么多次 Imken 博客吗？
我本来都已经做好准备是B站了（）&lt;/p&gt;
&lt;p&gt;C: &lt;code&gt;chat.deepseek.com&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;D: &lt;code&gt;dg6.me&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;E: &lt;code&gt;evolution-x.org&lt;/code&gt;
小小的意外吧，本来以为会是其他网站。不过 Evolution X 确实是非常优秀的类原生项目，感觉仅次于 RisingOS。非常推荐一玩！&lt;/p&gt;
&lt;p&gt;F: &lt;code&gt;fanyi.baidu.com&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;G: &lt;code&gt;github.com&lt;/code&gt;
虽然但是我今年几乎 $0$ commit /dk/dk/dk&lt;/p&gt;
&lt;p&gt;H: &lt;code&gt;https://blog.walterfang.site/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I: &lt;code&gt;imken.moe/&lt;/code&gt;
两发！&lt;/p&gt;
&lt;p&gt;J: &lt;code&gt;https://stackoverflow.com/questions/71616781/where-are-the-microsoft-visual-c-2015-2022-redistributable-x64-packages-inst&lt;/code&gt;
这个是因为 11 月某日游玩某游戏时被沟槽的 vc 依赖卡了几百次然后顺便上了几百次这个网站。&lt;/p&gt;
&lt;p&gt;K: &lt;code&gt;kiro.dev&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;L: &lt;code&gt;luogu.com.cn&lt;/code&gt;
正常发挥。尽管我已经退役一年多了。&lt;/p&gt;
&lt;p&gt;M: &lt;code&gt;mail.163.com&lt;/code&gt;
理论上来说其实是公司的企业邮箱用的多一点，但是网页邮箱使用频率确实 163 大于 gmail。&lt;/p&gt;
&lt;p&gt;N: &lt;code&gt;https://github.com/YaLTeR/niri&lt;/code&gt;
超级棒的 &lt;code&gt;Wayland&lt;/code&gt; 合成器！完全碾压 &lt;code&gt;Hyprland&lt;/code&gt;！&lt;/p&gt;
&lt;p&gt;O: &lt;code&gt;oi-wiki.org&lt;/code&gt;
尽管退役了但却是还是经常回去这里看看，我也不知道为啥（）&lt;/p&gt;
&lt;p&gt;P: &lt;code&gt;pixiv.net&lt;/code&gt;
[数据删除]&lt;/p&gt;
&lt;p&gt;Q: &lt;code&gt;blog.qwq.my&lt;/code&gt;
同事博客，偶尔会看看吧，主要是因为Q开头的网站基本没啥。&lt;/p&gt;
&lt;p&gt;R: &lt;code&gt;https://blog.rickyxrc.cc&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;S: &lt;code&gt;steamdb.info&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;T: &lt;code&gt;trae.ai&lt;/code&gt;
有点小意外，因为我只上过两次这个网站（&lt;/p&gt;
&lt;p&gt;U: &lt;code&gt;uupdump.net&lt;/code&gt;
合理吧，99%的人下 Windows iso 的地方。（剩下1%是msdn）&lt;/p&gt;
&lt;p&gt;V: &lt;code&gt;vscodium.com&lt;/code&gt;
我现在正在敲这行字所使用的软件（&lt;/p&gt;
&lt;p&gt;W: &lt;code&gt;waveshare.net/wiki/RP2040-LCD-1.28&lt;/code&gt;
一个早就买来的小玩具了，暑假那会写了个轻量的计步检测，算是 micropy 毕业作了（（&lt;/p&gt;
&lt;p&gt;X: &lt;code&gt;x.com/__Walter_Fang__&lt;/code&gt;
除了 qzone 意外我唯一活跃的社交平台。&lt;/p&gt;
&lt;p&gt;Y: &lt;code&gt;yhcres.top&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Z: &lt;code&gt;zhihu.com/question/491927339&lt;/code&gt;
我目前看到过质量最好的帖子。&lt;/p&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>2507成都行</title><link>https://blog.walterfang.site/posts/2507-chengdu/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/2507-chengdu/</guid><description>2025年7月底成都游记。</description><pubDate>Sat, 09 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;图片大小晚点调，初稿一坨过两天润色&lt;/h1&gt;
&lt;p&gt;首先你可以通过文章发布时间看出我有多鸽。&lt;/p&gt;
&lt;h3&gt;Day 0&lt;/h3&gt;
&lt;p&gt;在机构做了一张 $2017$ 高考数学真卷，喜提 $109/150$ pts,不过算错 $23$ 分。
九点多到家，顺便和 Imken 约好了 $27$ 号在塔子山公园地铁站 $\text{D}$ 出口碰头。由于第二天要半夜起来到栎社赶飞机，所以十点左右就睡了。&lt;/p&gt;
&lt;h3&gt;Day 1&lt;/h3&gt;
&lt;p&gt;凌晨 $3$ 点起来出发，我爸送我和我妈去宁波栎社国际机场，到机场大概 $5$ 点左右。然后猛然想起忘了给 Imken 带礼物，于是匆忙在机场旁边的礼品店买了一盒茶香糕，然后起飞。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/imgs/2507_cd/1.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;大概十点左右下飞机然后赶到酒店，由于早起实在太累了索性跟我妈在酒店点了个外卖顺便补了个午觉。起来后去天府广场地下的夜市找了点吃的当晚餐，然后饭后带我妈去 IFS 看了著名的熊猫屁股顺便在太古里转了转。回来后顺便和 Imken 约了下第二天见面的地点，洗洗睡了。&lt;/p&gt;
&lt;p&gt;（回来路上碰到了CCB）
&lt;img src=&quot;/imgs/2507_cd/10.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/11.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/4.jpeg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/5.jpeg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/6.jpeg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/7.jpeg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/8.jpeg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/9.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Day 3&lt;/h3&gt;
&lt;p&gt;由于要面基比较兴奋所以起得比较早，大概八点半就到地铁站了，九点多跟 Imken 碰上了头，先坐地铁去看了著名的烂尾楼，然后跟着 Imken 在三环外转了大半圈并路过了四院，最后在茶店子（好像）坐了新修的 $27$ 号线去看了西部郊区的外景。（好看）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/imgs/2507_cd/12.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/13.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/14.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/15.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/16.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/17.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/18.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/19.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/20.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/21.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后差不多就中午了，回天府广场地下吃午饭，神秘的是在宁波就有的一模一样的品牌在成都竟然没有一道菜不是辣的，最后只好无奈吃了辣的。午饭的时候顺便商量好了下午去金沙遗址博物馆（成都其他大多名气景点以前都去过了）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/imgs/2507_cd/22.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/23.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;大概下午一点多到了地铁站出口，在博物馆逛了一个多小时。中间 Imken 反复问了好几遍 ta 有没有提起“馆内是否有临时展”，有些神秘了。更神秘的是在临时展厅居然看到了从咱慈溪市博借去展览的青瓷。&lt;/p&gt;
&lt;p&gt;顺便提醒一下正在阅读本文的各位。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/imgs/2507_cd/24.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/25.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/26.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/27.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/28.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/29.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/30.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/31.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/32.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/33.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/34.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/35.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/36.jpg&quot; alt=&quot;这倒是提醒我了&quot; /&gt;&lt;/p&gt;
&lt;p&gt;大概三点多出博物馆，然后回市区的路上我突发奇想问了问 Ricky 在不在，于是 Imken 就把 ta 叫了出来，于是我们三个人就在万象城的 Apple 官方店面积了。等人的时候我突发奇想试图在 Macbook Pro 上跑 &lt;code&gt;neofetch&lt;/code&gt;，结果安装 &lt;code&gt;Homebrew&lt;/code&gt; 的时候直接要求装一整个 &lt;code&gt;XCode&lt;/code&gt;，没招了。隔壁 Imken 试图在上面跑 &lt;code&gt;cargo build&lt;/code&gt; 但是忘记了 &lt;code&gt;rustup&lt;/code&gt; 的地址好像（？&lt;/p&gt;
&lt;p&gt;没多久 Ricky 到了，我们先是在 Apple 店里拍了 &lt;code&gt;gh profile&lt;/code&gt; 的合照，然后 Ricky 很大方的提出要请客吃 KFC，于是我便&lt;s&gt;很不要脸的&lt;/s&gt;蹭了一个九珍圣代和一堆鸡块（（&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/imgs/2507_cd/37.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/38.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/39.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/40.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/41.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/42.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;由于 Ricky 没法留下来吃晚饭，所以两个人送我到人民广场北（我酒店附近）就走了，临走前把礼物给了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这次面积真的超开心！非常非常期待下次！！&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Day 4~7&lt;/h3&gt;
&lt;p&gt;后面几天陪我妈去了川西藏族自治区那边玩，中间设备反复炸，路上赶车时间很长也挺累的，这里就放几张照片了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/imgs/2507_cd/43.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/44.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/45.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/46.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/47.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/48.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/50.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/51.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/52.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/53.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/54.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/55.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/56.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/60.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/61.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/62.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/63.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;后面放一点最后一天晚上赶专线从双流到天府以及返程的照片。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/imgs/2507_cd/64.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/65.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/66.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/67.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/68.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/69.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/70.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/71.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/72.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/73.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/74.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/75.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/imgs/2507_cd/76.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>CSP 2024 游记 &amp; 退役记</title><link>https://blog.walterfang.site/posts/retired/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/retired/</guid><pubDate>Mon, 28 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;还在施工&lt;/h1&gt;
&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;2023年9月16日，$\text{CSP}$ $2023$ 第 $1$ 轮结束后，我暂时退役。2024年10月27日，$\text{CSP}$ $2024$ 第 $2$ 轮结束后我的 $\text{OI}$ 生涯正式结束。&lt;/p&gt;
&lt;p&gt;$\text{Day}$ $0$&lt;/p&gt;
&lt;p&gt;卷 whk。上课到8：50，回家简单复习下睡了&lt;/p&gt;
&lt;p&gt;$\text{Day}$ $1$&lt;/p&gt;
&lt;p&gt;醒的很早，7：45出发去余中，路上简单翻了下一本通和梦熊满分之路的错题和自己整理的考前复习提纲，大概9：00进考场。校门口碰到了 zhz，刚好在一个考场，一起进去了。&lt;/p&gt;
&lt;p&gt;上午考场在知行楼恶臭 $114$ 教师，同考场的还有 zhz 和 xyy &lt;s&gt;，极其幸运的吸走了 xyy 的 rp&lt;/s&gt;。考前碰到了 &lt;code&gt;SL&lt;/code&gt; 机房 $2023$ 界所有同学和傅里叶，大概9：25准备开考。这个时候烦人的雨开始下了。&lt;/p&gt;
&lt;p&gt;这次初赛来送水的 xxs 是真的多，大半个考场的 xxs。zhz 右边的神金赛时持续发电，唱歌转身抄答案，监考老师居然没管。&lt;/p&gt;
&lt;p&gt;11：30交卷。收卷的时候撇到 xyy 把 $\text{MB}$ 和 $\text{bit}$ 进率算错了/cf。&lt;/p&gt;
&lt;p&gt;跟傅里叶一起出的考场，简单对了几题感觉我们都能在 $95$ $\text{pts}$ 以上就放心了。雨还没停，傅里叶好心借我伞但是由于我太高了所以婉拒了。&lt;/p&gt;
&lt;p&gt;中午跟父母去一家海鲜楼随便吃了点，顺便估了 lg 的分，大概 $95.5$ $\text{pts}$。然后去市政府对面的公园&lt;s&gt;复习了一会&lt;/s&gt;开了 $1$ 小时 Milthm 和 Phi，1：50左右出发回余中，路上看了下 &lt;code&gt;Linux&lt;/code&gt; 一些基本指令。&lt;/p&gt;
&lt;p&gt;到校门发现没有熟人，索性一个人进去。下午考场在 $4$ 号教学楼 $305$。一上楼就看见了 fjz 和 zkn，&lt;s&gt;激动地冲上去抱在了一起&lt;/s&gt;。下午和 hxz 一个考场，xxs 还是和上午一样的多，不过不影响我发挥。&lt;/p&gt;
&lt;p&gt;4：30交卷，走出考场又碰到了 &lt;code&gt;SL&lt;/code&gt; 机房所有同学，索性一起出来了。感觉都比较稳，yty 说他有点发挥失误，安慰了下。听他们 &lt;code&gt;SL&lt;/code&gt; 的人说初二比完也都退了，有点难过。出去之后对了下 lg 的答案，$66$ $\text{pts}$，&lt;s&gt;还挺吉利&lt;/s&gt;。晚上还有课，急着先出发了。路上和 lottle、ch和傅里叶稍微聊了几句。&lt;/p&gt;
&lt;p&gt;到慈溪时间有点晚了，索性罗森买了个饭团赶紧上课，今天上的二次函数倒挺简单，感觉课上 zqy 和 syf 有点兴奋，同时了解到大概有好几个人提高组估分 $60^+$ $\text{pts}$，心沉了。回家开 abc，&lt;s&gt;但是只开了 2 题&lt;/s&gt;。&lt;/p&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>题解：P4526 【模板】自适应辛普森法 2</title><link>https://blog.walterfang.site/posts/solution-p4526/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-p4526/</guid><pubDate>Mon, 21 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;自适应辛普森法题解与学习笔记&lt;/h2&gt;
&lt;h3&gt;前言&lt;/h3&gt;
&lt;p&gt;首先看到&lt;a href=&quot;https://www.luogu.com.cn/problem/P4525&quot;&gt;P4525 【模板】自适应辛普森法 1&lt;/a&gt;。这题是很好的辛普森板题，但是用牛顿-莱布尼茨公式就可以算出答案：&lt;/p&gt;
&lt;p&gt;当 $a=0$ 时，
$$
\begin{aligned}
\int \frac{c x+d}{a x+b} d x
&amp;amp; =\int \frac{c x+d}{b} d x \
&amp;amp; =\frac{1}{b}\left(\int c x d x\right)+\frac{1}{b}\left(\int d d x\right) \
&amp;amp; =\frac{c x^2}{2 b}+\frac{d x}{b}
\end{aligned}
$$
当 $a\not=0$ 时，
$$
\begin{aligned}
\int \frac{c x+d}{a x+b} d x
&amp;amp; =\int \frac{\frac{c}{a}(a x+b)-\frac{b c}{a}+d}{a x+b} d x \
&amp;amp; =\left(\int \frac{c}{a} d x\right)+\left(\left(-\frac{b c}{a}+d\right) \int \frac{1}{a x+b} d x\right) \
&amp;amp; =\frac{c x}{a}+(d-\frac{b c}{a}) \frac{\ln |a x+b|}{a}
\end{aligned}
$$
虽然这样我们就可以通过这题，但是肯定还要讲一下自适应辛普森法。&lt;/p&gt;
&lt;h3&gt;算法介绍&lt;/h3&gt;
&lt;p&gt;$\text{Simpson}$ 法的思想是将原曲线近似为一段段抛物线，再求每一段的面积。具体地，我们令 $f(x)=\frac{c x+d}{a x+b}, g(x)=A x^2+B x+C$ 为拟合函数，则有
$$
\begin{aligned}
\int_L^R f(x) d x &amp;amp; \approx \int_L^R g(x) \
&amp;amp; =\frac{A}{3}\left(b^3-a^3\right)+\frac{B}{2}\left(b^2-a^2\right)+C(b-a) \
&amp;amp; =\frac{b-a}{6}\left(A a^2+B a+C+A b^2+B b+C+A(b-a)^2+2B(b-a)+4 C\right) \
&amp;amp; =\frac{b-a}{6}\left(f(a)+f(b)+f\left(\frac{b-a}{2}\right)\right)
\end{aligned}
$$
介绍完 $\text{Simpson}$ 法后我们再回过头看这题。&lt;/p&gt;
&lt;h3&gt;题解&lt;/h3&gt;
&lt;p&gt;题目要求$\int_0^{\infty}x^{\frac{a}{x}-x}\text{d}x$，肯定不能用牛顿-莱布尼茨公式。经过讨论可得：&lt;/p&gt;
&lt;p&gt;当 $a&amp;lt;0$ 时，$\lim _{x \rightarrow 0} x^{\frac{a-x^2}{x}}=e^{\lim _{x \rightarrow 0} \frac{a-x^2}{x} \ln x}=+\infty$ ，原函数发散，输出 $\text{orz}$。&lt;/p&gt;
&lt;p&gt;当 $a \geq 0$ 时。
$\lim _{x \rightarrow+\infty} x^2 x^{\frac{a-x^2}{x}}=e^{\lim _{x \rightarrow \infty} \frac{a-x^2+2 x}{x} \ln x}=0$ ，原函数收敛。用 $\text{Simpson}$ 法解决即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
const double eps=1e-10;
double a;
double f(double x){return pow(x,a/x-x);}
double Simpson(double l,double r){return (f(l)+f(r)+4*f((l+r)/2))*(r-l)/6;}
double Query(double l,double r,double t){
 double mid=(l+r)/2,x=Simpson(l,mid),y=Simpson(mid,r);
 if(fabs(x+y-t)&amp;lt;=1e-9)return t;
 else return Query(l,mid,x)+Query(mid,r,y);
}
int main(){
 cin&amp;gt;&amp;gt;a;
 if(a&amp;lt;0)return cout&amp;lt;&amp;lt;&quot;orz&quot;,0;
 cout&amp;lt;&amp;lt;fixed&amp;lt;&amp;lt;setprecision(5)&amp;lt;&amp;lt;Query(eps,20,Simpson(eps,20));
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>题解：P11214 【MX-J8-T2】黑洞</title><link>https://blog.walterfang.site/posts/solution-p11214/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-p11214/</guid><pubDate>Sun, 20 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;前言&lt;/h3&gt;
&lt;p&gt;优化过的暴搜时间复杂度 $O(2^n)$，理论过不了，但是过了。傻逼数据组。&lt;/p&gt;
&lt;h3&gt;题意&lt;/h3&gt;
&lt;p&gt;给定 $n$ 及 $n$ 个正整数 $m_i$ 和 $n$ 个正整数 $a_i$，保证 $a_i\leq m_i$。&lt;/p&gt;
&lt;p&gt;构造长度为 $n$ 的数组 $b$ 使得存在一个整数 $k \geq 0$，使得对每个 $1 \leq i \leq n$，都有 $\lvert a_i - b_i \rvert = k$ 且 $b_i\leq m_i$。&lt;/p&gt;
&lt;p&gt;试求出 $b_i$ 所有的可能的数量总和，对 $10^9+7$ 取模。&lt;/p&gt;
&lt;h3&gt;解析&lt;/h3&gt;
&lt;p&gt;观察不等式 $\lvert a_i-b_i\rvert=k$，注意到对于每个数只有加和减两种可能，暴搜算一遍即可。&lt;/p&gt;
&lt;p&gt;当然这样是会超时的，所以我们要考虑优化。注意到每一次能将每个数改变多少只取决于最小的一个，故按可改变范围的最小值排序，搜到后面的最小值超过了当前最小值时即可中止。&lt;/p&gt;
&lt;h3&gt;代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
typedef long long ll;
const ll N=1e6+10,p=1e9+7,inf=1e18;
ll n,i,x,ans,m[N],table[N],f[N];
struct Node{ll x,y;}a[N];
void dfs(ll x,ll dep){
 if(dep&amp;gt;n)return (ans+=x)%=p,void();
 if(x&amp;lt;=f[dep])return (ans+=x*table[n-dep+1]%p)%=p,void();
 dfs(min(x,a[dep].x),dep+1);dfs(min(x,a[dep].y),dep+1);
}
int main(){
 cin&amp;gt;&amp;gt;n;table[0]=ans=1;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;m[i],table[i]=(table[i-1]&amp;lt;&amp;lt;1)%p;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;x,a[i].x=m[i]-x,a[i].y=x-1;
 stable_sort(a+1,a+1+n,[](Node x,Node y){return min(x.x,x.y)&amp;lt;min(y.x,y.y);});
 f[n+1]=inf;
 for(i=n;i;i--)f[i]=min(f[i+1],min(a[i].x,a[i].y));
 dfs(inf,1);
 cout&amp;lt;&amp;lt;ans;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>题解：P11217 【MX-S4-T1】「yyOI R2」youyou 的垃圾桶</title><link>https://blog.walterfang.site/posts/solution-p11217/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-p11217/</guid><pubDate>Sun, 20 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;前言&lt;/h3&gt;
&lt;p&gt;这题卡人的地方很多，做法是线段树加二分。&lt;/p&gt;
&lt;p&gt;听说标程时间复杂度线性，期待住了。&lt;/p&gt;
&lt;h3&gt;解析&lt;/h3&gt;
&lt;p&gt;读完题再结合数据范围即可发现每个垃圾桶的伤害数组要用线段树或树状数组维护。这里我开了一个线段树。然后计算每场战斗的评分就需要二分了。我们二分查找一个尽可能大的位置 $p$ 使得 $s\times2^p\leq W$，其中 $s$ 表示当前这轮战斗每个垃圾桶的伤害总和。得出 $p$ 之后的输出直接调用线段树即可。注意若伤害刚好等于 $W$ 时要加个特判。&lt;/p&gt;
&lt;h3&gt;几个坑点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;$1$ 要写成 &lt;code&gt;unsigned long long&lt;/code&gt; 类型不然会炸掉 $10$ 分。&lt;/li&gt;
&lt;li&gt;要写快读不然实测 $2$ 秒的程序会跑到 $10$ 秒。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;代码&lt;/h3&gt;
&lt;p&gt;写的有点丑了。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
#define ls p&amp;lt;&amp;lt;1ull
#define rs p&amp;lt;&amp;lt;1ull|1ull
namespace FastIO{
 char *p1,*p2,buf[1&amp;lt;&amp;lt;14];
 #define getchar() (p1==p2&amp;amp;&amp;amp;(p2=(p1=buf)+fread(buf,1,(1&amp;lt;&amp;lt;14),stdin),p1==p2)?EOF:*p1++)
 template &amp;lt;typename T&amp;gt;
 inline void read(T&amp;amp; x){
     x=0;
     register int t=1;
     register char ch=getchar();
     while(ch&amp;lt;&apos;0&apos;||ch&amp;gt;&apos;9&apos;){
         if(ch==&apos;-&apos;)t=-1;
         ch=getchar();
     }
     while(ch&amp;gt;=&apos;0&apos;&amp;amp;&amp;amp;ch&amp;lt;=&apos;9&apos;)x=(x&amp;lt;&amp;lt;1)+(x&amp;lt;&amp;lt;3)+(ch^48),ch=getchar();
     x*=t;
 }
 template &amp;lt;typename T&amp;gt;
 void write(T x){
     if(x&amp;lt;0)putchar(&apos;-&apos;),x=-x;
     if(x&amp;gt;9)write(x/10);
     putchar(x%10^48);
 }
 template &amp;lt;typename T&amp;gt;
 inline void writeln(T x,char sep=&apos;\n&apos;){
  write(x);putchar(sep);
 }
}
using namespace FastIO;
using namespace std;
typedef long long ll;
const ll N=2e5+10;
ll n,q,W,s,i,p,l,r,k,mid,a[N];
struct info{ll s,id,tag;}tr[N&amp;lt;&amp;lt;2];
void Build(ll p,ll l,ll r){
    if(l==r)return tr[p].s=a[l],tr[p].id=l,void();
    ll mid=(l+r)&amp;gt;&amp;gt;1ull;
    Build(ls,l,mid);Build(rs,mid+1ull,r);
    tr[p].s=tr[ls].s+tr[rs].s;
}
void Pushdown(ll p,ll l,ll r){
    ll mid=(l+r)&amp;gt;&amp;gt;1ull;
    if(tr[p].tag)tr[ls].s+=tr[p].tag*(mid-l+1ull),tr[rs].s+=tr[p].tag*(r-mid),tr[ls].tag+=tr[p].tag,tr[rs].tag+=tr[p].tag,tr[p].tag=0;
}
void change(ll p,ll l,ll r,ll L,ll R,ll k){
    if(L&amp;lt;=l&amp;amp;&amp;amp;R&amp;gt;=r)return tr[p].tag+=k,tr[p].s+=(r-l+1ull)*k,void();
    Pushdown(p,l,r);
    ll mid=(l+r)&amp;gt;&amp;gt;1ull;
    if(L&amp;lt;=mid)change(ls,l,mid,L,R,k);
    if(R&amp;gt;mid)change(rs,mid+1ull,r,L,R,k);
    tr[p].s=tr[ls].s+tr[rs].s;
}
ll Query(ll p,ll l,ll r,ll k,ll now){
    if(tr[p].id) return tr[p].id;
    Pushdown(p,l,r);
    ll mid=(l+r)&amp;gt;&amp;gt;1ull;
    if(tr[ls].s*k&amp;gt;=now)return Query(ls,l,mid,k,now);
    return Query(rs,mid+1ull,r,k,now-tr[ls].s*k);
}
int main(){
    cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;q&amp;gt;&amp;gt;W;
    for(i=1ull;i&amp;lt;=n;i++)read(a[i]),s+=a[i];
    Build(1ull,1ull,n);
    while(q--){
        read(l);read(r);read(k);p=0;
        change(1ull,1ull,n,l,r,k);
        s+=(r-l+1ull)*k;
        l=1ull;r=log2(W/s);
        while(l&amp;lt;=r){
            mid=(l+r)&amp;gt;&amp;gt;1ull;
            if((((1ull&amp;lt;&amp;lt;mid+1ull)-1ull)*s)&amp;lt;=W)p=max(p,mid),l=mid+1ull;
            else r=mid-1ull;
        }
        if((((1ull&amp;lt;&amp;lt;p+1ull)-1ull)*s)==W)write(n*(p+1ull)-1ull),putchar(&apos;\n&apos;);
        else write(Query(1ull,1ull,n,(1ull&amp;lt;&amp;lt;p+1ull),W-(((1ull&amp;lt;&amp;lt;p+1ull)-1ull)*s))+n*(p+1ull)-1ull),putchar(&apos;\n&apos;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>转载作文『落雪』</title><link>https://blog.walterfang.site/posts/snow/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/snow/</guid><pubDate>Sat, 19 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;雪&lt;/h1&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;2023年1月&lt;/strong&gt;&lt;/p&gt;
</content:encoded><author>刮风落雪</author></item><item><title>P2880 做题笔记</title><link>https://blog.walterfang.site/posts/note-p2880/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/note-p2880/</guid><pubDate>Wed, 16 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;萌新不会线段树于是写了自己改的树状数组，跑得还挺快。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
const int N=5e5+10,inf=2e9;
int n,q,i,l,r,T_min[N],T_max[N],a[N];
int lowbit(int x){return x&amp;amp;(-x);}
void Add(int p,int v){while(p&amp;lt;=n)T_min[p]=min(T_min[p],v),T_max[p]=max(T_max[p],v),p+=lowbit(p);}
int Query_min(int l,int r){return (l&amp;lt;r?(l&amp;lt;r-lowbit(r)?min(T_min[r],Query_min(l,r-lowbit(r))):min(a[r],Query_min(l,r-1))):a[l]);}
int Query_max(int l,int r){return (l&amp;lt;r?(l&amp;lt;r-lowbit(r)?max(T_max[r],Query_max(l,r-lowbit(r))):max(a[r],Query_max(l,r-1))):a[l]);}
int main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;q;
 for(i=0;i&amp;lt;N;i++)T_min[i]=inf,T_max[i]=-inf;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i],Add(i,a[i]);
 while(q--)cin&amp;gt;&amp;gt;l&amp;gt;&amp;gt;r,cout&amp;lt;&amp;lt;Query_max(l,r)-Query_min(l,r)&amp;lt;&amp;lt;&apos;\n&apos;;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>函数零点求解方法与布伦特法</title><link>https://blog.walterfang.site/posts/brent/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/brent/</guid><pubDate>Mon, 14 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h4&gt;一般的零点求解方法&lt;/h4&gt;
&lt;p&gt;给定给定区间 $[a, b]$ ，函数连续且 $f(a) \cdot f(b)&amp;lt;0$ ，那么根据介值定理，函数必然在区间内有根。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;二分法：将区间不断二分，使端点不断逼近零点。下一次迭代的区间为 $\left[a, c\right.$ 或 $[c, b]$ ，其中 $c=\frac{a+b}{2}$ 。&lt;/li&gt;
&lt;li&gt;割线法 (线性插值)：基本思想是用弦的斜率近似代替目标函数的切线斜率，并用割线与横轴交点的横坐标作为方程式的根的近似。即给定两个点 $(a, f(a)),(b, f(b))$ 。其割线方程为 $y=\frac{f(b)-f(a)}{b-a} \cdot(x-b)+f(b)$ ，那么令 $y=0$ ， $x$ 的值即为下一次迭代的结果
$$
c=b-\frac{f(b) \cdot(b-a)}{f(b)-f(a)}
$$&lt;/li&gt;
&lt;li&gt;逆二次插值法：为割线法的进化版本。使用三个点确定一个二次函数，二次函数与横轴交错的点即为下次迭代的值。但是，其二次函数可能不会和横轴相交，因此做出一点改变，以y值作为自变量。给定三个点 $\left(x_{i-2}, f\left(x_{i-2}\right)\right),\left(x_{i-1}, f\left(x_{i-1}\right)\right),\left(x_i, f\left(x_i\right)\right)$, 则通过这三个点确定的二次函数为
$$
x=\frac{\left(y-f\left(x_{i-1}\right)\right)\left(y-f\left(x_i\right)\right)}{\left(f\left(x_{i-2}\right)-f\left(x_{i-1}\right)\right)\left(f\left(x_{i-2}\right)-f\left(x_i\right)\right)} \cdot x_{i-2}+\frac{\left(y-f\left(x_{i-2}\right)\right)\left(y-f\left(x_{i-1}\right)\right)}{\left(f\left(x_i\right)-f\left(x_{i-2}\right)\right)\left(f\left(x_i\right)-f\left(x_{i-1}\right)\right)} \cdot x_i+\frac{\left(y-f\left(x_{i-2}\right)\right)\left(y-f\left(x_i\right)\right)}{\left(f\left(x_{i-1}\right)-f\left(x_{i-2}\right)\right)\left(f\left(x_{i-1}\right)-f\left(x_i\right)\right)} \cdot x_{i-1}
$$
，令 $\mathrm{y}=0$ ，求得
$$
x_{i+1}=\frac{f\left(x_{i-1}\right) f\left(x_i\right)}{\left(f\left(x_{i-2}\right)-f\left(x_{i-1}\right)\right)\left(f\left(x_{i-2}\right)-f\left(x_i\right)\right)} \cdot x_{i-2}+\frac{f\left(x_{i-2}\right) f\left(x_{i-1}\right)}{\left(f\left(x_i\right)-f\left(x_{i-2}\right)\right)\left(f\left(x_i\right)-f\left(x_{i-1}\right)\right)} \cdot x_i+\frac{f\left(x_{i-2}\right) f\left(x_i\right)}{\left(f\left(x_{i-1}\right)-f\left(x_{i-2}\right)\right)\left(f\left(x_{i-1}\right)-f\left(x_i\right)\right)} \cdot x_{i-1}
$$&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;布伦特法&lt;/h4&gt;
&lt;p&gt;初始化区间 $\left(a_0, b_0\right)$ 使得 $f\left(a_0\right) \cdot f\left(b_0\right)&amp;lt;0$ 。其中 $b_k$ 是上次迭代中的根估计值。如果 $\left|f\left(a_0\right)\right|&amp;lt;\left|f\left(b_0\right)\right|$,那么赋值互换（我们认为对应函数值的绝对值较小的点更接近真正的根值) 。&lt;/p&gt;
&lt;p&gt;每次迭代包含四个点:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$b_k$ ：为当前迭代的根估算值；&lt;/li&gt;
&lt;li&gt;$a_k$ : 对位点，即满足 $\left|f\left(a_k\right)\right|&amp;lt;\left|f\left(b_k\right)\right|_{\text {且 }} f\left(a_k\right) \cdot f\left(b_k\right)&amp;lt;0$ 的值。&lt;/li&gt;
&lt;li&gt;$b_{k-1}$ : 上一次迭代的根估算值，第一次迭代设置为 $b_{k-1}=a_0$&lt;/li&gt;
&lt;li&gt;$b_{k-2}$ ：上上此迭代的根估算值（不用初始化，在首次迭代过程中，不会用到他来进行判断，结尾进行赋值）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;方法的选择&lt;/h4&gt;
&lt;p&gt;有以下四个不等式:&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
&amp;amp; |\delta|&amp;lt;\left|b_k-b_{k-1}\right| \text { (1) } \
&amp;amp; |\delta|&amp;lt;\left|b_{k-1}-b_{k-2}\right| \text { (2) } \
&amp;amp; \left|s-b_k\right|&amp;lt;\frac{1}{2}\left|b_k-b_{k-1}\right| \text { (3) } \
&amp;amp; \left|s-b_k\right|&amp;lt;\frac{1}{2}\left|b_{k-1}-b_{k-2}\right|\text { (4) }
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;上次迭代为二分法且 $(1)$ 为假；上次迭代为二分法且 $(3)$ 为假；上次迭代为插值法且 $(2)$ 为假；上次迭代为插值法且 $(4)$ 为假；以插值法计算的临时值不在 $\frac{3a_k+bk}{4}$ 和 $b_k$ 中间，以上五个条件满足一个，那么本次迭代的值采用二分法，否则采用插值法。&lt;/p&gt;
&lt;p&gt;而插值法的选择如下：如果三点各不同，则用二次插值；否则用线性插值。&lt;/p&gt;
&lt;p&gt;本次迭代的临时值 $s$ 作为区间的一个端点，另一个端点在 $a_k$ 和 $b_k$ 中选择，二者作为 $a_{k+1}, b_{k+1}$ ，且满足 $f\left(a_{k+1}\right) \cdot f\left(b_{k+1}\right)&amp;lt;0$ ， $\left|f\left(a_{k+1}\right)\right|&amp;gt;\left|f\left(b_{k+1}\right)\right|$&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Brent&apos;s method is a root-finding algorithm which combines root bracketing, bisection, and inverse quadratic interpolation. It is sometimes known as the van Wijngaarden-Deker-Brent method. Brent&apos;s method is implemented in the Wolfram Language as the undocumented option &lt;code&gt;Method&lt;/code&gt; $\rightarrow$ &lt;code&gt;Brent&lt;/code&gt; in FindRoot[eqn, ${x, x_0, x_1}]$.&lt;/p&gt;
&lt;p&gt;Brent&apos;s method uses a Lagrange interpolating polynomial of degree 2. Brent (1973) claims that this method will always converge as long as the values of the function are computable within a given region containing a root. Given three points $x_1$, $x_2$, and $x_3$, Brent&apos;s method fits $x$ as a quadratic function of $y$, then uses the interpolation formula&lt;/p&gt;
&lt;p&gt;$$
x=\frac{\left[y-f\left(x_1\right)\right]\left[y-f\left(x_2\right)\right] x_3}{\left[f\left(x_3\right)-f\left(x_1\right)\right]\left[f\left(x_3\right)-f\left(x_2\right)\right]}+\frac{\left[y-f\left(x_2\right)\right]\left[y-f\left(x_3\right)\right] x_1}{\left[f\left(x_1\right)-f\left(x_2\right)\right]\left[f\left(x_1\right)-f\left(x_3\right)\right]}+\frac{\left[y-f\left(x_3\right)\right]\left[y-f\left(x_1\right)\right] x_2}{\left[f\left(x_2\right)-f\left(x_3\right)\right]\left[f\left(x_2\right)-f\left(x_1\right)\right]}
$$&lt;/p&gt;
&lt;p&gt;Subsequent root estimates are obtained by setting $y=0$, giving&lt;/p&gt;
&lt;p&gt;$$
x=x_2+\frac{P}{Q}
$$&lt;/p&gt;
&lt;p&gt;where&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
&amp;amp; P=S\left[T(R-T)\left(x_3-x_2\right)-(1-R)\left(x_2-x_1\right)\right] \
&amp;amp; Q=(T-1)(R-1)(S-1)
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;with&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
R &amp;amp; \equiv \frac{f\left(x_2\right)}{f\left(x_3\right)} \
S &amp;amp; \equiv \frac{f\left(x_2\right)}{f\left(x_1\right)} \
T &amp;amp; \equiv \frac{f\left(x_1\right)}{f\left(x_3\right)}
\end{aligned}
$$&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Brent&apos;s Method&lt;/p&gt;
&lt;p&gt;Brent&apos;s method for approximately solving $f(x)=0$, where $f: \mathbb{R} \rightarrow \mathbb{R}$, is a &quot;hybrid&quot; method that combines aspects of the bisection and secant methods with some additional features that make it completely robust and usually very efficient. Like bisection, it is an &quot;enclosure&quot; method that begins with an initial interval across which $f$ changes sign and, as the iterations proceed, determines a sequence of nested intervals that share this property and decrease in length. Convergence of the iterates is guaranteed, even in floating-point arithmetic. If $f$ is continuous on the initial interval, then each of the decreasing intervals determined by the method contains a solution, and the limit of the iterates is a solution. Like the bisection and secant methods, the method requires only one evaluation of $f$ at each iteration; in particular, $f^{\prime}$ is not required.
The following provides a rough outline of how the method works. The full details of the method are complicated and can be found in R. P. Brent, Algorithms for Minimization without Derivatives, Prentice-Hall, 1973. The method builds upon an earlier method of T. J. Dekker and is the basis of MATLAB&apos;s fzero routine.
At each iteration, Brent&apos;s method first tries a step of the secant method or something better. If this step is unsatisfactory, which usually means too long, too short, or too close to an endpoint of the current interval, then the step reverts to a bisection step. There is also a feature that occasionally forces a bisection step to guard against too little progress for too many iterations. In the details of the method, a great deal of attention has been paid to considerations of floating-point arithmetic (overflow and underflow, accuracy of computed expressions, etc.).
An overview of the operation of the method is as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The method begins with&lt;/li&gt;
&lt;li&gt;a stopping tolerance $\delta&amp;gt;0$,&lt;/li&gt;
&lt;li&gt;points $a$ and $b$ such that $f(a) f(b)&amp;lt;0$.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If necessary, $a$ and $b$ are exchanged so that $|f(b)| \leq|f(a)|$; thus $b$ is regarded as the better approximate solution. A third point $c$ is initialized by setting $c=a$.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;At each iteration, the method maintains $a, b$, and $c$ such that $b \neq c$ and
(i) $f(b) f(c)&amp;lt;0$, so that a solution lies between $b$ and $c$ if $f$ is continuous;
(ii) $|f(b)| \leq|f(c)|$, so that $b$ can be regarded as the current approximate solution;
(iii) either $a$ is distinct from $b$ and $c$, or $a=c$ and is the immediate past value of $b$.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each iteration proceeds as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;If $|b-c| \leq \delta$, then the method returns $b$ as the approximate solution.&lt;/li&gt;
&lt;li&gt;Otherwise, the method determines a trial point $\hat{b}$ as follows:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;(i) If $a=c$, then $\hat{b}$ is determined by linear (secant) interpolation: $\hat{b}=\frac{a f(b)-b f(a)}{f(b)-f(a)}$.
(ii) Otherwise, $a, b$, and $c$ are distinct, and $\hat{b}$ is determined using inverse quadratic interpolation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Determine $\alpha, \beta$, and $\gamma$ such that $p(y)=\alpha y^2+\beta y+\gamma$ satisfies $p(f(a))=a$, $p(f(b))=b$, and $p(f(c))=c$.&lt;/li&gt;
&lt;li&gt;Set $\hat{b}=\gamma$.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;If necessary, $\hat{b}$ is adjusted or replaced with the bisection point. (The rules are complicated.)&lt;/li&gt;
&lt;li&gt;Once $\hat{b}$ has been finalized, $a, b, c$, and $\hat{b}$ are used to determine new values of $a, b$, and $c$.
(The rules are complicated.)
Remark: In part (ii) of step 2, the coefficients $\alpha, \beta$, and (especially) $\gamma$ are easily determined using standard methods at the cost of a few arithmetic operations. (Of course, there needs to be a safeguard against the unlikely event that $f(a), f(b)$, and $f(c)$ are not distinct.) Note that $\gamma$ is just $p(0)$, so if $f$ really were the inverse of a quadratic, i.e., $f^{-1}(y)=p(y)=\alpha y^2+\beta y+\gamma$ for all $y$, then $\hat{b}=\gamma$ would satisfy $f(\hat{b})=f(p(0))=f\left(f^{-1}(0)\right)=0$. Thus inverse quadratic interpolation provides a low-cost approximate zero of $f$ that should be more accurate than that obtained by linear (secant) interpolation. Note that if direct quadratic interpolation were used instead of inverse quadratic interpolation, i.e., if we found $p(x)=\alpha x^2+\beta x+\gamma$ such that $p(a)=f(a), p(b)=f(b)$, and $p(c)=f(c)$, then it would be necessary to find a $\hat{b}$ such that $p(\hat{b})=0$ using the quadratic formula, which involves a square root. By using inverse quadratic interpolation, Brent&apos;s method avoids this square root.&lt;/li&gt;
&lt;/ol&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>题解：P4986 逃离</title><link>https://blog.walterfang.site/posts/solution-p4986/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-p4986/</guid><pubDate>Fri, 11 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;前言&lt;/h3&gt;
&lt;p&gt;卷积的不做评价。&lt;/p&gt;
&lt;p&gt;正解应该有 $2$ 个做法，牛顿迭代或 $\text{FFT}$。&lt;/p&gt;
&lt;h3&gt;题意&lt;/h3&gt;
&lt;p&gt;求解区间 $[L,R]$ 内满足 $C^2(x)=A^2(x)+B^2(x)$ 的 $x$。&lt;/p&gt;
&lt;h3&gt;解析&lt;/h3&gt;
&lt;p&gt;令 $f(x)=C^2(x)-A^2(x)-B^2(x)$，接下来分 $2$ 种做法。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$f(x)$ 可以直接用 $\text{FFT}$ 求，那么接下来根据零点存在定理二分求函数零点即可。题解区用模拟退火的乱搞做法我没看懂。&lt;/li&gt;
&lt;li&gt;$f&apos;(x)=2C(x)C&apos;(x)-2A(x)A&apos;(x)-2B(x)B&apos;(x)$，根据牛顿迭代公式 $x_{n+1}=x_n-\frac{f(x_n)}{f&apos;(x_n)}$ 代入迭代几次即可。初值选 $\frac{l+r}{2}$。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>题解：AT_abc236_f [ABC236F] Spices</title><link>https://blog.walterfang.site/posts/solution-at_abc236_f/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-at_abc236_f/</guid><pubDate>Wed, 09 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;贪心好题。题意不再赘述。&lt;/p&gt;
&lt;h3&gt;思路&lt;/h3&gt;
&lt;p&gt;将 $c$ 数组升序排序，并依次判断每个数 $x$。若 $x$ 可被已被取的数字异或得出，则不取 $x$，否则比取。&lt;/p&gt;
&lt;h3&gt;正确性证明&lt;/h3&gt;
&lt;p&gt;若 $x$ 可被已取的数异或得出，那么显然不用取。若不可被异或得出，则之后定存在取的 $y$ 使得组合出 $x$ 必要取 $y$，故取 $x$ 定不劣。&lt;/p&gt;
&lt;h3&gt;代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
typedef long long ll;
const ll N=(1&amp;lt;&amp;lt;16)+10;
ll t,n,i,j,ans,a[N],p[N],f[N];
int main(){
 cin&amp;gt;&amp;gt;t;n=(1&amp;lt;&amp;lt;t)-1;f[0]=1;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i],p[i]=i;
 stable_sort(p+1,p+1+n,[](int x,int y){return a[x]&amp;lt;a[y];});
 for(i=1;i&amp;lt;=n;i++)
  if(!f[p[i]]){
   ans+=a[p[i]];
   for(j=0;j&amp;lt;=n;j++)f[j^p[i]]|=f[j];
  }
 cout&amp;lt;&amp;lt;ans;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>题解：P10464 Task</title><link>https://blog.walterfang.site/posts/solution-p10464/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-p10464/</guid><pubDate>Wed, 09 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;简单贪心。由于时间对收入的影响远大于级别对收入的影响，故优先考虑时间再考虑级别进行排序。然后逆序枚举每个任务，每次选择能满足当前任务所需时间的机器中级别最低的一台即得最优方案。&lt;/p&gt;
&lt;h3&gt;代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
typedef long long ll;
const ll N=1e5+10,M=1e2+50;
struct Node{ll x,y;}a[N],b[N];
ll n,m,i,j,pos,x,s,ans,f[M];
int main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i].x&amp;gt;&amp;gt;a[i].y;
 for(i=1;i&amp;lt;=m;i++)cin&amp;gt;&amp;gt;b[i].x&amp;gt;&amp;gt;b[i].y;
    stable_sort(a+1,a+1+n,[](Node x,Node y){return x.x!=y.x?x.x&amp;gt;y.x:x.y&amp;gt;y.y;});
    stable_sort(b+1,b+1+m,[](Node x,Node y){return x.x!=y.x?x.x&amp;gt;y.x:x.y&amp;gt;y.y;});
 for(i=1;i&amp;lt;=m;i++){
  for(j=pos+1;j&amp;lt;=n;j++)
   if(a[j].x&amp;gt;=b[i].x)f[a[j].y]+=1,pos=j;
   else break;
  for(x=b[i].y;x&amp;lt;=100;x++)
   if(f[x]){
    s++;ans+=b[i].x*500+b[i].y*2;f[x]--;
    break;
   }
 }
 cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;&apos; &apos;&amp;lt;&amp;lt;ans;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>做题笔记</title><link>https://blog.walterfang.site/posts/oi-notes/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/oi-notes/</guid><pubDate>Mon, 07 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;更新中。&lt;/p&gt;
&lt;p&gt;$2024.10.07$ $23:02:46$ $\text{First Release}.$&lt;/p&gt;
&lt;p&gt;$2024.10.08$ $23:13:30$ $\text{Updated}.$&lt;/p&gt;
&lt;p&gt;$2024.10.09$ $23:13:49$ $\text{Updated}.$&lt;/p&gt;
&lt;p&gt;$2024.10.12$ $23:19:00$ $\text{Updated}.$&lt;/p&gt;
&lt;p&gt;$2024.10.13$ $22:51:24$ $\text{Updated}.$&lt;/p&gt;
&lt;p&gt;&lt;code&gt;B3695&lt;/code&gt; 简单大模拟。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int n,m,q,i,j,k,x,y;
bitset&amp;lt;N&amp;gt;s[N];
main(){
    cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m&amp;gt;&amp;gt;q;
    for(i=1;i&amp;lt;=n;i++){
     cin&amp;gt;&amp;gt;x;
        for(j=1;j&amp;lt;=x;j++)cin&amp;gt;&amp;gt;y,s[i].set(y-1,1);
    }
    for(i=0;i&amp;lt;m;i++)s[0].set(i,1);
    while(q--){
        cin&amp;gt;&amp;gt;k&amp;gt;&amp;gt;x&amp;gt;&amp;gt;y;
        if(k==1)s[x]&amp;lt;&amp;lt;=y,s[x]&amp;amp;=s[0];
        else if(k==2)s[x]&amp;gt;&amp;gt;=y;
        else if(k==3)cout&amp;lt;&amp;lt;(s[x]&amp;amp;s[y]).count()&amp;lt;&amp;lt;&apos;\n&apos;;
        else if(k==4)cout&amp;lt;&amp;lt;(s[x]|s[y]).count()&amp;lt;&amp;lt;&apos;\n&apos;;
  else cout&amp;lt;&amp;lt;(s[x]^s[y]).count()&amp;lt;&amp;lt;&apos;\n&apos;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P9564&lt;/code&gt; 简单模拟。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const ll f[7]={0,0,1,1,0,1,1};
void Merge(int s){
 if(!f[s])x+=s;
 else y+=s;
}
main(){
 cin&amp;gt;&amp;gt;a&amp;gt;&amp;gt;b;
 for(i=1;i&amp;lt;=6;i++)
  for(j=1;j&amp;lt;=6;j++)
   for(k=1;k&amp;lt;=6;k++){
    x=y=0;
    Merge(i);Merge(j);Merge(k);
    if(x==a&amp;amp;y==b){flag=1;break;}
   }
 if(flag)cout&amp;lt;&amp;lt;&quot;Yes&quot;;
 else cout&amp;lt;&amp;lt;&quot;No&quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;B3693&lt;/code&gt; 简单二维前缀和。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ull T,n,m,q,ans,i,j,u,v,x,y,f[N][N];
main(){
 cin&amp;gt;&amp;gt;T;
 while(T--){
     cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m&amp;gt;&amp;gt;q;ans=0;
  for(i=1;i&amp;lt;=n;i++)
   for(j=1;j&amp;lt;=m;j++)
       cin&amp;gt;&amp;gt;x,f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1]+x;
  for(i=1;i&amp;lt;=q;i++)cin&amp;gt;&amp;gt;u&amp;gt;&amp;gt;v&amp;gt;&amp;gt;x&amp;gt;&amp;gt;y,ans^=f[x][y]+f[u-1][v-1]-f[u-1][y]-f[x][v-1];
  cout&amp;lt;&amp;lt;ans&amp;lt;&amp;lt;&apos;\n&apos;;
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P9556&lt;/code&gt; 还是简单小模拟。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cmp(Node x,Node y){return x.x&amp;lt;y.x;}
main(){
 cin&amp;gt;&amp;gt;T;
 while(T--){
  cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;k;
  for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i].x&amp;gt;&amp;gt;a[i].y;
  stable_sort(a+1,a+1+n,cmp);
  s=0;flag=1;
  for(i=1;i&amp;lt;=n;i++){
   s+=(a[i].x-a[i-1].x)*k;
   if(s&amp;lt;a[i].y){cout&amp;lt;&amp;lt;&quot;No\n&quot;;flag=0;break;}
   else s-=a[i].y;
  }
  if(flag)cout&amp;lt;&amp;lt;&quot;Yes\n&quot;;
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P9519&lt;/code&gt; 二分最终发的工资，&lt;code&gt;check&lt;/code&gt; 写差分就行。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ll n,m,i,l,r=inf,mid,ans=inf,a[N],b[N],s[N];
bool check(ll mid){
 memset(s,0,sizeof(s));
 for(i=1;i&amp;lt;=m;i++){
  x=b[i]-mid+1;
  if(x&amp;gt;=1){
   s[x]++;
   if(b[i]+1&amp;lt;=n)s[b[i]+1]-=2;
   if(b[i]+mid+1&amp;lt;=n)s[b[i]+mid+1]++;
  }
  else{
   y=2-x;s[1]+=y;
   if(n&amp;gt;=2)s[2]-=y-1;
   if(b[i]+1&amp;lt;=n)s[b[i]+1]-=2;
   if(b[i]+mid+1&amp;lt;=n)s[b[i]+mid+1]++;
  }
 }
 for(i=2;i&amp;lt;=n;i++)s[i]+=s[i-1];
 for(i=2;i&amp;lt;=n;i++)s[i]+=s[i-1];
 for(i=1;i&amp;lt;=n;i++)if(s[i]&amp;lt;a[i])return 0;
 return 1;
}
main(){}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;B3830&lt;/code&gt; 数学，移项转为方程求解。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;x;
 for(i=1;i&amp;lt;=n;i++){
  cin&amp;gt;&amp;gt;c[i];
  if(c[i]&amp;lt;=x||(i&amp;gt;=2&amp;amp;&amp;amp;(c[i]-c[i-1])%x!=0))return cout&amp;lt;&amp;lt;-1,0;
  mi=min(mi,c[i]);
 }
 cout&amp;lt;&amp;lt;mi-x;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P5686&lt;/code&gt; 好水的 S 组 T2。简单推推式子就解决了。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
 cin&amp;gt;&amp;gt;n;
    for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i],f1[i]=(f1[i-1]+a[i])%mod;
    for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;b[i],f2[i]=(f2[i-1]+b[i])%mod;
 for(i=1;i&amp;lt;=n;i++)ans=(ans+(((n+1)*f1[i])%mod)*f2[i])%mod,s1=(s1+f1[i])%mod,s2=(s2+f2[i])%mod;
 x=(s1*s2)%mod;
 cout&amp;lt;&amp;lt;(ans-x+mod)%mod;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P9236&lt;/code&gt; 不知道异或的自反性 $a\oplus{a}=0$，我是傻逼。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
 cin&amp;gt;&amp;gt;n;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i];
 for(i=0;i&amp;lt;=20;i++){
  for(j=1;j&amp;lt;=n;j++)
   if((a[j]&amp;gt;&amp;gt;i)&amp;amp;1)s[j]=s[j-1]^1;
   else s[j]=s[j-1];
  s1=s2=0;
  for(j=0;j&amp;lt;=n;j++)
   if(s[j])s1++;
   else s2++;
  ans+=(1&amp;lt;&amp;lt;i)*s1*s2;
 }
 cout&amp;lt;&amp;lt;ans;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;李煜东《算法竞赛进阶指南》题单不错，准备复赛就刷这个了。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;P1226&lt;/code&gt; 标题哈人。交了一发自己专栏里的 &lt;code&gt;qpow&lt;/code&gt; 模板然后喜提 $\text{TLE}\times10$，我是傻逼。
其实是复杂度有问题，于是手搓出了下面这个递归版的 &lt;code&gt;qpow&lt;/code&gt;，能过。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ull qpow(ull x,ull y){
 if(!y)return 1;
 if(y==1)return x%p;
 ull t=qpow(x,y&amp;gt;&amp;gt;1);
 if(!(y&amp;amp;1))return t*t%p;
 else return t*t%p*x%p;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P10446&lt;/code&gt; 随便写了发 &lt;code&gt;__int128&lt;/code&gt; 水过了。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;P10447&lt;/code&gt; 第一眼不太会做，看了一眼题解区都是状压，于是写了发记搜，&lt;code&gt;700ms&lt;/code&gt; 有惊无险地过了，不过还是得抽空学一下状压。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const ll N=30,M=(1&amp;lt;&amp;lt;20)+10,inf=2e18;
ll a[N][N],dp[N][M];
dfs(ll p,ll vis){
 if(dp[p][vis]!=-1)return dp[p][vis];
 if(p==n&amp;amp;&amp;amp;vis==((1&amp;lt;&amp;lt;n)-1))return 0;
 else if(vis==((1&amp;lt;&amp;lt;n)-1))return inf;
 ll i,x=inf;
 for(i=1;i&amp;lt;=n;i++)
  if(!(vis&amp;gt;&amp;gt;(i-1)&amp;amp;1))
   x=min(x,dfs(i,vis|(1&amp;lt;&amp;lt;(i-1)))+a[p][i]);
 return dp[p][vis]=x;
}
main(){dfs(1,1);}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;B3621&lt;/code&gt; 深搜板子。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dfs(int t){
    if(t&amp;gt;n){
       for(i=1;i&amp;lt;=n;i++)cout&amp;lt;&amp;lt;a[i]&amp;lt;&amp;lt;&apos; &apos;;
    return cout&amp;lt;&amp;lt;&apos;\n&apos;,void();
    }
    for(i=1;i&amp;lt;=k;i++)a[t]=i,dfs(t+1);
}
main(){dfs(1);}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P10448&lt;/code&gt; 两个做法。深搜和排列。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dfs(int t,int l){
 int i;
    if(t&amp;gt;m){
       for(i=1;i&amp;lt;=m;i++)cout&amp;lt;&amp;lt;a[i]&amp;lt;&amp;lt;&apos; &apos;;
    return cout&amp;lt;&amp;lt;&apos;\n&apos;,void();
    }
    for(i=l;i&amp;lt;=n-m+t;i++)a[t]=i,dfs(t+1,i+1);
}
main(){dfs(1,1);}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;k;
 for(i=1;i&amp;lt;=k;i++)a[i]=1;
 do{
  for(i=1;i&amp;lt;=n;i++)if(a[i])cout&amp;lt;&amp;lt;i&amp;lt;&amp;lt;&apos; &apos;;
  putchar(&apos;\n&apos;);
 }while(prev_permutation(a+1,a+1+n));
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;B3622&lt;/code&gt; 题目要求按字典序输出警钟撅烂。依旧是 &lt;code&gt;dfs&lt;/code&gt; 板子。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dfs(int t){
 if(t&amp;gt;n){
  for(int i=1;i&amp;lt;=n;i++)cout&amp;lt;&amp;lt;(a[i]?&apos;Y&apos;:&apos;N&apos;);
  return cout&amp;lt;&amp;lt;&apos;\n&apos;,void();
 }
 a[t]=0;dfs(t+1);a[t]=1;dfs(t+1);
}
main(){dfs(1);}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;B3623&lt;/code&gt; 题目未要求按字典序输出警钟撅烂。终止条件写错两次警钟撅烂。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dfs(int t){
 int i;
 if(t&amp;gt;k){
  for(i=1;i&amp;lt;=k;i++)cout&amp;lt;&amp;lt;a[i]&amp;lt;&amp;lt;&apos; &apos;;
  return cout&amp;lt;&amp;lt;&apos;\n&apos;,void();
 }
 for(i=1;i&amp;lt;=n;i++)if(!f[i])f[i]=1,a[t]=i,dfs(t+1),f[i]=0;
}
main(){dfs(1);}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P10449&lt;/code&gt; 暴搜不需要优化，看到有大佬写了 &lt;code&gt;bitset&lt;/code&gt;，我不会。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;change(int x,int y,int f[10][10]){for(int i=0;i&amp;lt;5;i++)f[x+dx[i][0]][y+dx[i][1]]^=1;}
dfs(int x){
 int s2,i,j,t=1;
 if(x&amp;gt;5){
  memcpy(b,a,sizeof a);
  s2=s1;
  for(i=2;i&amp;lt;=5;i++)
   for(j=1;j&amp;lt;=5;j++)
    if(!b[i-1][j])
     change(i,j,b),s2--;
  for(i=1;i&amp;lt;=5;i++)t*=b[5][i];
  if(t&amp;amp;&amp;amp;s2+1)ans=min(ans,6-s2);
  return;
 }
 dfs(x+1);change(1,x,a);s1--;
 dfs(x+1);change(1,x,a);s1++;
}
main(){
 for(i=1;i&amp;lt;=5;i++)
  for(j=1;j&amp;lt;=5;j++)
   cin&amp;gt;&amp;gt;c,a[i][j]=c-&apos;0&apos;;
 s1=6;ans=7;
 dfs(1);
 if(ans==7)cout&amp;lt;&amp;lt;-1&amp;lt;&amp;lt;&apos;\n&apos;;
 else cout&amp;lt;&amp;lt;ans&amp;lt;&amp;lt;&apos;\n&apos;;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1593&lt;/code&gt; 初等数论大杂烩。
首先由唯一分解定理可以得到要求的 $a^b$ 的因子和为 $\Pi_{i=1}^{n}\Sigma_{j=0}^{k_1b}p_i^j$。&lt;/p&gt;
&lt;p&gt;然后通过等比数列求和公式和费马小定理就能求这个东西了。&lt;/p&gt;
&lt;p&gt;交了一发喜提 $94$，$\text{pts}$ $\text{WA}\times1$，我是傻逼。&lt;/p&gt;
&lt;p&gt;看了一眼 hack，我更傻逼了。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Input:
9901 2
Output:
1
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;_(ll i){qpow(i,p-2)%p;}
main(){
 cin&amp;gt;&amp;gt;x&amp;gt;&amp;gt;y;
    if(x==9901&amp;amp;&amp;amp;y==2)return cout&amp;lt;&amp;lt;1,0;
 for(i=2;i&amp;lt;=x;i++)
  if(!(x%i)){
   cnt[a]=0;
   while(x%i==0)cnt[a]++,x/=i;
   if(i%p==1)ans=ans*(cnt[a]+1)%p;
   else ans=ans*((qpow(i,cnt[a]*y+1)-1)*_(i-1))%p;
  }
 cout&amp;lt;&amp;lt;ans;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P2280&lt;/code&gt; 小清新二位前缀和板子。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;r;a=b=r;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;x&amp;gt;&amp;gt;y&amp;gt;&amp;gt;z,x++,y++,f[x][y]+=z,a=max(a,x),b=max(b,y);
 for(i=1;i&amp;lt;=a;i++)for(j=1;j&amp;lt;=b;j++)f[i][j]+=f[i-1][j]+f[i][j-1]-f[i-1][j-1];
 for(i=r;i&amp;lt;=a;i++)for(j=r;j&amp;lt;=b;j++)ans=max(ans,f[i][j]-f[i-r][j]-f[i][j-r]+f[i-r][j-r]);
 cout&amp;lt;&amp;lt;ans;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P10450&lt;/code&gt; 玄学二分。主要在于 &lt;code&gt;check&lt;/code&gt; 的写法。二分答案平均值。将原序列减去平均值，找到一段长度 $\geq L$ 且总和 $\geq0$ 的子序列，若存在则此原子序列平均值 $\geq$ 当前答案，则当前答案合法。&lt;/p&gt;
&lt;p&gt;求子序列和时，先求出前缀和，因为子段和为右端点的前缀和减左端点前一位的前缀和，为使子段和尽量大，应使左端点前一位的前缀和尽量小，右端点的前缀和尽量大。保持左右端点相距 $\geq L$，左端点可为已遍历的前缀和最小处后一位，右端点为当前点，若左端点前一位的前缀和小于右端点的前缀和，即子序列和 $\geq0$。&lt;/p&gt;
&lt;p&gt;最玄学的是最后要输出 $r$，若输出 $l$ 则对于样例会输出 $6499$，抽象。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;check(x){
 double s=0;int i;
 for(i=1;i&amp;lt;=n;i++)b[i]=b[i-1]+a[i]-x;
 for(i=m;i&amp;lt;=n;i++){
  s=min(s,b[i-m]);
  if(s&amp;lt;=b[i])return 1;
 }
 return 0;
}
main(){
 while(r-l&amp;gt;eps){
  mid=(l+r)/2.0;
  if(check(mid))l=mid;
  else r=mid;
 }
 cout&amp;lt;&amp;lt;(int)(r*1000);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;CF670C&lt;/code&gt; 简单贪心。先开个 &lt;code&gt;map&lt;/code&gt; 统计每门语言会的人数，然后直接爆排就行了。$\text{cmp}$ 见代码。
rnm cf rmj.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;map&amp;lt;int,int&amp;gt;f;
struct Node{int p,x,y;}a[N];
bool cmp(Node x,Node y){return x.x!=y.x?x.x&amp;gt;y.x:x.y&amp;gt;y.y;}
main(){
 cin&amp;gt;&amp;gt;n;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;x,f[x]++;
 cin&amp;gt;&amp;gt;m;
 for(i=1;i&amp;lt;=m;i++)cin&amp;gt;&amp;gt;x,a[i].x=f[x],a[i].p=i;
 for(i=1;i&amp;lt;=m;i++)cin&amp;gt;&amp;gt;x,a[i].y=f[x];
 stable_sort(a+1,a+1+n,cmp);
 cout&amp;lt;&amp;lt;a[1].p;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P10452&lt;/code&gt; 把读入的 $a$ 数组升序排个序，就变成了一道初一竞赛题。如果 $n$ 为奇数，则货仓位置为 $a_{\frac{n+1}{2}}$，否则货仓位置为 $\frac{a_\frac{n}{2}+a_\frac{n+2}{2}}{2}$。接下来 $O(n)$ 求距离和即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
 stable_sort(a+1,a+1+n);
 if(n&amp;amp;1)x=a[(n+1)&amp;gt;&amp;gt;1];
 else x=(a[n&amp;gt;&amp;gt;1]+a[(n&amp;gt;&amp;gt;1)+1])&amp;gt;&amp;gt;1;
 for(i=1;i&amp;lt;=n;i++)ans+=abs(a[i]-x);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P5788&lt;/code&gt; 复习单调栈板子，很好懂，放专栏了。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;stack&amp;lt;int&amp;gt;s;
int main(){
 for(i=n;i;i--){
  while(!s.empty()&amp;amp;&amp;amp;a[s.top()]&amp;lt;=a[i])s.pop();
  ans[i]=s.empty()?0:s.top();
  s.push(i);
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;CF280B&lt;/code&gt; 单调栈好题。&lt;/p&gt;
&lt;p&gt;如果先求出最大值，那么次大值可能的情况有很多，所以不妨先求出次大值，那么最大值即次大值左/右边的第一个比次大值大的数，用单调栈维护即可。向左向右各跑一边。&lt;/p&gt;
&lt;p&gt;rnm cf rmj.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
 for(i=1;i&amp;lt;=n;i++){
  while(!s.empty()&amp;amp;&amp;amp;s.top()&amp;lt;a[i])s.pop();
  if(!s.empty())ans=max(ans,a[i]^s.top());
  s.push(a[i]);
 }
 for(i=n;i;i--){
  while(!s.empty()&amp;amp;&amp;amp;s.top()&amp;lt;a[i])s.pop();
  if(!s.empty())ans=max(ans,a[i]^s.top());
  s.push(a[i]);
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;CF1407D&lt;/code&gt; 非常好单调栈+dp。维护两个单调栈再对后两种情况分别进行转移即可。代码人能看懂。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;stack&amp;lt;int&amp;gt;s1,s2;
int main(){
 dp[0]=-1;
    for(i=1;i&amp;lt;=n;i++){
        dp[i]=dp[i-1]+1;
        while(s1.size()&amp;amp;&amp;amp;a[s1.top()]&amp;lt;=a[i]){
            x=s1.top();
            s1.pop();
            if(s1.size()&amp;amp;&amp;amp;min(a[s1.top()],a[i])&amp;gt;a[x])dp[i]=min(dp[i],dp[s1.top()]+1);
        }
        while(s2.size()&amp;amp;&amp;amp;a[s2.top()]&amp;gt;=a[i]){
            x=s2.top();
            s2.pop();
            if(s2.size()&amp;amp;&amp;amp;max(a[s2.top()],a[i])&amp;lt;a[x])dp[i]=min(dp[i],dp[s2.top()]+1);
        }
        s1.push(i);s2.push(i);
    }
    cout&amp;lt;&amp;lt;dp[n];
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;ABC352D&lt;/code&gt; 我没有单调栈做。读入时用 $p$ 数组记录不超过 $k$ 的数的位置，然后循环从 $k+1$ 跑到 $n$，每次加入 $p_i$ 并删除 $p_{i-k}$，求最值即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;set&amp;lt;int&amp;gt;s;
main(){
 for(i=1;i&amp;lt;=n;i++){
  cin&amp;gt;&amp;gt;a[i];p[a[i]]=i;
  if(a[i]&amp;lt;=k)s.insert(i);
 }
 ans=*s.rbegin()-*s.begin();
 for(i=k+1;i&amp;lt;=n;i++)s.insert(p[i]),s.erase(p[i-k]),ans=min(ans,*s.rbegin()-*s.begin());
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1168&lt;/code&gt; 不需要任何高级算法。得益于 &lt;code&gt;vector&lt;/code&gt; 的高级插入这题可以轻松水过。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vector&amp;lt;int&amp;gt;a;
main(){
    for(i=1;i&amp;lt;=n;i++){
        cin&amp;gt;&amp;gt;x;
        a.insert(upper_bound(a.begin(),a.end(),x),x);
        if(i%2==1)cout&amp;lt;&amp;lt;a[(i-1)/2]&amp;lt;&amp;lt;&apos;\n&apos;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;UVA10810&lt;/code&gt; 逆序对好题。为了写这个特地学了树状数组。&lt;code&gt;P1908&lt;/code&gt; 双倍经验。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ll lowbit(ll x){return x&amp;amp;-x;}
void Add(ll x){while(x&amp;lt;=n)t[x]++,x+=lowbit(x);}
ll Sum(ll x){
 ll s=0;
 while(x&amp;gt;=1)s+=t[x],x-=lowbit(x);
 return s;
}
main(){
    cin&amp;gt;&amp;gt;n;
    for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i],p[i]=i;
    stable_sort(p+1,p+1+n,[](ll x,ll y){return a[x]==a[y]?x&amp;gt;y:a[x]&amp;gt;a[y];});
    for(i=1;i&amp;lt;=n;i++)Add(p[i]),ans+=Sum(p[i]-1);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P10457&lt;/code&gt; 按题意直接模拟即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;deque&amp;lt;int&amp;gt;q[20];
main(){
 for(i=1;i&amp;lt;=13;i++)
  for(j=1;j&amp;lt;=4;j++){
   cin&amp;gt;&amp;gt;c;
   if(c&amp;gt;=&apos;1&apos;&amp;amp;&amp;amp;c&amp;lt;=&apos;9&apos;)q[i].push_back(c-&apos;0&apos;);
   if(c==&apos;0&apos;)q[i].push_back(10);
   if(c==&apos;J&apos;)q[i].push_back(11);
   if(c==&apos;Q&apos;)q[i].push_back(12);
   if(c==&apos;K&apos;)q[i].push_back(13);
   if(c==&apos;A&apos;)q[i].push_back(1);
  }
 while(!q[13].empty()){
        t=q[13].front();
  q[13].pop_front();
        while(t!=13){
            a[t]++;
            if(a[t]&amp;gt;=4)s++;
            p=q[t].back();
   q[t].pop_back();
   t=p;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1719&lt;/code&gt; 维护二维前缀和即可。水题。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
    for(i=1;i&amp;lt;=n;i++)
        for(j=1;j&amp;lt;=n;j++)
            cin&amp;gt;&amp;gt;a[i][j],f[i][j]=f[i][j-1]+a[i][j],s[i][j]=f[i][j]+s[i-1][j];
    for(x1=1;x1&amp;lt;=n;x1++)
     for(y1=1;y1&amp;lt;=n;y1++)
      for(x2=1;x2&amp;lt;=n;x2++)
       for(y2=1;y2&amp;lt;=n;y2++){
        if(x2&amp;lt;x1||y2&amp;lt;y1)continue;
        ans=max(ans,s[x2][y2]+s[x1-1][y1-1]-s[x2][y1-1]-s[x1-1][y2]);
       }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P10464&lt;/code&gt; 简单贪心。由于时间对收入的影响远大于级别对收入的影响，故优先考虑时间再考虑级别进行排序。然后逆序枚举每个任务，每次选择能满足当前任务所需时间的机器中级别最低的一台即得最优方案。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i].x&amp;gt;&amp;gt;a[i].y;
 for(i=1;i&amp;lt;=m;i++)cin&amp;gt;&amp;gt;b[i].x&amp;gt;&amp;gt;b[i].y;
    stable_sort(a+1,a+1+n,[](Node x,Node y){return x.x!=y.x?x.x&amp;gt;y.x:x.y&amp;gt;y.y;});
    stable_sort(b+1,b+1+m,[](Node x,Node y){return x.x!=y.x?x.x&amp;gt;y.x:x.y&amp;gt;y.y;});
 for(i=1;i&amp;lt;=m;i++){
  for(j=pos+1;j&amp;lt;=n;j++)
   if(a[j].x&amp;gt;=b[i].x)f[a[j].y]+=1,pos=j;
   else break;
  for(x=b[i].y;x&amp;lt;=100;x++)
   if(f[x]){
    s++;ans+=b[i].x*500+b[i].y*2;f[x]--;
    break;
   }
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1044&lt;/code&gt; 记搜即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dfs(ll i,ll j){
 if(f[i][j])return f[i][j];
 if(!i)return 1;
 if(j&amp;gt;0)f[i][j]+=dfs(i,j-1);
 f[i][j]+=dfs(i-1,j+1);
 return f[i][j];
}
main(){dfs(n,0);}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;SP1805&lt;/code&gt; 单调栈维护即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
 stack&amp;lt;ll&amp;gt;s;
 for(i=1;i&amp;lt;=n;i++){
  while(!s.empty()&amp;amp;&amp;amp;a[s.top()]&amp;gt;=a[i]){
   t=s.top();s.pop();
   width=s.empty()?i-1:i-s.top()-1;
   ans=max(ans,width*a[t]);
  }
  s.push(i);
 }
 while(!s.empty()){
  t=s.top();s.pop();
  width=s.empty()?n:n-s.top();
  ans=max(ans,width*a[t]);
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;UVA540&lt;/code&gt; 队列套队列，根据题意维护队列模拟即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;map&amp;lt;int,int&amp;gt;p;
queue&amp;lt;int&amp;gt;a[N],b;
main(){
 for(i=1;i&amp;lt;=t;i++){
  cin&amp;gt;&amp;gt;n;
  while(n--)cin&amp;gt;&amp;gt;x,p[x]=i;
  while(!a[i].empty())a[i].pop();
 }
 cout&amp;lt;&amp;lt;&quot;Scenario #&quot;&amp;lt;&amp;lt;++m&amp;lt;&amp;lt;&apos;\n&apos;;
 while(!b.empty())b.pop();
 while(cin&amp;gt;&amp;gt;op)
  if(op==&quot;STOP&quot;)break;
  else if(op==&quot;ENQUEUE&quot;){
   cin&amp;gt;&amp;gt;x;t=p[x];
   if(a[t].empty())b.push(t);
   a[t].push(x);
  }
  else if(!b.empty()){
   t=b.front();
   cout&amp;lt;&amp;lt;a[t].front()&amp;lt;&amp;lt;&apos;\n&apos;;
   a[t].pop();
   if(a[t].empty())b.pop();
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1115&lt;/code&gt; 非常好贪心模板。连续取取到总和为负再重新开始取，每次取完求最大值。时间和空间非常优秀。
被负数卡两发警钟长鸣。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ans=-inf;
main(){
    cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;x;s=x;
 for(i=1;i&amp;lt;n;i++)cin&amp;gt;&amp;gt;x,s=(s&amp;gt;0?s+x:x),ans=max(ans,s);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P10467&lt;/code&gt; 算哈希板题。为了做这题还特地学了哈希。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;set&amp;lt;ull&amp;gt;f;
int main(){
    for(i=1;i&amp;lt;=n;i++){
     a=b=0;
     for(j=1;j&amp;lt;=6;j++)cin&amp;gt;&amp;gt;x,a+=x*x,b+=x*x*x;
        x=f.size();f.insert(a*b);
        if(f.size()==x)return cout&amp;lt;&amp;lt;&quot;Twin snowflakes found.&quot;,0;
    }
    cout&amp;lt;&amp;lt;&quot;No two snowflakes are alike.&quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P10480&lt;/code&gt; 题解区没一个能看懂的。我写的朴素代码跑起来嗖嗖快。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int vis[N];
bitset&amp;lt;N&amp;gt;f[N];
vector&amp;lt;int&amp;gt;E[N];
dfs(int u){
    if(vis[u])return;
    vis[u]=1;
    for(auto v:E[u])dfs(v),f[u]|=f[v];
}
main(){
 for(i=1;i&amp;lt;=n;i++)f[i][i]=1;
 for(i=1;i&amp;lt;=m;i++)cin&amp;gt;&amp;gt;u&amp;gt;&amp;gt;v,E[u].push_back(v);
 for(i=1;i&amp;lt;=n;i++)dfs(i),cout&amp;lt;&amp;lt;f[i].count()&amp;lt;&amp;lt;&apos;\n&apos;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P10483&lt;/code&gt; 看清标签这是水题。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dfs(ll x,ll dep){
 if(dep&amp;gt;=ans)return;
 if(x&amp;gt;n)return ans=min(ans,dep),void();
 for(int i=1;i&amp;lt;=dep;i++)
  if(f[i]+a[x]&amp;lt;=w)
   f[i]+=a[x],dfs(x+1,dep),f[i]-=a[x];
 f[dep+1]=a[x];dfs(x+1,dep+1);
}
main(){ans=n;dfs(1,0);}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;学了 &lt;code&gt;DLX&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;P2866&lt;/code&gt; 栈板。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;stack&amp;lt;ll&amp;gt;a;
main(){
 for(i=1;i&amp;lt;=n;i++){
  cin&amp;gt;&amp;gt;x;
  while(!a.empty()&amp;amp;&amp;amp;a.top()&amp;lt;=x)a.pop();
  s+=a.size();a.push(x);
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P7935&lt;/code&gt; 队列板。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;struct Node{int x,y,z;}a[N];
queue&amp;lt;int&amp;gt;q;
f1[N],f2[N],f3[N];
main(){
 cin&amp;gt;&amp;gt;n;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i].x,f1[a[i].x]=i;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i].y,f2[a[i].y]++;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i].z,f3[a[i].z]++;
 for(i=1;i&amp;lt;=n;i++)if(!f2[i]||!f3[i])q.push(i);
 while(!q.empty()){
  x=q.front();q.pop();
  if(!f1[x])continue;
  ans++;
  f2[a[f1[x]].y]--;f3[a[f1[x]].z]--;
  if(!f2[a[f1[x]].y])q.push(a[f1[x]].y);
  if(!f3[a[f1[x]].z])q.push(a[f1[x]].z);
  f1[x]=0;
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1090&lt;/code&gt; 小根堆贪心典典典。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;priority_queue&amp;lt;int,vector&amp;lt;int&amp;gt;,greater&amp;lt;int&amp;gt; &amp;gt;q;
main(){
 cin&amp;gt;&amp;gt;n;
 for(i=1;i&amp;lt;=n;i++) cin&amp;gt;&amp;gt;x,q.push(x);
 while(q.size()&amp;gt;=2){
  a=q.top();q.pop();
  b=q.top();q.pop();
  ans+=a+b;
  q.push(a+b);
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1720&lt;/code&gt; 是斐波那契数列。记得开 &lt;code&gt;long long&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;学高斯消元。&lt;/p&gt;
&lt;h2&gt;引入&lt;/h2&gt;
&lt;p&gt;高斯消元法（Gauss–Jordan elimination）是求解线性方程组的经典算法，它在当代数学中有着重要的地位和价值，是线性代数课程教学的重要组成部分。&lt;/p&gt;
&lt;p&gt;高斯消元法除了用于线性方程组求解外，还可以用于行列式计算、求矩阵的逆，以及其他计算机和工程方面。&lt;/p&gt;
&lt;h2&gt;消元法及高斯消元法思想&lt;/h2&gt;
&lt;h3&gt;定义&lt;/h3&gt;
&lt;p&gt;消元法是将方程组中的一方程的未知数用含有另一未知数的代数式表示，并将其带入到另一方程中，这就消去了一未知数，得到一解；或将方程组中的一方程倍乘某个常数加到另外一方程中去，也可达到消去一未知数的目的。消元法主要用于二元一次方程组的求解。&lt;/p&gt;
&lt;h3&gt;解释&lt;/h3&gt;
&lt;p&gt;例一：利用消元法求解二元一次线性方程组：&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
4x+y&amp;amp;=100 \
x-y&amp;amp;=100
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;解：将方程组中两方程相加，消元 $y$ 可得：&lt;/p&gt;
&lt;p&gt;$5x = 200$&lt;/p&gt;
&lt;p&gt;解得：&lt;/p&gt;
&lt;p&gt;$x = 40$&lt;/p&gt;
&lt;p&gt;将 $x = 40$ 代入方程组中第二个方程可得：&lt;/p&gt;
&lt;p&gt;$y = -60$&lt;/p&gt;
&lt;h3&gt;消元法理论的核心&lt;/h3&gt;
&lt;p&gt;消元法理论的核心主要如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;两方程互换，解不变；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;一方程乘以非零数 $k$，解不变；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;一方程乘以数 $k$ 加上另一方程，解不变。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;高斯消元法思想概念&lt;/h3&gt;
&lt;p&gt;德国数学家高斯对消元法进行了思考分析，得出了如下结论：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在消元法中，参与计算和发生改变的是方程中各变量的系数；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;各变量并未参与计算，且没有发生改变；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可以利用系数的位置表示变量，从而省略变量；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在计算中将变量简化省略，方程的解不变。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;高斯在这些结论的基础上，提出了高斯消元法，首先将方程的增广矩阵利用行初等变换化为行最简形，然后以线性无关为准则对自由未知量赋值，最后列出表达方程组通解。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;高斯消元五步骤法&lt;/h2&gt;
&lt;h2&gt;解释&lt;/h2&gt;
&lt;p&gt;高斯消元法在将增广矩阵化为最简形后对于自由未知量的赋值，需要掌握线性相关知识，且赋值存在人工经验的因素，使得在学习过程中有一定的困难，将高斯消元法划分为五步骤，从而提出五步骤法，内容如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;增广矩阵行初等行变换为行最简形；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;还原线性方程组；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;求解第一个变量；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;补充自由未知量；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;列表示方程组通解。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;利用实例进一步说明该算法的运作情况。&lt;/p&gt;
&lt;h2&gt;过程&lt;/h2&gt;
&lt;p&gt;例二：利用高斯消元法五步骤法求解线性方程组：&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
2x_1+5x_3+6x_4&amp;amp;=9 \
x_3+x_4&amp;amp;=-4 \
2x_3+2x_4&amp;amp;=-8
\end{cases}
$$&lt;/p&gt;
&lt;h3&gt;增广矩阵行（初等）变换为行最简形&lt;/h3&gt;
&lt;p&gt;所谓增广矩阵，即为方程组系数矩阵 $A$ 与常数列 $b$ 的并生成的新矩阵，即 $(A | b)$，增广矩阵行初等变换化为行最简形，即是利用了高斯消元法的思想理念，省略了变量而用变量的系数位置表示变量，增广矩阵中用竖线隔开了系数矩阵和常数列，代表了等于符号。&lt;/p&gt;
&lt;p&gt;$$
\left(\begin{matrix}
2 &amp;amp; 0 &amp;amp; 5 &amp;amp; 6 \
0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \
0 &amp;amp; 0 &amp;amp; 2 &amp;amp; 2
\end{matrix} \middle|
\begin{matrix}
9 \
-4 \
-8
\end{matrix} \right)
$$&lt;/p&gt;
&lt;p&gt;$$
\xrightarrow{r_3-2r_2}
\left(\begin{matrix}
2 &amp;amp; 0 &amp;amp; 5 &amp;amp; 6 \
0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0
\end{matrix} \middle|
\begin{matrix}
9 \
-4 \
0
\end{matrix} \right)
$$&lt;/p&gt;
&lt;p&gt;化为行阶梯形&lt;/p&gt;
&lt;p&gt;$$
\xrightarrow{\frac{r_1}{2}}
\left(\begin{matrix}
1 &amp;amp; 0 &amp;amp; 2.5 &amp;amp; 3 \
0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0
\end{matrix} \middle|
\begin{matrix}
4.5 \
-4 \
0
\end{matrix} \right)
$$&lt;/p&gt;
&lt;p&gt;$$
\xrightarrow{r_1-r_2 \times 2.5}
\left(\begin{matrix}
1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0.5 \
0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0
\end{matrix} \middle|
\begin{matrix}
14.5 \
-4 \
0
\end{matrix} \right)
$$&lt;/p&gt;
&lt;p&gt;化为最简形&lt;/p&gt;
&lt;h3&gt;还原线性方程组&lt;/h3&gt;
&lt;p&gt;$$
\begin{cases}
x_1+0.5x_4 &amp;amp;= 14.5\
x_3+x_4 &amp;amp;= -4 \
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;解释&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;所谓的还原线性方程组，即是在行最简形的基础上，将之重新书写为线性方程组的形式，即将行最简形中各位置的系数重新赋予变量，中间的竖线还原为等号。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;求解第一个变量&lt;/h3&gt;
&lt;p&gt;$$
\begin{cases}
x_1 = -0.5x_4+14.5\notag \
x_3 = -x_4-4\notag
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;解释&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;即是对于所还原的线性方程组而言，将方程组中每个方程的第一个变量，用其他量表达出来。如方程组两方程中的第一个变量 $x_1$ 和 $x_3$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;补充自由未知量&lt;/h3&gt;
&lt;p&gt;$$
\begin{cases}
x_1 = -0.5x_4+14.5 \
x_2 = x_2 \
x_3 = -x_4-4 \
x_4 = x_4
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;解释&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;第 3 步中，求解出变量 $x_1$ 和 $x_3$，从而说明了方程剩余的变量 $x_2$ 和 $x_4$ 不受方程组的约束，是自由未知量，可以取任意值，所以需要在第 3 步骤解得基础上进行解得补充，补充的方法为 $x_2 = x_2,x_4 = x_4$，这种解得补充方式符合自由未知量定义，并易于理解，因为是自由未知量而不受约束，所以只能自己等于自己。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;列表示方程组的通解&lt;/h3&gt;
&lt;p&gt;$$
\begin{aligned}
\begin{pmatrix} x_1 \ x_2 \ x_3 \ x_4 \end{pmatrix} &amp;amp;=
\begin{pmatrix} 0 \ 1 \ 0 \ 0 \end{pmatrix} x_2+
\begin{pmatrix} -0.5 \ 0 \ -1 \ 1 \end{pmatrix} x_4 +
\begin{pmatrix} 14.5 \ 0 \ -4 \ 0 \end{pmatrix} \
&amp;amp;= \begin{pmatrix} 0 \ 1 \ 0 \ 0 \end{pmatrix} C_1+
\begin{pmatrix} -0.5 \ 0 \ -1 \ 1 \end{pmatrix} C_2 +
\begin{pmatrix} 14.5 \ 0 \ -4 \ 0 \end{pmatrix}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;其中 $C_1$ 和 $C_2$ 为任意常数。&lt;/p&gt;
&lt;p&gt;解释&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;即在第 4 步的基础上，将解表达为列向量组合的表示形式，同时由于 $x_2$ 和 $x_4$ 是自由未知量，可以取任意值，所以在解得右边，令二者分别为任意常数 $C_1$ 和 $C_2$，即实现了对方程组的求解。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;行列式计算&lt;/h2&gt;
&lt;h3&gt;解释&lt;/h3&gt;
&lt;p&gt;$N \times N$ 方阵行列式（Determinant）可以理解为所有列向量所夹的几何体的有向体积&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;p&gt;$$
\begin{vmatrix}
1 &amp;amp; 0 \
0 &amp;amp; 1 \end{vmatrix} = 1
$$&lt;/p&gt;
&lt;p&gt;$$
\begin{vmatrix}
1 &amp;amp; 2 \
2 &amp;amp; 1 \end{vmatrix} = -3
$$&lt;/p&gt;
&lt;p&gt;行列式有公式&lt;/p&gt;
&lt;p&gt;$$
\operatorname{det}(A)=\sum_{\sigma \in S_{n}} \operatorname{sgn}(\sigma) \prod_{i=1}^{n} a_{i, \sigma(i)}
$$&lt;/p&gt;
&lt;p&gt;其中 $S_n$ 是指长度为 $n$ 的全排列的集合，$\sigma$ 就是一个全排列，如果 $\sigma$ 的逆序对对数为偶数，则 $\operatorname{sgn}(\sigma)=1$，否则 $\operatorname{sgn}(\sigma)=−1$。&lt;/p&gt;
&lt;p&gt;通过体积概念理解行列式不变性是一个非常简单的办法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;矩阵转置，行列式不变；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;矩阵行（列）交换，行列式取反；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;矩阵行（列）相加或相减，行列式不变；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;矩阵行（列）所有元素同时乘以数 $k$，行列式等比例变大。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;由此，对矩阵应用高斯消元之后，我们可以得到一个对角线矩阵，此矩阵的行列式由对角线元素之积所决定。其符号可由交换行的数量来确定（如果为奇数，则行列式的符号应颠倒）。因此，我们可以在 $O(n^3)$ 的复杂度下使用高斯算法计算矩阵。&lt;/p&gt;
&lt;p&gt;注意，如果在某个时候，我们在当前列中找不到非零单元，则算法应停止并返回 0。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;实现&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;constexpr double EPS = 1E-9;
int n;
vector&amp;lt;vector&amp;lt;double&amp;gt;&amp;gt; a(n, vector&amp;lt;double&amp;gt;(n));

double det = 1;
for (int i = 0; i &amp;lt; n; ++i) {
  int k = i;
  for (int j = i + 1; j &amp;lt; n; ++j)
    if (abs(a[j][i]) &amp;gt; abs(a[k][i])) k = j;
  if (abs(a[k][i]) &amp;lt; EPS) {
    det = 0;
    break;
  }
  swap(a[i], a[k]);
  if (i != k) det = -det;
  det *= a[i][i];
  for (int j = i + 1; j &amp;lt; n; ++j) a[i][j] /= a[i][i];
  for (int j = 0; j &amp;lt; n; ++j)
    if (j != i &amp;amp;&amp;amp; abs(a[j][i]) &amp;gt; EPS)
      for (int k = i + 1; k &amp;lt; n; ++k) a[j][k] -= a[i][k] * a[j][i];
}

cout &amp;lt;&amp;lt; det;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;矩阵求逆&lt;/h2&gt;
&lt;p&gt;对于方阵 $A$，若存在方阵 $A^{-1}$，使得 $A \times A^{-1} = A^{-1} \times A = I$，则称矩阵 $A$ 可逆，$A^{-1}$ 被称为它的逆矩阵。&lt;/p&gt;
&lt;p&gt;给出 $n$ 阶方阵 $A$，求解其逆矩阵的方法如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;构造 $n \times 2n$ 的矩阵 $(A, I_n)$；&lt;/li&gt;
&lt;li&gt;用高斯消元法将其化简为最简形 $(I_n, A^{-1})$，即可得到 $A$ 的逆矩阵 $A^{-1}$。如果最终最简形的左半部分不是单位矩阵 $I_n$，则矩阵 $A$ 不可逆。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;该方法的正确性证明需要用到较多线性代数的知识，限于篇幅这里不再给出。感兴趣的读者可以自行查阅相关资料。&lt;/p&gt;
&lt;h2&gt;高斯消元法解异或方程组&lt;/h2&gt;
&lt;p&gt;异或方程组是指形如&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
a_{1,1}x_1 \oplus a_{1,2}x_2 \oplus \cdots \oplus a_{1,n}x_n &amp;amp;= b_1\
a_{2,1}x_1 \oplus a_{2,2}x_2 \oplus \cdots \oplus a_{2,n}x_n &amp;amp;= b_2\
\cdots &amp;amp;\cdots \ a_{m,1}x_1 \oplus a_{m,2}x_2 \oplus \cdots \oplus a_{m,n}x_n &amp;amp;= b_1
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;的方程组，其中 $\oplus$ 表示「按位异或」（即 &lt;code&gt;xor&lt;/code&gt; 或 C++ 中的 &lt;code&gt;^&lt;/code&gt;），且式中所有系数/常数（即 $a_{i,j}$ 与 $b_i$）均为 $0$ 或 $1$。&lt;/p&gt;
&lt;p&gt;由于「异或」符合交换律与结合律，故可以按照高斯消元法逐步消元求解。值得注意的是，我们在消元的时候应使用「异或消元」而非「加减消元」，且不需要进行乘除改变系数（因为系数均为 $0$ 和 $1$）。&lt;/p&gt;
&lt;p&gt;注意到异或方程组的增广矩阵是 $01$ 矩阵（矩阵中仅含有 $0$ 与 $1$），所以我们可以使用 C++ 中的 &lt;code&gt;std::bitset&lt;/code&gt; 进行优化，将时间复杂度降为 $O(\dfrac{n^2m}{\omega})$，其中 $n$ 为元的个数，$m$ 为方程条数，$\omega$ 一般为 $32$（与机器有关）。&lt;/p&gt;
&lt;p&gt;参考实现：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;std::bitset&amp;lt;1010&amp;gt; matrix[2010];  // matrix[1~n]：增广矩阵，0 位置为常数

std::vector&amp;lt;bool&amp;gt; GaussElimination(
    int n, int m)  // n 为未知数个数，m 为方程个数，返回方程组的解
                   // （多解 / 无解返回一个空的 vector）
{
  for (int i = 1; i &amp;lt;= n; i++) {
    int cur = i;
    while (cur &amp;lt;= m &amp;amp;&amp;amp; !matrix[cur].test(i)) cur++;
    if (cur &amp;gt; m) return std::vector&amp;lt;bool&amp;gt;(0);
    if (cur != i) swap(matrix[cur], matrix[i]);
    for (int j = 1; j &amp;lt;= m; j++)
      if (i != j &amp;amp;&amp;amp; matrix[j].test(i)) matrix[j] ^= matrix[i];
  }
  std::vector&amp;lt;bool&amp;gt; ans(n + 1);
  for (int i = 1; i &amp;lt;= n; i++) ans[i] = matrix[i].test(0);
  return ans;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;学了高斯-约旦消元法。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;P3389&lt;/code&gt; 板题水过。判不了无解和无限解。板子放专栏了。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
 for(i=1;i&amp;lt;=n;i++){
  p=i;
  for(j=i+1;j&amp;lt;=n;j++)if(fabs(a[j][i])&amp;gt;fabs(a[p][i]))p=j;
  for(j=1;j&amp;lt;=n+1;j++)swap(a[p][j],a[i][j]);
  if(fabs(a[i][i])&amp;lt;1e-7)return cout&amp;lt;&amp;lt;-1,0;
  for(j=n+1;j;j--)a[i][j]/=a[i][i];
  for(j=1;j&amp;lt;=n;j++)
   if(j!=i){
    x=a[j][i]/a[i][i];
    for(k=1;k&amp;lt;=n+1;k++)a[j][k]-=a[i][k]*x;
   }
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1205&lt;/code&gt; 不错的模拟。注意到所有操作都可以通过转 $90\degree$ 和中心对成来实现，加上 &lt;code&gt;struct&lt;/code&gt; 结构的便利性，大大减小了码量。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;struct Matrix{
    char a[N][N];
    void read(){for(int i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i]+1;}
    Matrix _1(){
        Matrix final;int i,j;
        for(i=1;i&amp;lt;=n;i++)for(j=1;j&amp;lt;=n;j++)final.a[i][j]=a[n-j+1][i];
        return final;
    }
    Matrix _2(){
        Matrix final;int i,j;
        for(i=1;i&amp;lt;=n;i++)for(j=1;j&amp;lt;=n;j++)final.a[i][j]=a[i][n-j+1];
        return final;
    }
    bool operator ==(Matrix b){
  int i,j;
        for(i=1;i&amp;lt;=n;i++)for(j=1;j&amp;lt;=n;j++)if(a[i][j]!=b.a[i][j])return 0;
        return 1;
    }
};
int main(){
    cin&amp;gt;&amp;gt;n;x.read();y.read();tmp=x;
    for(i=1;i&amp;lt;=3;i++){
        tmp=tmp._1();
        if(tmp==y)return cout&amp;lt;&amp;lt;i,0;
    }
    tmp=x._2();
    if(tmp==y)return cout&amp;lt;&amp;lt;4,0;
    for(i=1;i&amp;lt;=3;i++){
        tmp=tmp._1();
        if(tmp==y)return cout&amp;lt;&amp;lt;5,0;
    }
    if(x==y)cout&amp;lt;&amp;lt;6;
    else cout&amp;lt;&amp;lt;7;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1207&lt;/code&gt; 我选择打表最优解。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1,2,3,4,5,6,7,8,9,10,15,16,17,18,20,21,24,26,27,28,31,33,36,40,45,46,50,51,52,55,57,63,65,67,73,78,80,82,85,88,91,92,93,98,99,100,104,105,107,109,111,114,119,121,127,129,130,135,141,142,150,151,154,160,164,170,171,173,178,182,185,186,191,195,200,203,209,212,215,219,227,235,242,246,252,255,257,264,273,282,292,300,313,316,325,328,333,341,342,343,357,364,365,373,381,393,400,414,427,434,438,446,455,464,471,484,495,511,513,546,555,560,564,585,624,626,644,646,651,656,666,676,692,693,701,717,728,730,757,771,777,787,819,820,856,868,910,939,975,1023,1025,1066,1105,1221,1285,1312,1365,1432,1441,1460,1539,1550,1640,1667,1755,1885,2000,2188,2268,2293,2550,2565,2709,2730,2910,2920,2925,2997,3069,3074,3075,3280,3315,3550,3591,3640,3663,3735,3740,3855,3951,3999,4095,4097,4161,4225,4257,4289,4369,4433,4593,4617,4681,5001,5049,5125,5189,5397,5461,5740,5840,5854,6148,6200,6560,6562,6643,6697,6724,6761,6825,6886,6889,6953,7300,7373,7381,7409,7447,7462,7517,7667,7703,7777,7801,7997,8038,8119,8194,8200,8258,8281,8322,8386,8578,8778,8802,9009,9103,9201,9222,9490,9958,10252,10308,10658,10794,10858,10922,10986,11253,11314,11757,11898,11950,12291,12355,12419,12483, 12547,12654,12691,13107,13124,13131,13205,13286,13299,13331
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1209&lt;/code&gt; 简单贪心。排序即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
    if(m&amp;gt;c)return cout&amp;lt;&amp;lt;c,0;
    stable_sort(a+1,a+1+c);
    ans=a[c]-a[1]+1;
    for(i=2;i&amp;lt;=c;i++)f[i-1]=a[i]-a[i-1];
    stable_sort(f+1,f+c,greater&amp;lt;int&amp;gt;());
    for(i=1;i&amp;lt;m;i++)(ans-=f[i])++;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1215&lt;/code&gt; 爆搜不需要任何优化。搜之前判一下能不能倒。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dfs(int x,int y,int z){
    if(vis[x][y][z])return;
    if(!x)ans[++k]=z;
    vis[x][y][z]=1;
    if(z){
        if(x&amp;lt;a)dfs(min(a,x+z),y,z-(min(a,x+z)-x));
        if(y&amp;lt;b)dfs(x,min(y+z,b),z-(min(b,y+z)-y));
    }
    if(y){
        if(x&amp;lt;a)dfs(min(a,x+y),y-(min(a,x+y)-x),z);
        if(z&amp;lt;c)dfs(x,y-(min(c,z+y)-z),min(c,z+y));
    }
    if(x){
        if(y&amp;lt;b)dfs(x-(min(b,x+y)-y),min(b,x+y),z);
        if(z&amp;lt;c)dfs(x-(min(c,x+z)-z),y,min(c,z+x));
    }
}
main(){dfs(0,0,c);sort(ans+1,ans+1+k);}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1234&lt;/code&gt; 没写搜索写了个暴力枚举，同时喜提史上最长单行函数。$n$ 行 $m$ 列不是 $n$ 行 $n$ 列见祖宗。不过讨论区也有一堆跟我一样的傻逼。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int _(int x,int y){return (x&amp;gt;=4?(a[x][y]==&apos;h&apos;&amp;amp;&amp;amp;a[x-1][y]==&apos;e&apos;&amp;amp;&amp;amp;a[x-2][y]==&apos;h&apos;&amp;amp;&amp;amp;a[x-3][y]==&apos;e&apos;):0)+(x&amp;lt;=n-3?(a[x][y]==&apos;h&apos;&amp;amp;&amp;amp;a[x+1][y]==&apos;e&apos;&amp;amp;&amp;amp;a[x+2][y]==&apos;h&apos;&amp;amp;&amp;amp;a[x+3][y]==&apos;e&apos;):0)+(y&amp;gt;=4?(a[x][y]==&apos;h&apos;&amp;amp;&amp;amp;a[x][y-1]==&apos;e&apos;&amp;amp;&amp;amp;a[x][y-2]==&apos;h&apos;&amp;amp;&amp;amp;a[x][y-3]==&apos;e&apos;):0)+(y&amp;lt;=m-3?(a[x][y]==&apos;h&apos;&amp;amp;&amp;amp;a[x][y+1]==&apos;e&apos;&amp;amp;&amp;amp;a[x][y+2]==&apos;h&apos;&amp;amp;&amp;amp;a[x][y+3]==&apos;e&apos;):0);}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1454&lt;/code&gt; 裸的 &lt;code&gt;dfs&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dx[12][2]={1,0,-1,0,0,1,0,-1,2,0,-2,0,0,2,0,-2,1,-1,-1,1,1,1,-1,-1};
dfs(int x,int y){
 if(x&amp;lt;1||x&amp;gt;n||y&amp;lt;1||y&amp;gt;m||a[x][y]!=&apos;#&apos;)return;
    a[x][y]=&apos;-&apos;;
    for(i=0;i&amp;lt;12;i++)dfs(x+dx[i][0],y+dx[i][1]);
}
main(){for(i=1;i&amp;lt;=n;i++)for(j=1;j&amp;lt;=m;j++)if(a[i][j]==&apos;#&apos;)ans++,dfs(i,j);}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1479&lt;/code&gt; 你说得对，但我选择打表最优解。而且这题造表程序很好写。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;0,0,0,0,1,1,1,1,3,3,3,6,6,10,10,15,21,21,28,28,35,30,30,27,12&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;P1498&lt;/code&gt; 傻逼模拟调我半天。其实就是个杨辉三角。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
 a[0]=1;
    for(i=0;i&amp;lt;(1&amp;lt;&amp;lt;n);i++,cout&amp;lt;&amp;lt;&apos;\n&apos;){
        for(j=1;j&amp;lt;(1&amp;lt;&amp;lt;n)-i;j++)cout&amp;lt;&amp;lt;&apos; &apos;;
  for(j=i;j&amp;gt;=0;j--)a[j]^=a[j-1];
  if(i&amp;amp;1)for(j=0;j&amp;lt;=i;j+=2)cout&amp;lt;&amp;lt;(a[j]?&quot;/__\\&quot;:&quot;    &quot;);
  else for(j=0;j&amp;lt;=i;j++)cout&amp;lt;&amp;lt;(a[j]?&quot;/\\&quot;:&quot;  &quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1506&lt;/code&gt; 就是求被 &lt;code&gt;*&lt;/code&gt; 包起来的 &lt;code&gt;0&lt;/code&gt; 区块的总数量。爆搜即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dfs(int x,int y){
 for(i=0;i&amp;lt;4;i++){
  sx=x+dx[i][0];sy=y+dx[i][1];
  if((sx==1||sx==n||sy==1||sy==m)&amp;amp;&amp;amp;a[sx][sy]==&apos;0&apos;)flag=1;
  if(a[sx][sy]==&apos;*&apos;||sx==1||sx==n||sy==1||sy==m||vis[sx][sy])continue;
  s++;vis[sx][sy]=1;dfs(sx,sy);
 }
}
main(){
 for(i=2;i&amp;lt;n;i++)
  for(j=2;j&amp;lt;m;j++)
   if(a[i][j]==&apos;0&apos;&amp;amp;&amp;amp;!vis[i][j]){
    vis[i][j]=1;flag=0;s=1;dfs(i,j);
    if(flag)s=0;
    ans+=s;
   }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1508&lt;/code&gt; 还是简单深搜。加个记忆化就行。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dfs(int x,int y){
 if(f[x][y])return f[x][y];
 if(x&amp;lt;1||y&amp;lt;1||x&amp;gt;n||y&amp;gt;m)return 0;
 return f[x][y]=max(dfs(x-1,y)+a[x-1][y],max(dfs(x-1,y-1)+a[x-1][y-1],dfs(x-1,y+1)+a[x-1][y+1]));
}
main(){cout&amp;lt;&amp;lt;max(dfs(n,m/2+1)+a[n][m/2+1],max(dfs(n,m/2)+a[n][m/2],dfs(n,m/2+2)+a[n][m/2+2]));}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1515&lt;/code&gt; 这题递推吧，我还不会写爆搜呢。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;f[N]={0,990,1010,1970,2030,2940,3060,3930,4060,4970,5030,5990,6010,7000};
main(){
 for(i=14;i&amp;lt;n+14;i++)cin&amp;gt;&amp;gt;f[i];
 stable_sort(f,f+14+n);ans[0]=1;
 for(i=1;i&amp;lt;14+n;i++)for(j=0;j&amp;lt;i;j++)if(f[i]-f[j]&amp;gt;=a&amp;amp;&amp;amp;f[i]-f[j]&amp;lt;=b)ans[i]+=ans[j];
 cout&amp;lt;&amp;lt;ans[n+13];
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1521&lt;/code&gt; 没啥好说的。数据小。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
    f[0][0]=1;
    for(i=0;i&amp;lt;=k;i++)s[i]=1;
    for(i=1;i&amp;lt;=n;i++){
        for(j=0;j&amp;lt;=k;j++)
            if(i&amp;lt;=j)f[i][j]=(s[j]-s[j-i]+mod)%mod;
            else f[i][j]=s[j]%mod;
        s[0]=f[i][0]%mod;
        for(j=1;j&amp;lt;=k;j++)s[j]=(f[i][j]+s[j-1])%mod;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1588&lt;/code&gt; 纯宽搜无需任何优化。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;bfs(int u,int v){
 queue&amp;lt;int&amp;gt;q;memset(f,-1,sizeof f);
    q.push(u);f[u]=0;
    while(!q.empty()){
     int x=q.front();
     q.pop();
        if(x==v)return f[x];
        if(x&amp;amp;&amp;amp;f[x-1]==-1)q.push(x-1),f[x-1]=f[x]+1;
  if(x+1&amp;lt;=N&amp;amp;&amp;amp;f[x+1]==-1)q.push(x+1),f[x+1]=f[x]+1;
     if((x&amp;lt;&amp;lt;1)&amp;lt;=N&amp;amp;&amp;amp;f[x&amp;lt;&amp;lt;1]==-1)q.push(x&amp;lt;&amp;lt;1),f[x&amp;lt;&amp;lt;1]=f[x]+1;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1611&lt;/code&gt; 仅考察了循环结构与数学思想。根据题意枚举并判断即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const ll f[7]={1,10,100,1000,10000,100000,1000000};
main(){
    cin&amp;gt;&amp;gt;a&amp;gt;&amp;gt;b;t=a;
    while(t)t/=10,s++;
    for(i=a;i&amp;lt;b;i++){
        x=i;y=(x%10)*f[s-1]+x/10;
        while(x!=y)ans+=(x&amp;lt;y&amp;amp;&amp;amp;y&amp;lt;=b),y=(y%10)*f[s-1]+y/10;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1632&lt;/code&gt; 大水题。没考算法。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;main(){
 f&amp;lt;--inf
 for(i=1;i&amp;lt;=n;i++)
  for(j=1;j&amp;lt;=n;j++){
   s=0;
   for(k=1;k&amp;lt;=n;k++)a[k]=abs(x[k]-x[i])+abs(y[k]-y[j]);
   stable_sort(a+1,a+1+n);
   for(k=1;k&amp;lt;=n;k++)s+=a[k],f[k]=min(f[k],s);
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1644&lt;/code&gt; 唯一的难点是方向数组的写法（&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dfs(int x,int y){
 if(x==n&amp;amp;&amp;amp;y==m)s++;
 if(x&amp;lt;0||x&amp;gt;n||y&amp;gt;m)return;
 for(int i=0;i&amp;lt;4;i++)dfs(x+dx[i][0],y+dx[i][1]);
}
main(){dfs(0,0)}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1679&lt;/code&gt; 直接记搜就行了。$0$ 要特判。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dfs(int n,int x){
 if(!n||f[n])return f[n];
 int s=inf;
 while(x&amp;lt;=a[0]&amp;amp;&amp;amp;a[x]&amp;lt;=n)s=min(s,dfs(n-a[x],x)+1),x++;
 return f[n]=s;
}
main(){
 x=1;
 if(!n)return cout&amp;lt;&amp;lt;1,0;
 while(pow(x,4)&amp;lt;=n)a[++a[0]]=pow(x,4),x++;
 dfs(n,1);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1722&lt;/code&gt; 记搜。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dfs(int i,int s){
 if(i&amp;gt;n)return 1;
 if(f[i][s]!=f[0][0])return f[i][s];
 f[i][s]=0;
 if(s1&amp;lt;(n&amp;gt;&amp;gt;1))s1++,f[i][s]=dfs(i+1,s+1)%p,s1--;
 if(s2&amp;lt;(n&amp;gt;&amp;gt;1)&amp;amp;&amp;amp;s)s2++,f[i][s]=(f[i][s]%p+dfs(i+1,s-1)%p)%p,s2--;
 return f[i][s];
}
main(){n&amp;lt;&amp;lt;=1;memset(f,0x7f,sizeof f);dfs(1,0);}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;P1718&lt;/code&gt; 其实是要对于所给无向图，找出一条经过所有点且字典序最小的路径。&lt;/p&gt;
&lt;p&gt;然后跑裸的 &lt;code&gt;dfs&lt;/code&gt; 就行了，数据小甚至难得能用邻接矩阵存图。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dfs(int x,int k){
 int i;f[k]=x;
 if(k==n)
  if(a[x][1]){
   for(i=1;i&amp;lt;=n;i++)cout&amp;lt;&amp;lt;f[i]&amp;lt;&amp;lt;&apos; &apos;;
   cout&amp;lt;&amp;lt;&apos;\n&apos;;exit(0);
  }
  else return;
 for(i=1;i&amp;lt;=n;i++)
  if(a[x][i]&amp;amp;&amp;amp;!vis[i])
   vis[i]=1,dfs(i,k+1),vis[i]=0;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>CSP-J1&amp;S1 游记</title><link>https://blog.walterfang.site/posts/travel-csp-1/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/travel-csp-1/</guid><pubDate>Mon, 07 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;$\text{Day}$ $0$&lt;/p&gt;
&lt;p&gt;卷 whk。上课到8：50，回家简单复习下睡了&lt;/p&gt;
&lt;p&gt;$\text{Day}$ $1$&lt;/p&gt;
&lt;p&gt;醒的很早，7：45出发去余中，路上简单翻了下一本通和梦熊满分之路的错题和自己整理的考前复习提纲，大概9：00进考场。校门口碰到了 zhz，刚好在一个考场，一起进去了。&lt;/p&gt;
&lt;p&gt;上午考场在知行楼恶臭 $114$ 教师，同考场的还有 zhz 和 xyy &lt;s&gt;，极其幸运的吸走了 xyy 的 rp&lt;/s&gt;。考前碰到了 &lt;code&gt;SL&lt;/code&gt; 机房 $2023$ 界所有同学和傅里叶，大概9：25准备开考。这个时候烦人的雨开始下了。&lt;/p&gt;
&lt;p&gt;这次初赛来送水的 xxs 是真的多，大半个考场的 xxs。zhz 右边的神金赛时持续发电，唱歌转身抄答案，监考老师居然没管。&lt;/p&gt;
&lt;p&gt;11：30交卷。收卷的时候撇到 xyy 把 $\text{MB}$ 和 $\text{bit}$ 进率算错了/cf。&lt;/p&gt;
&lt;p&gt;跟傅里叶一起出的考场，简单对了几题感觉我们都能在 $95$ $\text{pts}$ 以上就放心了。雨还没停，傅里叶好心借我伞但是由于我太高了所以婉拒了。&lt;/p&gt;
&lt;p&gt;中午跟父母去一家海鲜楼随便吃了点，顺便估了 lg 的分，大概 $95.5$ $\text{pts}$。然后去市政府对面的公园&lt;s&gt;复习了一会&lt;/s&gt;开了 $1$ 小时 Milthm 和 Phi，1：50左右出发回余中，路上看了下 &lt;code&gt;Linux&lt;/code&gt; 一些基本指令。&lt;/p&gt;
&lt;p&gt;到校门发现没有熟人，索性一个人进去。下午考场在 $4$ 号教学楼 $305$。一上楼就看见了 fjz 和 zkn，&lt;s&gt;激动地冲上去抱在了一起&lt;/s&gt;。下午和 hxz 一个考场，xxs 还是和上午一样的多，不过不影响我发挥。&lt;/p&gt;
&lt;p&gt;4：30交卷，走出考场又碰到了 &lt;code&gt;SL&lt;/code&gt; 机房所有同学，索性一起出来了。感觉都比较稳，yty 说他有点发挥失误，安慰了下。听他们 &lt;code&gt;SL&lt;/code&gt; 的人说初二比完也都退了，有点难过。出去之后对了下 lg 的答案，$66$ $\text{pts}$，&lt;s&gt;还挺吉利&lt;/s&gt;。晚上还有课，急着先出发了。路上和 lottle、ch和傅里叶稍微聊了几句。&lt;/p&gt;
&lt;p&gt;到慈溪时间有点晚了，索性罗森买了个饭团赶紧上课，今天上的二次函数倒挺简单，感觉课上 zqy 和 syf 有点兴奋，同时了解到大概有好几个人提高组估分 $60^+$ $\text{pts}$，心沉了。回家开 abc，&lt;s&gt;但是只开了 2 题&lt;/s&gt;。&lt;/p&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>PX Formula</title><link>https://blog.walterfang.site/posts/px-formula/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/px-formula/</guid><pubDate>Fri, 30 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;适用问题&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.luogu.com.cn/upload/image_hosting/ndk73g1v.png&quot; alt=&quot;问题图示&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在 $\triangle ACB$ 中，$\angle ACB=\alpha$，$AB=a$（$\alpha$，$a$ 均为定值），求 $mAC+nBC$ 的最大值。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结论:&lt;/strong&gt; $(mAC + nBC)_{\text{max}} = \frac{\sqrt{n^2 + 2mn\cos\alpha + m^2}}{\sin\alpha} \cdot a$。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;推导过程:&lt;/strong&gt; 将原式转化为 $m\left(AC + \frac{n}{m}BC\right)$。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当 $\alpha &amp;gt; 90^{\circ}$ 时:&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;(i) $\frac{n}{m} &amp;gt; -\cos\alpha$&lt;/h4&gt;
&lt;p&gt;延长 $AC$ 至 $D$，使得 $CD = \frac{n}{m}BC$，作 $BH \perp AD$，如图：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.luogu.com.cn/upload/image_hosting/0rzcd2od.png&quot; alt=&quot;图示1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;令 $\lambda = \frac{n}{m}$, $CH = BC \cdot (-\cos\alpha)$, $DH = CD - CH = (\lambda + \cos\alpha)BC$。&lt;/p&gt;
&lt;p&gt;$BH = BC \cdot \sin\alpha$。&lt;/p&gt;
&lt;p&gt;$\therefore \tan\angle ADB = \frac{HB}{DH} = \frac{\sin\alpha}{\lambda + \cos\alpha}$， $(\Leftrightarrow\angle ADB = \arctan\frac{\sin\alpha}{\lambda + \cos\alpha})$。&lt;/p&gt;
&lt;p&gt;可以求出 $\sin\angle ADB = \frac{\sin\alpha}{\sqrt{\lambda^2 + 2\lambda\cos\alpha + 1}}$。&lt;/p&gt;
&lt;p&gt;$\angle ADB$ 为定角，$AB$ 为定弦 $\Rightarrow$ $D$ 在 $\triangle ADB$ 的外接圆上运动。&lt;/p&gt;
&lt;p&gt;则 $\triangle ADB$ 的外接圆半径的 $2$ 倍 $2r = \frac{AB}{\sin\angle ADB} = \frac{a}{\sin\alpha} \cdot \sqrt{\lambda^2 + 2\lambda\cos\alpha + 1}$。&lt;/p&gt;
&lt;p&gt;$\because AD \leq 2r$&lt;/p&gt;
&lt;p&gt;$\therefore AD_{\text{max}} = \frac{\sqrt{\lambda^2 + 2\lambda\cos\alpha + 1}}{\sin\alpha} \cdot a$。&lt;/p&gt;
&lt;h4&gt;(ii) $\frac{n}{m} &amp;lt; -\cos\alpha$&lt;/h4&gt;
&lt;p&gt;延长 $AC$ 至 $D$，使得 $CD = \frac{n}{m}BC$，作 $BH \perp AD$，如图：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.luogu.com.cn/upload/image_hosting/geq60ysa.png&quot; alt=&quot;图示2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;令 $\lambda = \frac{n}{m}$，$CH = BC \cdot (-\cos\alpha)$, $DH = CH - CD = (-\lambda - \cos\alpha)BC$。&lt;/p&gt;
&lt;p&gt;$BH = BC \cdot \sin\alpha$。&lt;/p&gt;
&lt;p&gt;$\therefore \tan\angle HDB = \frac{HB}{DH} = -\frac{\sin\alpha}{\lambda + \cos\alpha}$。&lt;/p&gt;
&lt;p&gt;$\therefore \tan \angle ADB = -\tan \angle DHB = \frac{\sin\alpha}{\lambda + \cos\alpha}$ $(\Leftrightarrow \angle ADB = \arctan \frac{\sin\alpha}{\lambda + \cos\alpha})$&lt;/p&gt;
&lt;p&gt;$\angle ADB$ 为定角，$AB$ 为定弦 $\Rightarrow$ $D$ 在 $\triangle ADB$ 的外接圆上运动。&lt;/p&gt;
&lt;p&gt;可以求出 $\sin\angle ADB = \frac{\sin\alpha}{\sqrt{\lambda^2 + 2\lambda\cos\alpha + 1}}$。&lt;/p&gt;
&lt;p&gt;则 $\triangle ADB$ 的外接圆半径的 $2$ 倍 $2r = \frac{AB}{\sin\angle ADB} = \frac{a}{\sin\alpha} \cdot \sqrt{\lambda^2 + 2\lambda\cos\alpha + 1}$。&lt;/p&gt;
&lt;p&gt;$\because AD \leq 2r$&lt;/p&gt;
&lt;p&gt;$\therefore AD_{\text{max}} = \frac{\sqrt{\lambda^2 + 2\lambda\cos\alpha + 1}}{\sin\alpha} \cdot a$。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当 $\alpha &amp;lt; 90^{\circ}$ 时:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;延长 $AC$ 至 $D$，使得 $CD = \frac{n}{m}BC$，作 $BH \perp AD$，如图：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.luogu.com.cn/upload/image_hosting/ro4g3ctd.png&quot; alt=&quot;图示3&quot; /&gt;&lt;/p&gt;
&lt;p&gt;令 $\lambda = \frac{n}{m}$。&lt;/p&gt;
&lt;p&gt;$CH = BC \cdot \cos\alpha$，$DH = CD + CH = (\lambda + \cos\alpha)BC$。&lt;/p&gt;
&lt;p&gt;$BH = BC \cdot \sin\alpha$。&lt;/p&gt;
&lt;p&gt;$\therefore \tan\angle ADB = \frac{HB}{DH} = \frac{\sin\alpha}{\lambda + \cos\alpha}$， $(\Leftrightarrow\angle ADB = \arctan\frac{\sin\alpha}{\lambda + \cos\alpha})$。&lt;/p&gt;
&lt;p&gt;$\angle ADB$ 为定角，$AB$ 为定弦 $\Rightarrow$ $D$ 在 $\triangle ADB$ 的外接圆上运动。&lt;/p&gt;
&lt;p&gt;可以求出 $\sin\angle ADB = \frac{\sin\alpha}{\sqrt{\lambda^2 + 2\lambda\cos\alpha + 1}}$。&lt;/p&gt;
&lt;p&gt;则 $\triangle ADB$ 的外接圆半径的 $2$ 倍 $2r = \frac{AB}{\sin\angle ADB} = \frac{a}{\sin\alpha} \cdot \sqrt{\lambda^2 + 2\lambda\cos\alpha + 1}$。&lt;/p&gt;
&lt;p&gt;$\because AD \leq 2r$&lt;/p&gt;
&lt;p&gt;$\therefore AD_{\text{max}} = \frac{\sqrt{\lambda^2 + 2\lambda \cos\alpha + 1}}{\sin\alpha} \cdot a$。&lt;/p&gt;
&lt;p&gt;综上，$(AC+\frac{n}{m}\cdot BC)&lt;em&gt;{\max}=AD&lt;/em&gt;{\max}=\frac{\sqrt{\lambda^2+2\lambda\cos\alpha+1}}{\sin\alpha} \cdot a$。&lt;/p&gt;
&lt;p&gt;$\Leftrightarrow(m\cdot AC+n\cdot BC)&lt;em&gt;{\text{max}}=m\cdot AD&lt;/em&gt;{\text{max}}=\frac{\sqrt{m^2+2mn\cos\alpha+n^2}}{\sin\alpha}\cdot a$。&lt;/p&gt;
</content:encoded><author>刮风落雪、我</author></item><item><title>题解：AT_abc368_c [ABC368C] Triple Attack</title><link>https://blog.walterfang.site/posts/solution-at_abc368_c/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-at_abc368_c/</guid><pubDate>Sun, 25 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;题意言简意赅无需赘述。注意每次只攻击最前面生命值为正数的怪物。&lt;/p&gt;
&lt;h3&gt;思路解析&lt;/h3&gt;
&lt;p&gt;由题意可知怪物生命减少数量以 &lt;code&gt;1 1 3&lt;/code&gt; 为一组循环，所以只需先将每组血量一起减少 $5$，如果这只怪物在本回合没有死则再次执行上述操作即可。&lt;/p&gt;
&lt;h3&gt;代码实现&lt;/h3&gt;
&lt;p&gt;代码实现非常简单。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
typedef long long ll;
const ll N=2e5+10;
ll n,i,x,t,f,a[N];
int main(){
 cin&amp;gt;&amp;gt;n;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i];
 for(i=1;i&amp;lt;=n;i++){
  if(a[i]&amp;gt;0&amp;amp;&amp;amp;!f)a[i]--,f++,x++;
  if(a[i]&amp;gt;0&amp;amp;&amp;amp;f==1)a[i]--,f++,x++;
  if(a[i]&amp;gt;0&amp;amp;&amp;amp;f==2)a[i]-=3,f=0,x++;
  t=a[i]/5;x+=t*3;a[i]-=t*5;
  if(a[i]&amp;gt;0)a[i]--,f++,x++;
  if(a[i]&amp;gt;0)a[i]--,f++,x++;
  if(a[i]&amp;gt;0)a[i]-=3,f=0,x++;
 }
 cout&amp;lt;&amp;lt;x;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>题解：P10893 城市化发展委员会</title><link>https://blog.walterfang.site/posts/solution-p10893/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-p10893/</guid><pubDate>Thu, 22 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;笑点解析：昨天写完没点申请题解，今天题解申请通道关了。&lt;/p&gt;
&lt;p&gt;看到很多大佬写了 &lt;code&gt;STL&lt;/code&gt; 和单调数据结构做法，这里给个思维含量颇高的数学做法。&lt;/p&gt;
&lt;h3&gt;题目描述&lt;/h3&gt;
&lt;p&gt;规定一个序列为“安全的”当且仅当这个序列的所有前缀和为正数。&lt;/p&gt;
&lt;p&gt;给定一个长度为 $n$ 的序列 $A_i$，执行 $n$ 次以下操作得出新的数列 $A_{i+1}$：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若 $A_i$ 是安全的，将其接到 $A_{i+1}$ 末尾。&lt;/li&gt;
&lt;li&gt;将 $A_i$ 循环左移 $1$ 位。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;求 $\dfrac{|A_{k+1}|}{|A_k|}$，答案对 $998244353$ 取模。&lt;/p&gt;
&lt;h3&gt;思路解析&lt;/h3&gt;
&lt;p&gt;设所求答案 $f(i)=\dfrac{|A_{i+1}|}{|A_i|}$，$g(i)=\sum^i_{j=1}A_{ij}$，易证 $f(i)=g(i)$。
于是 $f(i+1)=g(i+1)=f(i)g(i)=f(i)^2$。所以 $f(k)=g(0)^{2^k}$。写个快速幂就行了，理论上可以用费马小定理再优化一下，没试。&lt;/p&gt;
&lt;p&gt;不放代码。&lt;/p&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>AT_abc366_e Manhattan Multifocal Ellipse 题解</title><link>https://blog.walterfang.site/posts/solution-at_abc336_e/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-at_abc336_e/</guid><pubDate>Wed, 14 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;code&gt;ABC&lt;/code&gt; 最水的一场。&lt;/p&gt;
&lt;h3&gt;题意&lt;/h3&gt;
&lt;p&gt;给定二维平面上的 $N$ 个点 $(x_{1},y_{1})，(x_{2},y_{2})\ldots(x_{N},y_{N})$ 和非负整数 $D$，试求满足 $\sum_{i=1}^n(|x-x_{i}|,|y-y_{i}|) \le D$ 的整数对 $(x,y)$ 的个数。&lt;/p&gt;
&lt;h3&gt;解析&lt;/h3&gt;
&lt;p&gt;需要满足的条件为 $\sum_{i=1}^n(|x-x_{i}|,|y-y_{i}|) \le D$，移项即得 $D-\sum_{i=1}^n{|x-x_i|} \geq \sum_{i=1}^n|y-y_i|$。&lt;/p&gt;
&lt;p&gt;不妨枚举所有的 $x$ 与 $y$，并将其排序并记录，然后用双指针维护即可。理论二分也可行，未尝试。&lt;/p&gt;
&lt;h3&gt;赛时代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
typedef long long ll;
const ll N=1e6+10,M=(N&amp;lt;&amp;lt;2)+10;
ll n,d,i,j,t,s,ans,x[N],y[N],f1[M],f2[M],s1[M],s2[M];
int main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;d;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;x[i]&amp;gt;&amp;gt;y[i],f1[(N&amp;lt;&amp;lt;1)+y[i]+1]++,f2[(N&amp;lt;&amp;lt;1)+y[i]-1]++;
 for(i=0;i&amp;lt;=M;i++)t+=f1[i],f1[i]=0,s+=t,s2[i]+=s;
 t=s=0;
 for(i=M;i&amp;gt;=0;i--)t+=f2[i],f2[i]=0,s+=t,s2[i]+=s;
 for(i=1;i&amp;lt;=n;i++)f1[(N&amp;lt;&amp;lt;1)+x[i]+1]++,f2[(N&amp;lt;&amp;lt;1)+x[i]-1]++;
 t=s=0;
 for(i=0;i&amp;lt;=M;i++)t+=f1[i],f1[i]=0,s+=t,s1[i]+=s;
 t=s=0;
 for(i=M;i&amp;gt;=0;i--)t+=f2[i],f2[i]=0,s+=t,s1[i]+=s;
 t=M;stable_sort(s1,s1+t+1);stable_sort(s2,s2+t+1);
 for(i=t;i&amp;gt;=0;i--){
  while(j&amp;lt;=t&amp;amp;&amp;amp;s1[i]+s2[j]&amp;lt;=d)j++;
  ans+=j;
 }
 cout&amp;lt;&amp;lt;ans;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>7.1做题笔记</title><link>https://blog.walterfang.site/posts/note-71/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/note-71/</guid><pubDate>Mon, 01 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;复习 &lt;code&gt;DFS&lt;/code&gt; 以及 &lt;code&gt;BFS&lt;/code&gt; 算法，并进行了相对应题型的训练。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.luogu.com.cn/problem/P8604&quot;&gt;P8604 [蓝桥杯 2013 国 C] 危险系数&lt;/a&gt;
数据范围不大，可以用邻接矩阵存储，并暴力 &lt;code&gt;DFS&lt;/code&gt;，时间复杂度为 $O(n^2)$，可以通过本题。
代码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
const int N=1e3+10;
int n,m,i,u,v,s,ans,a[N][N],vis[N],f[N];
void dfs(int t){
    int i;
    if(t==v){
        s++;
        for(i=1;i&amp;lt;=n;i++)if(vis[i])f[i]++;
        return;
    }
    for(i=1;i&amp;lt;=n;i++)if(a[t][i]&amp;amp;&amp;amp;!vis[i])vis[i]=1,dfs(i),vis[i]=0;
}
int main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;
 for(i=1;i&amp;lt;=m;i++)cin&amp;gt;&amp;gt;u&amp;gt;&amp;gt;v,a[u][v]=a[v][u]=1;
    cin&amp;gt;&amp;gt;u&amp;gt;&amp;gt;v;
    dfs(u);
    if(!s)return cout&amp;lt;&amp;lt;-1,0;
    for(i=1;i&amp;lt;=n;i++)if(f[i]==s)ans++;
    cout&amp;lt;&amp;lt;ans-1;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://www.luogu.com.cn/problem/P1030&quot;&gt;P1030 [NOIP2001 普及组] 求先序排列&lt;/a&gt;
思路：反复找主根，再分成 $2$ 棵子树，继续找每棵树的主根，如此往复，不难实现。
代码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
string a,b;
void _(string a,string b){
    if(a.size()){
        char root=b[b.size()-1];
        cout&amp;lt;&amp;lt;root;
        int k=a.find(root);
        _(a.substr(0,k),b.substr(0,k));
        _(a.substr(k+1),b.substr(k,a.size()-k-1));
    }
}
int main(){
 cin&amp;gt;&amp;gt;a&amp;gt;&amp;gt;b;
    _(a,b);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://www.luogu.com.cn/problem/P1294&quot;&gt;P1294 高手去散步&lt;/a&gt;
数据范围很小，考虑直接暴力遍历，可以通过本题。
代码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
const int N=1e2,inf=INT_MAX;
int n,m,i,u,v,w,s,ans=-inf,a[N][N],vis[N];
void dfs(int t){
    int i;
    for(i=1;i&amp;lt;=n;i++)if(a[t][i]&amp;amp;&amp;amp;!vis[i])vis[i]=1,s+=a[t][i],dfs(i),s-=a[t][i];
    ans=max(ans,s);vis[t]=0;
}
int main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;
 for(i=1;i&amp;lt;=m;i++)cin&amp;gt;&amp;gt;u&amp;gt;&amp;gt;v&amp;gt;&amp;gt;w,a[u][v]=a[v][u]=w;
    for(i=1;i&amp;lt;=n;i++)memset(vis,0,sizeof vis),vis[i]=1,dfs(i);
    cout&amp;lt;&amp;lt;ans;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://www.luogu.com.cn/problem/P1331&quot;&gt;P1331 海战&lt;/a&gt;
最有思维含量的一题。
考虑到不合法（船相撞）的情况只有如下 $4$ 种：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;##    ##    #.    .#
#.    .#    ##    ##
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;因此只需要开头特判，然后使用 $O(n^2)$ 的循环算法暴力解决。
代码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
const int N=1e3+10;
int n,m,i,j,ans;
char a[N][N];
bool check(int x,int y){
 int s=0;
 if(a[x][y]==&apos;#&apos;)s++;
 if(a[x+1][y]==&apos;#&apos;)s++;
 if(a[x][y+1]==&apos;#&apos;)s++;
 if(a[x+1][y+1]==&apos;#&apos;)s++;
 return s==3;
}
int main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;
 for(i=1;i&amp;lt;=n;i++)for(j=1;j&amp;lt;=m;j++)cin&amp;gt;&amp;gt;a[i][j];
 for(i=1;i&amp;lt;n;i++)for(j=1;j&amp;lt;m;j++)if(check(i,j))return cout&amp;lt;&amp;lt;&quot;Bad placement.&quot;,0;
 for(i=1;i&amp;lt;=n;i++)for(j=1;j&amp;lt;=m;j++)if(a[i][j]==&apos;#&apos;&amp;amp;&amp;amp;a[i-1][j]!=&apos;#&apos;&amp;amp;&amp;amp;a[i][j-1]!=&apos;#&apos;)ans++;
 cout&amp;lt;&amp;lt;&quot;There are &quot;&amp;lt;&amp;lt;ans&amp;lt;&amp;lt;&quot; ships.&quot;;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>三倍角公式的可视化证明</title><link>https://blog.walterfang.site/posts/triple-angle-formula/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/triple-angle-formula/</guid><pubDate>Sat, 29 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://cdn.luogu.com.cn/upload/image_hosting/pk8hob0l.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;$sin3\theta=sin\theta+2sin\theta cos2\theta=sin\theta+2sin(1-sin^2\theta)=sin\theta+2sin\theta-4sin^3\theta=3sin\theta-4sin^3\theta$&lt;/p&gt;
&lt;p&gt;$cos3\theta=2cos2\theta cos\theta-cos\theta=2cos\theta(2sin^2\theta-1)-cos\theta=4cos^3\theta-2cos\theta-cos\theta=4cos^3\theta-3cos\theta$&lt;/p&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>新冠生物考点</title><link>https://blog.walterfang.site/posts/biology-covid-19/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/biology-covid-19/</guid><pubDate>Sat, 01 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;必修一&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;冠状病毒没有细胞结构，只能寄生于活细胞中。这说明&lt;code&gt;细胞是生物体结构和功能的基本单位，生命活动离不开细胞&lt;/code&gt;，冠状病毒需要依靠活细胞合成蛋白质，这说明&lt;code&gt;蛋白质是生命活动的主要承担者&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;冠状病毒的遗传物质是单股正链RNA，它的基本组成单位是&lt;code&gt;核糖核苷酸&lt;/code&gt;。它可以被&lt;code&gt;吡罗红&lt;/code&gt;染液染色。&lt;/li&gt;
&lt;li&gt;冠状病毒和细胞膜上的结合位点ACE2结合从而入侵细胞说明细胞膜具有&lt;code&gt;进行信息交流&lt;/code&gt;的功能，也说明细胞膜&lt;code&gt;控制物质进出&lt;/code&gt;的功能是相对的。&lt;/li&gt;
&lt;li&gt;直接参与子代病毒在细胞内的组装过程的结构有&lt;code&gt;核糖体，内质网，高尔基体，囊泡&lt;/code&gt;，提供能量的细胞器是&lt;code&gt;线粒体&lt;/code&gt;。这说明了各生物膜&lt;code&gt;在结构和功能上紧密联系&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;子代病毒通过囊泡排出细胞说明生物膜具有的结构特性是&lt;code&gt;一定的流动性&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;合成的RNA聚合酶只对病毒所需RNA的合成起催化作用，说明酶具有&lt;code&gt;专一性&lt;/code&gt;。RNA聚合酶与无机催化剂相比催化RNA复制的效率更高，说明酶具有&lt;code&gt;高效性&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;人体通过促使被病毒感染的细胞凋亡从而清楚病毒，这说明细胞凋亡有利于&lt;code&gt;维持生物内部环境稳定，抵御外界各种因素干扰&lt;/code&gt;。细胞由于病毒的增殖而裂解死亡&lt;code&gt;不属于&lt;/code&gt;细胞凋亡。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;必修二&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;冠状病毒的+RNA进入细胞后，首先翻译为RNA聚合酶。这一过程需要的条件有&lt;code&gt;模板：冠状病毒的+RNA，原料：氨基酸，能量，酶，tRNA，rRNA&lt;/code&gt;，进行的场所是&lt;code&gt;核糖体&lt;/code&gt;。这说明+RNA的作用最类似于人体的&lt;code&gt;mRNA&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;正链RNA上结合多个核糖体的意义是&lt;code&gt;少量正链RNA可以迅速合成大量病毒所需的蛋白质&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;以+RNA为模板合成-RNA的过程所遵循的碱基互补配对法则与中心法则中的&lt;code&gt;翻译&lt;/code&gt;过程相同。这一过程需要的条件有&lt;code&gt;模板：冠状病毒的+RNA，原料：四种游离的核糖核苷酸，能量，酶：RNA聚合酶&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;冠状病毒容易形成重组RNA而发生变异 这属于&lt;code&gt;基因重组&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;冠状病毒相对DNA病毒更容易发生变异，这是由于&lt;code&gt;RNA分子是单链，DNA分子具有双螺旋的双链结构，因此RNA比DNA容易发生碱基增添，替换和丢失&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;必修三&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;冠状病毒侵入人体后需要淋巴细胞和吞噬细胞消灭，淋巴细胞和吞噬细胞直接生活的内环境主要是&lt;code&gt;血浆和淋巴&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;ACE2调节人体血量和血压的功能的过程如图2所示，这一过程属于&lt;code&gt;反馈调节&lt;/code&gt;，血管紧张素Ⅱ促进肾上腺皮质分泌醛固酮和小动脉收缩的调节方式是&lt;code&gt;体液调节&lt;/code&gt;。通常情况肺部细胞ACE2蛋白合成量不大，根本原因是&lt;code&gt;基因的选择性表达&lt;/code&gt;。中老年人的一些疾病会导致低钠血症或低血压，据图分析中老年人易感染冠状病毒的原因是&lt;code&gt;低钠血症或低血压会使血管紧张素Ⅰ增加，因此肺部细胞膜上能与冠状病毒结合的ACE2分泌增加，故中老年人容易感染&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;冠状病毒主要通过呼吸道侵入人体。鼻腔中的黏膜和毛发属于保卫人体的&lt;code&gt;第一道防线&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;冠状病毒进入人体后，吞噬细胞可以对其进行识别和吞噬。这属于&lt;code&gt;非特异性免疫&lt;/code&gt;，是人体的&lt;code&gt;第二道防线&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;冠状病毒病毒突破前两道防线后，引发人体特异性免疫反应的物质称为&lt;code&gt;抗原&lt;/code&gt;，如冠状病毒病毒表面的蛋白质。&lt;/li&gt;
&lt;li&gt;吞噬细胞对冠状病毒进行摄取和处理后，将抗原呈递给T细胞。这说明吞噬细胞&lt;code&gt;既能参与特异性免疫，又能参与非特异性免疫&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;冠状病毒会入侵肺细胞，要将其完全清除需要经过&lt;code&gt;细胞免疫和体液免疫&lt;/code&gt;过程。同时参与这两个过程的淋巴细胞是&lt;code&gt;T细胞&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;肺细胞被冠状病毒感染后，效应T细胞与肺细胞密切接触，使细胞裂解死亡。这&lt;code&gt;属于&lt;/code&gt;细胞凋亡。&lt;/li&gt;
&lt;li&gt;冠状病毒感染后，免疫系统对肺细胞的攻击引发肺炎。此时可以通过适度使用&lt;code&gt;免疫抑制剂&lt;/code&gt;对病人进行治疗以避免肺部严重受损。&lt;/li&gt;
&lt;li&gt;已被治愈的患者短期内不容易再次被冠状病毒感染，这是由于他们体内产生了&lt;code&gt;记忆细胞&lt;/code&gt;，当再次接触冠状病毒抗原时，可以迅速增殖分化为&lt;code&gt;浆细胞和效应T细胞&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>P3122 做题笔记</title><link>https://blog.walterfang.site/posts/note-p3122/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/note-p3122/</guid><pubDate>Wed, 31 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;省流&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Python&lt;/code&gt; 大获全胜。&lt;/p&gt;
&lt;h3&gt;分析&lt;/h3&gt;
&lt;p&gt;首先得知道 &lt;code&gt;eval&lt;/code&gt; 库。然后这道题目可以看成三则运算，&lt;code&gt;FD&lt;/code&gt; 是加， &lt;code&gt;BK&lt;/code&gt; 是减，&lt;code&gt;REPEAT&lt;/code&gt; 是乘。&lt;/p&gt;
&lt;p&gt;然后手动把输入的字符串处理一下，丢给 &lt;code&gt;eval&lt;/code&gt; 库解决。&lt;/p&gt;
&lt;p&gt;了吗？&lt;/p&gt;
&lt;p&gt;看个例子：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;REPEAT 114[]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;显然是 &lt;code&gt;0&lt;/code&gt;，但是 &lt;code&gt;eval&lt;/code&gt; 把它转换成了这样：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;114*()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;然后因为 &lt;code&gt;Python&lt;/code&gt; 里空括号是空元组，所以上面这种情况手动处理一下就行了。&lt;/p&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>算法模板</title><link>https://blog.walterfang.site/posts/algorithm-template/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/algorithm-template/</guid><description>一些 OI 常用的算法模板。</description><pubDate>Wed, 13 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;快读：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;namespace FastIO{
 char *p1,*p2,buf[1&amp;lt;&amp;lt;14];
 #define getchar() (p1==p2&amp;amp;&amp;amp;(p2=(p1=buf)+fread(buf,1,(1&amp;lt;&amp;lt;14),stdin),p1==p2)?EOF:*p1++)
 template &amp;lt;typename T&amp;gt;
 inline void read(T&amp;amp; x){
     x=0;
     register int t=1;
     register char ch=getchar();
     while(ch&amp;lt;&apos;0&apos;||ch&amp;gt;&apos;9&apos;){
         if(ch==&apos;-&apos;)t=-1;
         ch=getchar();
     }
     while(ch&amp;gt;=&apos;0&apos;&amp;amp;&amp;amp;ch&amp;lt;=&apos;9&apos;)x=(x&amp;lt;&amp;lt;1)+(x&amp;lt;&amp;lt;3)+(ch^48),ch=getchar();
     x*=t;
 }
 template &amp;lt;typename T&amp;gt;
 void write(T x){
     if(x&amp;lt;0)putchar(&apos;-&apos;),x=-x;
     if(x&amp;gt;9)write(x/10);
     putchar(x%10^48);
 }
 template &amp;lt;typename T&amp;gt;
 inline void writeln(T x,char sep=&apos;\n&apos;){
  write(x);putchar(sep);
 }
}
using namespace FastIO;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ST表：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace FastIO;
using namespace std;
const int N=1e6+10;
int n,T,i,j,x,y,a[N][21];
int Query(int x,int y){
    int z=__lg(y-x+1);
    return max(a[x][z],a[y-(1&amp;lt;&amp;lt;z)+1][z]);
}
int main(){
    read(n);read(T);
    for(i=1;i&amp;lt;=n;i++)read(a[i][0]);
    for(j=1;j&amp;lt;=21;j++)
        for(i=1;i&amp;lt;=n-(1&amp;lt;&amp;lt;j)+1;i++)
            a[i][j]=max(a[i][j-1],a[i+(1&amp;lt;&amp;lt;(j-1))][j-1]);
 while(T--)read(x),read(y),writeln(Query(x,y));
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;线段树（维护加法和乘法）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
#define ls x&amp;lt;&amp;lt;1
#define rs x&amp;lt;&amp;lt;1|1
using namespace std;
typedef long long ll;
const ll N=1e6+10;
ll n,m,mod,i,op,x,y,z,a[N];
struct Node{ll sum,l,r,Mul,Add;}Tree[N];
void Build(ll x,ll l,ll r){
 Tree[x].l=l,Tree[x].r=r;Tree[x].Mul=1;
 if(l==r){Tree[x].sum=a[l]%mod;return;}
 ll mid=(l+r)&amp;gt;&amp;gt;1;
 Build(ls,l,mid);Build(rs,mid+1,r);
 Tree[x].sum=(Tree[ls].sum+Tree[rs].sum)%mod;
}
void Spread(ll x){
    Tree[ls].sum=(Tree[x].Mul*Tree[ls].sum+((Tree[ls].r-Tree[ls].l+1)*Tree[x].Add)%mod)%mod;
    Tree[rs].sum=(Tree[x].Mul*Tree[rs].sum+(Tree[x].Add*(Tree[rs].r-Tree[rs].l+1))%mod)%mod;
    Tree[ls].Mul=(Tree[ls].Mul*Tree[x].Mul)%mod;
    Tree[rs].Mul=(Tree[rs].Mul*Tree[x].Mul)%mod;
 Tree[ls].Add=(Tree[ls].Add*Tree[x].Mul+Tree[x].Add)%mod;
    Tree[rs].Add=(Tree[rs].Add*Tree[x].Mul+Tree[x].Add)%mod;
    Tree[x].Mul=1;Tree[x].Add=0;
}
void Add(ll x,ll l,ll r,ll k){
 if(Tree[x].l&amp;gt;=l&amp;amp;&amp;amp;Tree[x].r&amp;lt;=r){
  Tree[x].Add=(Tree[x].Add+k)%mod;
  Tree[x].sum=(Tree[x].sum+k*(Tree[x].r-Tree[x].l+1))%mod;
  return;
 }
 Spread(x);
 Tree[x].sum=(Tree[ls].sum+Tree[rs].sum)%mod;
 ll mid=(Tree[x].l+Tree[x].r)&amp;gt;&amp;gt;1;
 if(l&amp;lt;=mid)Add(ls,l,r,k);
 if(mid&amp;lt;r)Add(rs,l,r,k);
 Tree[x].sum=(Tree[ls].sum+Tree[rs].sum)%mod;
}
void Mul(ll x,ll l,ll r,ll k){
 if(Tree[x].l&amp;gt;=l&amp;amp;&amp;amp;Tree[x].r&amp;lt;=r){
  Tree[x].Add=(Tree[x].Add*k)%mod;
  Tree[x].Mul=(Tree[x].Mul*k)%mod;
  Tree[x].sum=(Tree[x].sum*k)%mod;
  return;
 }
 Spread(x);
    Tree[x].sum=Tree[ls].sum+Tree[rs].sum;
 ll mid=(Tree[x].l+Tree[x].r)&amp;gt;&amp;gt;1;
 if(l&amp;lt;=mid)Mul(ls,l,r,k);
 if(mid&amp;lt;r)Mul(rs,l,r,k);
 Tree[x].sum=(Tree[ls].sum+Tree[rs].sum)%mod;
}
ll Query(ll x,ll l,ll r){
 if(Tree[x].l&amp;gt;=l&amp;amp;&amp;amp;Tree[x].r&amp;lt;=r)return Tree[x].sum;
 Spread(x);
 ll v=0,mid=(Tree[x].l+Tree[x].r)&amp;gt;&amp;gt;1;
 if(l&amp;lt;=mid)v=(v+Query(ls,l,r))%mod;
 if(mid&amp;lt;r)v=(v+Query(rs,l,r))%mod;
 return v;
}
int main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m&amp;gt;&amp;gt;mod;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i];
 Build(1,1,n);
 for(i=1;i&amp;lt;=m;i++){
  cin&amp;gt;&amp;gt;op;
  if(op==1)cin&amp;gt;&amp;gt;x&amp;gt;&amp;gt;y&amp;gt;&amp;gt;z,Mul(1,x,y,z);
  else if(op==2)cin&amp;gt;&amp;gt;x&amp;gt;&amp;gt;y&amp;gt;&amp;gt;z,Add(1,x,y,z);
  else cin&amp;gt;&amp;gt;x&amp;gt;&amp;gt;y,cout&amp;lt;&amp;lt;Query(1,x,y)&amp;lt;&amp;lt;&apos;\n&apos;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;快速幂：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const ll mod=/*模数*/;
ll qpow(ll x,ll y){
 ll s=1;
 while(y){
  if(y&amp;amp;1)s=s*x%mod;
  y&amp;gt;&amp;gt;=1;x=x*x%mod;
 }
 return s;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Trie树：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
const int N=3e6+10,M=70;
int T,q,n,i,j,l,f[N][M],sum[N];
char s[N];
int _(char x){
    if(x&amp;gt;=&apos;A&apos;&amp;amp;&amp;amp;x&amp;lt;=&apos;Z&apos;)return x-65;
    else if(x&amp;gt;=&apos;a&apos;&amp;amp;&amp;amp;x&amp;lt;=&apos;z&apos;)return x-71;
    else return x+4;
}
void Add(char str[]){
    int p=0,len=strlen(str),i,c;
    for(i=0;i&amp;lt;len;i++){
        c=_(str[i]);
        if(!f[p][c])f[p][c]=++l;
        p=f[p][c];
        sum[p]++;
    }
}
int Query(char str[]){
    int p=0,len=strlen(str),i,c;
    for(i=0;i&amp;lt;len;i++){
        c=_(str[i]);
        if(!f[p][c])return 0;
        p=f[p][c];
    }
    return sum[p];
}
int main(){
    cin&amp;gt;&amp;gt;T;
    while(T--){
        for(i=0;i&amp;lt;=l;i++)for(j=0;j&amp;lt;=122;j++)f[i][j]=0;
        for(i=0;i&amp;lt;=l;i++)sum[i]=0;
        l=0;
        cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;q;
        for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;s,Add(s);
        for(i=1;i&amp;lt;=q;i++)cin&amp;gt;&amp;gt;s,cout&amp;lt;&amp;lt;Query(s)&amp;lt;&amp;lt;&apos;\n&apos;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Floyd：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;memset(f,0x3f,sizeof f);
 for(i=1;i&amp;lt;=m;i++)cin&amp;gt;&amp;gt;x&amp;gt;&amp;gt;y&amp;gt;&amp;gt;z,f[x][y]=f[y][x]=z;
 for(i=1;i&amp;lt;=n;i++)f[i][i]=0;
 for(k=1;k&amp;lt;=n;k++)
  for(i=1;i&amp;lt;=n;i++)
   for(j=1;j&amp;lt;=n;j++)
    if(f[i][k]+f[k][j]&amp;lt;f[i][j])
                    f[i][j]=f[i][k]+f[k][j];
 for(i=1;i&amp;lt;=n;i++,cout&amp;lt;&amp;lt;&apos;\n&apos;)
  for(j=1;j&amp;lt;=n;j++)
   if(f[i][j]!=2139062143)cout&amp;lt;&amp;lt;f[i][j]&amp;lt;&amp;lt;&apos; &apos;;
   else cout&amp;lt;&amp;lt;0&amp;lt;&amp;lt;&apos; &apos;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;并查集：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
int n,T,k,x,y,i,j,f[10010];
int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
int main(){
    cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;T;
    for(i=1;i&amp;lt;=n;i++)f[i]=i;
    while(T--){
        cin&amp;gt;&amp;gt;k&amp;gt;&amp;gt;x&amp;gt;&amp;gt;y;
        if(k==1)f[find(x)]=find(y);
        else
            if(find(x)==find(y))cout&amp;lt;&amp;lt;&quot;Y\n&quot;;
            else cout&amp;lt;&amp;lt;&quot;N\n&quot;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;KMP：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
const int N=1e6+10;
int i,j,l1,l2,f[N];
char a[N],b[N];
int main(){
 cin&amp;gt;&amp;gt;a+1&amp;gt;&amp;gt;b+1;l1=strlen(a+1);l2=strlen(b+1);
 for(i=2;i&amp;lt;=l2;i++){
  while(j&amp;amp;&amp;amp;b[i]!=b[j+1])j=f[j];
  if(b[j+1]==b[i])j++;
  f[i]=j;
 }
 j=0;
 for(i=1;i&amp;lt;=l1;i++){
  while(j&amp;gt;0&amp;amp;&amp;amp;b[j+1]!=a[i])j=f[j];
  if(b[j+1]==a[i])j++;
  if(j==l2)cout&amp;lt;&amp;lt;i-l2+1&amp;lt;&amp;lt;&apos;\n&apos;,j=f[j];
 }
 for(i=1;i&amp;lt;=l2;i++)cout&amp;lt;&amp;lt;f[i]&amp;lt;&amp;lt;&apos; &apos;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SPFA：死了，换Dijkstra。&lt;/p&gt;
&lt;p&gt;Dijkstra：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
const int N=1e5+10,M=5e5+10,inf=INT_MAX;
struct Edge{int to,nxt,val;}E[M];
int n,m,s,i,x,y,z,cnt,head[N],dis[N],vis[N];
void add(int x,int y,int z){E[++cnt]={y,head[x],z};head[x]=cnt;}
struct Node{
    int x,y;
    bool operator&amp;lt;(const Node &amp;amp;y)const{return y.x&amp;lt;x;}
};
priority_queue&amp;lt;Node&amp;gt;q;
void Dij(){
 int u,v,i;dis[s]=0;q.push({0,s});
 while(!q.empty()){
  u=q.top().y;x=q.top().x;q.pop();
  if(vis[u])continue;
  vis[u]=1;
  for(i=head[u];i;i=E[i].nxt){
   v=E[i].to;
   if(dis[v]&amp;gt;dis[u]+E[i].val){
    dis[v]=dis[u]+E[i].val;
    if(!vis[v])q.push({dis[v],v});
   }
  }
 }
}
int main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m&amp;gt;&amp;gt;s;
 for(i=1;i&amp;lt;=n;i++)dis[i]=inf;
 for(i=1;i&amp;lt;=m;i++)cin&amp;gt;&amp;gt;x&amp;gt;&amp;gt;y&amp;gt;&amp;gt;z,add(x,y,z);
 Dij();
 for(i=1;i&amp;lt;=n;i++)cout&amp;lt;&amp;lt;dis[i]&amp;lt;&amp;lt;&apos; &apos;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CRT：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
typedef long long ll;
ll n,i,x,y,a[16],m[16],f[16],mul=1,ans;
void exgcd(ll a,ll b,ll &amp;amp;x,ll &amp;amp;y){
    if(!b){x=1;y=0;return;}
    exgcd(b,a%b,x,y);
    int z=x;x=y,y=z-y*(a/b);
}
int main(){
    cin&amp;gt;&amp;gt;n;
    for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;x&amp;gt;&amp;gt;a[i],m[i]=x,mul*=x;
    for(i=1;i&amp;lt;=n;i++)f[i]=mul/m[i],x=y=0,exgcd(f[i],m[i],x,y),ans+=a[i]*f[i]*(x&amp;lt;0?x+m[i]:x);
    cout&amp;lt;&amp;lt;ans%mul;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;逆元：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
typedef long long ll;
const ll N=3e6+10;
ll n,mod,i,inv[N];
int main(){
    cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;mod;inv[1]=1;
    cout&amp;lt;&amp;lt;1&amp;lt;&amp;lt;&apos;\n&apos;;
    for(i=2;i&amp;lt;=n;i++)inv[i]=(mod-mod/i)*inv[mod%i]%mod,cout&amp;lt;&amp;lt;inv[i]&amp;lt;&amp;lt;&apos;\n&apos;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;单调队列：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
const int N=1e6+10;
int n,m,i,l,r,a[N],q1[N],q2[N];
int main(){
    cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;
    for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i];
 l=1;r=0;
    for(i=1;i&amp;lt;=n;i++){
        while(l&amp;lt;=r&amp;amp;&amp;amp;q1[l]+m&amp;lt;=i)l++;
        while(l&amp;lt;=r&amp;amp;&amp;amp;a[i]&amp;lt;a[q1[r]])r--;
        q1[++r]=i;
        if(i&amp;gt;=m)cout&amp;lt;&amp;lt;a[q1[l]]&amp;lt;&amp;lt;&apos; &apos;;
    }
    cout&amp;lt;&amp;lt;&apos;\n&apos;;
    l=1;r=0;
    for(i=1;i&amp;lt;=n;i++){
        while(l&amp;lt;=r&amp;amp;&amp;amp;q2[l]+m&amp;lt;=i)l++;
        while(l&amp;lt;=r&amp;amp;&amp;amp;a[i]&amp;gt;a[q2[r]])r--;
        q2[++r]=i;
        if(i&amp;gt;=m)cout&amp;lt;&amp;lt;a[q2[l]]&amp;lt;&amp;lt;&apos; &apos;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;扩展欧拉（$a^b\mod m$）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
typedef long long ll;
ll a,m,b,x=1,y,i,flag;
char ch;
ll qpow(ll x,ll y){
 ll s=1;
 for(;y;y&amp;gt;&amp;gt;=1,x=x*x%m)if(y&amp;amp;1)s=s*x%m;
 return s;
}
int main(){
 cin&amp;gt;&amp;gt;a&amp;gt;&amp;gt;m;a%=m;y=m;
 for(i=2;i&amp;lt;=sqrt(y);i++){
  if(y%i)continue;
  x*=i-1;y/=i;
  while(!(y%i))x*=i,y/=i;
 }
 if(y&amp;gt;1)x*=y-1;
 while((ch=getchar())&amp;lt;&apos;0&apos;||ch&amp;gt;&apos;9&apos;);
 while(b=b*10+ch-&apos;0&apos;,(ch=getchar())&amp;gt;=&apos;0&apos;&amp;amp;&amp;amp;ch&amp;lt;=&apos;9&apos;)if(b&amp;gt;=x)flag=1,b%=x;
 if(b&amp;gt;=x)flag=1,b%=x;
 if(flag)b+=x;
 cout&amp;lt;&amp;lt;qpow(a,b);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最小生成树（Kruskal）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
typedef long long ll;
const ll N=1e6+10;
ll n,m,i,j,s,ans,f[N];
struct Edge{ll x,y,v;}E[N&amp;lt;&amp;lt;1];
ll find(ll x){return f[x]==x?x:f[x]=find(f[x]);}
bool cmp(Edge x,Edge y){return x.v&amp;lt;y.v;}
void Kruskal(){
 int i,fx,fy;
    for(i=1;i&amp;lt;=m;i++){
        fx=find(E[i].x);fy=find(E[i].y);
        if(fx==fy)continue;
        ans+=E[i].v;f[fx]=fy;s++;
        if(s==n-1)break;
    }
}
int main(){
    cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;
    for(i=1;i&amp;lt;=n;i++)f[i]=i;
    for(i=1;i&amp;lt;=m;i++)cin&amp;gt;&amp;gt;E[i].x&amp;gt;&amp;gt;E[i].y&amp;gt;&amp;gt;E[i].v;
    sort(E+1,E+1+m,cmp);
    Kruskal();
    if(s!=n-1)return cout&amp;lt;&amp;lt;&quot;orz&quot;,0;
    cout&amp;lt;&amp;lt;ans;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>P9313 [EGOI2021] Shopping Fever 购物热 题解</title><link>https://blog.walterfang.site/posts/solution-p1913/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-p1913/</guid><pubDate>Sat, 09 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;前言&lt;/h3&gt;
&lt;p&gt;这题考查的算法是 dp。&lt;/p&gt;
&lt;h3&gt;大致题意&lt;/h3&gt;
&lt;p&gt;要买 $n$ 个商品，有以下两种优惠：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;买了 $3$ 件及以上的商品，则最便宜的免费。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;买了 $3$ 件以下的商品，打折 $q%$。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;求买下所有商品最少需要多少钱。&lt;/p&gt;
&lt;h3&gt;思路/解析&lt;/h3&gt;
&lt;p&gt;按照一般 dp 的流程，分为以下 $2$ 步：&lt;/p&gt;
&lt;p&gt;第一步：设置状态。&lt;/p&gt;
&lt;p&gt;设 $dp_i$ 表示买前 $i$ 个物品最少需要多少钱。&lt;/p&gt;
&lt;p&gt;第二步：状态转移。&lt;/p&gt;
&lt;p&gt;根据题意，可得出以下方程：&lt;/p&gt;
&lt;p&gt;$dp_i=dp_{i-1}+a_i\times(100-q)\div 100;(i&amp;lt;3)$&lt;/p&gt;
&lt;p&gt;$dp_i=\min(dp_{i-3}+a_{i-2}+a_{i-1},dp_{i-1}+a_i\times(100-q)\div 100);(i \geq 3)$&lt;/p&gt;
&lt;p&gt;这里注意，由于需要让优惠后剩下的钱数最少，我们需要对 $a$ 数组进行&lt;strong&gt;降序&lt;/strong&gt;排序。另外，本题需要开 long long。&lt;/p&gt;
&lt;h3&gt;代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
typedef long long ll;
const ll N=1e5+10,inf=1e18;
ll n,k,i,a[N],dp[N];
int main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;k;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;a[i],dp[i]=inf;
 stable_sort(a+1,a+1+n,greater&amp;lt;int&amp;gt;());
 dp[0]=0;
 for(i=1;i&amp;lt;=2;i++)dp[i]=min(dp[i],dp[i-1]+a[i]*(100-k)/100);
 for(i=3;i&amp;lt;=n;i++)dp[i]=min(dp[i],dp[i-3]+a[i-2]+a[i-1]),dp[i]=min(dp[i],dp[i-1]+a[i]*(100-k)/100);;
 cout&amp;lt;&amp;lt;dp[n];
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>SP7015 CFPARTY - Party 题解</title><link>https://blog.walterfang.site/posts/solution-sp7015/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-sp7015/</guid><pubDate>Fri, 08 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;前言&lt;/h3&gt;
&lt;p&gt;这题不难，前提在于你想到了没。&lt;/p&gt;
&lt;h3&gt;大致题意&lt;/h3&gt;
&lt;p&gt;有 $n$ 个人，先去掉没有朋友的人，再去掉有 $1$ 个朋友的人，以此类推。求出最后剩下多少人。&lt;/p&gt;
&lt;h3&gt;抽象题意&lt;/h3&gt;
&lt;p&gt;构造一张有 $n$ 个结点的图，依次删去度数为 $0$ 到 $n-1$ 的结点，直至无法删除，求出最后最多能剩余几个结点。&lt;/p&gt;
&lt;h3&gt;思路/解析&lt;/h3&gt;
&lt;p&gt;若这 $n$ 个点两两相连，则有 $n\times(n-1)\div2$ 条边，这样每个结点的度数都为 $n-1$，都会被删去。&lt;/p&gt;
&lt;p&gt;如果删去一条边，就有两个结点的度数变成了 $n-2$，会在别的 $n-2$ 个点之前被删去，删去后剩下的结点的度数变成了 $n-2$，不会被删去。所以最优方案为剩下 $n-2$ 个点。&lt;/p&gt;
&lt;h3&gt;代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
int T,x;
int main(){
 cin&amp;gt;&amp;gt;T;
 while(T--)cin&amp;gt;&amp;gt;x,cout&amp;lt;&amp;lt;max(x-2,0)&amp;lt;&amp;lt;&apos;\n&apos;;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>CF41E 3-cycles 题解</title><link>https://blog.walterfang.site/posts/solution-cf41e/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-cf41e/</guid><pubDate>Wed, 30 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;大致题意&lt;/h3&gt;
&lt;p&gt;求结点数为 $n$ 并且任意取三结点均为连通图但不是环的无向图的最大边数 $m$，并输出任意一种可能。&lt;/p&gt;
&lt;h3&gt;思路/解析&lt;/h3&gt;
&lt;p&gt;这是一道抽屉原理的题。我们只需要 $2$ 个抽屉就可以保证任意取 $3$ 个点不可能形成环，因为至少有一个抽屉存在 $2$ 个及以上的点。但是如果将抽屉的数量增加到 $3$ 个，那么就有可能存在没个抽屉 $1$ 个点的情况，这样就有可能存在环。因此，我们只需要 $2$ 个抽屉，并保证同一抽屉内的点不连边，不同抽屉的点连边即可。&lt;/p&gt;
&lt;p&gt;对于答案数量，我们只需要平均分成两组就好了。注意当 $n$ 为奇数时需要加 $1$。&lt;/p&gt;
&lt;h3&gt;代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
int n,m,i,j;
int main(){
 cin&amp;gt;&amp;gt;n;
 if(n%2==1)m=(n/2)*(n/2+1);
 else m=(n/2)*(n/2);
 cout&amp;lt;&amp;lt;m&amp;lt;&amp;lt;&apos;\n&apos;;
 for(i=1;i&amp;lt;=n/2;i++)
  for(j=n/2+1;j&amp;lt;=n;j++)
   cout&amp;lt;&amp;lt;i&amp;lt;&amp;lt;&apos; &apos;&amp;lt;&amp;lt;j&amp;lt;&amp;lt;&apos;\n&apos;;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>对某（前）犇犇网红的严厉声明与谴责</title><link>https://blog.walterfang.site/posts/dian/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/dian/</guid><pubDate>Wed, 23 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;观前声明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;本文不含任何&lt;strong&gt;引战&lt;/strong&gt;和&lt;strong&gt;对线&lt;/strong&gt;内容。&lt;/li&gt;
&lt;li&gt;请在理智状态下阅读本文，否则造成的任何后果笔者均不负责。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这是你们等着的。下午的事我都看到了，我不瞎。&lt;/p&gt;
&lt;p&gt;按照时间线梳理一下所有事情的经过。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;23.07.31&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这天用户963378在犇犇中发布大量无意义、负能量的内容，并以自杀为名博人眼球，引起了我的强烈不满。因此当天晚上我拉黑了此人。&lt;/p&gt;
&lt;p&gt;同时，晚上因为此事和家人起了一些争执，最终导致我开启学术、关闭私信，并申请了禁言。&lt;/p&gt;
&lt;p&gt;目前我并不认为我做错了什么。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;23.08.21&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我认为和家人的情况有所缓和，因此制作了互关要求，放在了主页，并开启了私信。&lt;/p&gt;
&lt;p&gt;目前我做错了：互关要求过高。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;23.08.22&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这天晚上用户963378使用其小号1002006发送了如下内容：
&lt;img src=&quot;https://cdn.luogu.com.cn/upload/image_hosting/rg1e1paz.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;对此我做出了如下回应：
&lt;img src=&quot;https://cdn.luogu.com.cn/upload/image_hosting/4fajkkqs.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我并不认为我说错了什么。如果我说话过激的话，我很抱歉。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;23.08.23&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下午16：30左右用户963378开始针对我的行为开始诋毁。包括过高的互关要求、令人厌恶的说话态度等，并且夹杂了少量的攻击性语言。&lt;/p&gt;
&lt;p&gt;在此期间因其（用户963378）热度较高，因此引起了大批人的关注，其中绝大部分人开始对我进行口诛笔伐，当时我正在集训，因此未对该事件作出回应。&lt;/p&gt;
&lt;p&gt;傍晚我删除了对红黄橙的要求，晚上删除了互关条件，并着手开始撰写本文。&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;/ul&gt;
&lt;p&gt;不应：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;尝试发送攻击性语言、引战、对线；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在不通知笔者的情况下进行诋毁、口诛笔伐。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如若本文引起了您的不适，请立即按照上文进行处理。&lt;/p&gt;
&lt;p&gt;本文评论区一旦发现任何无关/无意义内容，笔者将会在不通知的情况下直接删除，请见谅。笔者已经禁言，因此无法做出回复，请见谅。&lt;/p&gt;
&lt;p&gt;$upd 19:34$&lt;/p&gt;
&lt;p&gt;希望事情真的暂时得到了解决。&lt;/p&gt;
&lt;p&gt;对于用户963378，已解除拉黑，未关注。&lt;/p&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>AT_dp_z Frog 3 题解</title><link>https://blog.walterfang.site/posts/solution-at_dp_z/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-at_dp_z/</guid><pubDate>Sun, 06 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;大致题意&lt;/h3&gt;
&lt;p&gt;有 $n$ 个点，每个点有一个属性 $h_i$，$h_i$ 单调递增，从 $i$ 点移动到大于 $i$ 的 $j$ 点，需要付出 $(h_i-h_j)^2+c$ 的代价，其中 $c$ 题中已给出，求点 $1$ 移动到点 $n$ 的最小代价。&lt;/p&gt;
&lt;h3&gt;思路/解析&lt;/h3&gt;
&lt;p&gt;设 $f_i$ 表示从点 $1$ 移动到点 $i$ 的最小代价，容易列出状态转移方程为 $f_i=\min_{j&amp;lt;i}(f_j+(a_i-a_j)^2+c)$。&lt;/p&gt;
&lt;p&gt;直接转移的时间复杂度是 $O(n^2)$，无法通过本题，于是运用斜率优化，公式就变为了&lt;/p&gt;
&lt;p&gt;$$\begin{aligned}f_i&amp;amp;=f_j+a_i^2-2a_ia_j+a_j^2+c\(f_i-a_i^2)&amp;amp;=(f_j+a_j^2+c)-(2a_i)(a_j)\end{aligned}$$&lt;/p&gt;
&lt;p&gt;将状态 $i$ 视为平面上的点 $(a_i,f_i+a_i^2+c)$，问题就变成了求最小的斜率固定的直线的截距，因为 $a_i$ 单调递增，所以点的坐标也单调递增，斜率也单调递增。使用单调队列维护下凸壳，即可通过本题。&lt;/p&gt;
&lt;h3&gt;代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
typedef long long ll;
const ll N=2e5+10;
ll n,c,i,l,r,h[N],q[N],dp[N];
double Y(ll j){return dp[j]+h[j]*h[j];}
double X(ll i){return h[i]&amp;lt;&amp;lt;1;}
double K(ll i,ll j){return (Y(i)-Y(j))/((X(i)-X(j)));}
int main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;c;
 for(i=1;i&amp;lt;=n;i++)cin&amp;gt;&amp;gt;h[i];
 l=r=q[1]=1;
 for(i=2;i&amp;lt;=n;i++){
  while(l&amp;lt;r&amp;amp;&amp;amp;h[i]&amp;gt;=K(q[l],q[l+1]))l++;
  dp[i]=dp[q[l]]+c+(h[i]-h[q[l]])*(h[i]-h[q[l]]);
  while(l&amp;lt;r&amp;amp;&amp;amp;K(q[r-1],q[r])&amp;gt;=K(q[r],i))r--;
  q[++r]=i;
 }
 cout&amp;lt;&amp;lt;dp[n]&amp;lt;&amp;lt;&apos;\n&apos;;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>P9504 『MGOI』Simple Round I | C. 魔法禁林 题解</title><link>https://blog.walterfang.site/posts/solution-p9504/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-p9504/</guid><pubDate>Sun, 06 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.luogu.com.cn/problem/P9504&quot;&gt;原题&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;思路/解析&lt;/h2&gt;
&lt;p&gt;笔者的思路不是很正经，但可以通过此题。思路为：宽搜+卡常。&lt;/p&gt;
&lt;p&gt;我们使用链式前向星存储这张图，用二维数组 $f$ 保存当前步数，然后根据题意进行宽搜，这样可以通过 &lt;code&gt;Substack 1&amp;amp;2&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;对于 &lt;code&gt;Substack 3&lt;/code&gt;：&lt;/p&gt;
&lt;p&gt;注意到 $w\le 1$，因此答案只有可能是 $0$ 或 $1$。因此当权值 $z$ 只包含 $0$ 或 $1$ 时，我们只需要特判，当权值全为 $1$ 时，输出 $1$，否则输出 $0$。&lt;/p&gt;
&lt;p&gt;对于 &lt;code&gt;Substack 4&lt;/code&gt;：&lt;/p&gt;
&lt;p&gt;使用快读+&lt;code&gt;register int&lt;/code&gt;通过本 &lt;code&gt;Substack&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;至此，本题已 AC。&lt;/p&gt;
&lt;h2&gt;代码&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
const int N=4e4+10;
int n,m,st,ed,head[N],f[N][510],u,v,sx,sy,sz,fx,fy,fz,cnt,x,y,z,ma=INT_MIN,mi=INT_MAX;
struct Node{int x,y;};
queue&amp;lt;Node&amp;gt;q;
struct Edge{int to,nxt,val;}E[N&amp;lt;&amp;lt;1];
void add(int x,int y,int z){E[++cnt]={y,head[x],z};head[x]=cnt;}
namespace FastIO {
 char *p1, *p2, buf[1 &amp;lt;&amp;lt; 14];
 #define getchar() (p1 == p2 &amp;amp;&amp;amp; (p2 = (p1 = buf) + fread(buf, 1, (1 &amp;lt;&amp;lt; 14), stdin), p1 == p2) ? EOF : *p1++)

 template &amp;lt;typename T&amp;gt;
 inline void read(T&amp;amp; x) {
     x = 0;
     register int t = 1;
     register char ch = getchar();
     while (ch &amp;lt; &apos;0&apos; || ch &amp;gt; &apos;9&apos;) {
         if (ch == &apos;-&apos;)
             t = -1;
         ch = getchar();
     }
     while (ch &amp;gt;= &apos;0&apos; &amp;amp;&amp;amp; ch &amp;lt;= &apos;9&apos;){
         x = (x &amp;lt;&amp;lt; 1) + (x &amp;lt;&amp;lt; 3) + (ch ^ 48);
         ch = getchar();
     }
     x *= t;
 }

 template &amp;lt;typename T&amp;gt;
 void write(T x) {
     if (x &amp;lt; 0) {
         putchar(&apos;-&apos;);
         x = -x;
     }
     if (x &amp;gt; 9) write(x / 10);
     putchar(x % 10 ^ 48);
 }
 template &amp;lt;typename T&amp;gt;
 inline void writeln(T x, char sep = &apos;\n&apos;) {
  write(x);
  putchar(sep);
 }
}
using namespace FastIO;
int main(){
 read(n);read(m);read(st);read(ed);
 for(register int i=1;i&amp;lt;=m;++i){
  read(x),read(y),read(z);
  add(x,y,z),add(y,x,z),ma=(z&amp;gt;ma)?z:ma;
 }
 if(ma&amp;lt;=1){
  for(register int i=head[ed];i;i=E[i].nxt)if(!E[i].val)return cout&amp;lt;&amp;lt;0,0;
  return cout&amp;lt;&amp;lt;1,0;
 }
 q.push({ed,1});
 while(!q.empty()){
 register int u=q.front().x,fy=q.front().y,fz=f[u][fy-1];q.pop();
  if(fy&amp;gt;=482)break;
  for(register int i=head[u];i;i=E[i].nxt){
   register int v=E[i].to,sx=fz+E[i].val/fy,sy=fy+1;
   if(f[v][fy]&amp;lt;=sx&amp;amp;&amp;amp;f[v][fy])continue;
   q.push({v,sy});f[v][fy]=sx;
  }
 }
 for(register int i=0;i&amp;lt;=482;++i)if(f[st][i])mi=(f[st][i]&amp;lt;mi)?f[st][i]:mi;
 cout&amp;lt;&amp;lt;mi;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item><item><title>AT_abc041_d [ABC041D] 徒競走 题解</title><link>https://blog.walterfang.site/posts/solution-at_abc041_d/</link><guid isPermaLink="true">https://blog.walterfang.site/posts/solution-at_abc041_d/</guid><pubDate>Sat, 05 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;翻译已经非常言简意赅了，题目大意就不说了。&lt;/p&gt;
&lt;h3&gt;思路/解析&lt;/h3&gt;
&lt;p&gt;状压 dp。&lt;/p&gt;
&lt;p&gt;我们用 $f_i$ 保存已经遍历过的点集为 $i$ 的方案数量，那么当要加入一个新节点 $j$ 时，节点 $j$ 的所有子节点必须全部在点集 $i$ 中。&lt;/p&gt;
&lt;p&gt;需要注意的是，最初我们将没有点权看作第一种方案，即 $f_0=1$。&lt;/p&gt;
&lt;h3&gt;代码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
typedef long long ll;
const ll N=2e5+10;
ll n,m,x,y,i,j,a[N],f[N]={1};
int main(){
 cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;
 for(i=1;i&amp;lt;=m;i++)cin&amp;gt;&amp;gt;x&amp;gt;&amp;gt;y,a[x]|=1&amp;lt;&amp;lt;y-1;
 for(i=0;i&amp;lt;(1&amp;lt;&amp;lt;n);i++)
  for(j=1;j&amp;lt;=n;j++)
   if((a[j]&amp;amp;i)==a[j]&amp;amp;&amp;amp;!(i&amp;gt;&amp;gt;j-1&amp;amp;1))
    f[i|(1&amp;lt;&amp;lt;j-1)]+=f[i];
 cout&amp;lt;&amp;lt;f[(1&amp;lt;&amp;lt;n)-1];
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><author>Walter_Fang</author></item></channel></rss>