<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>nszkay</title><description>nszkay</description><link>https://fuwari.vercel.app/</link><language>zh_CN</language><item><title>2026icpc河南省赛</title><link>https://fuwari.vercel.app/posts/2026icpc%E6%B2%B3%E5%8D%97%E7%9C%81%E8%B5%9B/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/2026icpc%E6%B2%B3%E5%8D%97%E7%9C%81%E8%B5%9B/</guid><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;刚刚在许昌学院结束了2026河南省赛，那按照惯例我来对这两天时间做个总结。
本次比赛由zueb公费旅游参赛，在此感谢学校政策支持。本次比赛前瞻没关注，赛事群没进。本场比赛230支河南本科参赛队伍。按照前10%，30%，60%取出金，银，铜。zueb由xcpc算竞队出2支去年原班人马金牌队，与隔壁acm集训队2支正常参赛，一支女队。我的目标是不当男生队倒数第1，这样总显得占用比赛名额了。
周六中午到许昌学院，第一天物资照片热身赛老规矩。但是好像没有照片。然后一起去“胖东来”玩，我不理解的是一个超市有什么玩的，去生鲜区看看螃蟹贝壳鱼后去楼上apple店玩macbookneo这个质感还是不错的。随后去本地司机推荐的烧烤，排了1个多小时的队伍，也没感觉多惊艳。然后就回酒店了。先跟gjz研究研究http请求，然后开始对之前学过的技能树。发现自己之前写的代码现在都很难以理解，诸如线段数，组合数学，图论好多内容的代码都不太能写了。然后跟gjz讨论了回spfa找最短路是否可以有负边权。&lt;/p&gt;
&lt;p&gt;正式赛开始跟zhl洗脑了一会想念张雪峰老师，这次我有做题，那可以简单讲讲比赛过程。开始xwc，zhl去写了b题的签到在7min过后，随后我去写f签到，然后我去写e题，大致就是去 i的阶乘和，从1到n。对答案mod10000，根据2 * 5 = 10,4 * 10=40
6 * 15 =90,8 * 20 =160.可以知道当i&amp;gt;=20的时候i的阶乘mod10000等于0.也就是最多跑常数20次，由于我很怂不敢交跟zhl交流后还是交了49min过后，xwc去看c题大模拟，我跟zhl做先后手博弈。枚举数组求出能整除多少次2，放到数组，排序，去重拿到最大的两个值，都是偶数后手必胜，反正先手必胜。但是我已经唐到数组去重都不会了。在wa后，调一下在221min,2发提交通过。随后xwc跟zhl去c题开始模拟。我去了次厕所想到了i题树上启发式合并的做法。随后抢电脑去写i题。我看L题过的多，让zhl，xwc去看L题，先放下c题。我用两层动态数组去做启发式合并，处理过程带一个nlogn的快速排序，这个时间复杂度必然超时，我想先吃一发，发现wa了。随后梦游一会开始用map优化vector的nlogn排序，然后在longlong这里吃一发罚时后221min3A此题后去帮他们看L题，看到xwc在处理构建生成树过程进行无关边权插入计算权值尽然舍精度对xwc行为狂喷。喷醒xwc后我上机重构此题随后wa一发后，我开始双端队列改vector,long long-&amp;gt;int ,double-&amp;gt;long double吃罚时，然后我写了先把图生成好最小生成树，得到升序边权集合，开始枚举无关边权插入，为什么这样写，guess一下。随后285min4a。随后烟雾弹到结束。
随后给zueb做一波烟雾弹。最后完成了男生队不是倒1的任务。&lt;/p&gt;
&lt;p&gt;感觉现在水平这方面真是菜的不行了，看之前写的那些算法，都显得陌生，只能做一下guess，贪心题了。&lt;/p&gt;
&lt;p&gt;对于许昌学院办赛我纯玩就不过多评价了。滚榜后就回去跟队友烧烤啤酒了。
我们23年xcpc见。&lt;/p&gt;
</content:encoded></item><item><title>2026ccpc河南省赛</title><link>https://fuwari.vercel.app/posts/2026ccpc%E6%B2%B3%E5%8D%97%E7%9C%81%E8%B5%9B/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/2026ccpc%E6%B2%B3%E5%8D%97%E7%9C%81%E8%B5%9B/</guid><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;距沈阳站后的半年内，仨人加一起写的题数两只手应该就能算出来。但现在我们这场比赛完全以玩为目的。所以我们打的非常放松。&lt;/p&gt;
&lt;p&gt;赛前，前瞻分析&lt;/p&gt;
&lt;p&gt;本场比赛河南省内参赛队伍331支，34张金牌，102-34张银牌，204-102张铜牌。66支打星队伍。这应该是我参与竞争力最小的一场ccpc了。按上赛季区域赛rating分数,我们队在18名，按照区域赛奖牌排名我们在13名。但是我们队现状就是，两位23级的，已经半年没有训练。一个22级的已经一年半没训练了。实际上水平都已经退化成婴儿了。&lt;/p&gt;
&lt;p&gt;之前看到mjl拍的武汉volg，所以我也尝试了一下，等以后有时间发出来吧。
--写于2026.5.8晚&lt;/p&gt;
&lt;p&gt;好了现在ccpc省赛比完了，打了个铜牌。回学校到图书馆直接就给小作文生成一下，那我简单说一下感受吧。
5月7日晚上，给压在桌子角的模版拿出来。然后简单聊聊天。今早8点跟阔别已久的队友碰个面。一个说昨天他玩到凌晨4点。一个说他打三角洲打到凌晨三点半。然后打个车就转移到郑轻了。之后先吃个早餐。然后到赛场前跟zyf聊聊天，就直接进去比赛了。整体上没有开幕式，没有签到。一天赛程主打一个迅速。本身今年的所有比赛是没打算参加的。但转念一想，娱乐参赛跟队友一起去玩玩也挺好，毕竟以后就没那个机会了。&lt;/p&gt;
&lt;p&gt;赛时，我先看L题，感觉 扩展欧几里得可做，求出一个同余方程，然后算边界。之后本场比赛我就消失了。另外三个题都是他们两个去做的。我题目都没看，全程都沉浸在数学跟吃全队的火腿肠。对的我们队的火腿肠我全吃了。他们过的题是怎么过的我也不知道就不展开说了，最后榜单100多名。&lt;/p&gt;
&lt;p&gt;赛后跟zyf,lhx一起去聊了会天。随后xwc想回去睡觉，我感觉没意思。我们就回学校了。&lt;/p&gt;
&lt;p&gt;回到学校我就对zhl说，体会到去年他这个时候的状态了。感叹算法竞赛离我现在是越来越远了。我觉得现在我还能在赛场上也就是怀念之前的一起打acm的日子了吧。&lt;/p&gt;
&lt;p&gt;明天跟队友玩一玩叙叙旧。两周后我们最后一场icpc省赛见，这回真的是最后一场了～&lt;/p&gt;
</content:encoded></item><item><title>My mac</title><link>https://fuwari.vercel.app/posts/mac/my/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/mac/my/</guid><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;My mac&lt;/h1&gt;
&lt;h3&gt;📦 开发者基石：Homebrew&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://brew.sh/&quot;&gt;Homebrew&lt;/a&gt;&lt;/strong&gt; 是 macOS 必备的包管理器。安装后，你可以通过命令行一键安装各种软件：&lt;/p&gt;
&lt;p&gt;Bash&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;yt-dlp&lt;/strong&gt;：终端下载视频工具，支持国内外主流视频网站，搬运必备。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;安装：&lt;code&gt;brew install yt-dlp&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;g++&lt;/strong&gt;：GNU C++ 编译器。虽然系统自带 Clang，但装这个可以获得原生 GNU 支持。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;安装：&lt;code&gt;brew install gcc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;npm / pnpm&lt;/strong&gt;：Node.js 包管理器。推荐 &lt;strong&gt;pnpm&lt;/strong&gt;，通过硬链接节省磁盘空间，安装速度极快。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;安装：&lt;code&gt;brew install pnpm&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;🛠️ 系统增强与效率工具&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.alfredapp.com/&quot;&gt;Alfred 5&lt;/a&gt;&lt;/strong&gt;：&lt;strong&gt;Mac 的“终极控制中心”。&lt;/strong&gt; 它是 Spotlight 的进阶版，通过 &lt;strong&gt;Workflows（工作流）&lt;/strong&gt; 可以实现搜翻译、查物流、查代码片段等骚操作。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://alt-tab-macos.netlify.app/&quot;&gt;AltTab&lt;/a&gt;&lt;/strong&gt;：&lt;strong&gt;把 Windows 的切换体验带回 Mac。&lt;/strong&gt; 弥补原生 &lt;code&gt;Cmd+Tab&lt;/code&gt; 只能换应用不能换窗口的槽点，带实时预览图。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://maccy.app/&quot;&gt;Maccy&lt;/a&gt;&lt;/strong&gt;：&lt;strong&gt;最轻量的开源剪贴板管理器。&lt;/strong&gt; 记录复制过的文字、图片和文件，&lt;code&gt;Shift+Cmd+C&lt;/code&gt; 快速搜索并粘贴历史记录，UI 与系统原生统一。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://apps.apple.com/cn/app/id6443843900&quot;&gt;iBar&lt;/a&gt;&lt;/strong&gt;：&lt;strong&gt;菜单栏图标隐藏工具。&lt;/strong&gt; 专门解决刘海屏遮挡图标的问题，将不常用的图标折叠，保持顶部整洁。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/MrKai77/Loop&quot;&gt;Loop&lt;/a&gt;&lt;/strong&gt;：分屏软件，通过快捷键或炫酷的 radial 菜单快速排列窗口，体验极佳。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://mos.caldis.me/&quot;&gt;Mos&lt;/a&gt;&lt;/strong&gt;：&lt;strong&gt;鼠标滚动平滑工具。&lt;/strong&gt; 让外接鼠标滚动起来像触控板一样丝滑。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/exelban/stats&quot;&gt;Stats&lt;/a&gt;&lt;/strong&gt;：开源系统监视器。在菜单栏实时显示 CPU、内存、风扇、网速等数据。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://apps.apple.com/cn/app/id1497428978&quot;&gt;超级右键&lt;/a&gt;&lt;/strong&gt;：补齐 Mac 右键菜单，支持“新建文件”、“复制路径”等常用功能。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/LeeeSe/MessAuto&quot;&gt;MessAuto&lt;/a&gt;&lt;/strong&gt;：自动提取短信验证码并填写，彻底解放双手。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.devontechnologies.com/apps/freeware&quot;&gt;EasyFind&lt;/a&gt;&lt;/strong&gt;：&lt;strong&gt;强力文件搜索工具。&lt;/strong&gt; 不依赖索引，可以搜索软件包内部内容，找隐藏文件神器。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;🎬 影音、办公与生产力&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://iina.io/&quot;&gt;IINA&lt;/a&gt;&lt;/strong&gt;：macOS 下最好的视频播放器，UI 完美契合系统，格式通杀。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://arc.net/&quot;&gt;Arc&lt;/a&gt;&lt;/strong&gt;：颠覆传统的浏览器。Chromium 内核，极简 UI 配合垂直标签页和多工作空间切换，用了就回不去。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://obsidian.md/&quot;&gt;Obsidian&lt;/a&gt;&lt;/strong&gt;：&lt;strong&gt;第二大脑。&lt;/strong&gt; 强大的 Markdown 笔记软件，双链架构，插件生态极其丰富。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://apps.ankiweb.net/&quot;&gt;Anki&lt;/a&gt;&lt;/strong&gt;：开源记忆卡片工具。基于间隔重复算法，支持 Win, macOS, Android 多端同步，英语学习神器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://cherry-ai.com/&quot;&gt;Cherry Studio&lt;/a&gt;&lt;/strong&gt;：&lt;strong&gt;高颜值 AI 聚合客户端。&lt;/strong&gt; 一个界面集成 GPT-4, Claude 3, Gemini, DeepSeek 等主流大模型，支持长文本。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/nszkay/Microsoft-Office-For-MacOS&quot;&gt;Office 学习版&lt;/a&gt;&lt;/strong&gt;：懂的都懂，给生活拮据的学术青年的一点温存。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.ieway.cn/evcapture.html&quot;&gt;EVCapture&lt;/a&gt;&lt;/strong&gt;：&lt;strong&gt;国产良心录屏。&lt;/strong&gt; 简单好上手，支持分屏录制和桌面画板，资源占用极低。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.capcut.cn/&quot;&gt;剪映专业版&lt;/a&gt;&lt;/strong&gt;：上手最快、素材最全的视频剪辑软件，智能识别字幕功能极其好用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/localsend/localsend&quot;&gt;Local Send&lt;/a&gt;&lt;/strong&gt;：开源跨平台局域网文件传输，AirDrop 的全平台平替。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;💻 开发者专区&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.jetbrains.com/pycharm/&quot;&gt;PyCharm&lt;/a&gt;&lt;/strong&gt;：&lt;strong&gt;顶级 Python IDE。&lt;/strong&gt; 提供智能补全、实时检查和强大调试器， Python 开发者工业级首选。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.docker.com/products/docker-desktop/&quot;&gt;Docker&lt;/a&gt;&lt;/strong&gt;：&lt;strong&gt;容器化平台。&lt;/strong&gt; 搭建开发环境（数据库、Redis 等）最快最干净的方式，确保环境一致性。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/wanghongenpin/network_proxy_flutter&quot;&gt;ProxyPin&lt;/a&gt;&lt;/strong&gt;：全平台开源抓包工具，支持手机扫码连接，拦截和重写流量非常方便。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/nilaoda/BBDown&quot;&gt;BBDown&lt;/a&gt;&lt;/strong&gt;：命令行 B 站下载神器，支持多分段、弹幕及 8K/HDR 下载（搬运可耻，仅供学习）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;🌐 社交、互联与网络&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discord&lt;/strong&gt;：全球领先的社群平台。AI 绘画 (Midjourney)、编程社区、学术讨论的集散地，资源极香。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;纸飞机 (Telegram)&lt;/strong&gt;：好用的端对端加密聊天软件。微信是无奈，QQ 是生态，纸飞机是自由。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://connect.oppo.com/&quot;&gt;OPPO 互联&lt;/a&gt;&lt;/strong&gt;：&lt;strong&gt;打破手机与电脑边界。&lt;/strong&gt; 支持屏幕镜像、跨设备拖拽文件和共享剪贴板（适配 OPPO/一加/Realme）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clash&lt;/strong&gt;：&lt;strong&gt;多协议代理客户端。&lt;/strong&gt; 支持自定义规则分流，确保网络环境高速稳定。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.google.com/search?q=https://github.com/mihonge/AirBattery&quot;&gt;AirBattery&lt;/a&gt;&lt;/strong&gt;：&lt;strong&gt;全家桶电量管理。&lt;/strong&gt; 菜单栏直接看 iPhone, iPad, AirPods 的实时电量。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;My CLI&lt;/p&gt;
&lt;h2&gt;终端&lt;/h2&gt;
&lt;p&gt;终端优化待补充……&lt;/p&gt;
&lt;h2&gt;zsh&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# =============================================================================
# 系统基础设置
# =============================================================================

# 自动对 path 变量进行去重，确保 PATH 中不会出现重复路径，提高 shell 效率
typeset -U path

# =============================================================================
# 代理管理工具 (nszkay 函数)
# =============================================================================
# 用法: 
#   nszkay on     - 开启代理
#   nszkay off    - 关闭代理
#   nszkay status - 查看状态
#   nszkay update [端口] - 修改默认代理端口
function nszkay() {
    local DEFAULT_PORT=&quot;7897&quot;
    local PROXY_FILE=&quot;$HOME/.nszkay_proxy_port&quot;

    # 从文件读取保存的端口，否则使用默认值
    if [ -f &quot;$PROXY_FILE&quot; ]; then
        local CURRENT_PORT=$(cat &quot;$PROXY_FILE&quot;)
    else
        local CURRENT_PORT=$DEFAULT_PORT
    fi

    case &quot;$1&quot; in
        on)
            export http_proxy=&quot;http://127.0.0.1:$CURRENT_PORT&quot;
            export https_proxy=&quot;http://127.0.0.1:$CURRENT_PORT&quot;
            export all_proxy=&quot;socks5://127.0.0.1:$CURRENT_PORT&quot;
            echo &quot;✅ 终端代理已开启: $CURRENT_PORT&quot;
            ;;
        off)
            unset http_proxy https_proxy all_proxy
            echo &quot;❌ 终端代理已关闭&quot;
            ;;
        update)
            if [ -n &quot;$2&quot; ]; then
                echo &quot;$2&quot; &amp;gt; &quot;$PROXY_FILE&quot;
                echo &quot;⚙️ 端口已更新为: $2 (请执行 nszkay on 生效)&quot;
            else
                echo &quot;⚠️ 请输入端口号: nszkay update [端口号]&quot;
            fi
            ;;
        status)
            if [ -n &quot;$http_proxy&quot; ]; then
                echo &quot;🌐 当前代理状态: ON ($http_proxy)&quot;
            else
                echo &quot;⚪ 当前代理状态: OFF&quot;
            fi
            ;;
        *)
            echo &quot;用法: nszkay [on|off|update|status]&quot;
            ;;
    esac
}

# =============================================================================
# 开发语言与环境工具管理 (NVM, SDKMAN, jEnv)
# =============================================================================

# --- SDKMAN (Java/Kotlin 等管理器) ---
export SDKMAN_DIR=&quot;$HOME/.sdkman&quot;
[[ -s &quot;$HOME/.sdkman/bin/sdkman-init.sh&quot; ]] &amp;amp;&amp;amp; source &quot;$HOME/.sdkman/bin/sdkman-init.sh&quot;

# --- NVM (Node.js 版本管理器) ---
export NVM_DIR=&quot;$HOME/.nvm&quot;
[ -s &quot;$NVM_DIR/nvm.sh&quot; ] &amp;amp;&amp;amp; \. &quot;$NVM_DIR/nvm.sh&quot; 
[ -s &quot;$NVM_DIR/bash_completion&quot; ] &amp;amp;&amp;amp; \. &quot;$NVM_DIR/bash_completion&quot;

# --- jEnv (Java 版本切换工具) ---
export PATH=&quot;$HOME/.jenv/bin:$PATH&quot;
eval &quot;$(jenv init -)&quot;

# =============================================================================
# Android 开发环境变量
# =============================================================================
export ANDROID_HOME=~/Library/Android/sdk
# 优先加载 Android 工具命令
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:/opt/platform-tools:$PATH

# =============================================================================
# 别名设置 (Aliases) 与 Python 工具
# =============================================================================

# 指定特定 Python 路径
alias python3=&quot;/opt/homebrew/bin/python3.13&quot;

# 视频下载工具别名
alias yt-dlp=&quot;/opt/homebrew/bin/python3.13 /usr/local/bin/yt-dlp&quot;
alias ytdl=&quot;yt-dlp&quot;

# =============================================================================
# 网络与 SSL 证书设置
# =============================================================================

# 解决一些 Python 程序在 HTTPS 连接时报错的问题
# 方案 A: 使用 Python certifi 包提供的证书
export SSL_CERT_FILE=$(/opt/homebrew/bin/python3.13 -m certifi)

