[{"content":"前言 元宝前几天在它的软件里加入了一个集成的 OpenClaw。\n我以为搞不出什么花样，然后开了一个之后就没管。\n结果你告诉我，这东西是一台云电脑？？？\n实操 打开元宝 APP，选择 派，找到 我的 Bot，创建 Bot，然后选择 创建 OpenClaw。\n然后就好了。\n据我所知，这东西公网不能直接访问，因此你要先根据我 这篇文章，搞个内网穿透。\n不过由于这是 OpenClaw，很多东西都可以省了（比如脑子）。\n只要先让它安装好 cloudflared，然后把密钥发给它，你就获得了一台 2C4G 40GB 硬盘的云主机。\n于是很多要服务器的东西都可以搭了。腾子牛的。\n","date":"2026-04-18T13:40:00+08:00","permalink":"/p/%E5%85%83%E5%AE%9D%E5%85%8D%E8%B4%B9%E6%9C%8D%E5%8A%A1%E5%99%A8/","title":"元宝免费服务器！？"},{"content":"A Trimo 签到。直接维护是不是第一段 o 就行了。\nB Sensor Data Logging 签到。ABC 保留节目之模拟。\nC Sneaking Glances 这个 $n \\le 20$ 很好啊，直接枚举子集就行了。时间复杂度 $O(n \\times 2^n)$。\nD Go Straight 为什么都在用 bfs？\n这明明是一道记忆化搜索好题，记录一下当前点到终点的路径最小值和下一步的方向就可以做到 $O(4nm)$。\nE Team Division 没做出来。\n看起来维护三个只能去 A，只能去 B 和都能去的人数集合然后组合数学一下就行了。水平有待提高。\nF Avoid Division 没做出来。不会。\n感觉 F\u0026gt;G\u0026gt;E。\nG Copy Query 没做出来。\n啊啊啊我主席树板子没写出来！！！！！！\n","date":"2026-04-12T11:15:00+08:00","permalink":"/p/abc453-%E5%81%9A%E9%A2%98%E8%AE%B0%E5%BD%95/","title":"ABC453 做题记录"},{"content":"哈哈，我的眼睛被污染了，你们也别想活！！！！\n舞动青春（4 分 29 秒） 下载链接\n密码： 5m24\n室内操（3 分 34 秒） ","date":"2026-03-29T19:21:00+08:00","permalink":"/p/%E4%B8%80%E4%BA%9B%E8%A7%86%E9%A2%91/","title":"一些视频"},{"content":"准备 你需要的：\n一个 Cloudflare 账号。\n一个域名。\n如果以上东西没有，可以去这里参考。\n一台电脑。\n脑子。\n手。\n如果以上东西没有，那么请自行离开。\n操作 登录到 Cloudflare。\n选择侧边栏的 联网 \u0026gt; Tunnels。\n这个好是很久以前注册的，当时需要银行卡认证，不过可以绕过就是了（感谢 Cloudflare），，但是看界面应该改过版了。之前是 Zero Trust 的一部分，现在被独立出来，应该不用绑卡 ，感谢 Cloudflare 。\n点击创建隧道，输入隧道名称。\n下载你自己版本的 cloudflared。相信你都能看到这个网站了，上 Github 问题应该不大。\n运行给出的指令，在 Windows 下应该会输出这样的东西：\n1 2 3 2026-03-21T11:44:29Z INF Installing cloudflared Windows service 2026-03-21T11:44:29Z INF cloudflared agent service is installed windowsServiceName=Cloudflared 2026-03-21T11:44:29Z INF Agent service for cloudflared installed successfully windowsServiceName=Cloudflared 这就算完事了，你应该能看到浏览器上 隧道连接成功 的字样。回到 Tunnels 主页会显示状态为 健康。\n点击其名称，选择 Routes，开始创建隧道。\n点击 Add routes，选择 Published application，选择域名（一般要填）及后缀（一般不填），看到下面的 Service URL，你需要在里面填上本机访问地址。\n一些例子：\nOpenlist 默认开在 5244 端口，协议为 http，填入 http://localhost:5244；\nssh 开在 22 端口，输入 ssh://localhost:22。\n发布后，就可以从公网访问了。\n更多玩法可以在 这里 探索。\n完结撒花！\n不对啊，我的 ssh 怎么连不上？？？\nssh 你需要在客户机上也安装 cloudflared。\n新开窗口，运行：\n1 cloudflared access ssh --hostname 你的映射域名 -url localhost:222 222 可以改为其他端口。\n然后把这个窗口撂一边，不要关！，新开窗口运行\n1 ssh -p 222 你的用户名@localhost 就好了。\nCloudflare Quick Tunnels 这是个啥东东？\n你可以打开 Cloudflare Quick Tunnels 查看。简而言之就是你可以用\n1 cloudflared tunnel --url 你的本机连接 创建一个公用域名的隧道，适合临时用。\n好了，我要去打 AtCoder 了。\n","date":"2026-03-21T19:27:00+08:00","permalink":"/p/%E5%85%B3%E4%BA%8E-cloudflare-tunnels-%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/","title":"关于 Cloudflare Tunnels 内网穿透"},{"content":"原题链接。\n感觉吃了一坨大的。代码源编课程的时候是怎么想到把这么恶心的 DP 放进去的。我要拒绝完成代码源 Y4 课程了。\n一开始想着定义一手 $dp_{i,j}$ 表示考虑第 $i$ 位为 $j$ 的情况数然后跑容斥，很明显的 $O(n^2)$（至少看起来是）。然后代码写一半突然发现这个转移有问题，如果中间夹了一段别的东西就直接升天了。心态 -5。\n然后接下来我就在各种形如考虑第 $i$ 位及前面有 $k$ 个 $j$ 的情况数之类的状态，晕，心态 -999。\n最终拉了一坨这样的东西：\n设 $dp_{i,j}$ 表示考虑到第 $i$ 个数，第 $i$ 个数是 $j$ 的方案数。转移：\n$$dp_{i,j} = \\sum_{k=i-j \\wedge [\\forall p \\in [k,i),p = j \\vee p = -1]}^{i-1}\\sum_{col \\not = j} dp_{k,col}$$这是 $O(n^4)$ 的，不过比较好优化，预处理一个 $k$ 的起始位置，再来一发前缀和，这几步都是 $O(n^2)$，所以总体还是 $O(n^2)$。可以过。但是人类应该是想不出来吧。这是我的代码。\n这题评蓝多少有点恶评了。应该评黑。\n","date":"2026-03-20T20:00:00+08:00","permalink":"/p/arc169c-%E8%AE%B0%E5%BD%95/","title":"ARC169C 记录"},{"content":"本文将会从零开始带你搭建一个由 hugo 驱动的博客。\n准备工作 你需要一个邮箱、一台电脑。\n接下来一步，注册 GitHub 账号，已有可跳过。\n打开 GitHub ，点击右上角 Sign Up。\n输入用户名、邮箱、密码，通过人机验证，邮箱激活，就注册好了。\n接下来一步，注册 Cloudflare 账号，已有可跳过。\n打开 Cloudflare ，点击中间 Start for free。\n老样子，一步一步注册。\n接下来我们需要一个域名，如果你有人民币，那你可以买一个。\n那没有怎么办？这个域名我就是从……\n我们可以用免费域名。\n打开 register.us.kg，点击下方 Sign Up。\n这边随便去百度一个美国人名生成器，EMAIL 填自己的，注册后登录，用刚才的 GitHub 账号完成 OAuth。\n新注册的账号只有一个域名（我的老账号加上 GitHub star 给的一个一共有 4 个），不过够用。\n点击左边 Domain Registration，选择子域名，.dpdns.org 和 .qzz.io 免费，推荐后者，好记。\nCheck 完后会要求输入名称服务器，这时回到 Cloudflare ，点击添加域，输入你刚才注册的域名，然后 Cloudflare 会给你发两个名称服务器 (Name Server,NS)，填到注册页面，保存。等会儿 Cloudflare 那边打勾就完成了。\n配置本地环境 接下来配置本地环境。只讲 Windows 的，剩下的请在 官网 阅读。\n首先安装 Git，这里下载，安装途中记得添加到 PATH。\n然后下载并安装 Go。\n然后使用我最喜欢的 winget 安装 hugo-extended，运行\n1 winget install Hugo.Hugo.Extended 当然你要是讨厌 winget，请自行寻求帮助嘿嘿嘿\n接下来如果你觉得我推荐的主题不好，可以自行去这里寻找一个主题，但是接下来的教程都没用了。而且 Stack 可是第二大主题。\n打开 https://github.com/CaiJimmy/hugo-theme-stack-starter，点击右上角 \u0026lt;\u0026gt;Code，选择 Download ZIP。\n解压之后删除我们用不到的 .devcontainer、.github、.vscode 文件夹。\n在当前目录下运行 hugo server，打开 localhost:1313 可以预览。\n修改文件 接下来开始魔改！\n删除 config/_default/_language.toml（反正多语言你也不会写）\n打开 config/_default/config.toml，\n把 baseurl 改成你的域名（等会讲），\nlanguageCode 改了好像没用（？），\ntitle 是网站左上角显示的名称，\ndefaultContentLanguage 改成 \u0026ldquo;zh-cn\u0026rdquo;，\nhasCJKLanguage 改成 true。\n打开 config/_default/menu.toml，这是左上角下面的社交图标，每一个 [[social]] 对应一个，看着格式改。\n其中：\nidentifier 是给自己看的，\nname 是显示的，\nurl 是目标链接，\n下面 .params 的 icon 是图标，可以不要。自己的 icon 可以改成 .svg 格式扔到 /assets/icons/ 里。\n打开 config/_default/params.toml，\nsince 填建站的年份，\n下面 [article] 把 math 改成 true，启动 LaTeX。\n1 2 3 4 [sidebar] emoji = \u0026#34;💤\u0026#34; subtitle = \u0026#34;已完成今日我对着铁质的机箱踢了五下然后把那堆代码在内存中删了一下然后把椅子砸在了地板上大学习\u0026#34; avatar = \u0026#34;img/avatar.png\u0026#34; emoji 是显示在头像旁边的，\nsubtitle 是你的个性签名，\navatar 是头像，放在 /assets/img 里。\n最下面的 commemts 选项是重头戏，我们使用 Giscus，所以把 provider 改成 \u0026ldquo;giscus\u0026rdquo;。\n接下来在 Github 新建一个 Public 仓库，并且把这个安装到你的仓库，然后在 Setting 里启用 Discussion，在这里，按默认值填下去。最后有一段代码，按这个格式粘贴到你的 provider 下面：\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 [comments.giscus] repo = 生成的 data-repo repoID = 生成的 data-repo-id category = 生成的 data-category categoryID = 生成的 data-category-id mapping = \u0026#34;title\u0026#34; lightTheme = \u0026#34;light\u0026#34; darkTheme = \u0026#34;dark_dimmed\u0026#34; reactionsEnabled = 1 emitMetadata = 0 inputPosition = \u0026#34;top\u0026#34; lang = \u0026#34;zh-CN\u0026#34; strict = 0 loading = \u0026#34;lazy\u0026#34; 现在欣赏一下，……LaTeX 是坏的！！！\n为了换成国内镜像，我们在博客根目录下新建 data 文件夹，新建 external.toml，把以下内容粘贴进去：\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 KaTeX = [ { src = \u0026#34;https://cdn.jsdmirror.cn/npm/katex@0.16.9/dist/katex.min.css\u0026#34;, integrity = \u0026#34;sha384-n8MVd4RsNIU0tAv4ct0nTaAbDJwPJzDEaqSD1odI+WdtXRGWt2kTvGFasHpSy3SV\u0026#34;, type = \u0026#34;style\u0026#34; }, { src = \u0026#34;https://cdn.jsdmirror.cn/npm/katex@0.16.9/dist/katex.min.js\u0026#34;, integrity = \u0026#34;sha384-XjKyOOlGwcjNTAIQHIpgOno0Hl1YQqzUOEleOLALmuqehneUG+vnGctmUb0ZY0l8\u0026#34;, type = \u0026#34;script\u0026#34;, defer = true }, { src = \u0026#34;https://cdn.jsdmirror.cn/npm/katex@0.16.9/dist/contrib/auto-render.min.js\u0026#34;, integrity = \u0026#34;sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05\u0026#34;, type = \u0026#34;script\u0026#34;, defer = true }, ] Cactus = [ { src = \u0026#34;https://latest.cactus.chat/cactus.js\u0026#34;, type = \u0026#34;script\u0026#34; }, { src = \u0026#34;https://latest.cactus.chat/style.css\u0026#34;, type = \u0026#34;style\u0026#34; }, ] [PhotoSwipe] Style = \u0026#34;https://cdn.jsdelivr.net/npm/photoswipe@5.4.4/dist/photoswipe.css\u0026#34; Core = \u0026#34;https://cdn.jsdelivr.net/npm/photoswipe@5.4.4/dist/photoswipe.esm.min.js\u0026#34; Lightbox = \u0026#34;https://cdn.jsdelivr.net/npm/photoswipe@5.4.4/dist/photoswipe-lightbox.esm.min.js\u0026#34; LaTeX 就被修好了 ^_^。\n修改内容 打开 content 文件夹，作为本土化 的一环，把 _index.md 里的 name 换成 主页。\ncategories 建议满门抄斩之前留一个解刨参考。详解：\n1 2 3 4 5 6 7 8 9 --- title: 题解 description: 如果你是来找我的黑历史的，那你赢了。 image: style: background: \u0026#34;#2a9d8f\u0026#34; color: \u0026#34;#fff\u0026#34; --- title 是这个 category 的名称，description 是描述，image 作为封面可有可无，background 是标签的底色，color 是字的颜色。\npage 里是各种页面。可以参考官方文档增减。\n本土化的话修改每个文件夹里 index.md 里的 name。\npost 是重点，新建一个文件夹，里面放入 index.md，开头这么写：\n1 2 3 4 5 --- title: 你的标题 date: 你的发布时间（形如2026-02-25T16:42:04+08:00，自己理解） draft: false --- 然后正文用 MarkDown 书写，插入文件可以把资源放在当前文件夹里，引用写成\n1 [描述](文件名) 。\n恭喜你，现在你的博客出来了，开始部署。\n部署 本地运行\n1 2 3 git config --global user.name 你的用户名 git config --global user.email 你的邮箱 ssh-keygen -t rsa -C 你的邮箱 一路 yes，打开你的用户目录下的 .ssh文件夹，把 ip_rsa.pub 里的东西复制走。\n打开 GitHub，选择 Settings，找到 SSH and GPG keys，New SSH Key，粘进去并 Add。\n本地运行\n1 ssh -T git@github.com 如果链接成功，则有 You\u0026rsquo;ve successfully authenticated, but GitHub does not provide shell access 输出。\n新建一个 GitHub 库，名字随意。\n回到你的博客根目录，运行\n1 2 3 4 5 git init git add . git commit -m \u0026#34;你的推送内容\u0026#34; git remote add origin git@github.com:你的用户名/你的仓库名.git git push -u origin main 打开 Cloudflare，选择 Workers 和 Pages，创建应用程序，点击下方 Pages 旁边的开始使用，导入现有 Git 存储库，添加 GitHub 账户，然后选择你的存储库，框架预设选 hugo，保存并部署。\n再添加自定义域名，最好是子域名，例如 blog.你的域名，等一会就能访问。\n哦对了，后续更新写完文章执行如下命令\n1 2 3 git add . git commit -m \u0026#34;你的推送内容\u0026#34; git push 即可。\n价格 Github $0$ 元；\n域名 $0$ 元，但是一年要续一次；\nCloudflare Pages $0$ 元，每月可以构建 $500$ 次。\n总计 $0$ 元。为什么？当然是因为我领到了 2026 年的……\n","date":"2026-02-25T16:42:04+08:00","permalink":"/p/%E5%A6%82%E4%BD%95%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E5%8D%9A%E5%AE%A2/","title":"如何搭建自己的博客"},{"content":"P10206 建设工程 2 思路 直接枚举显然不行。考虑简化问题。\n注意到从 $s$ 到 $t$ 的每一条路径都可以描述为 $s \\to u \\to t$，其中 $u$ 是一个中间途经点。这启发我们跑单源最短路。\n设 $s \\to u$ 的最短路为 $dis_{s,u}$，$u \\to t$ 的最短路为 $dis_{u,t}$，问题便简化成了 找到所有二元组 $(u,v)$，使得 $dis_{s,u} + l +dis_{v,t} \\le k$。\n此时我们对 $dis_{u,t}$ 排序，二分可能的情况即可。时间复杂度 $O(m \\log {n}+q \\log {n})$。注意特判 $dis_{s,t} \\le k$ 的情况，此时答案即为 $\\dfrac{n(n+1)}{2}$。\n完结撒花……吗？\n主播主播，你的二分确实很强，但要是 $(u,v)$ 和 $(v,u)$ 都可以不就重复了吗？\n证明 列不等式看一下：\n$$ \\begin{cases} dis_{s,u}+l+dis_{v,t} \\le k \\\\ dis_{s,v}+l+dis_{u,t} \\le k \\end{cases} $$即\n$$ \\begin{cases} 2 \\times dis_{s,t}+2 \\times l \\le 2 \\times k \\\\ dis_{s,t}+l \\le k \\end{cases} $$而我们又特判了 $dis_{s,t} \\le k$ 的情况，所以有\n$$ dis_{s,t} \u003e k $$由于 $l$ 是正整数，显然不可能出现以上情况。\nCode 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 #include\u0026lt;bits/stdc++.h\u0026gt; using namespace std; int n,m,s,t,l; long long k;//不开 long long…… vector\u0026lt;pair\u0026lt;int,int\u0026gt;\u0026gt; road[200005]; long long dis1[200005],dis2[200005]; bool qd[200005]; void dij1(int from){ memset(qd,0,sizeof(qd)); memset(dis1,0x3f,sizeof(dis1)); dis1[from]=0; qd[from]=1; priority_queue\u0026lt;pair\u0026lt;unsigned long long,int\u0026gt;,vector\u0026lt;pair\u0026lt;unsigned long long,int\u0026gt;\u0026gt;,greater\u0026lt;pair\u0026lt;unsigned long long,int\u0026gt;\u0026gt;\u0026gt; pq; for(pair\u0026lt;int,int\u0026gt; i:road[from]) pq.push(make_pair(i.second,i.first)),dis1[i.first]=i.second; for(int i=1;i\u0026lt;n;i++){ pair\u0026lt;long long,int\u0026gt;t; do{ if(pq.empty())return; t=pq.top(); pq.pop(); }while(qd[t.second]); qd[t.second]=1; for(pair\u0026lt;int,int\u0026gt;add:road[t.second]){ if(!qd[add.first]){ if(dis1[add.first]\u0026gt;dis1[t.second]+add.second){ dis1[add.first]=dis1[t.second]+add.second; pq.push(make_pair(dis1[add.first],add.first)); } } } } } void dij2(int from){//这里写两个 Dijsktra 是因为数组传参比较麻烦 memset(qd,0,sizeof(qd)); memset(dis2,0x3f,sizeof(dis2)); dis2[from]=0; qd[from]=1; priority_queue\u0026lt;pair\u0026lt;unsigned long long,int\u0026gt;,vector\u0026lt;pair\u0026lt;unsigned long long,int\u0026gt;\u0026gt;,greater\u0026lt;pair\u0026lt;unsigned long long,int\u0026gt;\u0026gt;\u0026gt; pq; for(pair\u0026lt;int,int\u0026gt; i:road[from]) pq.push(make_pair(i.second,i.first)),dis2[i.first]=i.second; for(int i=1;i\u0026lt;n;i++){ pair\u0026lt;long long,int\u0026gt;t; do{ if(pq.empty())return; t=pq.top(); pq.pop(); }while(qd[t.second]); qd[t.second]=1; for(pair\u0026lt;int,int\u0026gt;add:road[t.second]){ if(!qd[add.first]){ if(dis2[add.first]\u0026gt;dis2[t.second]+add.second){ dis2[add.first]=dis2[t.second]+add.second; pq.push(make_pair(dis2[add.first],add.first)); } } } } } int main(){ scanf(\u0026#34;%d%d\u0026#34;,\u0026amp;n,\u0026amp;m); scanf(\u0026#34;%d%d%d%lld\u0026#34;,\u0026amp;s,\u0026amp;t,\u0026amp;l,\u0026amp;k); for(int i=0;i\u0026lt;m;i++){ int a,b,w; scanf(\u0026#34;%d%d%d\u0026#34;,\u0026amp;a,\u0026amp;b,\u0026amp;w); road[a].push_back(make_pair(b,w)); road[b].push_back(make_pair(a,w));\t//读入时终点在前权值在后，跑最短路时权值在前终点在后 } dij1(s); if(dis1[t]\u0026lt;=k){ printf(\u0026#34;%lld\u0026#34;,(long long)n*(n-1)/2);//特判 }else{ dij2(t); sort(dis2+1,dis2+n+1); unsigned long long ans=0; for(int i=1;i\u0026lt;=n;i++){ ans+=(((upper_bound(dis2+1,dis2+n+1,(long long)k-l-dis1[i])-dis2))-1);//二分查答案 } printf(\u0026#34;%llu\u0026#34;,ans); } return 0; } AC 记录 考场上胡的还能进最优解前 5 页\n真・完结撒花~\n","date":"2026-02-11T17:52:04+08:00","permalink":"/p/%E9%A2%98%E8%A7%A3-p10206/","title":"题解: P10206"},{"content":"注意到 $n \\le 2000$，这启示我们使用暴力。\n开两个 set 来记录当前已有的奇恒星与偶恒星，然后计数。记得对答案 chkmax。\ncode:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include\u0026lt;bits/stdc++.h\u0026gt; using namespace std; int s[2005]; int n; int ans=0; int main(){ scanf(\u0026#34;%d\u0026#34;,\u0026amp;n); for(int i=1;i\u0026lt;=n;i++){ scanf(\u0026#34;%d\u0026#34;,\u0026amp;s[i]); } for(int i=1;i\u0026lt;=n;i++){ set\u0026lt;int\u0026gt;stareven,starodd; for(int j=i;j\u0026lt;=n;j++){ if(s[j]%2)stareven.insert(s[j]); else starodd.insert(s[j]); if(stareven.size()==starodd.size())ans=max(ans,(int)stareven.size()+(int)starodd.size()); } } printf(\u0026#34;%d\u0026#34;,ans); } ","date":"2026-02-11T17:52:04+08:00","permalink":"/p/%E9%A2%98%E8%A7%A3b4458/","title":"题解：B4458"},{"content":"这是标题 这也是标题 这还是标题 这是倾斜\n这是加粗。\n这是删除。\n这是一个代码框\n1 2 3 4 5 6 #include\u0026lt;bits/stdc++.h\u0026gt; using namespace std; int main(){ puts(\u0026#34;这是一个C++代码框\u0026#34;); return 0; } $1+1=2$\n$$\\sum_{i=1}^{n} i^2$$\n这是一个mp3链接\n这是一个文件链接\n这是一个字体链接\n","date":"2026-02-10T14:49:28+08:00","permalink":"/p/%E8%BF%99%E6%98%AF%E4%B8%80%E7%AF%87%E6%B5%8B%E8%AF%95%E6%96%87%E7%AB%A0/","title":"这是一篇测试文章"}]