# 方案 B: 使用 Homebrew 安装的系统证书 (最后一行生效)
export REQUESTS_CA_BUNDLE=$(brew --prefix)/etc/ca-certificates/cert.pem
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>2-1数论</title><link>https://fuwari.vercel.app/posts/2-1%E6%95%B0%E8%AE%BA/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/2-1%E6%95%B0%E8%AE%BA/</guid><pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;格雷码 (相邻两个数字的二进制异或为二的次幂)&lt;/h3&gt;
&lt;p&gt;两个数的二进制只有一个位数相差1&lt;/p&gt;
&lt;p&gt;i^(i&amp;gt;&amp;gt;1) 这个能求出i的格雷码&lt;/p&gt;
&lt;p&gt;1 000011
2 000001
3 000111
4 000001
5 000011
6 000001
7 001111
8 000001
9 000011
10 000001
11 000111
12 000001
13 000011
14 000001
15 011111
16 000001&lt;/p&gt;
&lt;p&gt;16以内的格雷码数，   相邻的格雷码数^=1;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;矩阵快速幂构造方法总结&lt;/h1&gt;
&lt;p&gt;在使用矩阵快速幂解决递推问题时，关键在于 &lt;strong&gt;构造初始矩阵和转移矩阵&lt;/strong&gt;。下面以例题 &lt;code&gt;a_i = a_{i-3} + a_{i-1}&lt;/code&gt; 为例总结方法。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;1️⃣ 构造初始矩阵（Basic Matrix）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;根据题意，已知前几个项：&lt;code&gt;a_1 = a_2 = a_3 = 1&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;初始矩阵存储这些已知值：&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;a₁&lt;/th&gt;
&lt;th&gt;a₂&lt;/th&gt;
&lt;th&gt;a₃&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;矩阵大小&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;行：1（因为这是一个“行向量”）&lt;/li&gt;
&lt;li&gt;列：保存多少个历史状态，就有多少列
&lt;ul&gt;
&lt;li&gt;本例需要保存 &lt;code&gt;a_i, a_{i-1}, a_{i-2}&lt;/code&gt; → 3 列&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;作用&lt;/strong&gt;：基础矩阵保存初始状态，用于与转移矩阵相乘计算后续项。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;2️⃣ 构造转移矩阵（Transfer Matrix）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;原递推式：&lt;code&gt;a_i = a_{i-3} + a_{i-1}&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;为了计算 &lt;code&gt;a_{i+1}&lt;/code&gt;，需要把矩阵状态向右移动，并引入新关系。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;转移矩阵规则&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;第一列对应递推公式中参与计算的元素：
&lt;ul&gt;
&lt;li&gt;本例：&lt;code&gt;a_i&lt;/code&gt; 和 &lt;code&gt;a_{i-2}&lt;/code&gt; 参与 → 第一列是 &lt;code&gt;[1, 0, 1]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;其余列用于原封不动地转移历史状态：
&lt;ul&gt;
&lt;li&gt;第二列对应 &lt;code&gt;a_i → a_i&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;第三列对应 &lt;code&gt;a_{i-1} → a_{i-1}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;最终转移矩阵示意&lt;/strong&gt;：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;i&lt;/th&gt;
&lt;th&gt;i-1&lt;/th&gt;
&lt;th&gt;i-2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;i+1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;i&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;i-1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;作用&lt;/strong&gt;：&lt;br /&gt;
对基础矩阵乘以转移矩阵，可以将状态从 &lt;code&gt;[a_i, a_{i-1}, a_{i-2}]&lt;/code&gt; 转移到 &lt;code&gt;[a_{i+1}, a_i, a_{i-1}]&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;3️⃣ 计算第 n 项&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;我们要求 &lt;code&gt;a_n&lt;/code&gt;，则只需：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用初始矩阵（存储 &lt;code&gt;a_1, a_2, a_3&lt;/code&gt;）乘上 &lt;strong&gt;转移矩阵的 n-1 次方&lt;/strong&gt;&lt;br /&gt;
[
\text{ans} = \text{basic matrix} \times (\text{transfer matrix})^{n-1}
]&lt;/li&gt;
&lt;li&gt;基础矩阵乘完后，第一格就是 &lt;code&gt;a_n&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;优化&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;转移矩阵幂用快速幂算法计算 → 时间复杂度 O(log n)&lt;/li&gt;
&lt;li&gt;整个计算从暴力 O(n) 降为 O(log n)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;4️⃣ 总结矩阵构造步骤&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;确定基础矩阵&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;行：1（或列向量）&lt;/li&gt;
&lt;li&gt;列：保存递推所需历史状态数量&lt;/li&gt;
&lt;li&gt;填入已知初始值&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;确定转移矩阵&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一列：对应递推公式参与的元素&lt;/li&gt;
&lt;li&gt;其余列：原封不动地保存历史状态&lt;/li&gt;
&lt;li&gt;行列数与基础矩阵列数一致（方阵方便快速幂）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;计算递推&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将基础矩阵乘以转移矩阵的 n-1 次幂&lt;/li&gt;
&lt;li&gt;输出基础矩阵的第一格，即为答案&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>4-2数据结构2</title><link>https://fuwari.vercel.app/posts/4-2%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%842/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/4-2%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%842/</guid><pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;数据结构(三)&lt;/h1&gt;
&lt;p&gt;~目录
Part 7.13 树链剖分
Part 7.14 树套树
Part 7.15 动态树
Part 7.16 可持久化数据结构&lt;br /&gt;
Part 7.17 K-D Tree
Part 7.18 珂朵莉树&lt;/p&gt;
&lt;h2&gt;Part 7.13 树链剖分&lt;/h2&gt;
&lt;h2&gt;Part 7.14 树套树&lt;/h2&gt;
&lt;h2&gt;Part 7.15 动态树&lt;/h2&gt;
&lt;h2&gt;Part 7.16 可持久化数据结构&lt;/h2&gt;
&lt;h3&gt;可持久化线段树(普通版本)&lt;/h3&gt;
&lt;p&gt;此版本，二分主席树，O(log^(2)n) 时间二分区间第一个大于等于x的位置&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;struct TRE 
{
    int ls, rs, sum;
} tre[N*40];
int root[N*40], cnt;

int build(int l, int r) 
{
    int k = ++cnt;
    tre[k] = {0};
    if (l &amp;lt; r) 
    {
        int mid = (l + r) &amp;gt;&amp;gt; 1;
        tre[k].l = build(l, mid);
        tre[k].r = build(mid + 1, r);
    }
    return k;
}

int change(int lst, int l, int r, int op) 
{
    int k = ++cnt;
    tre[k] = tre[lst];
    tre[k].sum++;
    if (l &amp;lt; r) 
    {
        int mid = (l + r) &amp;gt;&amp;gt; 1;
        if (mid &amp;gt;= op) tre[k].ls = change(tre[lst].ls, l, mid, op);
        else tre[k].rs = change(tre[lst].rs, mid + 1, r, op);
    }
    return k;
}

int query(int a1, int a2, int l, int r, int k) 
{
    if (l == r) return l;
    int xx = tre[tre[a2].ls].sum - tre[tre[a1].ls].sum;

    int mid = (l + r) &amp;gt;&amp;gt; 1;
    if (xx &amp;gt;= k) return query(tre[a1].ls, tre[a2].ls, l, mid, k);
    else return query(tre[a1].rs, tre[a2].rs, mid + 1, r, k - xx);
}



//打印      版本   范围
void nszka(int k,int l,int r)
{
    auto []=tre[k];
//输出
    if(l==r)
    {
        //操作
        return ;
    }
    int mid=(l+r)&amp;gt;&amp;gt;1;
    nszka(tre[k].ls,l,mid);
    nszka(tre[k].rs,mid+1,r);
}

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;可持久化并查集&lt;/h3&gt;
&lt;h3&gt;可持久化字典树&lt;/h3&gt;
&lt;h2&gt;Part 7.17 K-D Tree&lt;/h2&gt;
&lt;h3&gt;Part 7.18 珂朵莉树&lt;/h3&gt;
</content:encoded></item><item><title>4-1数据结构</title><link>https://fuwari.vercel.app/posts/4-1%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/4-1%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/</guid><pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;数据结构&lt;/h1&gt;
&lt;p&gt;~目录&lt;/p&gt;
&lt;p&gt;Part 7.1 链表
Part 7.2 栈
Part 7.3 队列
Part 7.4 并查集
Part 7.5 二叉堆
Part 7.6 ST表
Part 7.7 树状数组&lt;/p&gt;
&lt;h2&gt;Part 7.1 链表&lt;/h2&gt;
&lt;h2&gt;Part 7.2 栈&lt;/h2&gt;
&lt;h4&gt;单调栈&lt;/h4&gt;
&lt;h2&gt;Part 7.3 队列&lt;/h2&gt;
&lt;h3&gt;单调队列&lt;/h3&gt;
&lt;h2&gt;Part 7.4 并查集&lt;/h2&gt;
&lt;h4&gt;普通板子封装(联通大小(点，边)，判断环)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;struct DSU 
{
    ve&amp;lt;int&amp;gt;fa,p,e,f;
    DSU(int n) 
    {
        fa.resize(n + 1);
        iota(fa.begin(), fa.end(), 0);
        p.resize(n + 1, 1);
        e.resize(n + 1);
        f.resize(n + 1);
    }
    int find(int x)
    {
        if(f[x]!=x) f[x]=find(f[x]);
        return f[x];
    }
    bool merge(int x, int y) 
    {//y--&amp;gt;x
        if (x == y) f[find(x)] = 1; //之前已经在一个地方了
        x=find(x);y=find(y);
        e[x]++;//y--&amp;gt;x  边
        if (x == y) return false;
        if (x &amp;lt; y) swap(x, y); // 将编号小的合并到大的上 
        fa[y] = x;
        f[x] |= f[y];//判断自环
        p[x] += p[y];//点
        e[x] += e[y];//边
        return true;
    }
  
  
    bool same(int x, int y) //判断是否在一个联通中
    {
        return find(x)==find(y);
    }
    bool F(int x) //判断x所在联通是否存在自环
    {
        return f[find(x)];
    }
    int size(int x) //获取点x所在联通的大小
    {
        return p[find(x)];
    }
    int E(int x) //联通中边的数量
    {
        return e[find(x)];
    }
};

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Part 7.5 二叉堆&lt;/h2&gt;
&lt;h2&gt;Part 7.6 ST表&lt;/h2&gt;
&lt;p&gt;nlog预处理 O(1) 查询&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;template &amp;lt;class Ty, const int logn&amp;gt;
struct RMQ 
{
	vector&amp;lt;array&amp;lt;Ty, logn&amp;gt;&amp;gt; info1;
	vector&amp;lt;array&amp;lt;Ty, logn&amp;gt;&amp;gt; info2;
	RMQ(const vector&amp;lt;Ty&amp;gt;&amp;amp; A) { init(A); }
	void init(const vector&amp;lt;Ty&amp;gt;&amp;amp; A) 
	{
		int n = A.size() - 1;
		info1.assign(A.size(), array&amp;lt;Ty, logn&amp;gt;{});
		info2.assign(A.size(), array&amp;lt;Ty, logn&amp;gt;{});
		for (int i = 1; i &amp;lt;= n; ++i) 
		{
			info1[i][0] = A[i];
			info2[i][0] = A[i];
		}
		for (int j = 1; j &amp;lt;= logn; ++j)
		{
			for (int i = 1; i + (1 &amp;lt;&amp;lt; j) - 1 &amp;lt;= n; ++i)
			{
				info1[i][j] = max(info1[i][j - 1], info1[i + (1 &amp;lt;&amp;lt; (j - 1))][j - 1]);
				info2[i][j] = min(info2[i][j - 1], info2[i + (1 &amp;lt;&amp;lt; (j - 1))][j - 1]);
			}
		}
	}
  
	Ty Query_Max(int l, int r)
	{
		int j = log2(r - l + 1);
		return max(info1[l][j], info1[r - (1 &amp;lt;&amp;lt; j) + 1][j]);
	}
	Ty Query_Min(int l, int r)
	{
		int j = log2(r - l + 1);
		return min(info2[l][j], info2[r - (1 &amp;lt;&amp;lt; j) + 1][j]);
	}
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Part 7.7 树状数组&lt;/h2&gt;
</content:encoded></item><item><title>5-1串</title><link>https://fuwari.vercel.app/posts/5-1%E4%B8%B2/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/5-1%E4%B8%B2/</guid><pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;字典树&lt;/h2&gt;
&lt;h3&gt;字典树(普通版本)&lt;/h3&gt;
&lt;p&gt;以26个小写的英文字母为例子&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;bits/stdc++.h&amp;gt;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fix(x) fixed&amp;lt;&amp;lt;setprecision(x)
#define int long long
using namespace std;
template&amp;lt;class T&amp;gt;
using ve=vector&amp;lt;T&amp;gt;;
using ll = long long;
using ld = long double;
using pii = pair&amp;lt;int, int&amp;gt;;
const int N = 1e6 + 10;
const int mod = 1e9 + 7;

struct TIE
{
    ve&amp;lt;ve&amp;lt;int&amp;gt;&amp;gt;ti;
    ve&amp;lt;int&amp;gt;sum;
    int cnt;
    TIE(int n)
    {
        cnt=1;//
        ti=ve&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;(n+1,ve&amp;lt;int&amp;gt;(30,-1));
        sum=ve&amp;lt;int&amp;gt;(n+1,0);
    }

    int get_sum(char x)
    {
        if(x&amp;gt;=&apos;a&apos;&amp;amp;&amp;amp;x&amp;lt;=&apos;z&apos;) return x-&apos;a&apos;;//0-26
        if(x&amp;gt;=&apos;A&apos;&amp;amp;&amp;amp;x&amp;lt;=&apos;Z&apos;) return x-&apos;A&apos;+26;
        return x-&apos;0&apos;+52;
    }

    void insert(const string&amp;amp; s)
    {//
        int ls=0;
        for(auto x:s)
        {
            if(ti[ls][get_sum(x)]==-1) ti[ls][get_sum(x)]=cnt++;
            ls=ti[ls][get_sum(x)];
            sum[ls]++;
        }
    }

    int query_sum(const string&amp;amp; s)
    {
        int ls=0;
        for(auto x:s)
        {
            if(ti[ls][get_sum(x)]==-1) return 0;
            ls=ti[ls][get_sum(x)];
        }
        return sum[ls];
    }
};

void solve()
{
    int n,q;cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;q;
    TIE tr(3e6);
    for(int i=1;i&amp;lt;=n;i++)
    {
        string s;cin&amp;gt;&amp;gt;s;
        tr.insert(s);
    }
    while(q--)
    {
        string s;cin&amp;gt;&amp;gt;s;
        cout&amp;lt;&amp;lt;tr.query_sum(s)&amp;lt;&amp;lt;&apos;\n&apos;;
    }
}
signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int _=1; cin&amp;gt;&amp;gt;_;
    while(_--) solve();
    return 0;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;可持久化字典树&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;bits/stdc++.h&amp;gt;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fix(x) fixed&amp;lt;&amp;lt;setprecision(x)
#define int long long
using namespace std;
template&amp;lt;class T&amp;gt;
using ve=vector&amp;lt;T&amp;gt;;
using pii = pair&amp;lt;int, int&amp;gt;;
const int N = 1e6 + 10;
const int mod = 1e9 + 7;

int n,m;
int ti[N*25][2];
int sz[N*25],rt[N*25],siz[N*25];
int cnt=0,idx=0;

void insert(int x)
{//0--24
    rt[++idx]=++cnt;//开新的版本
    int ls=rt[idx-1];//上一个版本
    int rs=rt[idx];//当前版本
    for(int i=23;i&amp;gt;=0;i--)
    {
        int j=(x&amp;gt;&amp;gt;i)&amp;amp;1;         //
        ti[rs][j^1]=ti[ls][j^1];//继承

        ti[rs][j]=++cnt;        //开新的节点
        ls=ti[ls][j];
        rs=ti[rs][j];
        siz[rs]=siz[ls]+1;
    }
}

int query(int l,int r,int p)
{
    int ls=rt[l-1];
    int rs=rt[r];
    
    int sum=0;
    for(int i=23;i&amp;gt;=0;i--)
    {
        int j=p&amp;gt;&amp;gt;i&amp;amp;1;
        if(siz[ti[rs][j^1]]&amp;gt;siz[ti[ls][j^1]])
        {//可以
            ls=ti[ls][j^1];
            rs=ti[rs][j^1];
            sum+=(1&amp;lt;&amp;lt;i);
        }
        else 
        {
            ls=ti[ls][j];
            rs=ti[rs][j];
        }
    }
    return sum;
}

void solve()
{
    cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;
    int ans=0;
    insert(ans);
    for(int i=1;i&amp;lt;=n;i++)
    {
        int x;cin&amp;gt;&amp;gt;x;
        ans^=x;
        insert(ans);
    }
    while(m--)
    {
        char p;cin&amp;gt;&amp;gt;p;
        if(p==&apos;A&apos;)
        {
            int x;cin&amp;gt;&amp;gt;x;
            ans^=x;
            insert(ans);
        }
        else
        {
            int l,r,x;cin&amp;gt;&amp;gt;l&amp;gt;&amp;gt;r&amp;gt;&amp;gt;x;
            cout&amp;lt;&amp;lt;query(l,r,ans^x)&amp;lt;&amp;lt;&apos;\n&apos;;
        }
    }
}

signed main()
{
    IOS;
    int _ = 1; //cin &amp;gt;&amp;gt; _;
    while (_--) solve();
    return 0;
}

&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>4-2数据结构</title><link>https://fuwari.vercel.app/posts/4-2%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/4-2%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/</guid><pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;数据结构（二）&lt;/h1&gt;
&lt;p&gt;Part 7.8 线段树
Part 7.9 分块
Part 7.10 可并堆
Part 7.11 主席树
Part 7.12 平衡树&lt;/p&gt;
&lt;h2&gt;Part 7.8 线段树&lt;/h2&gt;
&lt;h3&gt;线段树 （区间修改，区间覆盖）&lt;/h3&gt;
&lt;p&gt;ps:&lt;/p&gt;
&lt;p&gt;区间修改，区间查询。
dug功能输出树&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  
struct my_tree
{
	#define kl (k&amp;lt;&amp;lt;1)
	#define kr (k&amp;lt;&amp;lt;1|1)
  
	struct node
	{
		int l, r, sum;
		int lz;
	};
	vector&amp;lt;node&amp;gt; tree;
  
  
	my_tree(int x,ve&amp;lt;int&amp;gt;&amp;amp;a)
	{
		tree = vector&amp;lt;node&amp;gt;(x*4+10);
		build(1,1,x,a);
	}
  
	void pushup(node&amp;amp; kk, const node&amp;amp; kkl, const node&amp;amp; kkr)
	{
		kk.sum = max(kkl.sum, kkr.sum);
	}
	void pushup(int k)
	{
		pushup(tree[k], tree[kl], tree[kr]);
	}
  
  
	void pushdown(int k)
	{
		if(tree[k].lz==0) return ;
		tree[kl].sum=tree[kr].sum=tree[k].lz;
		tree[kl].lz=tree[kr].lz=tree[k].lz;
		tree[k].lz=0;
	}
  
	void build(int k, int l, int r, ve&amp;lt;int&amp;gt;&amp;amp; a)
	{
		tree[k].l = l;
		tree[k].r = r;
		if (l == r)
		{
			tree[k].sum = a[l];
			return;
		}
		int mid = (l + r) &amp;gt;&amp;gt; 1;
		build(kl, l, mid, a);
		build(kr, mid + 1, r, a);
		pushup(k);
	}
  
	// 区间修改   区间修改 [l,r] 全复制成val
	void update(int k, int l, int r, int val)
	{
		if (tree[k].l &amp;gt;= l &amp;amp;&amp;amp; tree[k].r &amp;lt;= r)
		{
			tree[k].sum = val;
			tree[k].lz=val;
			return;
		}
		pushdown(k);
		int mid = (tree[k].l + tree[k].r) &amp;gt;&amp;gt; 1;
		if (l &amp;lt;= mid) update(kl, l, r, val);
		if (r &amp;gt; mid) update(kr, l, r, val);
		pushup(k);
	}
  
	node query(int k, int l, int r)
	{
		if (l &amp;lt;= tree[k].l &amp;amp;&amp;amp; tree[k].r &amp;lt;= r) return tree[k];
		pusgdown(k);
  
		int mid = (tree[k].l + tree[k].r) &amp;gt;&amp;gt; 1;
  
		node kkl = {tree[k].l, mid};
		node kkr = {mid + 1, tree[k].r};
		node kk = {tree[k].l, tree[k].r};
  
		int opl=0,opr=0;
		if (l &amp;lt;= mid) kkl = query(kl, l, r),opl=1;
		if (r &amp;gt; mid) kkr = query(kr, l, r),opr=1;
		if(opl&amp;amp;&amp;amp;opr) 
		{
			pushup(kk, kkl, kkr);
			return kk;
		}
		if(opl) return kkl;
		return kkr;
	}
  
  
	void dug(int k=1)
	{
		auto [l,r,sum,lz]=tree[k];
		cout&amp;lt;&amp;lt;&quot;k: &quot;&amp;lt;&amp;lt;k&amp;lt;&amp;lt;&quot;\n&quot;;
		cout&amp;lt;&amp;lt;&quot;[ &quot;&amp;lt;&amp;lt;l&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;r&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;sum&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;lz&amp;lt;&amp;lt;&quot; ]&quot;&amp;lt;&amp;lt;&apos;\n&apos;;
		if(l&amp;lt;r)
		{
			dug(kl);
			dug(kr);
		}
	}
};
  
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;权值线段树&lt;/h3&gt;
&lt;p&gt;单点修改，区间查询个数
权值线段树的每一个节点，存放的是[l,r]的值个数&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#define kl (k&amp;lt;&amp;lt;1)
#define kr (k&amp;lt;&amp;lt;1|1)

struct node
{
    int l,r;
    int sum;
}tre[N*4+10];

void build(int k,int l,int r)
{
    tre[k]={l,r};
    if(l==r) return ;
    int mid=(l+r)&amp;gt;&amp;gt;1;
    build(kl,l,mid);
    build(kr,mid+1,r);
}

void insert(int k,int val,int id)
{
    tre[k].sum+=id;
    if(tre[k].l==tre[k].r) return ;
    int mid=(tre[k].l+tre[k].r)&amp;gt;&amp;gt;1;
    if(val&amp;lt;=mid) insert(kl,val,id);
    else insert(kr,val,id);
}

int query(int k,int l,int r)
{
    if(l&amp;lt;=tre[k].l&amp;amp;&amp;amp;tre[k].r&amp;lt;=r) return tre[k].sum;
    int mid=(tre[k].l+tre[k].r)&amp;gt;&amp;gt;1;
    int ans=0;
    if(l&amp;lt;=mid) ans+=query(kl,l,r);
    if(r&amp;gt;mid) ans+=query(kr,l,r);
    return ans;
}
  
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;动态开点线段树&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;  
  
  
  
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;/h3&gt;
&lt;h2&gt;Part 7.9 分块&lt;/h2&gt;
&lt;h2&gt;Part 7.10 可并堆&lt;/h2&gt;
&lt;h2&gt;Part 7.11 主席树&lt;/h2&gt;
&lt;h2&gt;Part 7.12 平衡树&lt;/h2&gt;
</content:encoded></item><item><title>7-1图论</title><link>https://fuwari.vercel.app/posts/7-1%E5%9B%BE%E8%AE%BA/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/7-1%E5%9B%BE%E8%AE%BA/</guid><pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;7-1 图论&lt;/h1&gt;
&lt;h3&gt;树的直径&lt;/h3&gt;
&lt;p&gt;我看网上的博客。
一般树的直径可以跑一遍深度，然后从深度最大的开始跑一下最远的，这个方法还可以把树的直径上的点拿出来&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ve&amp;lt;ve&amp;lt;int&amp;gt;&amp;gt;ed(n+1);
ve&amp;lt;int&amp;gt;dis(n+1);
int ls,rs,maxl,maxr;
void dfs1(int u,int la)
{
    dep[u]=dep[la]+1;
    if(maxl&amp;lt;dep[u])
    {
        maxl=dep[u];
        ls=u;
    }


    for(auto v:ed[u])
    {
        if(v==la) continue;
        dfs1(v,u);
    }
}

void dfs2(int u,int la)
{
    dis[u]=dis[la]+1;
    if(maxr&amp;lt;dis[u])
    {
        maxr=dis[u];
        rs=u;
    }

    for(auto v:ed[u])
    {
        if(v==la) continue;
        fa[v]=u;//处理前缀
        dfs2(v,u);
    }
}

//ls,rs 就是树的直径的两个端点
ls,rs


//拿出树的直径上的端点
ve&amp;lt;int&amp;gt;f;
while(rs!=ls)
{
    f.push_back(rs);
    rs=fa[rs];
}
f.push_back(ls);

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;树的中心&lt;/h3&gt;
&lt;h3&gt;树的重心&lt;/h3&gt;
&lt;h3&gt;单源最短路(djstka)&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;struct node
{
    int x,ds;
};
struct cmp
{
    bool operater()(node a,node b)
    {
        return a.ds&amp;gt;b.ds;//当a.ds&amp;gt;b.ds时交换，这个时小顶堆
    }
};

ve&amp;lt;ve&amp;lt;int&amp;gt;&amp;gt;ed[N];
ve&amp;lt;int&amp;gt;st[N];

void djs()
{
    priority_queue&amp;lt;node,ve&amp;lt;node&amp;gt;,cmp&amp;gt;pq;
    pq.push({});
    while(pq.size())
    {
        auto [u,ds]=pq.top();pq.pop();
        if(st[u]) continue;
        st[u]=1;
        for(auto [v,w]:ed[u])
        {
            if(dis[v]&amp;gt;dis[u]+w)
            {
                dis[v]=dis[u]+w;
                pq.push({v,dis[v]});
            }
        }
    }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;分层最短路也是常用的 ，分层图最短路&lt;/p&gt;
&lt;h3&gt;多源最短路&lt;/h3&gt;
&lt;p&gt;floyd （O(n^3) 三层暴力跑最短路）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;bits/stdc++.h&amp;gt;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fix(x) fixed&amp;lt;&amp;lt;setprecision(x)
#define int long long
using namespace std;
using ll = long long;
template&amp;lt;class T&amp;gt;
using ve = vector&amp;lt;T&amp;gt;;
using pii = pair&amp;lt;int, int&amp;gt;;
const int N = 1e6 + 10;
const int mod = 1e9 + 7;

int n,m,q;
int a[N][N];


void solve() 
{
    cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m&amp;gt;&amp;gt;q;
    for(int i=1;i&amp;lt;=n;i++) 
    {
        for(int j=1;j&amp;lt;=n;j++) 
        {
            if(i==j) a[i][j]=0;
            else a[i][j]=1e18;
        }
    }
    for(int i=1;i&amp;lt;=m;i++)
    {
        int u,v,w;cin&amp;gt;&amp;gt;u&amp;gt;&amp;gt;v&amp;gt;&amp;gt;w;
        a[u][v]=min(a[u][v],w);
    }

    for(int k=1;k&amp;lt;=n;k++)
    {//k是分割点
        for(int i=1;i&amp;lt;=n;i++)
        {
            for(int j=1;j&amp;lt;=n;j++)
            {
                a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
            }
        }
    }

    while(q--)
    {
        int x,y;cin&amp;gt;&amp;gt;x&amp;gt;&amp;gt;y;
        if(a[x][y]&amp;gt;=1e9/2 )cout&amp;lt;&amp;lt;&quot;impossible&quot;&amp;lt;&amp;lt;&apos;\n&apos;;
        else cout&amp;lt;&amp;lt;a[x][y]&amp;lt;&amp;lt;&apos;\n&apos;;
    }

}

signed main() 
{
    IOS;
    int _ = 1; //cin &amp;gt;&amp;gt; _;
    while (_--) solve();
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;最小生成树(并查集)&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;/*


克鲁斯卡尔算法  

是并查集维护的，把边存一下，然后每次拿最小的边权，
如果不会形成环加上，反之舍弃此边。


*/

#include &amp;lt;bits/stdc++.h&amp;gt;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fix(x) fixed&amp;lt;&amp;lt;setprecision(x)
#define int long long
using namespace std;
using ll = long long;
template&amp;lt;class T&amp;gt;
using ve = vector&amp;lt;T&amp;gt;;
using pii = pair&amp;lt;int, int&amp;gt;;
const int N = 1e6 + 10;
const int mod = 1e9 + 7;

struct node
{
    int a,b,c;
};
bool cmp(node x,node y)
{
    return x.c&amp;lt;y.c;
}

int f[N];
int find(int x)
{
    if(f[x]!=x) f[x]=find(f[x]);
    return f[x];
}
void solve()
{
    int n,m;cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;
    for(int i=1;i&amp;lt;=n;i++) f[i]=i;
    ve&amp;lt;node&amp;gt;a;
    for(int i=1;i&amp;lt;=m;i++)
    {
        int u,v,w;cin&amp;gt;&amp;gt;u&amp;gt;&amp;gt;v&amp;gt;&amp;gt;w;
        a.push_back({u,v,w});
    }
    sort(a.begin(),a.end(),cmp);
    int ans=0;
    int res=0;
    for(int i=0;i&amp;lt;a.size();i++)
    {
        auto [u,v,w]=a[i];
        u=find(u),v=find(v);
        if(u==v) continue;
        f[u]=v;
        ans+=w;
        res++;
    }
    if(res!=n-1) cout&amp;lt;&amp;lt;&quot;orz\n&quot;;
    else cout&amp;lt;&amp;lt;ans&amp;lt;&amp;lt;&apos;\n&apos;;
}

signed main()
{
    IOS;
    int _ = 1; //cin &amp;gt;&amp;gt; _;
    while (_--) solve();
    return 0;
}


&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;基环树&lt;/h2&gt;
&lt;p&gt;基环树是n个节点，n条边的数据结构，基环树有一个环&lt;/p&gt;
&lt;p&gt;有向边的基环树，指向环的是内向树，反之是外向树&lt;/p&gt;
&lt;p&gt;dfs找环&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;set&amp;lt;int&amp;gt;se;
void dfs_c(int u,int la)
{
    //st标记是否遍历,ins表示是否在栈中//
    st[u]=ins[u]=true;
    for(auto v:ed[u])
    {
        if(st[v]) continue;


        fa[v]=u;
        dfs_c(v,u);
        if(ins[v]) //在栈中，这个感觉是找即环树的一种方式
        {//找到环


        //拿出环
            int id=u;
            se.insert(v);
            while(id!=v)
            {
                se.insert(id);
                id=fa[id];
            }
            break;
        //
        }
    }
    ins[u]=false;//
}

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;&lt;/h2&gt;
</content:encoded></item><item><title>3-1数论</title><link>https://fuwari.vercel.app/posts/3-1%E6%95%B0%E8%AE%BA/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/3-1%E6%95%B0%E8%AE%BA/</guid><pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;数论&lt;/h1&gt;
&lt;p&gt;目录&lt;/p&gt;
&lt;p&gt;欧拉筛(经典版本)
欧拉筛(最下质数筛)
质因子分解(O(n)筛法,O(logn)质因子分解 )
矩阵的转置 (横向变纵向，纵向变横向)&lt;/p&gt;
&lt;h2&gt;欧拉筛(经典版本)&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;vector&amp;lt;int&amp;gt; pri;
void pri_init(int n)
{
    vector&amp;lt;bool&amp;gt; is_pri(n + 1, true);
    is_pri[0] = is_pri[1] = false;
    for (int i = 2; i &amp;lt;= n; i++) 
    {
        if (is_pri[i]) pri.push_back(i);
        for (int j = 0; j &amp;lt; pri.size() &amp;amp;&amp;amp; pri[j] &amp;lt;= n / i; j++) 
        {
            is_pri[pri[j] * i] = false;
            if (i % pri[j] == 0) break;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;欧拉筛(最小质数筛)&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;vector&amp;lt;int&amp;gt; pri;
int pmin[N];
void my_pmin(int n)
{
    for (int i = 2; i &amp;lt;= n; i++)
    {
        if (pmin[i]==0)
        {
            pmin[i] = i;
            pri.push_back(i);
        } 
        for (auto p : pri)
        {
            if (i * p &amp;gt; n) break;
            pmin[i * p] = p;
            if (i % p == 0) break;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;质因子分解(O(n)筛法,O(logn)质因子分解 )&lt;/h2&gt;
&lt;h4&gt;质因子分解解释&lt;/h4&gt;
&lt;p&gt;✅ 结论公式：&lt;/p&gt;
&lt;p&gt;设一个正整数 ( n ) 的 &lt;strong&gt;质因子分解&lt;/strong&gt; 为：&lt;/p&gt;
&lt;p&gt;[
n = p_1^{a_1} \cdot p_2^{a_2} \cdot \cdots \cdot p_k^{a_k}
]&lt;/p&gt;
&lt;p&gt;那么它的约数个数（包括 1 和 ( n ) 本身）为：&lt;/p&gt;
&lt;p&gt;[
\text{约数个数} = (a_1 + 1)(a_2 + 1) \cdots (a_k + 1)
]&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vector&amp;lt;int&amp;gt; pri;
int pmin[N];
void my_pmin(int n)
{
    for (int i = 2; i &amp;lt;= n; i++)
    {
        if (!pmin[i])
        {
            pmin[i] = i; // pmin[i]：i 的最小质因子
            pri.push_back(i);
        }    
        for (auto p : pri)
        {
            if (i * p &amp;gt; n) break; // 超范围了
            pmin[i * p] = p;
            if (i % p == 0) break;
        }
    }
}

ve&amp;lt;pii&amp;gt; nszka(int n)
{
    map&amp;lt;int, int&amp;gt; mp;
    while (n != 1)
    {
        int pm = pmin[n];
        mp[pm]++;
        n /= pm;
    }
    ve&amp;lt;pii&amp;gt; f;
    for (auto [x, y] : mp) f.push_back({x, y});
    return f;
}
// 示例：分解 60 -&amp;gt; [(2,2), (3,1), (5,1)]

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;div style=&quot;page-break-after: always;&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;矩阵的转置 (横向变纵向，纵向变横向)&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;
ve&amp;lt;ve&amp;lt;int&amp;gt;&amp;gt;a(n+1,ve&amp;lt;int&amp;gt;(n+1));
ve&amp;lt;ve&amp;lt;int&amp;gt;&amp;gt;b(n+1,ve&amp;lt;int&amp;gt;(n+1));
for(int i=1;i&amp;lt;=n;i++)
{
    for(int j=1;j&amp;lt;=n;j++)
    {
        b[i][j]=a[j][n-i+1];
        // cout&amp;lt;&amp;lt;&quot;(&quot;&amp;lt;&amp;lt;i&amp;lt;&amp;lt;&quot;, &quot;&amp;lt;&amp;lt;j&amp;lt;&amp;lt;&quot;)  (&quot;&amp;lt;&amp;lt;j&amp;lt;&amp;lt;&quot;, &quot;&amp;lt;&amp;lt;n-i+1&amp;lt;&amp;lt;&quot;)  \n&quot;;
    }
}
a=b;

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;组合数( 快速幂+组合数+逆元预处理 O(n) )&lt;/h2&gt;
&lt;h4&gt;✅ 问题形式：(能使用乘法逆元的前提)&lt;/h4&gt;
&lt;p&gt;要求的是：&lt;/p&gt;
&lt;p&gt;[
\frac{a}{b} \mod m
]&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;若：&lt;/p&gt;
&lt;p&gt;[
\gcd(b, m) = 1
]&lt;/p&gt;
&lt;p&gt;则 ( b ) 在模 ( m ) 意义下有乘法逆元 ( b^{-1} \mod m )，于是可以转化为：&lt;/p&gt;
&lt;p&gt;[
\frac{a}{b} \mod m \equiv a \cdot b^{-1} \mod m
]&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
int ksm(int a, int n)
{
    int ans = 1;
    while (n)
    {
        if (n &amp;amp; 1) ans = ans * a % mod;
        a = a * a % mod; n &amp;gt;&amp;gt;= 1;
    }
    return ans;
}
struct ZHS
{
    int fac[N+2], ifac[N+2];
    ZHS() { init(); }
    void init()
    {
        fac[0] = ifac[0] = 1;
        for (int i = 1; i &amp;lt;= N; i++) fac[i] = fac[i - 1] * i % mod;
        ifac[N] = ksm(fac[N], mod - 2);
        for (int i = N - 1; i &amp;gt;= 1; i--) ifac[i] = ifac[i + 1] * (i + 1) % mod;
    }
    int C(int n, int m)
    {
        if (n &amp;gt;= m &amp;amp;&amp;amp; m &amp;gt;= 0 &amp;amp;&amp;amp; N &amp;gt; n)
            return fac[n] * ifac[m] % mod * ifac[n - m] % mod;
        return 0;
    }
    int A(int n, int m)
    {
        if (n &amp;gt;= m &amp;amp;&amp;amp; m &amp;gt;= 0 &amp;amp;&amp;amp; N &amp;gt; n)
            return fac[n] * ifac[n - m] % mod;
        return 0;
    }
} zhs;

int inv(int a,int mod) { return ksm(a,mod-2,mod);}

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;扩展欧几里得exgcd&lt;/h2&gt;
&lt;p&gt;求解形如  a&lt;em&gt;x+b&lt;/em&gt;y==gcd(a,b) 的不定方程的任意一组解&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int exgcd(int a,int b,int&amp;amp;x,int&amp;amp; y)
{
    if(b!=0)
    {
        x=1;y=0;
        return a;
    }
    int d=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;杨辉三角&lt;/h2&gt;
&lt;h1&gt;杨辉三角模板题&lt;/h1&gt;
&lt;p&gt;杨辉三角具有如下的初始条件：&lt;/p&gt;
&lt;p&gt;$$C_{i,0} = C_{i,i} = 1$$&lt;/p&gt;
&lt;p&gt;杨辉三角有如下的递推公式：&lt;/p&gt;
&lt;p&gt;$$C_{i,j} = C_{i-1,j} + C_{i-1,j-1}$$&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;杨辉三角本质是二项式系数，其第 $n$ 行各个数值即为 $(a+b)^n$ 展开后各项的系数。&lt;br /&gt;
展开后共有 $n+1$ 项，第 $i$ 项的系数记作 $C_{n,i}$，形如：&lt;/p&gt;
&lt;p&gt;$$C_{n,0}a^n + C_{n,1}a^{n-1}b + C_{n,2}a^{n-2}b^2 + \dots + C_{n,n-1}ab^{n-1} + C_{n,n}b^n$$&lt;/p&gt;
&lt;p&gt;由于 $a^n$ 只能由 $n$ 个 $(a+b)$ 中 $a$ 相乘得到，因此其系数为 $1$，$b^n$ 同理，由此得到了杨辉三角的边界条件式。&lt;/p&gt;
&lt;p&gt;对于杨辉三角第 $n$ 行中第 $i$ 项 $C_{n,i}$，其为 $a^i b^{n-i}$ 的系数。&lt;br /&gt;
考虑第 $n$ 行的 $a^i b^{n-i}$ 可能来源：&lt;/p&gt;
&lt;p&gt;$$(a+b)^n = (a+b)^{n-1}(a+b)$$&lt;/p&gt;
&lt;p&gt;即：&lt;/p&gt;
&lt;p&gt;$$(C_{n-1,0}a^{n-1} + C_{n-1,1}a^{n-2}b + \dots + C_{n-1,n-1}b^{n-1})(a+b)$$&lt;/p&gt;
&lt;p&gt;于是 $a^i b^{n-i}$ 可以由上一行的 $a^{i-1}b^{n-i}$ 乘以 $a$，或者由 $a^i b^{n-i-1}$ 乘以 $b$ 得到。&lt;br /&gt;
由此可得：&lt;/p&gt;
&lt;p&gt;$$C_{n,i} = C_{n-1,i-1} + C_{n-1,i}$$&lt;/p&gt;
&lt;p&gt;即杨辉三角的递推式。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;由于二项式系数的组合性质，杨辉三角的 $C_{i,j}$ 项即为组合数 $C(i,j)$，这使得杨辉三角成为时间复杂度允许情况下一种简洁好写的组合数求法。&lt;/p&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;cstdio&amp;gt;
int N,C[30][30];
int main()
{
    scanf(&quot;%d&quot;,&amp;amp;N);
    int i,j;
    C[0][0]=1;printf(&quot;1\n&quot;);
    for(i=1;i&amp;lt;=N;i++)
    {
        for(j=1;j&amp;lt;=i;j++)
        {
            C[i][j]=C[i-1][j]+C[i-1][j-1];
            printf(j!=i?&quot;%d &quot;:&quot;%d\n&quot;,C[i][j]);
        }
    }
} 
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>0-0初始化</title><link>https://fuwari.vercel.app/posts/0-0%E5%88%9D%E5%A7%8B%E5%8C%96/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/0-0%E5%88%9D%E5%A7%8B%E5%8C%96/</guid><pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;vscode 的设置操作&lt;/h1&gt;
&lt;h2&gt;运行脚本文件&lt;/h2&gt;
&lt;h4&gt;ubutun环境下&lt;/h4&gt;
&lt;p&gt;这个命令给run.js运行的权限&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chmod +x run.sh  
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash

# 检查是否传入了文件名参数
if [ -z &quot;$1&quot; ]; then
    echo &quot;用法: run.sh 文件名.cpp&quot;
    exit 1
fi

FILE=$1
# 去除 .cpp 后缀生成可执行文件名
EXE=&quot;${FILE%.cpp}&quot;

echo &quot;编译 $FILE...&quot;

# 编译 C++ 文件
g++ &quot;$FILE&quot; -std=gnu++20 -O2 -o &quot;$EXE&quot;
if [ $? -ne 0 ]; then
    echo &quot;编译失败！&quot;
    exit 1
fi

echo &quot;编译成功，正在运行...&quot;

# 如果存在 in.txt 文件，则重定向输入
if [ -f &quot;in.txt&quot; ]; then
    ./&quot;$EXE&quot; &amp;lt; in.txt &amp;gt; out.txt
else
    ./&quot;$EXE&quot;
fi

# 比较输出文件 out.txt 和 com.txt
echo &quot;正在比较输出文件...&quot;
if cmp -s &quot;out.txt&quot; &quot;com.txt&quot;; then
    echo &quot;Accept （输出一致）&quot;
else
    echo &quot;Wrong Answer （输出不一致）&quot;
fi

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;文本缩放&lt;/h2&gt;
&lt;p&gt;ctrl+, 调出设置，搜索 zoom ,打对勾&lt;/p&gt;
&lt;p&gt;ctrl+鼠标滚轮  缩放代码&lt;/p&gt;
&lt;h2&gt;快捷键配置(待补充)&lt;/h2&gt;
&lt;h2&gt;主函数板子&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;
#include &amp;lt;bits/stdc++.h&amp;gt;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fix(x) fixed&amp;lt;&amp;lt;setprecision(x)
#define endl &apos;\n&apos;
#define int long long
using namespace std;
using ll = long long;
template&amp;lt;class T&amp;gt;
using ve = vector&amp;lt;T&amp;gt;;
using pii = pair&amp;lt;int, int&amp;gt;;
const int N = 1e6 + 10;
const int mod = 1e9 + 7;

void solve()
{



}


signed main()
{
    IOS;

    int _ = 1; //cin &amp;gt;&amp;gt; _;
    while (_--) solve();
    return 0;
}


//------------------------------------
// #define ONLINE_JUDGE
#ifndef ONLINE_JUDGE
    ifstream in(&quot;./in.txt&quot;);
    cin.rdbuf(in.rdbuf());
    ofstream out(&quot;./out.txt&quot;);
    cout.rdbuf(out.rdbuf());
#endif
//------------------------------------


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在ubutun 系统&lt;/p&gt;
&lt;p&gt;设置  鼠标大小，灵敏度 调整&lt;/p&gt;
&lt;h2&gt;对拍&lt;/h2&gt;
&lt;p&gt;windows系统下&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;bits/stdc++.h&amp;gt;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fix(x) fixed&amp;lt;&amp;lt;setprecision(x)
#define int long long
using namespace std;
using ll = long long;
template&amp;lt;class T&amp;gt;
using ve = vector&amp;lt;T&amp;gt;;
using pii = pair&amp;lt;int, int&amp;gt;;
const int N = 1e6 + 10;
const int mod = 1e9 + 7;

signed main() 
{

//编译
    system(&quot;g++ -O2 a1.cpp -o a1.exe&quot;);
    system(&quot;g++ -O2 a2.cpp -o a2.exe&quot;);
    system(&quot;g++ -O2 data.cpp -o data.exe&quot;);


    int n=500;
    for (int i = 1; i &amp;lt;= n; i++) 
    {
        system(&quot;data.exe &amp;gt; data.in&quot;);
        system(&quot;a1.exe &amp;lt; data.in &amp;gt; a1.out&quot;);
        system(&quot;a2.exe &amp;lt; data.in &amp;gt; a2.out&quot;);


        // 显示当前测试进度
        cout&amp;lt;&amp;lt;&quot;test: &quot;&amp;lt;&amp;lt;i&amp;lt;&amp;lt;&apos;\n&apos;;
        if (system(&quot;fc a1.out a2.out &amp;gt; nul&quot;)) 
        {
            cout&amp;lt;&amp;lt;&quot;Wrong Answer!\n&quot;;

            
            cout &amp;lt;&amp;lt; &quot;\n================== INPUT =================================\n&quot;;
            ifstream fin(&quot;data.in&quot;);
            cout &amp;lt;&amp;lt; fin.rdbuf(); // 直接输出整个文件内容
            fin.close();

            cout &amp;lt;&amp;lt; &quot;\n================== YOUR OUTPUT (a1.out) ==================\n&quot;;
            ifstream fout1(&quot;a1.out&quot;);
            cout &amp;lt;&amp;lt; fout1.rdbuf();
            fout1.close();

            cout &amp;lt;&amp;lt; &quot;\n================== CORRECT OUTPUT (a2.out) ===============\n&quot;;
            ifstream fout2(&quot;a2.out&quot;);
            cout &amp;lt;&amp;lt; fout2.rdbuf();
            fout2.close();

            cout &amp;lt;&amp;lt; &quot;\n================= end  ===================================\n&quot;;
        }
        else cout&amp;lt;&amp;lt;&quot;Accept!\n&quot;;
    }
    return 0;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;linux系统下&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;bits/stdc++.h&amp;gt;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fix(x) fixed&amp;lt;&amp;lt;setprecision(x)
#define int long long
using namespace std;

signed main() 
{
    // 编译，注意没有 .exe
    system(&quot;g++ -O2 a1.cpp -o a1&quot;);
    system(&quot;g++ -O2 a2.cpp -o a2&quot;);
    system(&quot;g++ -O2 data.cpp -o data&quot;);

    int n = 500;
    for (int i = 1; i &amp;lt;= n; i++) 
    {
        // 执行命令时前面要加 ./ 表示当前目录
        system(&quot;./data &amp;gt; data.in&quot;);
        system(&quot;./a1 &amp;lt; data.in &amp;gt; a1.out&quot;);
        system(&quot;./a2 &amp;lt; data.in &amp;gt; a2.out&quot;);

        cout &amp;lt;&amp;lt; &quot;test: &quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &apos;\n&apos;;
        
        // 使用 diff 进行对比，&amp;gt; /dev/null 表示隐藏输出
        if (system(&quot;diff a1.out a2.out &amp;gt; /dev/null&quot;)) 
        {
            cout &amp;lt;&amp;lt; &quot;Wrong Answer!\n&quot;;

            cout &amp;lt;&amp;lt; &quot;\n================== INPUT =================================\n&quot;;
            ifstream fin(&quot;data.in&quot;);
            cout &amp;lt;&amp;lt; fin.rdbuf();
            fin.close();

            cout &amp;lt;&amp;lt; &quot;\n================== YOUR OUTPUT (a1.out) ==================\n&quot;;
            ifstream fout1(&quot;a1.out&quot;);
            cout &amp;lt;&amp;lt; fout1.rdbuf();
            fout1.close();

            cout &amp;lt;&amp;lt; &quot;\n================== CORRECT OUTPUT (a2.out) ===============\n&quot;;
            ifstream fout2(&quot;a2.out&quot;);
            cout &amp;lt;&amp;lt; fout2.rdbuf();
            fout2.close();

            cout &amp;lt;&amp;lt; &quot;\n================= end  ===================================\n&quot;;
            break; // 出错就退出循环
        }
        else cout &amp;lt;&amp;lt; &quot;Accept!\n&quot;;
    }

    return 0;
}

&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 IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fix(x) fixed&amp;lt;&amp;lt;setprecision(x)
#define int long long
using namespace std;
using ll = long long;
template&amp;lt;class T&amp;gt;
using ve = vector&amp;lt;T&amp;gt;;
using pii = pair&amp;lt;int, int&amp;gt;;
const int N = 1e6 + 10;
const int mod = 1e9 + 7;

// 创建随机设备和随机数生成器
mt19937 rng(random_device{}());


// 生成 [l, r] 区间的随机整数
int randint(int l, int r) 
{
    return uniform_int_distribution&amp;lt;int&amp;gt;(l, r)(rng);
}

// 生成长度为len的字符串  [    ]
string randstring(int len) 
{ // 大写，数字，修改 randint(&apos;a&apos;,&apos;z&apos;);
    string res;
    for (int i = 0; i &amp;lt; len; ++i) res += char(randint(&apos;a&apos;, &apos;z&apos;));
    return res;
}


//创建n个节点的树，无重边，无自环
void get_tree(int n)
{
    ve&amp;lt;int&amp;gt;a(n+1);
    iota(a.begin(),a.end(),0);
    shuffle(a.begin()+1,a.end(),rng);
    for(int i=1;i&amp;lt;=n;i++) cout&amp;lt;&amp;lt;a[i]&amp;lt;&amp;lt;&quot; \n&quot;[i==n];
    ve&amp;lt;pii&amp;gt;f;
    for(int i=2;i&amp;lt;=n;i++)
    {//连接，点u和前面的某一个点
        int u=a[i];
        int v=a[randint(1,i-1)];
        f.push_back({v,u});
    }
    cout&amp;lt;&amp;lt;n&amp;lt;&amp;lt;&apos;\n&apos;;
    for(auto [u,v]:f) cout&amp;lt;&amp;lt;u&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;v&amp;lt;&amp;lt;&quot;\n&quot;;
}


void solve()
{
    int x=randint(0,20);
    cout&amp;lt;&amp;lt;x&amp;lt;&amp;lt;&apos;\n&apos;;
}

signed main()
{
    IOS;
    int _ = 1; //_=randint(1,10);
    while (_--) solve();
    return 0;
}

&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>动态规划——LIS</title><link>https://fuwari.vercel.app/posts/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92lis/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92lis/</guid><pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;动态规划&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
&lt;strong&gt;LIS 和LCS 问题&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;首先是这两个名词&lt;/p&gt;
&lt;p&gt;&amp;lt;mark&amp;gt;
LIS：Longest Increasing Subsequence，最长递增子序列&lt;/p&gt;
&lt;p&gt;&amp;lt;br&amp;gt;
LCS：Longest Common Subsequence，最长公共子序列&lt;/p&gt;
&lt;p&gt;&amp;lt;/mark&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;p&gt;然后先说一下LIS问题&lt;/p&gt;
&lt;p&gt;lis O(n^2) 版本&lt;/p&gt;
&lt;p&gt;放一个板子题
https://www.luogu.com.cn/problem/B3637&lt;/p&gt;
&lt;p&gt;对于 6 5 1 4 2 7&lt;/p&gt;
&lt;p&gt;这个的LIS 很明显就是 1 4 7 长度为三 当然这个是不固定的&lt;/p&gt;
&lt;p&gt;最简单的方法O(n^2)的算法，dp[i] 当前以i结尾能构造的LIS
dp[i]=max(1, max(dp[1]~dp[i-1])+1)
//[1,i-1] a[j]&amp;lt; a[i]
这样子的写就行了&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
void solve()
{
    int n;cin&amp;gt;&amp;gt;n;
    ve&amp;lt;int&amp;gt;a(n+1);
    for(int i=1;i&amp;lt;=n;i++) cin&amp;gt;&amp;gt;a[i];
    ve&amp;lt;int&amp;gt;dp(n+1);
    for(int i=1;i&amp;lt;=n;i++)
    {
        dp[i]=1;
        for(int j=1;j&amp;lt;=i-1;j++)
        {
            if(a[j]&amp;lt;a[i])
            {
                dp[i]=max(dp[i],dp[j]+1);
            }
        }
    }
    cout&amp;lt;&amp;lt;dp[n]&amp;lt;&amp;lt;&apos;\n&apos;;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;lis O(nlogn)版本&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二分优化&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;还有一种 二分的方法，跟树状数组的方法实现这个代码&lt;/p&gt;
&lt;p&gt;二分的方法  dp[i]:代表当前长度为i的最长上升，对于当前已经来到第j个元素 [1,j] 中最小的那个能满足的元素&lt;/p&gt;
&lt;p&gt;二分 dp 更新找到第一个大于a[j]的dp[i] （dp[i]&amp;lt;=a[j]) 更新 dp[i+1]=a[j];&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
void solve()
{
    int n;cin&amp;gt;&amp;gt;n;
    ve&amp;lt;int&amp;gt;a(n+1);
    for(int i=1;i&amp;lt;=n;i++) cin&amp;gt;&amp;gt;a[i];
    ve&amp;lt;int&amp;gt;dp(n+1);
    int len=1;
    dp[1]=a[1];
    for(int i=2;i&amp;lt;=n;i++)
    {
        if(a[i]&amp;gt;dp[len]) dp[++len]=a[i];
        else
        {
            int id=lower_bound(&amp;amp;dp[1],&amp;amp;dp[len],a[i])-&amp;amp;dp[1];
            if(dp[id]!=a[i]) id++;
            dp[id]=a[i];
        }
       // for(int j=1;j&amp;lt;=n;j++) cout&amp;lt;&amp;lt;dp[j]&amp;lt;&amp;lt;&quot; \n&quot;[j==n];
    }

    cout&amp;lt;&amp;lt;len&amp;lt;&amp;lt;&apos;\n&apos;;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;树状数组优化&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;树状数组也能处理这个问题，思路是  如果当前已经遍历到了第i个元素，
树状数组维护了前[1,a[i]-1] 个元素的情况所能组成的最长公共子序列。
因为 在 [1,a[i]-1] 这个范围下肯定会小于a[i]。&lt;/p&gt;
&lt;p&gt;这个方法需要注意下离散化行为，因为我们维护的是权值。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int f[N];
void add(int x,int val)
{
    while(x&amp;gt;0&amp;amp;&amp;amp;x&amp;lt;N)
    {
        f[x]=max(f[x],val);
        x+=(x&amp;amp;-x);
    }
}
int query(int x)
{
    int ans=0;
    while(x)
    {
        ans=max(ans,f[x]);
        x-=(x&amp;amp;-x);
    }
    return ans;
}
void solve()
{
    int n;cin&amp;gt;&amp;gt;n;
    ve&amp;lt;int&amp;gt;a(n+1);
    for(int i=1;i&amp;lt;=n;i++) cin&amp;gt;&amp;gt;a[i];

    int maxa=0;
    for(int i=1;i&amp;lt;=n;i++)
    {
        int x=query(a[i]-1)+1;//长度
        maxa=max(maxa,x);
        add(a[i],x);
    }
    cout&amp;lt;&amp;lt;maxa&amp;lt;&amp;lt;&quot;\n&quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;lcs 问题&lt;/p&gt;
&lt;p&gt;最长公共子序列问题：&lt;/p&gt;
&lt;p&gt;给出a数组，b数组，找a,b下最长公共子序列&lt;/p&gt;
&lt;p&gt;朴素版本O(n^2)&lt;/p&gt;
&lt;p&gt;我们可以用dp[i][j]来表示第一个串的前i位，第二个串的前j位的LCS的长度，
那么我们是很容易想到状态转移方程的：&lt;/p&gt;
&lt;p&gt;如果当前的A1[i]和A2[j]相同（即是有新的公共元素） 那么
dp[i][j]=max(dp[i][j],dp[i−1][j−1]+1);&lt;/p&gt;
&lt;p&gt;如果不相同，即无法更新公共元素，考虑继承：
dp[i][j]=max(dp[i−1][j],dp[i][j−1]&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;lcs O(nlogn)版本&lt;/p&gt;
&lt;p&gt;我们可以先对a进行离散化操作。
我们需要按照a的大小准则，对b操作。转换成b按照a准则下的，lis问题
比如a中 [5 3] 得到5&amp;lt;3顺序 则离散化后 5=&amp;gt;1 3=&amp;gt;2  即在b中5大小是1
3大小是2 。这个样子映射后得到的结果&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这个方法需要注意重复的情况，在重复的情况需要倒序&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数组无重复&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int f[N];
void add(int x,int val)
{
    while(x&amp;lt;N)
    {
        f[x]=max(f[x],val);
        x+=(x&amp;amp;-x);
    }
}
int query(int x)
{
    int ans=0;
    while(x)
    {
        ans=max(ans,f[x]);
        x-=(x&amp;amp;-x);
    }
    return ans;
}
void solve()
{
    int n;cin&amp;gt;&amp;gt;n;
    ve&amp;lt;int&amp;gt;a(n+1),b(n+1);
    for(int i=1;i&amp;lt;=n;i++) cin&amp;gt;&amp;gt;a[i];
    for(int i=1;i&amp;lt;=n;i++) cin&amp;gt;&amp;gt;b[i];

    map&amp;lt;int,int&amp;gt;mp;
    for(int i=1;i&amp;lt;=n;i++) mp[a[i]]=i;
    int ans=0;
    for(int i=1;i&amp;lt;=n;i++)
    {
        int x=query(mp[b[i]]-1)+1;
        ans=max(ans,x);
        add(mp[b[i]],x);
    }
    cout&amp;lt;&amp;lt;ans&amp;lt;&amp;lt;&apos;\n&apos;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;数组有重复&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int f[N];
void add(int x,int val)
{
    while(x&amp;lt;N)
    {
        f[x]=max(f[x],val);
        x+=(x&amp;amp;-x);
    }
}
int query(int x)
{
    int ans=0;
    while(x)
    {
        ans=max(ans,f[x]);
        x-=(x&amp;amp;-x);
    }
    return ans;
}
void solve()
{
    int n;cin&amp;gt;&amp;gt;n;
    int m;cin&amp;gt;&amp;gt;m;
    ve&amp;lt;int&amp;gt;a(n+1),b(m+1);
    for(int i=1;i&amp;lt;=n;i++) cin&amp;gt;&amp;gt;a[i];
    for(int i=1;i&amp;lt;=m;i++) cin&amp;gt;&amp;gt;b[i];
    
    ve&amp;lt;ve&amp;lt;int&amp;gt;&amp;gt;mp(N);
    for(int i=1;i&amp;lt;=n;i++) mp[a[i]].push_back(i);



    ve&amp;lt;int&amp;gt;g;
    for(int i=1;i&amp;lt;=m;i++)
    {
        for(int j=mp[b[i]].size()-1;j&amp;gt;=0;j--) g.push_back(mp[b[i]][j]);
    }

    for(auto x:g) cout&amp;lt;&amp;lt;x&amp;lt;&amp;lt;&quot; &quot;;
    cout&amp;lt;&amp;lt;&quot;\n-------------\n&quot;;


    int ans=0;
    for(int i=0;i&amp;lt;g.size();i++)
    {
        int x=query(g[i]-1)+1;
        ans=max(ans,x);
        add(g[i],x);
    }
    cout&amp;lt;&amp;lt;ans&amp;lt;&amp;lt;&apos;\n&apos;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;二分的方法&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果对于有重复的，新数组的构造很可能会超时间复杂度
那么还是二分的方法比较稳定一点&lt;/p&gt;
</content:encoded></item><item><title>my big school (上)</title><link>https://fuwari.vercel.app/posts/nszka_and_acm/nszka_and_acm/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/nszka_and_acm/nszka_and_acm/</guid><pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;div align=&quot;center&quot;&amp;gt;&lt;/p&gt;
&lt;h2&gt;my big school (上)&lt;/h2&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;1.出生时期&lt;/h3&gt;
&lt;p&gt;既然是自传，就先从出生开始吧。
&lt;strong&gt;(待施工)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div align=&quot;center&quot;&amp;gt;&lt;/p&gt;
&lt;h3&gt;2.大一上&lt;/h3&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;伴随23高考，我成功的降临到郑州经贸学院。在这之前我并没有去接触太多的互联网。所以我也没有什么眼观。相对我来说我在23暑假期间的最常刷到的就是一些 传销大学的 频道。可能在我现在看来那时候自己非常的呆滞。完们c语言老师是中工外聘的，当时还在上一些c语言的课程，那个时间我时长会在什么“源程序”平台，现在已经找不到那个网站了，应该是中工oj吧，用c语言写一些做加减法的题目。或者在PTA写一些老师们拉的题单。偶然间我就联系中工的c语言老师，在后来偶然机会我也认识到中原工学院的ACM成员，日后虽然也没什么联系。进入到一个提升班选拔的qq群，知道了学院还做了些新生周赛。然后我就打了一回新生周赛，那时候什么都不懂，因为在榜的前面，随后被xj同志拉过去打南阳理工学院的校赛。这是我第一次接触到算法竞赛，这段时间我认识到的ACM，随即在抖音去看一些频道的ACM讲解，各种薄纱之类的让我有对ACM有了一些想法。&lt;/p&gt;
&lt;p&gt;这时间我在b站找了一些c语言的课程，我认为鹏哥C语言讲的确实还可以，但不是竞赛向的。我并不了解C语言的内存，堆栈，在南阳理工新生赛在main函数定义大内存，爆栈洪文，喜提1题下机。这时间开始做提升班选拔赛，我参考了之前的选拔赛，发现学校有acm集训队这个组织。在周赛我偶然遇到了同届的mjl同学。然后两场选拔赛后，没有起到选拔的作用，大家都进了提升班，三十多个人。&lt;/p&gt;
&lt;p&gt;总之说大一上一直都在忙进集训队的事情，混学校的日子。班里的课还是经常去上，甚至还私下去写写老师布置的作业。甚至于我大一上的绩点还能高达3.7，虽然这个数据甚至还没有过4，但跟后来的我对比，这个数字已经非常惊艳了。&lt;/p&gt;
&lt;p&gt;&amp;lt;div align=&quot;center&quot;&amp;gt;&lt;/p&gt;
&lt;h3&gt;3.大一下&lt;/h3&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;大一的寒假，在vjudge上做题。wy属鼠在vj上拉了一个题单，我们就跟着做，让在寒假刷到150题。但实际并没打多数人应该都没有做够150个。&lt;/p&gt;
&lt;p&gt;回来后有一个郑州轻工业大学的校赛，学校要选几个人，打了两场选拔赛，也是拿到门票了。这个时期我开始去集训室做题，一开始在三楼做了两天.&lt;/p&gt;
&lt;p&gt;后来得知了一点事情。学校此时间有两个集训队。人工智能学院跟计算机学院。隔壁室在三楼，我们是在二楼。这个时间的二楼算是一个空教室，我们就租用了。大一的要去上晚自习，我还时有自豪，自己可以去二楼训练不用去上晚自习。就一种类似帮派之争的样子，有两个队伍，大家都会想着相互对比，去争着排名。我感觉这样互相诋毁，互相竞争的模式在某种意义上算是一种好事情。&lt;/p&gt;
&lt;p&gt;我们去了郑州轻工业大学，参与他们学校举办的新生赛。这是我第一次出学校打比赛。在机房比的，A出题还会发气球。最后我打了7题，排名二十多。隔壁zyf打了8题，打到前十还拿了奖。算是第一次比较正式的比赛了，acm的气球氛围还是不错了
&lt;img src=&quot;img/%E9%83%91%E5%B7%9E%E8%BD%BB%E5%B7%A5%E4%B8%9A%E5%A4%A7%E5%AD%A6%E6%96%B0%E7%94%9F%E8%B5%9B.jpg&quot; alt=&quot;alt text&quot; /&gt;
&lt;img src=&quot;img/%E9%83%91%E5%B7%9E%E8%BD%BB%E5%B7%A5%E4%B8%9A%E5%A4%A7%E5%AD%A6%E6%96%B0%E7%94%9F%E8%B5%9B2.jpg&quot; alt=&quot;alt text&quot; /&gt;
&lt;img src=&quot;img/%E9%83%91%E5%B7%9E%E8%BD%BB%E5%B7%A5%E4%B8%9A%E5%A4%A7%E5%AD%A6%E6%96%B0%E7%94%9F%E8%B5%9B3.jpg&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;3.1  转折&lt;/h4&gt;
&lt;p&gt;我把这段时间称之为“ 危机纪元 ” 时期。&lt;/p&gt;
&lt;p&gt;（&lt;strong&gt;蓝桥杯省赛的时间线差不多也是这个时期，在中原工学院打的，比赛体验差劲，省流 ：省一。)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;伴随着我对acm的认知，我感觉到这个比赛非常的nb，跟创业大赛非同寻常，我也开始逛知乎，偶然间在b站刷到了jiangly，加进了“江丽二群”这个群可谓是信息学竞赛的枢纽了。对acm的认知越来越熟悉。以至于我对创业大赛有一种极致的鄙视性，这应该算是acm的独特优越感，收集了很多圈子的数据，盯着 https://board.xcpcio.com/ 看学校的数据。看到曾经的前辈打铜，打银。幻想自己有天能打到金。xwc出走了，xj拉了lsy跟我,mjl组队。我们也一起组了队内训练，学了背包dp。我记忆忧心的是在牛客我拉了一个单调队列题，盯一天的题解无法理解为什么。知道后来许久我才知道这种做法。&lt;/p&gt;
&lt;p&gt;但是转折来了。24年上半年，CCPC省赛在24年进化成了全国邀请赛。一个学校只有了6支队伍，跟3楼的对半分。名额只有3支队伍。我当时还在磨拳擦掌准备跟22级打一打，最后的结果是，实际连打学长队的资格都没了，但肯定还是有点不服气。其实名额这个问题一直围绕着我整个算竞。&lt;/p&gt;
&lt;p&gt;没有完整的训练体系，慢慢得23级的训练随时间也消散了，大家也都去摆烂了。&lt;/p&gt;
&lt;p&gt;在ICPC省赛前夕，&lt;strong&gt;我们去打了蓝桥杯国赛，省流：国三。&lt;/strong&gt;
ICPC省赛，隔壁三楼打到学校第一张金牌。这个金牌应该是河南省赛第一张三本金牌，我听zhl说的，虽然是奖励名额。zhl他们打了银，然后22级的主力队员强势打铜，圆梦退役。&lt;/p&gt;
&lt;p&gt;在潜水一些算法群，我得知了，下半年有XCPC区域赛。在18年学校成立队伍来学校只有两只队伍打进去过去区域赛。20年疫情时期的远古时期的队伍，跟三楼在22年打的CCPC哈尔滨站。但全都遗憾打铁了。&lt;/p&gt;
&lt;p&gt;总之这个时间我的状态很差劲，自己的训练没有发挥的结果。我甚至当时已经萌发出了跑路的想法，这个团队没有我想象的那样，后面晚上也不再去二楼训练，开始留在宿舍玩了。&lt;/p&gt;
&lt;p&gt;五月份我接触到了codeforces，这是俄罗斯的信息学奥赛的网站。由于时差，比赛几乎都在晚上到凌晨。我开始打codeforces，我对acm圈内的一些东西慢慢都开始熟悉，在暑假前夕打上了1300分，我觉得大一下是我的转折点。如果没有22级搞的那些事情我估计对acm也不会有太大的执念。或许后面的故事也不会如此发展了。&lt;/p&gt;
&lt;p&gt;acm集训队选拔赛。也看不到什么选拔效果了，已经没有之前提升班，郑轻新生赛选拔赛时期新鲜感了。时间也差不多来到了百度之星省赛。百度之星是第一次参与，百度之星省赛的题对当时的我们太难乐，很多爆零的，mjl也爆零了，我下机看只a了两题，感觉已经无了，随后问了一圈，只有我跟xwc，2题，打了铜，其余的全爆零或者签到，全体坠机。&lt;/p&gt;
&lt;p&gt;百度之星省赛结束后。24上半年的所有的比赛都结束了。简单说对于acmer来说，大家的主要战场都在下半年的区域赛，但是这个时期，郑州经贸学院集训队对于区域赛来说，能不能打到参赛名额都是一个严峻的问题，照看之前的经验就是说zueb的acm选手不打acm。&lt;/p&gt;
&lt;p&gt;XCPC省赛结束后，wy属鼠退役去考研了。22级的也都不在做acm，对于这些前辈，我当时也仅仅与wy属鼠跟xj同志认识而已了。xwc,zhl缺了一个人，我被拉过去打网络赛。所以只能抛弃mjl同学了。主要我担心不跟主流队伍，明年能不能上场都是一个问题，事实确实如此，在弱校，没有一个完整的名额分配体系，甚至在有太多又菜又爱打，名义上的最强队就是有保送比赛名额的优势。&lt;/p&gt;
&lt;h4&gt;3.2.暑期集训&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;ACMer是没有假期的，但是我有。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;7月份我在家玩，我发现在家根本就没法去静心训练，其根本还是个人问题。这个时间我靠手速的cf打到了1400分。被xwc忽悠说&lt;strong&gt;蓝名&lt;/strong&gt;足以河南省金。但现在河南省赛难度感觉有种逐年递增的感觉，应该越来越普及了。&lt;/p&gt;
&lt;p&gt;8月份回到学校集训，每天做着早8去，二楼摸鱼。这个时期我们集训队内还在分组做一些专题，其实开始的势头都还好，越往后面还在做的人就比较少了，训练的内容也忘的差不多，我是在二楼的，当时mjl，zb他们还搞了一群一样的键盘，点名狼蛛F87，这个时期是在学校最舒服的一个时期。22级的老登在一楼考研，xwc他在一楼训练。&lt;/p&gt;
&lt;p&gt;此时我才终于知道，省赛只是玩一玩，区域赛才是算法竞赛。&lt;strong&gt;这个时候感觉区域赛搞个牌子这辈子也就有了。&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;$贴几张24暑假集训照片$&lt;/p&gt;
&lt;p&gt;暑期集训，二楼的水瓶&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;img/24%E5%B9%B4%E6%9A%91%E5%81%87%E7%95%99%E6%A0%A1.jpg&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;div align=&quot;center&quot;&amp;gt;&lt;/p&gt;
&lt;h3&gt;大二上&lt;/h3&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;随后9月份开始3周的网络赛，先是CCPC，随后ICPC两场。在网络赛之前我们队打过几次训练赛，我一直都是0作用，都是他俩在A题。&lt;/p&gt;
&lt;p&gt;CCPC网络赛，zhl承当主力，先签到，在跟xwc一起开，然后zhl又开一题，随后我爆冷开了三维“区间dp”，这也是我的唯一作用。随后3人开香槟感觉有了。赛后我们一起去吃了串串。赛后校排211，直接炸了，后来因为pta原因把4题队名额都发了1个，然后我发现前面有2个学校貌似是被判舞弊了(难道是连坐吗)随后的ICPC网络赛就是打着玩了，因为已经有一个名额了。所以ICPC的事情记的已经不太清楚了。我记得一场被一个中位数的中位数卡到崩溃，一场zhl假翻译卡到崩溃。&lt;/p&gt;
&lt;p&gt;CCPC网络赛现场
&lt;img src=&quot;img/CCPC%E7%BD%91%E7%BB%9C%E8%B5%9B2024.jpg&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;p&gt;之后的时间，学校的两个学院合并，二楼。虽然学院合并了，但是二楼三楼并没有做合并，后面的名额就更少了。这个消息出来后，我想很多23级的在这个时期已经结束了。&lt;/p&gt;
&lt;p&gt;这段时期我跟zhl慢慢熟悉了,我俩经常在二楼冲浪。&lt;/p&gt;
&lt;p&gt;网络赛结束，薛老师请客吃饭，讨论了后续二楼的安排，当时考虑了lsy，mjl，tyl，然后我跟xwc推荐了dzy 来当队长，主要他在一些QQ群的唐人发言，感觉很可爱。在现在看这个选择是正确的，为二楼带来了一位省金选手。&lt;/p&gt;
&lt;h4&gt;2024ccpc区域赛 郑州站&lt;/h4&gt;
&lt;p&gt;随后我们开始准备郑州站，一直在幻想着郑州站拿牌，给学校打个历史。
郑州站。这是第一次打区域赛，虽然此时我还没有打过省赛，但还是被区域赛的队伍配置震撼到，路边随便拉一队都比我们强。这就不得不讲三本自尊这件事情了，这场比赛意外是Windows系统，还有cph。热身赛被一道建图卡到结束。郑轻的衣服感觉不太好看，志愿者的袋鼠衣服挺好看。次日正式赛，体育场容纳接近300支队伍，这体育馆的体验就非常好，钱包也很爆炸，开局就卡签到题L，xwc打表发现规律，我上机敲了一下二进制。1个小时过签到。随后陷入卡题，这场题面真难懂，我跟zhl在F理解样例花了很久,XWC单开了B题。然后我上机去敲F题，最后面向样例，改了一下就过了F。这个时候3题。还要给M题开了。我曾想过很多种输的情况。唯独没有想到最后连M题的题面都看不懂，还是中文题面，3人对着一个中文题面硬控了1个多小时。最后破防打铁。我的第一站献给了郑州铁牌。&lt;/p&gt;
&lt;p&gt;本想着打铜了找jiangly签个名的
wangy与jiangly(算竞圈知名人物)
&lt;img src=&quot;img/wangy%20and%20jiangly.png&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;p&gt;对于我们这种学校，下半年几乎是无比赛打。这个时候开始了助力新生赛，这个烂摊子扔给了Dzy去做，主要我的教育形态跟他有所违背，我比较倾向于压力政策，对一些没有必要的事情，认为没有做的必要，dzy,xwc,就有点稳扎稳打的样子。我也就跟新生没什么交谈了。一直持续到寒假。这段时间大致就是做一些算法跟日常跟zhl诋毁，偶尔浅谈未来，聊聊二楼八卦。这个时期算是我们队数据上的巅峰状态了。&lt;/p&gt;
&lt;p&gt;这个阶段就一直持续到寒假，此时还是一年无牌选手。&lt;/p&gt;
&lt;p&gt;&amp;lt;div align=&quot;center&quot;&amp;gt;&lt;/p&gt;
&lt;h3&gt;大二下&lt;/h3&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;到寒假，今年寒假集体参与了牛客寒假训练营。&lt;/p&gt;
&lt;p&gt;回到学校后，就是激动人心的一群比赛事情要处理。先是选拔了24届的新生。我统筹最后一场新生赛的题目工作，这套题目难度很高，搬运了一群绿题，给新生造成了不小的压力，但是两个签到实际是很简单的，不应该两个签到题做到结束，我尽可能的避免比赛出线题目问题，最后2题签到rk1，这里只能对当时参与这场的新生说声抱歉，没考虑到中位数水平，最后的滚榜还是很有激情的，我本还想着等25年我也去做一下滚榜，但已经没有机会了额。&lt;/p&gt;
&lt;p&gt;学校之前没有打过邀请赛，今年wy属鼠跟我们研究了邀请赛的情况。我们拿到了武汉邀请赛的三个名额，西安邀请赛的一个名额。其实名额问题一直以来都是一个很大的问题，我想要找到一种方式，也看了杭电等一些学校在名额以及集训队的管理，这并不太适合我们这种草台班子，xj是22届队长，但之前许多原因以及24年省赛。我对他一直有偏见，我对他的实力一直很怀疑，主要他网络赛的一些代码存在 ai 嫌疑，而且他两年时间只打到省赛铜，还在考研。我的观念还是厉害的去上，不论辈分，不论身份，但是实在难找到一种相对公平的方式，那些有管理的集训队，对我们来说实在困难，所以名额这种东西只能无奈如同之前的情况，我们仍然做了一些挣扎，给了新生跟不练的老生比拼一点机会，虽然并不能做到公平。&lt;/p&gt;
&lt;p&gt;回到学校一段时间我的cf分数就到了1600分。&lt;/p&gt;
&lt;h4&gt;4.6郑轻校赛。&lt;/h4&gt;
&lt;p&gt;这是上半年的第一场，河南有些学校打星，有些就没打。我们是正式参赛队伍，这场是200队伍的规模。我们前期非常稳定开签到，后2个小时卡到结束。最后总榜第10，校外第8名,算是打个开门红。这场我发挥还算稳定。稳定度过前期题跟简单数论。后期就没任何贡献。主要简单的题目相对来说比较多一点，并没有体现这支队伍的问题。&lt;/p&gt;
&lt;p&gt;当时的榜单
&lt;img src=&quot;img/%E9%83%91%E8%BD%BB%E6%A0%A1%E8%B5%9B.png&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;p&gt;4.12蓝桥杯省赛。
&lt;strong&gt;省流：省一，仍然在中原工学院，机房的电脑比zueb都拉，鼠标滚轮坏的还不给我换，体验感拉爆了。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;4.19天梯赛，被一个栈模拟卡了一个多小时。这也决定了我之后对模拟的态度。国三结束。&lt;/p&gt;
&lt;p&gt;因为武汉邀请赛抢到了三个名额，然后我撮合了踢出xj，让gjz跟dzy,mjl去打武汉。&lt;/p&gt;
&lt;p&gt;最后一支队伍在群里随便一问。然后就组了三队。&lt;/p&gt;
&lt;p&gt;学校历年来没有打邀请赛的先例，所以报销的问题当然是没有了，zhl给我们干了9张火车的站票，一群人就这样一起去了武汉。&lt;/p&gt;
&lt;h4&gt;ICPC武汉邀请赛&lt;/h4&gt;
&lt;p&gt;武汉邀请赛的整体强度跟区域赛的难度已经没差多少了，很多区域赛的金牌队伍都在，在国家网安基地的华中科技大学，这对于我来说就是，农村人进城，可见这个时期的三本自尊还是非常强烈了。第一次出去这么远的比赛，赛前我们三个认为最差也不会打铁，这个队伍的问题也是从这里出现了，正式赛，我们找不到之前的文件夹开局20分钟才签上到，然后我们zhl去做构造，a掉之后，我跟xwc去一起看忘了是什么题，他的做法没给我讲清楚，我抢了他的机子，我的做法也没给他讲清楚，最后我卡根号分治，打铁出局。在此之前24下半年数据，以为邀请赛至少也会是个铜，但是我们太菜了。武汉邀请赛跟郑州邀请赛的强度差距太大了。其实这里我们这支队伍就已经出问题了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;img/ICPC%E6%AD%A6%E6%B1%89%E9%82%80%E8%AF%B7%E8%B5%9B.jpg&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;5.3 icpc西安邀请赛。&lt;/h4&gt;
&lt;p&gt;西安正好这几天放假，没想到那个校区这么偏僻，但是学校是真的大我们都没逛完。这是场400队的大场，而且非常容易拿到牌子。赛前我们还说如果拿牌子了好好玩一下。&lt;/p&gt;
&lt;p&gt;这场榜还是歪的。如果当时，我们分开看题，让xwc去看那个思维，这场是肯定能拿牌的。这场直接hack了三人开一题的策略。是完全的决策错误。而且最后封榜我a掉的那个题，也成为了本赛季我们队唯一的封榜a题。&lt;/p&gt;
&lt;p&gt;所以两场邀请赛。相当于去俩985被一群✌打，然后回去。两场铁后，我们队伍就停止了vp因为我这个时候心态已经崩了。我需要去调整心态了。&lt;/p&gt;
&lt;p&gt;西安邀请赛开幕式
&lt;img src=&quot;img/%E8%A5%BF%E5%AE%89%E9%82%80%E8%AF%B7%E8%B5%9B.jpg&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;5.11 icpc河南省赛。&lt;/h4&gt;
&lt;p&gt;面对前两场的失败。这一个星期我一直在调整自己的心态。我认为之前的一些原因心态炸裂很大方面是，我已经打了一年了，除了没资格打省赛，就是区域赛铁牌。这个拿牌执念太深了。今年的河南省赛在，商丘师范学院，发的衣服挺不错了，但是这场比赛的问题还是比较大，测评机太卡了。题目问题还很多。
我们赛时开始签到还是很顺利的，然后就是我的战犯操作了，我先时给凸包题看错了，然后上机，zhl还造错误样例，我就上机两个小时另外wa五发。然后zhl指出结构时凸包，这个时候已经两个多小时了，我心态已经无了。换题去了，xwc上机给大模拟开了。然后我就发现f题，有一种lca的感觉。想到之前我学过启发式合并的一种处理方法，就立马想到这个做法绝对是可以的。然后开了f题，算是赎罪了。之后三个人梭哈凸包卡到结束。如果当时我们拉上xwc一起看凸包，可能我们就g了。这或许就是西安的作用吧。赛后有惊无险的金牌尾巴。但是也并没有想象中的那么兴奋。可能这张金牌在好久好久之前，我们就已经当做自己的了。也完成之前给zhl说的“上机两小时，wa5发”。&lt;/p&gt;
&lt;p&gt;总之icpc河南来讲，就是又有报销，结果还好，虽然过程痛苦了一点。&lt;/p&gt;
&lt;p&gt;从武汉回来后我就学了一点怎么在linux去用脚本文件去编译cpp文件，还搞了一下   win批量运行脚本。感觉以后比赛vscode还是用脚本文件比较方便。其实脚本文件真的也挺好用的。主要之前省赛都是在win系统下的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;img/ICPC%E7%9C%81%E8%B5%9B%E9%87%91%E7%89%8C.jpg&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;CCPC郑州邀请赛，河南省赛&lt;/h4&gt;
&lt;p&gt;郑州邀请赛是在体育馆举办，体育馆的氛围比较好，这里有一个插曲，郑轻当时的场地小一些，李老师还来郑州经贸学院考察了场地。6.1儿童节当天，我们10点就去黄河科技学院，前面打的很多场都没有好好体验，我们去到黄科发现，三本之间亦有差距。我们在校内骑着共享电车游遍黄科，可惜没有西工大的有山有水。队服不知道为什么小了一个号码，蓝色的衣服我是感觉不是很好看，还有一个帽子，xwc戴上也是很有感觉，然后发现教练的衣服是白色的也就是说，今年ccpc的选手服是去年的教练服。xue老师还发了一张去年教练衣服，主教练正在热身。&lt;/p&gt;
&lt;p&gt;16：00热身赛。热身赛电脑非常的卡，测评机也是非常的卡，一直在ping。CPH卡到爆炸，我们都没编译直接扔上去跑了。&lt;/p&gt;
&lt;p&gt;热身结束后，吃完一卡通的所有钱，然后我们就回去了，说来ccpc结束第二天就是2门考试，那是一点没有复习。晚上回去后，我日常跟wwz打劫，然后看会知乎。这天晚上我还看了看我之前的代码。想着上回没拿线性基这回万一出了怎么办。但想着前些天我打印的500页的繁凡的板子，这回板子应该是全的，虚惊一场。&lt;/p&gt;
&lt;p&gt;第二天我们早7点起来，xwc这回没有睡过头。我们到黄科，xwc没吃早饭想买瓶能量饮料，发现黄科没卖的。xue老师跟wangy跑去给我们买了3瓶饮料。这里xwc进赛场尽然不带身份证，还好没有什么影响。体育场真是好评，这种大赛场才是邀请赛应有的样子。&lt;/p&gt;
&lt;p&gt;然后比赛我的战犯行为开始了，一开始我手上有着我的main函数模板，我不知道我在干什么我不照着板子上去敲，盲目的敲完main函数。之后我就去看a题了，发现a题意是很好理解了，但是没有一点想法。Xwc,zhl去写了签到，我在看m,然后我上去写m。想着m过的很多应该不会卡map，我用了两此的mp[x] == 1的判断我知道这个样子的判断时间不是很友好。然后t了一发。zhl说给map的判断换了，我换成mp.find(）！=mp.end()。我这个时候不知道在干什么开了个临时变量没初始化，然后又t了。然后发现我的main函数没有引用IOS 对的IOS我已经在全局宏定义了但是我没有引用这个宏。加上后就a掉了。这个时候我还对zhl说不会就因为我这三发罚时把(照应后文)。&lt;/p&gt;
&lt;p&gt;xwc去写了迷宫跑路。我跟zhl去看构造树。我按照zhl的构造结构，推理了一个二元一次方程组，解x+y+1=n,x+(y+1)/2=y+1 ==&amp;gt;x=n/3 。然后得到了3 * k，3 * k - 1的做法。之后菊花树在加一个节点得到了3*k-2的做法。然后上去对前4个特判之后按照我的数学推论a掉了这个题。我只记得xwc在旁边也叫了他的战犯行为，他有一发没初始化然后wa了。随后不知道他改了什么a掉了。&lt;/p&gt;
&lt;p&gt;看了下榜单N+2同校的了。这个时候我想到了e的一种字典树的做法，然后上去乱搞了一下我跟xwc在争论字典树数组大小的问题，我之前在做字典树被卡过内存，所以我字典树开了N&lt;em&gt;40的大小。我想着给long long 关了这个内存肯定是不会超的。然后xwc力争内存，我改成了N&lt;/em&gt;10，又发现又n*(n+1)/2这个数据给long long 开了。(实际上，这个26个字母的字典树开的内存跟串的长度有关)交上一发没想到尽然a掉了。&lt;/p&gt;
&lt;p&gt;然后发了马斯卡彭，这回吃爽了，我们吃着马斯卡彭看了下榜单。看河南榜第7.总榜49.发现再a一题。双金了。也就是说如果开局，我板子在main函数引用IOS，省赛就有金牌了。&lt;/p&gt;
&lt;p&gt;这个时候我看了b题发现是期望dp，n^2的时间复杂度，但是我已经晕了组合数学，看到c题，我想到了一种珂朵莉树+权值线段树的做法，大概就是在珂朵莉树上操作区间修改，然后在权值线段树上处理珂朵莉树的信息更替。修改的时间是2*logn。权值线段树的查询是O（1)的常数。我看了一下我好久之前自己的板子我发现尽然没有带珂朵莉的板子。又翻了一下繁凡的板子也没有。感觉有哭有😀。&lt;/p&gt;
&lt;p&gt;上回icpc省赛没带线性基(虽然线段树上+线性基的时间会超)，这回没带珂朵莉树。然后没办法了只能用一颗线段树+权值树状数组处理这个过程了。看到是多组样例，对这种选手肯定是class包装一下。搞完了150行代码。然后发现权值树状数组好像不能处理区间max。xwc在旁边看我一愣一愣了，可以给权值树状数组改成线段树再修修bug但是还有30分钟，其实是可以拼一下的，虽然大概率我的第一棵线段树替换珂朵莉树的效果感觉有问题。&lt;/p&gt;
&lt;p&gt;然后看榜单省赛已经刚好掉出金牌区了，看了眼同校的都在卡构造跟迷宫跑路。计算了一下，大概就是省赛银首+邀请赛银了。然后预期的跟结果是一样的。这个时间对应我的3发签到罚时，发现如果少一发罚时我们就有省赛金牌了，哈哈正中开始的时候我对zhl说的三发罚时。&lt;/p&gt;
&lt;p&gt;这里反映了我们队的一个严重的缺陷，坐不住，明明还有两个多小时的时间，完全可以在去梭哈一题 。&lt;/p&gt;
&lt;p&gt;或许放到武汉前我可能会因为我的战犯三发罚时感到苦恼，但现在尽然也没什么大波动了。赛后我拿到珂朵莉树的板子做了一下，发现我珂朵莉树+权值线段树，的想法跟题解一毛一样。赛后回去我就过c题的痛苦感🤣，如果带珂朵莉树，可能就双金了。&lt;/p&gt;
&lt;p&gt;至少这场比赛打的还挺欢乐的。我们在赛场拍了最后的合照，或许这就是阿比盖尔之花的最后一场省赛…………&lt;/p&gt;
&lt;p&gt;好吧现在考试结束了。原本以为郑州打完就结束了，但是ccpc福建邀请赛名额也拿到了，后面还有百度之星，蓝桥杯国赛。那只能准备福建了😄
&lt;img src=&quot;img/CCPC%E9%83%91%E5%B7%9E%E9%82%80%E8%AF%B7%E8%B5%9B(%E6%B2%B3%E5%8D%97%E7%9C%81%E8%B5%9B).jpg&quot; alt=&quot;alt text&quot; /&gt;
&lt;img src=&quot;img/%E5%A5%96%E7%89%8C1.jpg&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;CCPC福建邀请赛&lt;/h4&gt;
&lt;p&gt;省赛结束后。是一场线上的福建邀请赛。确实省了不少开销。开局他俩梦游了。前期3个小时，我单开5个前期题。然后我就睡着了。他俩开两个题。来到银牌区前列。最后我有点BUG没调出E题。遗憾打银。&lt;/p&gt;
&lt;p&gt;然后我开始入海教培了。主要wy考完研没事干下海教培了。我也想挣点快钱。dzy紧跟着也下海做教培了。这里我几乎开始摆烂吃老本了。只学了个强联通分量，割边，缩点，一些数论。7月份在家。这段时间非常的折磨，这个阶段正在接受意识形态的摧残，反正就做点教培，训练也少了。主要为对区域赛已经没心气了，zhl精力放到考研去了，我下海教培了，xwc不知道在干嘛。整个7月份就是浑浊状态，总体上一种颓废。&lt;/p&gt;
&lt;p&gt;8月份回学校，我开始全职教培了，但训练量比7月份多不少。xwc开始猛攻训练。这里我还挺对不起xwc的，这个时候我的状态太差劲了，如果当时我没做教培，精力放到训练上，后面我们也许就不会这么狼狈。&lt;/p&gt;
&lt;p&gt;8月份我跟gjz交流的多了，他接触网络的时间很早，有很多经验，但都不深刻。我俩经常聊一些不能讲的东西。每天就是早8去2楼，中午来个小汉堡。以前我是感觉小汉堡没什么吃的，但8月份吃了一个月的小汉堡。这段时间总结来说就是做教培圈钱了。&lt;/p&gt;
&lt;p&gt;所有比赛结束，薛老师奖励。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;img/%E8%96%9B%E8%80%81%E5%B8%88%E5%A5%96%E5%8A%B1.jpg&quot; alt=&quot;alt text&quot; /&gt;
2025CCPC郑州邀请赛（河南省赛）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;img/CCPC%E9%83%91%E5%B7%9E%E9%82%80%E8%AF%B7%E8%B5%9B(%E6%B2%B3%E5%8D%97%E7%9C%81%E8%B5%9B).jpg&quot; alt=&quot;alt text&quot; /&gt;
wangy打LOL&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;img/wangy%E6%89%93LOL.jpg&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div align=&quot;center&quot;&amp;gt;&lt;/p&gt;
&lt;h3&gt;大三上&lt;/h3&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;开学之后，在网络赛前夕，我跟gjz晚上会经常开黑打cf，虽然效果不如我自己打。但至少是难得晚上还能找到打cf的了。几乎就是做几个签到题就下班了。一场比赛都打不到结束，完全没有训练效果。实际从大一下开始，学校的事情我就没怎么搞了，慢慢开始逃课，直到现在我也是偶尔去上上课了，这里点名感谢wwz同学，帮我答到，如果没有wwz帮我做学校的一些事情，感觉我可以被劝退了。&lt;/p&gt;
&lt;p&gt;这个时候我还时长在二楼摸鱼，还想着做一场 “集训队劝退赛“，给一些名存实亡的大二，大三的踢出集训队。虽然我也不训了，正好之前&quot;金鸡毛杯&quot;还有些费案的题目，可以利用一下。当时还跟gjz，cjr一起玩了《失落城堡》。&lt;/p&gt;
&lt;p&gt;网络赛前夕，dzy，cjr，他们去打了南昌，感觉出省打的二楼的状态都太差劲了。他们也是坠机了。&lt;/p&gt;
&lt;p&gt;然后ICPC网络赛第一场。被一个分层图卡常了，题目的数据我的时间复杂度可以通过的。但是被卡了。结束在qoj提交发现过了。这场比赛题目被骂的很惨。卡常数，实际预期解的时间就是n方的，但是给的数据，我的做法时间复杂度是可以过的。赛后有队伍应该做优化卡过去了。&lt;/p&gt;
&lt;p&gt;结束end&lt;/p&gt;
&lt;p&gt;一个消息，二楼散了，现在我只有晚上的位置去了。所有的事情并没有按照之前的假设去进行，在一些复杂的事情下,全部滚回到了一楼。我已经能想到之后的样子了。所以我26年选拔赛滚榜的愿望也碎了。我的劝退场还没有开始，我被劝退了。&lt;/p&gt;
&lt;p&gt;随后来的就是第二场网络赛。
第二场网络赛纯纯数学场，XWC大手去写了二分+容斥，我推公式用组合数过了第二个。然后猜了个结论。最后三题结束。整体综合下来就是g了。&lt;/p&gt;
&lt;p&gt;CCPC网络赛，算起来似乎正是二楼的结束时间了。我全程在梦游，让xwc一个人在单挑，没打过隔壁gjz，外卡的事情扔给他们队了。&lt;/p&gt;
&lt;p&gt;然后就是ICPC整外卡的了，由于学校从来没有打过区域赛所以我们算是吃上红利了，搞到了西安站跟沈阳站的外卡。&lt;/p&gt;
&lt;p&gt;这里分享一下我们&lt;strong&gt;外卡的作文&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;尊敬的ICPC组委会、承办方老师们：

您们好！

我校长期重视大学生程序设计竞赛的开展，积极组织学生参加 ICPC 省赛，邀请赛。现特向组委会申请外卡名额。
	我校自成立 ACM 集训队，持续开展算法竞赛训练，积极参与各类赛事。近年来，学校逐步完善了竞赛支持体系，设立
专项训练计划，提供必要经费，并鼓励更多学生广泛参与算法竞赛。但是至今我校尚未进入过 ICPC 区域赛，在 2025 年 ICPC、
网络赛中，第一场校排名为 252 名，第二场为 193 名，合并排名 240 名，创造了我校迄今为止的最佳成绩，但仍然距离获取名
额有些差距。我校至今未能进入 ICPC 区域赛，参赛同学对此深感遗憾。
	当前学校主力队员多为大三、大四学生，也都有三年的比赛经历，受升学与毕业压力影响，未来将难以继续坚持至 2026 年网络赛。
若能获得本赛季外卡名额，将是他们最后一次在 ICPC 赛场上展示实力的宝贵机会，同时也有助于激励更多低年级同学投身竞赛。
	学校将继续全力支持 ICPC 中国赛区的各项工作，积极组织参赛队伍，严格遵守竞赛相关规定，认真备赛，文明参赛。若能获得外卡
机会，我校必将倍加珍惜，力争在赛场上展现风采。恳请组委会考虑我校申请，给予外卡参赛资格。我们真诚期盼能在 ICPC 区域赛中展示
风采，并通过参赛进一步推动学校算法竞赛的发展。
	再次衷心感谢各位老师在百忙之中审阅我们的申请！祝2025年ICPC亚洲区域赛（xx站）圆满成功！
此致
	敬礼！
     
申请学校：郑州经贸学院
联系方式：xxx
日期: xxxxxxxxx

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;拿到西安外卡&lt;/strong&gt;，从暑假结束，基本就没做题了，做的题也都没什么训练价值，我已经是摆烂状态了，平常没事跟gjz去一楼学学项目，学学英语了。平时可以见到的人慢慢的都看不到了，大家都各忙各的事情去了。西安前我也并没有训多少，只是写了几个水题而已，然后做做教培。这个时候觉得虚拟币未来很有看头。&lt;/p&gt;
&lt;h4&gt;ICPC区域赛西安&lt;/h4&gt;
&lt;p&gt;时间来到第50届国际大学生程序设计竞赛亚洲区域赛。西安我们拿牌子的概率是非常的大的，跟上半年的邀请赛是一样的。还是西北工业大学的长安校区。前瞻我们还在铜尾徘徊。&lt;/p&gt;
&lt;p&gt;赛前，我跟zhl为了省点钱，我俩通宵去做火车，次天早少6点到西安火车站，就打车去秦龙酒店，到11点去西北工业大学，然后去听华为讲座，听了俊杰Charles的分享。下午的热身赛，这个时期我已经研究好比赛的环境了，随手一搞，然后回酒店。5月份来过西北工业大学，所以没太多好逛的。&lt;/p&gt;
&lt;p&gt;次日开赛，zhl去翻译题目，xwc很快的去签到，然后第二题我先是没有思考特殊情况，莽了一把，wa了一发很快发现hack情况，然后构思了一些想到了一个二分的做法，ac掉之后。
zhl给我讲了第三个题，我模拟一下样例，很快发现一个做法，将点权转换成边权，这个过程需要先维护每一个节点所有儿子的最小点权，次小点权，然后此点跟父亲的连边的权值就是其一，做一遍LCA的处理，单次查询就是一个log级别的倍增做法，我给zhl讲了一下，很认可我的做法，然后xwc似乎有点不理解，我感觉我的做法很正确，然后上机乱搞一下，写了150行左右，然后漏掉了一个树向上递推的情况，改成树上跑dp做边权，然后一发A了，之后还有两个题目，我看了xwc在做的构造，乱搞了一下没有思路，去看了有向基环树森林的题，想到了一个做法，跑拓扑排序，维护每一个点的。总的时间复杂度是一个线性了，跟zhl讲了一下，他也没听明白的推的式子，我上机搞了一下，样例都过了，交后wa了。xwc去做了他那个题，但也被卡了。结束后又是同样的剧情。&lt;/p&gt;
&lt;p&gt;西安区域赛现场&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;img/%E8%A5%BF%E5%AE%89%E5%8C%BA%E5%9F%9F%E8%B5%9B.jpg&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;队伍问题。&lt;/h4&gt;
&lt;p&gt;这个时间都冷静了一下回顾西安的情况，西安的强度是所有赛站最低的,但依旧打铁了，zhl这个时候也不想打了，如果又沈阳让换人，实际我很早之前在网络赛就发现zhl的问题了，从去年郑州开始，zhl的精力都放在考研了，牛客寒假还能打打，从寒假回来后，我看他的账号就没有在做题了，在上半年还能有些作用。网络赛。西安站，4场比赛他甚至连键盘都没有去摸。实际也时我俩强行拉他打的，确实也没有人了。这个问题时三本无法解决的，我已经想沈阳站给zhl踢了。换人如果在中文的情况下，肯定比现在的三个人打压力好多了，主要他把题面一翻译全程都在梦游，样例也不造一个。&lt;/p&gt;
&lt;p&gt;其实主要还是我太菜了，根本没有铜牌实力，情绪发泄到队伍问题。&lt;/p&gt;
&lt;p&gt;zhl作为22届主力队员。就算不练也不至于热身赛键盘都不去碰一下。当时感觉放他去考研更好。现在看他，他还挺勇敢的，愿意在我俩身上下金币赌注去赌区域赛拿牌。&lt;/p&gt;
&lt;p&gt;wy，Mr.xue应该也发现我心态炸裂了，Mr.xue还给我开个专场开导了一下。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;省流没有踢zhl。&lt;/strong&gt;&lt;/p&gt;
&lt;h6&gt;沈阳外卡最后的机会，新队名“最后的阿比盖尔之花”&lt;/h6&gt;
&lt;p&gt;沈阳拿到外卡了，这是我们最后的机会，静下心去想，现在能做翻译题目且曾经有水平的只有zhl能打了。我们不敢去赌沈阳站有中文。最后队伍敲定，nszkay,xwc,zhl组成&lt;strong&gt;最后的阿比盖尔之花&lt;/strong&gt;，结束我的ACMer生涯。&lt;/p&gt;
&lt;h4&gt;ICPC区域赛沈阳&lt;/h4&gt;
&lt;p&gt;已经熟悉了去外面打比赛的流程。沈阳火车要一天。我们准备飞机过去。我跟xwc 在周五到。然后在酒店玩了一天。周六去东北大学报道，领了衣服，是个浅色的马甲，只做了华为套圈的活动，后面华为宣传大会也没去，签到有点晚了，没有领到隔壁非凸科技的fufu玩偶。沈阳站有400支队伍，强度跟西安做一桌，这样看来，今年的区域赛就西安跟沈阳的强度是最低的。&lt;/p&gt;
&lt;p&gt;晚上热身赛给我干蒙了，热身赛有计算几何，交互题，通信题。一般热身赛出计算几何是不是意味着计算几何是可作的题。最难不过银牌题吧。我对交互题的逻辑是很不理解，通信题知道最后才知道他这个流程的情况。如果这三题都是铜牌题，那这场就完了。&lt;/p&gt;
&lt;p&gt;国内第一次通信题出现在了沈阳站，虽然这场的通信题是一个非常hard的题。&lt;/p&gt;
&lt;p&gt;晚上吃过饭zhl也来了。热身赛已经确定有中文题面了。实际早在沈阳群发队伍信息的时候我就在别的群知道有中文题面但不敢确定。&lt;/p&gt;
&lt;p&gt;正式赛开始。我去调环境。zhl跟xwc去找了签到在10min a掉后签到后，我跟zhl去看B题，我们推出一个公式。可以前缀和处理好，常数时间得到，然后我提出这个公式可能有抛线性质。去做一个三分。时间上也允许(实际上线性求就行了)。xwc在看M题,然后xwc下机，我上去写B题，让zhl给每一种层数推出来。我调试了一会A掉后，xwc上去写M题，很快A掉。在90分钟左右，3题罚时191，随后看K题，发现一点做不了，完全没有思路，然后开始摆烂，在封榜前170名左右，还有70名的下降空间，感觉K题是脑电波题目，封榜后我让xwc去看F题，感觉可以做，对了一下思路：&lt;/p&gt;
&lt;p&gt;如果ab点没有边，可让与ab点相邻的边指向他们其余边随便。
反知，如果AB点在环上，让环顺时针或者逆时针指向，其余边指向环，这个可以用拓扑排序
如果A在环，B不在，让B指向A，让让环顺时针或者逆时针指向，然后跟A,B有关的边都指向A,B，做拓扑排序。
如果都不在，判断A,B谁的一次可以出现环，加入B侧有环，然A-&amp;gt;B，反之A测有环B-&amp;gt;A ,反之无解。&lt;/p&gt;
&lt;p&gt;代码比较难实现，只有30分钟不到。码了200行，吃的很难受，最后，AB环方向问题是在太难写放弃。结束看到下面都在交F题，认为F题是榜单歪了。有点担心。赛后看群发现，，k 题太脑电波了。大家都是F有点思路，去写了F题，但F是一种刺史大模拟，代码很不好写，最后过的不多，终榜199名，铜了。在赛场进行的滚榜，我们没有看到最后的滚榜，赶飞机，就提前走了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;img/%E6%B2%88%E9%98%B3%E5%A5%96%E7%89%8C.jpg&quot; alt=&quot;alt text&quot; /&gt;
&lt;img src=&quot;img/%E5%A5%96%E7%89%8C1.jpg&quot; alt=&quot;alt text&quot; /&gt;
&lt;img src=&quot;img/%E7%BB%93%E6%9D%9F.jpg&quot; alt=&quot;alt text&quot; /&gt;&lt;/p&gt;
&lt;p&gt;补：回学校一段时间后，我们的报销下来了，一直以来，只有icpc河南省赛有过报销，其余的ccpc省赛，邀请赛，区域赛，icpc邀请赛都没有报销。前前后后打比赛也花了几千块钱了，xue教练最后给我们争取到了大三上的两场icpc区域赛报销，让我吃惊的是，学校对省赛的支持的比赛一直有一个一天90元的比赛补助。也是很吃惊了。看来我大经贸对icpc还是比较认可的，还能跟蓝桥杯做一桌。&lt;/p&gt;
&lt;p&gt;遥看我两年的算法竞赛生涯，到如今这个现状，最后结果没当时想的如此，没有天赋注定了在这个赛场走不远,我现在的状态以及环境已经不支持我继续坚持下去了。我已经够幸运了，还能有几个队友。在这里能遇到二楼这个团队，在我这个级别的学校，大部分人或许连集训队都没有，甚至组不到一个队伍，没有一个训练场所。也m了很久zueb,现在回想起来，感慨万千。两年来去过很多学校打过很多场比赛，至少我的大学生涯献给算法竞赛，很感谢zueb对我们支持。从新生赛一起到，省赛，区域赛。遇到很多不同班级，不同专业的同学。我的故事开始一场新生赛，在沈阳站结束。我仍然希望未来，在zueb当某几个新人，还能讨论到二楼打出的成绩，就像好久前的我们那样。&lt;/p&gt;
&lt;p&gt;感谢我的队友xwc，zhl。感谢xue教练，wy,xj,dzy,mjl,gjz,等等二楼的各位。感谢wwz。感谢zueb对二楼一直以来的支持。&lt;/p&gt;
&lt;p&gt;有缘了ACM，Nszkay退役了····&lt;/p&gt;
</content:encoded></item><item><title>Codeforces_Global_30</title><link>https://fuwari.vercel.app/posts/codeforces_global_30/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/codeforces_global_30/</guid><pubDate>Fri, 19 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Codeforces Global Round 30 (Div. 1 + Div. 2)&lt;/h1&gt;
&lt;p&gt;链接
https://codeforces.com/contest/2164&lt;/p&gt;
&lt;p&gt;4题，Ranking 1.5k&lt;/p&gt;
&lt;h2&gt;A题&lt;/h2&gt;
&lt;p&gt;只需要判断数组是否存在k,或者存在&amp;lt;k,也存在&amp;gt;k,做一下判断&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;void solve()
{
    int n;cin&amp;gt;&amp;gt;n;
    ve&amp;lt;int&amp;gt;a(n+1);
    for(int i=1;i&amp;lt;=n;i++) cin&amp;gt;&amp;gt;a[i];
    int x;cin&amp;gt;&amp;gt;x;
    int op=0,id1=0,id2=0;
    for(int i=1;i&amp;lt;=n;i++)
    {
        if(a[i]==x) op=1;
        if(a[i]&amp;gt;x) id1=1;
        if(a[i]&amp;lt;x) id2=1;
    }
    if(op||(id1&amp;amp;&amp;amp;id2))
    {
        cout&amp;lt;&amp;lt;&quot;Yes\n&quot;;
    }
    else cout&amp;lt;&amp;lt;&quot;No\n&quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;B题&lt;/h2&gt;
&lt;p&gt;猜结论，猜测，出现的概率很大，对第i个位置，暴力向后跑100次&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;void solve()
{
    int n;cin&amp;gt;&amp;gt;n;
    ve&amp;lt;int&amp;gt;a(n+1);
    for(int i=1;i&amp;lt;=n;i++) cin&amp;gt;&amp;gt;a[i];
    ve&amp;lt;int&amp;gt;f;
    for(int i=1;i&amp;lt;=n;i++)
    {
        if(a[i]%2==0) f.push_back(a[i]);
    }
    if(f.size()&amp;gt;=2) 
    {
        cout&amp;lt;&amp;lt;f[0]&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;f[1]&amp;lt;&amp;lt;&apos;\n&apos;;
        return ;
    }
    else 
    {
        for(int i=1;i&amp;lt;=n;i++)
        {
            for(int j=i+1;j&amp;lt;=min(n,i+100);j++)
            {
                if((a[j]%a[i])%2==0)
                {
                    cout&amp;lt;&amp;lt;a[i]&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;a[j]&amp;lt;&amp;lt;&apos;\n&apos;;
                    return ;
                }
            }
        }
    }
    cout&amp;lt;&amp;lt;&quot;-1\n&quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;C题&lt;/h2&gt;
&lt;p&gt;做法比较麻烦。肯定有更简单的做法&lt;/p&gt;
&lt;p&gt;对数组a扔到小顶堆。然后数组，b,c做按照b升序的排序。
然后线段树维护数组c的区间最大值，以及最大值的下标，优先用数组a最小的，然后在数组b二分出a所能击败的位置id，查询区间[1,id]的最大值，更新小顶堆。随后修改击败位置的下标。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;struct my_tree
{
    // 区间和
    #define kl (k&amp;lt;&amp;lt;1)
    #define kr (k&amp;lt;&amp;lt;1|1)

    struct node
    {
        int l, r, sum,id;
    };

    vector&amp;lt;node&amp;gt; tree;
    my_tree(int x)
    {
        tree = vector&amp;lt;node&amp;gt;(x*4+10);
    }

    void pushup(node&amp;amp; kk, const node&amp;amp; kkl, const node&amp;amp; kkr)
    {
        if(kkl.sum&amp;gt;kkr.sum) kk.sum=kkl.sum,kk.id=kkl.id;
        else kk.sum=kkr.sum,kk.id=kkr.id;
    }
    void pushup(int k)
    {
        pushup(tree[k], tree[kl], tree[kr]);
    }

    void build(int k, int l, int r, ve&amp;lt;int&amp;gt;&amp;amp; a)
    {
        tree[k]={l,r};
        if (l == r)
        {
            tree[k].sum = a[l];
            tree[k].id=l;
            return;
        }
        int mid = (l + r) &amp;gt;&amp;gt; 1;
        build(kl, l, mid, a);
        build(kr, mid + 1, r, a);
        pushup(k);
    }

    // 区间修改 // 区间替换 
    void update(int k, int l, int r, int val)
    {
        if (tree[k].l &amp;gt;= l &amp;amp;&amp;amp; tree[k].r &amp;lt;= r)
        {
            tree[k].sum = val;
            return;
        }
        int mid = (tree[k].l + tree[k].r) &amp;gt;&amp;gt; 1;
        if (l &amp;lt;= mid) update(kl, l, r, val);
        if (r &amp;gt; mid) update(kr, l, r, val);
        pushup(k);
    }

    node query(int k, int l, int r)
    {
        if (l &amp;lt;= tree[k].l &amp;amp;&amp;amp; tree[k].r &amp;lt;= r) return tree[k];
        int mid = (tree[k].l + tree[k].r) &amp;gt;&amp;gt; 1;

        node kkl = {tree[k].l, mid,-1,-1};
        node kkr = {mid + 1, tree[k].r,-1,-1};
        node kk = {tree[k].l, tree[k].r,-1,-1};

        if (l &amp;lt;= mid) kkl = query(kl, l, r);
        if (r &amp;gt; mid) kkr = query(kr, l, r);
        pushup(kk, kkl, kkr);
        return kk;
    }
};
void solve()
{
    int n,m;cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;
    priority_queue&amp;lt;int,ve&amp;lt;int&amp;gt;,greater&amp;lt;&amp;gt;&amp;gt;pq;
    for(int i=1;i&amp;lt;=n;i++) 
    {
        int x;cin&amp;gt;&amp;gt;x;
        pq.push(x);
    }
    ve&amp;lt;pii&amp;gt;a(m+1);
    for(int i=1;i&amp;lt;=m;i++) cin&amp;gt;&amp;gt;a[i].first;
    for(int i=1;i&amp;lt;=m;i++) cin&amp;gt;&amp;gt;a[i].second;
    function&amp;lt;bool(pii,pii)&amp;gt;cmp=[&amp;amp;](pii x,pii y)
    {
        if(x.first!=y.first) return x.first&amp;lt;y.first;
        return x.second&amp;gt;y.second;
    };
    sort(a.begin()+1,a.end(),cmp);
    ve&amp;lt;int&amp;gt;b(m+1),c(m+1);
    for(int i=1;i&amp;lt;=m;i++) b[i]=a[i].first,c[i]=a[i].second;
    my_tree te(m+1);
    te.build(1,1,m,c);//
    int ans=0;
    // for(int i=1;i&amp;lt;=m;i++) cout&amp;lt;&amp;lt;b[i]&amp;lt;&amp;lt;&quot; \n&quot;[i==m];
    // for(int i=1;i&amp;lt;=m;i++) cout&amp;lt;&amp;lt;c[i]&amp;lt;&amp;lt;&quot; \n&quot;[i==m];
    while(pq.size())
    {
        int x=pq.top();pq.pop();
        int id=upper_bound(b.begin()+1,b.end(),x)-b.begin();
        id--;
        if(id&amp;lt;=0) continue;
        auto [l,r,sum,ip]=te.query(1,1,id);
        // cout&amp;lt;&amp;lt;1&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;id&amp;lt;&amp;lt;&apos; &apos;&amp;lt;&amp;lt;sum&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;ip&amp;lt;&amp;lt;&apos;\n&apos;;
        if(sum&amp;gt;0) 
        {
            pq.push(max(x,sum));
        }
        if(sum&amp;gt;=0) 
        {
            te.update(1,ip,ip,-1);
            ans++;//
        }
    }
    cout&amp;lt;&amp;lt;ans&amp;lt;&amp;lt;&apos;\n&apos;;

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一个更简单的做法，可以对c == 0的放到一个集合中，然后先去操作&amp;gt;0的，优先选择b小的，在现有的可重集合二分查找第一个可以击败b的，去更新
最后在对c==0的数组做操作。这样可以简化一下线段树的码量&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;void solve()
{
    int n,m;cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;m;
    ve&amp;lt;int&amp;gt;a(n+1),b(m+1),c(m+1);
    int cnt0=0,cnt1=0;
    for(int i=1;i&amp;lt;=n;i++) cin&amp;gt;&amp;gt;a[i];
    for(int i=1;i&amp;lt;=m;i++) cin&amp;gt;&amp;gt;b[i];
    for(int i=1;i&amp;lt;=m;i++) cin&amp;gt;&amp;gt;c[i];
    ve&amp;lt;int&amp;gt;id0,id1;
    for(int i=1;i&amp;lt;=m;i++)
    {
        if(c[i]==0) id0.push_back(i);
        else id1.push_back(i);
    }
    auto cmp=[&amp;amp;](int l,int r)-&amp;gt;bool
    {
        if(b[l]!=b[r]) return b[l]&amp;lt;b[r];
        return l&amp;lt;r;
    };
    sort(id0.begin(),id0.end(),cmp);
    sort(id1.begin(),id1.end(),cmp);
    multiset&amp;lt;int&amp;gt;se;
    for(int i=1;i&amp;lt;=n;i++) se.insert(a[i]);
    int ans=0;
    for(int k=0;k&amp;lt;id1.size();k++)
    {
        int i=id1[k];//优先拿出较小的b。
        auto it=se.lower_bound(b[i]);//找第一个大于等于他的a
        if(it==se.end()) break;
        int x=*it;//
        se.erase(it);
        x=max(x,c[i]);
        se.insert(x);
        ans++;
    }
    // for(auto x:se) cout&amp;lt;&amp;lt;x&amp;lt;&amp;lt;&quot; &quot;;
    // cout&amp;lt;&amp;lt;&apos;\n&apos;;
    // cout&amp;lt;&amp;lt;ans&amp;lt;&amp;lt;&apos;\n&apos;;
    for(auto i:id0)
    {
        auto it=se.lower_bound(b[i]);
        if(it==se.end()) break;
        se.erase(it);
        ans++;
    }
    cout&amp;lt;&amp;lt;ans&amp;lt;&amp;lt;&apos;\n&apos;;

}

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;D题&lt;/h2&gt;
&lt;p&gt;s&amp;lt;sup&amp;gt;&apos;&amp;lt;/sup&amp;gt;[i]=s[i-1] || s&amp;lt;sup&amp;gt;&apos;&amp;lt;/sup&amp;gt;[i]=s[i]
得到i位置一定由&amp;lt;i前面的位置更新，所以优先从后向前去考虑满足第i个位置前提下，如何满足&amp;lt;i的位置，如果第下标l&amp;lt;=i位置满足s[l]=t[i],这样i位置可以由l位置更新得到，此时记录[l,i]区间，对于i-1,的更新一定由&amp;lt;l的位置得到。&lt;/p&gt;
&lt;p&gt;处理好每一个s[i]满足等于t[i]由l位置更新。这个操作可以nlogn的做法得到。整个s =&amp;gt; s&amp;lt;sup&amp;gt;&apos;&amp;lt;/sup&amp;gt; =&amp;gt; t的操作次数就是$max_{i=1}^{n}$(i-l)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;void solve()
{
    int n,k;cin&amp;gt;&amp;gt;n&amp;gt;&amp;gt;k;
    ve&amp;lt;ve&amp;lt;int&amp;gt;&amp;gt;MP(27);
    string s,t;cin&amp;gt;&amp;gt;s&amp;gt;&amp;gt;t;
    for(int i=0;i&amp;lt;n;i++) MP[s[i]-&apos;a&apos;].push_back(i);
    ve&amp;lt;pii&amp;gt;f;
    int ls=n-1;
    for(int i=n-1;i&amp;gt;=0;i--)
    {
        if(MP[t[i]-&apos;a&apos;].size()==0)
        {
            cout&amp;lt;&amp;lt;-1&amp;lt;&amp;lt;&apos;\n&apos;;
            return ;
        }
        int id=upper_bound(MP[t[i]-&apos;a&apos;].begin(),MP[t[i]-&apos;a&apos;].end(),min(i,ls))-MP[t[i]-&apos;a&apos;].begin();
        id--;
        if(id&amp;lt;0) 
        {
            cout&amp;lt;&amp;lt;-1&amp;lt;&amp;lt;&apos;\n&apos;;
            return ;
        }

        id=MP[t[i]-&apos;a&apos;][id];//值
        ls=min(ls,id);
        if(id&amp;lt;i) f.push_back({id,i});//id---&amp;gt;i;
    }
    int cha=0;
    for(int i=0;i&amp;lt;f.size();i++)
    {
        auto [l2,r2]=f[i];
        // cout&amp;lt;&amp;lt;l2&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;r2&amp;lt;&amp;lt;&apos;\n&apos;;
        cha=max(r2-l2,cha);
    }
    if(cha&amp;gt;k)
    {
        cout&amp;lt;&amp;lt;-1&amp;lt;&amp;lt;&apos;\n&apos;;
        return ;
    }
    cout&amp;lt;&amp;lt;cha&amp;lt;&amp;lt;&apos;\n&apos;;
    while(f.size())
    {
        ve&amp;lt;pii&amp;gt;h;
        for(auto [l,r]:f)  
        {
            // cout&amp;lt;&amp;lt;l&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;l+1&amp;lt;&amp;lt;&quot;\n&quot;;
            // swap(s[l],s[l+1]);
            s[l+1]=s[l];
            l++;
            if(l&amp;lt;r) h.push_back({l,r});
        }
        cout&amp;lt;&amp;lt;s&amp;lt;&amp;lt;&apos;\n&apos;;
        f=h;
        // ends;
    }
    // ends;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;E题&lt;/h2&gt;
&lt;p&gt;没看，并查集，重构树，最近公共祖先&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;待施工&lt;/strong&gt;&lt;/p&gt;
</content:encoded></item><item><title>冒泡排序</title><link>https://fuwari.vercel.app/posts/nszkay_2/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/nszkay_2/</guid><pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;冒泡排序&lt;/h1&gt;
&lt;p&gt;为什么有这个呢，面经&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;oi wiki链接&lt;/strong&gt;
https://oi-wiki.org/basic/bubble-sort/&lt;/p&gt;
&lt;h2&gt;冒泡排序原理&lt;/h2&gt;
&lt;p&gt;原理：&lt;/p&gt;
&lt;p&gt;比较两个相邻的元素，符合要求（看自己的需求是从小到大，还是从大到小）即交换两个元素的位置。&lt;/p&gt;
&lt;h2&gt;算法步骤&lt;/h2&gt;
&lt;p&gt;比较相邻元素：从列表的第一个元素开始，比较相邻的两个元素。&lt;/p&gt;
&lt;p&gt;交换位置：如果前一个元素比后一个元素大，则交换它们的位置。&lt;/p&gt;
&lt;p&gt;重复遍历：对列表中的每一对相邻元素重复上述步骤，直到列表的末尾。这样，最大的元素会被&quot;冒泡&quot;到列表的最后。&lt;/p&gt;
&lt;p&gt;缩小范围：忽略已经排序好的最后一个元素，重复上述步骤，直到整个列表排序完成。&lt;/p&gt;
&lt;h2&gt;模拟过程&lt;/h2&gt;
&lt;p&gt;假设有一个待排序的列表 [5, 3, 8, 4, 6]，冒泡排序的过程如下：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一轮遍历：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;比较 5 和 3，交换位置，列表变为 [3, 5, 8, 4, 6]。&lt;/p&gt;
&lt;p&gt;比较 5 和 8，不交换。&lt;/p&gt;
&lt;p&gt;比较 8 和 4，交换位置，列表变为 [3, 5, 4, 8, 6]。&lt;/p&gt;
&lt;p&gt;比较 8 和 6，交换位置，列表变为 [3, 5, 4, 6, 8]。&lt;/p&gt;
&lt;p&gt;第一轮结束后，最大的元素 8 已经&quot;冒泡&quot;到列表的最后。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二轮遍历：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;比较 3 和 5，不交换。&lt;/p&gt;
&lt;p&gt;比较 5 和 4，交换位置，列表变为 [3, 4, 5, 6, 8]。&lt;/p&gt;
&lt;p&gt;比较 5 和 6，不交换。&lt;/p&gt;
&lt;p&gt;第二轮结束后，第二大的元素 6 已经&quot;冒泡&quot;到列表的倒数第二位置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三轮遍历：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;比较 3 和 4，不交换。&lt;/p&gt;
&lt;p&gt;比较 4 和 5，不交换。&lt;/p&gt;
&lt;p&gt;第三轮结束后，列表已经有序。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四轮遍历：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;比较 3 和 4，不交换。&lt;/p&gt;
&lt;p&gt;列表已经完全有序。&lt;/p&gt;
&lt;h2&gt;图解&lt;/h2&gt;
&lt;p&gt;![[冒泡排序示意图.gif]]&lt;/p&gt;
&lt;h2&gt;coding&lt;/h2&gt;
&lt;p&gt;对一个数组，排升序的冒泡排序代码&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int a[N];
void solve()
{
    int n;cin&amp;gt;&amp;gt;n;
    for(int i=1;i&amp;lt;=n;i++) 
    {
        cin&amp;gt;&amp;gt;a[i];
    }

    for(int i=1;i&amp;lt;=n;i++)//进行n轮
    {
        for(int j=1;j&amp;lt;=n-i;j++)//每一轮进行 n-i次
        {
            if(a[j]&amp;gt;a[j+1]) swap(a[j],a[j+1]);//判断语句
        }
    }
    for(int i=1;i&amp;lt;=n;i++)
    {
        cout&amp;lt;&amp;lt;a[i]&amp;lt;&amp;lt;&quot; &quot;;
    }
    cout&amp;lt;&amp;lt;&apos;\n&apos;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;例题&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;链接&lt;/strong&gt;
https://www.luogu.com.cn/problem/P1271&lt;/p&gt;
&lt;p&gt;![[Pasted image 20251108174527.png]]&lt;/p&gt;
</content:encoded></item><item><title>Markdown Extended Features</title><link>https://fuwari.vercel.app/posts/markdown-extended/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/markdown-extended/</guid><description>Read more about Markdown features in Fuwari</description><pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;GitHub Repository Cards&lt;/h2&gt;
&lt;p&gt;You can add dynamic cards that link to GitHub repositories, on page load, the repository information is pulled from the GitHub API.&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;Fabrizz/MMM-OnSpotify&quot;}&lt;/p&gt;
&lt;p&gt;Create a GitHub repository card with the code &lt;code&gt;::github{repo=&quot;&amp;lt;owner&amp;gt;/&amp;lt;repo&amp;gt;&quot;}&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::github{repo=&quot;saicaca/fuwari&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Admonitions&lt;/h2&gt;
&lt;p&gt;Following types of admonitions are supported: &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
Highlights information that users should take into account, even when skimming.
:::&lt;/p&gt;
&lt;p&gt;:::tip
Optional information to help a user be more successful.
:::&lt;/p&gt;
&lt;p&gt;:::important
Crucial information necessary for users to succeed.
:::&lt;/p&gt;
&lt;p&gt;:::warning
Critical content demanding immediate user attention due to potential risks.
:::&lt;/p&gt;
&lt;p&gt;:::caution
Negative potential consequences of an action.
:::&lt;/p&gt;
&lt;h3&gt;Basic Syntax&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;:::note
Highlights information that users should take into account, even when skimming.
:::

:::tip
Optional information to help a user be more successful.
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Custom Titles&lt;/h3&gt;
&lt;p&gt;The title of the admonition can be customized.&lt;/p&gt;
&lt;p&gt;:::note[MY CUSTOM TITLE]
This is a note with a custom title.
:::&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:::note[MY CUSTOM TITLE]
This is a note with a custom title.
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;GitHub Syntax&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
&lt;a href=&quot;https://github.com/orgs/community/discussions/16925&quot;&gt;The GitHub syntax&lt;/a&gt; is also supported.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; [!NOTE]
&amp;gt; The GitHub syntax is also supported.

&amp;gt; [!TIP]
&amp;gt; The GitHub syntax is also supported.
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Spoiler&lt;/h3&gt;
&lt;p&gt;You can add spoilers to your text. The text also supports &lt;strong&gt;Markdown&lt;/strong&gt; syntax.&lt;/p&gt;
&lt;p&gt;The content :spoiler[is hidden &lt;strong&gt;ayyy&lt;/strong&gt;]!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;The content :spoiler[is hidden **ayyy**]!

&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Expressive Code Example</title><link>https://fuwari.vercel.app/posts/expressive-code/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/expressive-code/</guid><description>How code blocks look in Markdown using Expressive Code.</description><pubDate>Wed, 10 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Here, we&apos;ll explore how code blocks look using &lt;a href=&quot;https://expressive-code.com/&quot;&gt;Expressive Code&lt;/a&gt;. The provided examples are based on the official documentation, which you can refer to for further details.&lt;/p&gt;
&lt;h2&gt;Expressive Code&lt;/h2&gt;
&lt;h3&gt;Syntax Highlighting&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/syntax-highlighting/&quot;&gt;Syntax Highlighting&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Regular syntax highlighting&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;This code is syntax highlighted!&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Rendering ANSI escape sequences&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;ANSI colors:
- Regular: [31mRed[0m [32mGreen[0m [33mYellow[0m [34mBlue[0m [35mMagenta[0m [36mCyan[0m
- Bold:    [1;31mRed[0m [1;32mGreen[0m [1;33mYellow[0m [1;34mBlue[0m [1;35mMagenta[0m [1;36mCyan[0m
- Dimmed:  [2;31mRed[0m [2;32mGreen[0m [2;33mYellow[0m [2;34mBlue[0m [2;35mMagenta[0m [2;36mCyan[0m

256 colors (showing colors 160-177):
[38;5;160m160 [38;5;161m161 [38;5;162m162 [38;5;163m163 [38;5;164m164 [38;5;165m165[0m
[38;5;166m166 [38;5;167m167 [38;5;168m168 [38;5;169m169 [38;5;170m170 [38;5;171m171[0m
[38;5;172m172 [38;5;173m173 [38;5;174m174 [38;5;175m175 [38;5;176m176 [38;5;177m177[0m

Full RGB colors:
[38;2;34;139;34mForestGreen - RGB(34, 139, 34)[0m

Text formatting: [1mBold[0m [2mDimmed[0m [3mItalic[0m [4mUnderline[0m
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Editor &amp;amp; Terminal Frames&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/frames/&quot;&gt;Editor &amp;amp; Terminal Frames&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Code editor frames&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;Title attribute example&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- src/content/index.html --&amp;gt;
&amp;lt;div&amp;gt;File name comment example&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Terminal frames&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;This terminal frame has no title&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;Write-Output &quot;This one has a title!&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Overriding frame types&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;Look ma, no frame!&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;# Without overriding, this would be a terminal frame
function Watch-Tail { Get-Content -Tail 20 -Wait $args }
New-Alias tail Watch-Tail
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Text &amp;amp; Line Markers&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/text-markers/&quot;&gt;Text &amp;amp; Line Markers&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Marking full lines &amp;amp; line ranges&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// Line 1 - targeted by line number
// Line 2
// Line 3
// Line 4 - targeted by line number
// Line 5
// Line 6
// Line 7 - targeted by range &quot;7-8&quot;
// Line 8 - targeted by range &quot;7-8&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Selecting line marker types (mark, ins, del)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;function demo() {
  console.log(&apos;this line is marked as deleted&apos;)
  // This line and the next one are marked as inserted
  console.log(&apos;this is the second inserted line&apos;)

  return &apos;this line uses the neutral default marker type&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Adding labels to line markers&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// labeled-line-markers.jsx
&amp;lt;button
  role=&quot;button&quot;
  {...props}
  value={value}
  className={buttonClassName}
  disabled={disabled}
  active={active}
&amp;gt;
  {children &amp;amp;&amp;amp;
    !active &amp;amp;&amp;amp;
    (typeof children === &apos;string&apos; ? &amp;lt;span&amp;gt;{children}&amp;lt;/span&amp;gt; : children)}
&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Adding long labels on their own lines&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// labeled-line-markers.jsx
&amp;lt;button
  role=&quot;button&quot;
  {...props}

  value={value}
  className={buttonClassName}

  disabled={disabled}
  active={active}
&amp;gt;

  {children &amp;amp;&amp;amp;
    !active &amp;amp;&amp;amp;
    (typeof children === &apos;string&apos; ? &amp;lt;span&amp;gt;{children}&amp;lt;/span&amp;gt; : children)}
&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Using diff-like syntax&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;+this line will be marked as inserted
-this line will be marked as deleted
this is a regular line
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
+this is an actual diff file
-all contents will remain unmodified
 no whitespace will be removed either
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Combining syntax highlighting with diff-like syntax&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;  function thisIsJavaScript() {
    // This entire block gets highlighted as JavaScript,
    // and we can still add diff markers to it!
-   console.log(&apos;Old code to be removed&apos;)
+   console.log(&apos;New and shiny code!&apos;)
  }
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Marking individual text inside lines&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;function demo() {
  // Mark any given text inside lines
  return &apos;Multiple matches of the given text are supported&apos;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Regular expressions&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;The words yes and yep will be marked.&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Escaping forward slashes&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;Test&quot; &amp;gt; /home/test.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Selecting inline marker types (mark, ins, del)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;function demo() {
  console.log(&apos;These are inserted and deleted marker types&apos;);
  // The return statement uses the default marker type
  return true;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Word Wrap&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/key-features/word-wrap/&quot;&gt;Word Wrap&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Configuring word wrap per block&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// Example with wrap
function getLongString() {
  return &apos;This is a very long string that will most probably not fit into the available space unless the container is extremely wide&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;// Example with wrap=false
function getLongString() {
  return &apos;This is a very long string that will most probably not fit into the available space unless the container is extremely wide&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Configuring indentation of wrapped lines&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;// Example with preserveIndent (enabled by default)
function getLongString() {
  return &apos;This is a very long string that will most probably not fit into the available space unless the container is extremely wide&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;// Example with preserveIndent=false
function getLongString() {
  return &apos;This is a very long string that will most probably not fit into the available space unless the container is extremely wide&apos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Collapsible Sections&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/plugins/collapsible-sections/&quot;&gt;Collapsible Sections&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// All this boilerplate setup code will be collapsed
import { someBoilerplateEngine } from &apos;@example/some-boilerplate&apos;
import { evenMoreBoilerplate } from &apos;@example/even-more-boilerplate&apos;

const engine = someBoilerplateEngine(evenMoreBoilerplate())

// This part of the code will be visible by default
engine.doSomething(1, 2, 3, calcFn)

function calcFn() {
  // You can have multiple collapsed sections
  const a = 1
  const b = 2
  const c = a + b

  // This will remain visible
  console.log(`Calculation result: ${a} + ${b} = ${c}`)
  return c
}

// All this code until the end of the block will be collapsed again
engine.closeConnection()
engine.freeMemory()
engine.shutdown({ reason: &apos;End of example boilerplate code&apos; })
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Line Numbers&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://expressive-code.com/plugins/line-numbers/&quot;&gt;Line Numbers&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Displaying line numbers per block&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// This code block will show line numbers
console.log(&apos;Greetings from line 2!&apos;)
console.log(&apos;I am on line 3&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;// Line numbers are disabled for this block
console.log(&apos;Hello?&apos;)
console.log(&apos;Sorry, do you know what line I am on?&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Changing the starting line number&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;console.log(&apos;Greetings from line 5!&apos;)
console.log(&apos;I am on line 6&apos;)
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Simple Guides for Fuwari</title><link>https://fuwari.vercel.app/posts/guide/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/guide/</guid><description>How to use this blog template.</description><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Cover image source: &lt;a href=&quot;https://image.civitai.com/xG1nkqKTMzGDvpLrqFT7WA/208fc754-890d-4adb-9753-2c963332675d/width=2048/01651-1456859105-(colour_1.5),girl,_Blue,yellow,green,cyan,purple,red,pink,_best,8k,UHD,masterpiece,male%20focus,%201boy,gloves,%20ponytail,%20long%20hair,.jpeg&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This blog template is built with &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt;. For the things that are not mentioned in this guide, you may find the answers in the &lt;a href=&quot;https://docs.astro.build/&quot;&gt;Astro Docs&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Front-matter of Posts&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;---
title: My First Blog Post
published: 2023-09-09
description: This is the first post of my new Astro blog.
image: ./cover.jpg
tags: [Foo, Bar]
category: Front-end
draft: false
---
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Description&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;The title of the post.&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;The date the post was published.&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;A short description of the post. Displayed on index page.&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;The cover image path of the post.&amp;lt;br/&amp;gt;1. Start with &lt;code&gt;http://&lt;/code&gt; or &lt;code&gt;https://&lt;/code&gt;: Use web image&amp;lt;br/&amp;gt;2. Start with &lt;code&gt;/&lt;/code&gt;: For image in &lt;code&gt;public&lt;/code&gt; dir&amp;lt;br/&amp;gt;3. With none of the prefixes: Relative to the markdown file&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;The tags of the post.&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;The category of the post.&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;If this post is still a draft, which won&apos;t be displayed.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Where to Place the Post Files&lt;/h2&gt;
&lt;p&gt;Your post files should be placed in &lt;code&gt;src/content/posts/&lt;/code&gt; directory. You can also create sub-directories to better organize your posts and assets.&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;
</content:encoded></item><item><title>Markdown Example</title><link>https://fuwari.vercel.app/posts/markdown/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/markdown/</guid><description>A simple example of a Markdown blog post.</description><pubDate>Sun, 01 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;An h1 header&lt;/h1&gt;
&lt;p&gt;Paragraphs are separated by a blank line.&lt;/p&gt;
&lt;p&gt;2nd paragraph. &lt;em&gt;Italic&lt;/em&gt;, &lt;strong&gt;bold&lt;/strong&gt;, and &lt;code&gt;monospace&lt;/code&gt;. Itemized lists
look like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;this one&lt;/li&gt;
&lt;li&gt;that one&lt;/li&gt;
&lt;li&gt;the other one&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that --- not considering the asterisk --- the actual text
content starts at 4-columns in.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Block quotes are
written like so.&lt;/p&gt;
&lt;p&gt;They can span multiple paragraphs,
if you like.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Use 3 dashes for an em-dash. Use 2 dashes for ranges (ex., &quot;it&apos;s all
in chapters 12--14&quot;). Three dots ... will be converted to an ellipsis.
Unicode is supported. ☺&lt;/p&gt;
&lt;h2&gt;An h2 header&lt;/h2&gt;
&lt;p&gt;Here&apos;s a numbered list:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;first item&lt;/li&gt;
&lt;li&gt;second item&lt;/li&gt;
&lt;li&gt;third item&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Note again how the actual text starts at 4 columns in (4 characters
from the left side). Here&apos;s a code sample:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Let me re-iterate ...
for i in 1 .. 10 { do-something(i) }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you probably guessed, indented 4 spaces. By the way, instead of
indenting the block, you can use delimited blocks, if you like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define foobar() {
    print &quot;Welcome to flavor country!&quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(which makes copying &amp;amp; pasting easier). You can optionally mark the
delimited block for Pandoc to syntax highlight it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import time
# Quick, count to ten!
for i in range(10):
    # (but not *too* quick)
    time.sleep(0.5)
    print i
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;An h3 header&lt;/h3&gt;
&lt;p&gt;Now a nested list:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First, get these ingredients:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;carrots&lt;/li&gt;
&lt;li&gt;celery&lt;/li&gt;
&lt;li&gt;lentils&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Boil some water.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dump everything in the pot and follow
this algorithm:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; find wooden spoon
 uncover pot
 stir
 cover pot
 balance wooden spoon precariously on pot handle
 wait 10 minutes
 goto first step (or shut off burner when done)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do not bump wooden spoon or it will fall.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Notice again how text always lines up on 4-space indents (including
that last line which continues item 3 above).&lt;/p&gt;
&lt;p&gt;Here&apos;s a link to &lt;a href=&quot;http://foo.bar&quot;&gt;a website&lt;/a&gt;, to a &lt;a href=&quot;local-doc.html&quot;&gt;local
doc&lt;/a&gt;, and to a &lt;a href=&quot;#an-h2-header&quot;&gt;section heading in the current
doc&lt;/a&gt;. Here&apos;s a footnote [^1].&lt;/p&gt;
&lt;p&gt;[^1]: Footnote text goes here.&lt;/p&gt;
&lt;p&gt;Tables can look like this:&lt;/p&gt;
&lt;p&gt;size material color&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;9 leather brown
10 hemp canvas natural
11 glass transparent&lt;/p&gt;
&lt;p&gt;Table: Shoes, their sizes, and what they&apos;re made of&lt;/p&gt;
&lt;p&gt;(The above is the caption for the table.) Pandoc also supports
multi-line tables:&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;keyword text&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;red Sunsets, apples, and
other red or reddish
things.&lt;/p&gt;
&lt;p&gt;green Leaves, grass, frogs
and other things it&apos;s
not easy being.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;A horizontal rule follows.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Here&apos;s a definition list:&lt;/p&gt;
&lt;p&gt;apples
: Good for making applesauce.
oranges
: Citrus!
tomatoes
: There&apos;s no &quot;e&quot; in tomatoe.&lt;/p&gt;
&lt;p&gt;Again, text is indented 4 spaces. (Put a blank line between each
term/definition pair to spread things out more.)&lt;/p&gt;
&lt;p&gt;Here&apos;s a &quot;line block&quot;:&lt;/p&gt;
&lt;p&gt;| Line one
| Line too
| Line tree&lt;/p&gt;
&lt;p&gt;and images can be specified like so:&lt;/p&gt;
&lt;p&gt;Inline math equations go in like so: $\omega = d\phi / dt$. Display
math should get its own line and be put in in double-dollarsigns:&lt;/p&gt;
&lt;p&gt;$$I = \int \rho R^{2} dV$$&lt;/p&gt;
&lt;p&gt;$$
\begin{equation*}
\pi
=3.1415926535
;8979323846;2643383279;5028841971;6939937510;5820974944
;5923078164;0628620899;8628034825;3421170679;\ldots
\end{equation*}
$$&lt;/p&gt;
&lt;p&gt;And note that you can backslash-escape any punctuation characters
which you wish to be displayed literally, ex.: `foo`, *bar*, etc.&lt;/p&gt;
</content:encoded></item><item><title>Include Video in the Posts</title><link>https://fuwari.vercel.app/posts/video/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/video/</guid><description>This post demonstrates how to include embedded video in a blog post.</description><pubDate>Tue, 01 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Just copy the embed code from YouTube or other platforms, and paste it in the markdown file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: Include Video in the Post
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;h2&gt;YouTube&lt;/h2&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;h2&gt;Bilibili&lt;/h2&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&quot; scrolling=&quot;no&quot; border=&quot;0&quot; frameborder=&quot;no&quot; framespacing=&quot;0&quot; allowfullscreen=&quot;true&quot;&amp;gt; &amp;lt;/iframe&amp;gt;&lt;/p&gt;
</content:encoded></item></channel></rss>