123
2025-08-03 17:17:57
发布于:浙江
12
王胜楷
585
2099ms
100
1ms
100
3ms
100
1ms
100
1144ms
100
950ms
15
0ms
50
0ms
10
0ms
10
0ms
13
朱允升
575
2175ms
100
0ms
100
0ms
100
2ms
100
1206ms
100
967ms
15
0ms
50
0ms
0
0ms
10
0ms
全部评论 1
有什么意义
2025-08-03 来自 北京
0
2025-08-03 17:17:57
发布于:浙江
12
王胜楷
585
2099ms
100
1ms
100
3ms
100
1ms
100
1144ms
100
950ms
15
0ms
50
0ms
10
0ms
10
0ms
13
朱允升
575
2175ms
100
0ms
100
0ms
100
2ms
100
1206ms
100
967ms
15
0ms
50
0ms
0
0ms
10
0ms
有什么意义
2025-08-03 来自 北京


互动|分享你用AI干过的“神级操作”
互动|分享你用AI干过的“神级操作” hi,AC狗友们 AI时代,连懒人都能开挂!写作业、做笔记、催队友、编曲……今天,它全包了! 玩法超简单: 在评论区,分享一个你用AI干过的“神级操作” —— 越实用越欢迎,越“又懒又爽”越好! 举个栗子: * 把老师60页PPT变成3句重点+10道押题:“我用了30秒,AI用了0.3秒。” * 把乱哼的旋律变成一首完整的Lo-fi beats:“现在它是我的学习背景音,比白噪音还上头。” 你可以写: * AI帮你“偷懒”的真实操作 * 一个离谱但实用的AI用法 * AI把你的某个日常变宝的故事 奖励 活动截止,评论区符合参与条件的留言 点赞TOP5 每人获得:罐头 × 50 幸运奖5名 每人获得:罐头 × 20 ⏰ 时间 即日起至 2026年4月20日 分享一个你用AI干过的“神级操作”,越实用越欢迎! 往期互动

谁能帮我取个名啊
我只是向大家发了一个求助帖,竟被各位香香软软甜甜糯糯英俊潇洒美丽善良风流倜傥亭亭玉立倾国倾城的小蛋糕活活弄上了榜! 我身边的同学和朋友都说我的名字太猎奇了,所以我想请大家帮我取个名字。我的特征如下: 星座:处女座 爱好:看小说和听术力口 最爱的书:《某某》《二哈和他的白猫师尊》《她的山她的海》《一屋暗灯》(我同学说我是小黄人,真的吗?) 最爱的音乐:《脑蚀》《爱属性》《即刻轮回》《普通DISCO》《Time Machine》 最爱的游戏:florr.io 最爱的动漫:我不看动漫 最爱的主播:影视飓风 特长:感觉写作还可以,给一个软件投过两篇稿,都中了 同学对我的评价:老抽、神人一个、国一曼巴(我不认可这个) 我对自己的评价:亭亭玉立、善良大方、聪明不绝顶 麻烦各位在评论区给我想个名字,取得好可以获得我包下的全世界的空气,随便吸。

眼前这个男人
眼前这个男人只是在 ppl 的犇犇后面回复了一句就被洛谷予以禁言十四天的奖励。 (或者说可能不是这个原因,我也记不得我有没有单独发过那个网站的链接。 和这个男人一起的还有 pipilong2024,yanghongzheng,Konglh1013,jodio9等人,具体可以参考洛谷陶片。 看来我要掉橙了,加油缓过来吧。 笑点解析:永远在红和橙之间反复横跳,本来以为过了一片题解可以稳住红一周的,结果被洛谷大手子制裁了,掉了五十估值((( 反正被禁言了,既来之则安之。等我期中考结束我要发力了。

#创作计划#浅谈 AVL 树和红黑树-1
警告:五年级以上看不懂可能无法进 NOIP @YHZ@YHZ@WCQK@WCQK@STARS_SEEKER@STARS_SEEKER > 请不要发布无意义评论,否则会删评。若发布大量发布类似“qp”“ddd”等评论也会删,发布一次无所谓 > 本篇讲一些前置知识,有点杂,排版和内容可能不是很好,语文也很差,请见谅。由于时间较为零碎,完成不知道要几个世纪了 前言(跳过本部分并不影响您阅读): 先说一下我为啥写这个,AVL 树在 OI 中似乎啥用没有。但是我觉得学起来挺有意思的,对学红黑树或许有那么一丁点的帮助(?)。就当巩固一下平衡树再提升一下思维吧。 为啥我觉得指针比数组更看得懂呢🤔 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 概览 因为 ACGO 这边的同学知识面普遍较浅,我就讲的稍稍前面一点,但是总不可能让我给你讲输入输出的对吧。二叉树基础(指针),BST,平衡树的旋转操作,Treap(或许并没什么关联)。写的浅一点。鉴定为想水一篇精华帖。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 二叉树基础 或许并没什么好讲的,但是因为我偏爱指针而且大部分人都不写指针我就来讲一下(吧)。 首先我们建立一个结构体,用于储存二叉树节点的信息,如下: 其中 Treenode(int v):val(v),l(nullptr),r(nullptr){} 是构造函数。我们每创建一个新的节点,调用这个构造函数就可以“初始化”这一节点。这里的作用是将该节点的值初始为 vvv,左右孩子指针初始为空。 接下来建立一个指针数组,用于存储指向节点 iii 的指针。 这里根据实际情况选择是否需要。像后文所讲的 AVL 树就不需要。 然后是输入,这里的输入方式是每行给出节点 iii 的左右孩子,若为 000 则代表它没有孩子。 前序遍历:顺序为根,左,右,递归即可: 中序遍历:顺序为左,根,右 后序遍历:顺序为左,右,根 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 二叉搜索树(BST) 觉得有点跑题了赶紧回来 首先我们了解一下 BST 的基本概念。BST 是一种特殊的二叉树,满足以下性质: 1. 空树为 BST 2. 若左子树不为空,则左子树的所有节点权值小于根节点 3. 若右子树不为空,则右子树所有节点权值大于根节点 4. 二叉搜索树的所有子树均为二叉搜索树 看着很麻烦,但是你先别急。实现起来真的很简单。 节点结构体 不多赘述.具体请参考注释。 插入 主要是个判断,大概这样: 首先,如果与当前节点值相等:计数器加一,返回 如果小于当前节点:有左孩子,递归左孩子;否则新建节点 如果大于当前节点:有右孩子:递归右孩子;否则新建节点 别忘了增加子树大小。 查询前驱——小于 VALVALVAL 的最大数 和插入差不多,因为二叉搜索树保证了 左子树<根节点<右子树。根据这条性质我们可以轻松实现查询前驱的功能。具体实现请参考代码注释。 查询后继 和前驱一样的,只不过反了一下,参考注释即可。不多赘述。 删除 棍木 查询第 K 小 也是递归实现,若在左子树则递归左子树,在当前节点则直接返回,当在右子树的时候记得减去左子树和当前节点的数量。 查排名 因为二叉搜索树的性质是左子树 <<< 根节点 <<< 右子树,所以当找到目标值,排名就是左子树的大小。若目标在右子树,则为右子树的查询结果加上左子树大小、当前节点值重复的数量。 完整代码就不放了。那么这样我们就得到了一个朴实无华的 BST 代码。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 平衡树的旋转与平衡调整 使我的节点旋转 旋转是平衡树维持平衡的一个重要方法。它可以在不违反二叉搜索树的性质下降低树高。这里我们来讲左旋(zag)和右旋(zig)。 右旋 先来讲右旋,其实你学完右旋就能直接推出左旋了。 下面给出两幅图,各位可以进行理解。分别是对于节点 A 的右旋前和右旋后的: 仔细观察,我们可以发现,对于节点 A 的右旋就像是把他的左孩子“提”起来,事实上我们只改变了三个节点的链接关系: 1. 将 A 的右孩子 C 的右孩子指针指向 A,将 A 的父指针指向 C; 2. 将 A 的左孩子的右孩子的父指针指向 A; 3. 将 A 的左孩子指针指向 A 的左孩子的右孩子。 那么这个时候我们的右旋操作就结束了。[1] 左旋 本质上和右旋是一样的,就是把右旋的操作反了一下。这里不多赘述。具体参考代码实现。 那么在学完左右旋之后我们来学习如何调整平衡树的平衡。这里介绍四种情况。 LL 型 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 鸣谢 用户 ID 帮助 ID:519007 帮助修改大量格式问题,/bx ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 1. 为什么这里要说“A 的左孩子的右孩子”而不直接说“C 的右孩子”?因为在实际代码中,我们是通过当前节点,也就是我们现在所指的 A 节点来进行旋转操作,只是间接的经过左孩子节点也就是我们现在说的节点 C。这样子写代码会更好理解点。不过本质上没啥区别。 ↩︎


这卷土重来了,胆大包天
上...上榜了?大家可以看看这个帖子链接描述 这个帖子我支持上榜 还私藏枪支,一看假,这种乐子真是无语,都来看猴 都快骂他,联系AC君,封号@AC君 找人看猴 @神之梯队_༺ཌༀ༒ﷺꋧﷺ༒ༀད༻ @斩神者(必回关)目标1000粉 @夏绍智(必回关) @mr wu @流口水(必回关) @小帆船 @༺ཌༀ∞陆氏☢💻☢某人∞ༀད༻ @WA君 @༺ཌༀཉི༒SSCD刹༒༃ༀད༻ @李韵儿(本人必回关) @神会流血吗?!直视我! @§༺ཌༀPVZ·卷神ༀད༻§ @请输入文本. @老鼠 @热爱( ̄ 3 ̄)$ 303LYP 顺便艾特一下那个飞舞@178****2510


愚人节限定互动|假如报错信息学说人话
愚人节限定:假如报错信息学会说人话 hi,AC狗友们,愚人节要到了,连编译器都在开玩笑!CE、WA、RE……,它们不装了! 🎯 玩法超简单: 在评论区,给任意一个报错状态“写一句内心独白”,让它变得有梗、有戏、有灵魂。 举个栗子🌰: * CE(编译错误):“兄弟,你分号呢?我等你等了三千年。” 你可以写: * 报错的“真实OS”(内心戏) * 报错和代码的“对话” * 报错给你发的“微信消息” 🎁 奖励 活动截止,评论区符合参与条件的留言 点赞TOP5每人获得:罐头 × 50 @Minecraft,@橙子同学,@༺ཌༀ我要上浙大ༀད༻,@天之神_†赛伊德†,@AC君 随机抽取5人,每人获得 罐头 × 20 @(百小1."QYM".4育才)回,@虚无·和平精英,@WeiChenrui,@不喜欢抢钱的抢铁抢段,@ZYC的Best friend ⏰ 时间 即日起至 2026年4月8日 💚 来吧,让那些折磨过你的报错,今天替你“说话”! 往期互动


【学习笔记】随机游走优化 dp
感觉是比较冷门的技巧() 点击这里获得更卡哇伊的阅读体验 引入 > 一个数轴,初始有一个点在 000 位置。现在这个点会移动 nnn 次,每一次有 12\frac1221 的概率点从 xxx 移动到 x+1x+1x+1,另外 12\frac1221 的概率点从 xxx 移动到 x−1x-1x−1。问移动完 nnn 次之后 ∣x∣|x|∣x∣ 的期望值是多少。 上述问题的答案不超过 O(n)O(\sqrt n)O(n ) 级别。下面给出一个简单的证明: 直接计算 E[∣x∣]E[|x|]E[∣x∣] 比较复杂。考虑先放缩一下,计算出 E[x2]E[x^2]E[x2] 的值,然后就可以直接得到 E[∣x∣]≤E[x2]E[|x|]\le \sqrt{E[x^2]}E[∣x∣]≤E[x2] 。 记第 iii 步 xxx 移动的决策是 pip_ipi (也就是 xxx 在第 iii 次操作中移动到了 x+pix+p_ix+pi 位置)。则显然有 x2=(p1+p2+…+pn)2x^2=(p_1+p_2+\ldots+p_n)^2x2=(p1 +p2 +…+pn )2,也就可以得到 E[x2]=∑i=1nE[pi2]+2∑i=1n∑j=i+1nE[pipj]=n+2∑i=1n∑j=i+1nE[pipj]E[x^2]=\sum\limits_{i=1}^nE[p_i^2]+2\sum\limits_{i=1}^n\sum\limits_{j=i+1}^nE[p_ip_j]=n+2\sum\limits_{i=1}^n\sum\limits_{j=i+1}^nE[p_ip_j]E[x2]=i=1∑n E[pi2 ]+2i=1∑n j=i+1∑n E[pi pj ]=n+2i=1∑n j=i+1∑n E[pi pj ]。又因为决策之间是两两独立的,所以直接分类 pi,pjp_i,p_jpi ,pj 的取值分别算期望,可以得到 E[pipj]=0E[p_ip_j]=0E[pi pj ]=0,也就得到了 E[x2]=n⇒E[x]≤O(n)E[x^2]=n\Rightarrow E[x]\le O(\sqrt n)E[x2]=n⇒E[x]≤O(n )。 现在在上面的问题上扩展,考虑另外一个与其相似的问题: > 一个数轴,初始有一个点在 000 位置。现在这个点会移动 nnn 次,每一次有 12\frac1221 的概率点从 xxx 移动到 x+1x+1x+1,另外 12\frac1221 的概率点从 xxx 移动到 x−1x-1x−1。问移动完 nnn 次后,xxx 移动到的全部 n+1n+1n+1 个位置中绝对值最大的点的期望值是多少。 解决完上一个问题之后容易猜测答案还是 O(n)O(\sqrt n)O(n ) 级别的。下面给出一个证明: 设随机游走位置为 S0=0,Sk=ξ1+ξ2+⋯+ξkS_0=0,S_k=\xi_1+\xi_2+\cdots+\xi_kS0 =0,Sk =ξ1 +ξ2 +⋯+ξk ,其中每个 ξi\xi_iξi 有 12\frac1221 的概率为 111,另外 12\frac1221 的概率为 −1-1−1。为了方便,记 Mi=maxj=0i∣Sj∣M_i=\max\limits_{j=0}^i|S_j|Mi =j=0maxi ∣Sj ∣ 即前 iii 次移动中距离原点最远的距离是多少。 因为 MnM_nMn 是非负整数,所以 E[Mn]=∑t≥1Pr(Mn≥t)\mathbb E[M_n]=\sum_{t\ge1}\Pr(M_n\ge t)E[Mn ]=∑t≥1 Pr(Mn ≥t)。 所以只要我们能证明 Pr(Mn≥t)≤Ce−ct2/n\Pr(M_n\ge t)\le C e^{-c t^2/n}Pr(Mn ≥t)≤Ce−ct2/n,把这个式子对 ttt 求和,就会得到 E[Mn]=O(n)\mathbb E[M_n]=O(\sqrt n)E[Mn ]=O(n )。 事件 Mn≥tM_n\ge tMn ≥t 的意思是:在前 nnn 步里,曾经到过 ttt 或者 −t-t−t。所以 Pr(Mn≥t)≤Pr(max0≤k≤nSk≥t)+Pr(min0≤k≤nSk≤−t) \Pr(M_n\ge t) \le \Pr\Bigl(\max_{0\le k\le n}S_k\ge t\Bigr) + \Pr\Bigl(\min_{0\le k\le n}S_k\le -t\Bigr)Pr(Mn ≥t)≤Pr(max0≤k≤n Sk ≥t)+Pr(min0≤k≤n Sk ≤−t)。 由于对称性,这两项相等,因此有:Pr(Mn≥t)≤2Pr(max0≤k≤nSk≥t)\Pr(M_n\ge t)\le 2\Pr\Bigl(\max_{0\le k\le n}S_k\ge t\Bigr)Pr(Mn ≥t)≤2Pr(max0≤k≤n Sk ≥t)。 现在用一维随机游走最经典的“反射法”结论:Pr(max0≤k≤nSk≥t)≤2Pr(Sn≥t)\Pr\Bigl(\max_{0\le k\le n}S_k\ge t\Bigr)\le 2\Pr(S_n\ge t)Pr(max0≤k≤n Sk ≥t)≤2Pr(Sn ≥t),结合一下就可以得到 Pr(Mn≥t)≤4Pr(Sn≥t)\Pr(M_n\ge t)\le 4\Pr(S_n\ge t)Pr(Mn ≥t)≤4Pr(Sn ≥t)。 此时又因为 Sn=ξ1+⋯+ξnS_n=\xi_1+\cdots+\xi_nSn =ξ1 +⋯+ξn 是 nnn 个独立 ±1\pm1±1 的和,所以它的方差是 nnn,标准差是 n\sqrt nn 。更进一步,SnS_nSn 有高斯型尾估计:Pr(Sn≥t)≤e−t2/(2n)\Pr(S_n\ge t)\le e^{-t^2/(2n)}Pr(Sn ≥t)≤e−t2/(2n),因此 Pr(Mn≥t)≤4e−t2/(2n)\Pr(M_n\ge t)\le 4e^{-t^2/(2n)}Pr(Mn ≥t)≤4e−t2/(2n)。 结合一开始得到的式子,有: E[Mn]=∑t≥1Pr(Mn≥t)≤∑t≥14e−t2/(2n)\mathbb E[M_n]= \sum_{t\ge1}\Pr(M_n\ge t)\le\sum_{t\ge1}4e^{-t^2/(2n)}E[Mn ]=t≥1∑ Pr(Mn ≥t)≤t≥1∑ 4e−t2/(2n) 而这个和的量级就是 n\sqrt nn 。最简单的看法是把它和积分比较: ∑t≥1e−t2/(2n)≤∫0∞e−x2/(2n)dx=n∫0∞e−u2/2du=Cn\sum_{t\ge1}e^{-t^2/(2n)} \le \int_0^\infty e^{-x^2/(2n)}{dx}= \sqrt n\int_0^\infty e^{-u^2/2}du= C\sqrt n t≥1∑ e−t2/(2n)≤∫0∞ e−x2/(2n)dx=n ∫0∞ e−u2/2du=Cn 所以有 E[Mn]≤4Cn\mathbb E[M_n]\le 4C\sqrt nE[Mn ]≤4Cn 。于是得到最终结论: E[Mn]=O(n)\boxed{\mathbb E[M_n]=O(\sqrt n)} E[Mn ]=O(n ) 事实上,可以继续收紧上下界得到 E[Mn]∼πn2\mathbb E[M_n]\sim\sqrt{\frac{\pi n}2}E[Mn ]∼2πn ,但是我不会证,而且在实际题目中并不需要这么紧的上界,因此这里直接给出一个由 ChatGPT 5.4 Thinking 给出的证明过程: :::info[证明过程] 设随机游走的过程为: S0=0,Sk=∑i=1kξi,Pr(ξi=1)=Pr(ξi=−1)=12,S_0=0,\qquad S_k=\sum_{i=1}^k \xi_i,\qquad \Pr(\xi_i=1)=\Pr(\xi_i=-1)=\frac12, S0 =0,Sk =i=1∑k ξi ,Pr(ξi =1)=Pr(ξi =−1)=21 , 题目要求的是 Mn:=max0≤k≤n∣Sk∣M_n:=\max_{0\le k\le n}|S_k|Mn :=max0≤k≤n ∣Sk ∣ 的期望 E[Mn]\mathbb E[M_n]E[Mn ]。 1. 先写成尾和公式 因为 MnM_nMn 是非负整数值随机变量,所以: E[Mn]=∑m≥1Pr(Mn≥m).\mathbb E[M_n]=\sum_{m\ge1}\Pr(M_n\ge m). E[Mn ]=m≥1∑ Pr(Mn ≥m). 而 nnn 步最多走到距离 nnn,所以实际上: E[Mn]=∑m=1nPr(Mn≥m)\boxed{\mathbb E[M_n]=\sum_{m=1}^n \Pr(M_n\ge m)} E[Mn ]=m=1∑n Pr(Mn ≥m) 也就是: E[Mn]=∑m=1n(1−Pr(Mn<m))\boxed{\mathbb E[M_n]=\sum_{m=1}^n \Bigl(1-\Pr(M_n<m)\Bigr)} E[Mn ]=m=1∑n (1−Pr(Mn <m)) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 2. 精确公式 事件 Mn<mM_n<mMn <m 就是“前 nnn 步始终没有碰到 ±m\pm m±m”,也就是随机游走在区间 −m+1,−m+2,…,m−1{-m+1,-m+2,\dots,m-1}−m+1,−m+2,…,m−1 内存活到第 nnn 步。 这是经典吸收随机游走,谱分解可得: Pr(Mn<m)=1m∑j=0m−1(−1)jcot(2j+1)π4m,(cos(2j+1)π2m)n.\Pr(M_n<m) = \frac1m\sum_{j=0}^{m-1} (-1)^j \cot\frac{(2j+1)\pi}{4m}, \Bigl(\cos\frac{(2j+1)\pi}{2m}\Bigr)^n. Pr(Mn <m)=m1 j=0∑m−1 (−1)jcot4m(2j+1)π ,(cos2m(2j+1)π )n. 因此: E[Mn]=∑m=1n[1−1m∑j=0m−1(−1)jcot(2j+1)π4m,(cos(2j+1)π2m)n].\boxed{ \mathbb E[M_n] = \sum_{m=1}^n \left[ 1- \frac1m\sum_{j=0}^{m-1} (-1)^j \cot\frac{(2j+1)\pi}{4m}, \Bigl(\cos\frac{(2j+1)\pi}{2m}\Bigr)^n \right]. } E[Mn ]=m=1∑n [1−m1 j=0∑m−1 (−1)jcot4m(2j+1)π ,(cos2m(2j+1)π )n]. 这就是这个期望的一个标准精确表达式。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 3. 渐近结果 当 n→∞n\to\inftyn→∞ 时,有经典极限定理: Mnn ⟹ sup0≤t≤1∣Bt∣\frac{M_n}{\sqrt n}\ \Longrightarrow\ \sup_{0\le t\le 1}|B_t| n Mn ⟹ 0≤t≤1sup ∣Bt ∣ 其中 BtB_tBt 是标准布朗运动。并且该极限随机变量的期望是: E[sup0≤t≤1∣Bt∣]=π2\mathbb E\Bigl[\sup_{0\le t\le 1}|B_t|\Bigr] = \sqrt{\frac{\pi}{2}} E[0≤t≤1sup ∣Bt ∣]=2π 所以: E[Mn]∼πn2\boxed{\mathbb E[M_n]\sim \sqrt{\frac{\pi n}{2}}} E[Mn ]∼2πn 也就是主项约为: E[Mn]≈1.253314n.\mathbb E[M_n]\approx 1.253314\sqrt n. E[Mn ]≈1.253314n . ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 4. 对比一下末位置 注意这不是最后位置 ∣Sn∣|S_n|∣Sn ∣ 的期望。后者是 E∣Sn∣∼2nπ,\mathbb E|S_n|\sim \sqrt{\frac{2n}{\pi}},E∣Sn ∣∼π2n ,,而这里取的是全过程的最大绝对值,所以更大,主常数变成了 π2\sqrt{\frac{\pi}{2}}2π 。 5. 最终结论 精确值: E![max0≤k≤n∣Sk∣]=∑m=1n[1−1m∑j=0m−1(−1)jcot!(2j+1)π4m,(cos!(2j+1)π2m)n].\boxed{ \mathbb E!\left[\max_{0\le k\le n}|S_k|\right] = \sum_{m=1}^n \left[ 1- \frac1m\sum_{j=0}^{m-1} (-1)^j \cot!\frac{(2j+1)\pi}{4m}, \Bigl(\cos!\frac{(2j+1)\pi}{2m}\Bigr)^n \right]. } E![0≤k≤nmax ∣Sk ∣]=m=1∑n [1−m1 j=0∑m−1 (−1)jcot!4m(2j+1)π ,(cos!2m(2j+1)π )n]. 渐近值: E![max0≤k≤n∣Sk∣]∼πn2\boxed{ \mathbb E!\left[\max_{0\le k\le n}|S_k|\right] \sim \sqrt{\frac{\pi n}{2}}} E![0≤k≤nmax ∣Sk ∣]∼2πn ::: 解决问题 考虑用上面给出的 trick 解决一道经典题目! 题目给出的六边形网格不太好处理,因此容易想到把这个东西压扁,将六个方向修改为上,下,左,右,右上,左下。此时容易想到直接 dp。设 fi,x,y,j,kf_{i,x,y,j,k}fi,x,y,j,k 表示当前处理了前 iii 个 idea,L=j,G=kL=j,G=kL=j,G=k,当前网格的横坐标是 xxx,纵坐标是 yyy,是否是可行的状态。 考虑优化这个 dp。可行性 dp 通常有下面两种优化方法: * 把一维状态写到答案里。 * 用 bitset 优化。 这个问题看着很不能把状态写到答案里,因此考虑用 bitset 优化。发现 yyy 这个 dp 维度其实就是在做一次循环移位操作,用 bitset 优化可以让时间复杂度除一个 www,但是仍然难以通过。 考虑利用上面的 trick。注意到最后需要让所在的位置 (x,y)(x,y)(x,y) 回到 (0,0)(0,0)(0,0),而上面的 trick 在更高维度上也同样满足距离 (0,0)(0,0)(0,0) 的曼哈顿距离期望为 O(n)O(\sqrt n)O(n ) 级别。因此考虑直接随机打乱输入的 idea 顺序,此时对于距离原点超过 O(n)O(\sqrt n)O(n ) 的位置,其很大概率是可以被不超过 O(n)O(\sqrt n)O(n ) 的位置所替代的,因此只需要处理 x,y∈[−O(n),O(n)]\boldsymbol{x,y\in[-O(\sqrt n),O(\sqrt n)]}x,y∈[−O(n ),O(n )] 的部分,范围以外的 dp 值直接截断处理即可。此时算法的时间复杂度被优化到 O(n2p2w)O(\frac{n^2p^2}w)O(wn2p2 ),卡常后可以通过该题。 :::success[代码] 因为作者不太会卡常所以目前只有用 C++98 提交才能通过/kel ::: 练习 > 给定一个 nnn 个结点的树,每条边都有边权(边权可能为负)。你需要选择若干条有 444 条边组成的简单路径(可以不选),使得没有一条边被超过一条路径覆盖。问所有被路径覆盖的边的边权的和最大是多少。 > > 数据范围:2≤n≤2×1052\le n\le 2\times 10^52≤n≤2×105。 考虑一个暴力的 dp 做法。设 fi,0/1/2/3f_{i,0/1/2/3}fi,0/1/2/3 表示当前只处理 iii 结点为根的子树,iii 结点没有挂长度不为 444 的链 / 在子树里挂了一条长度为 1/2/31/2/31/2/3 的链,边权之和最大是多少。转移过程需要合并儿子结点的 dp 信息,考虑再记一个 dp 数组辅助转移:设 gi,0/1g_{i,0/1}gi,0/1 表示当前合并了若干个儿子结点的信息,其中儿子结点里长度为 000 的链比长度为 222 的链多 iii 条,长度为 111 的链数量 mod 2=0,1\bmod\ 2=0,1mod 2=0,1,边权和最大是多少(只记录这些信息是因为子树内合并链只能是长度为 0,20,20,2 的链对应匹配,长度为 111 的链单独匹配)。此时合并信息是简单的。 直接做转移时间复杂度为 O(n2)O(n^2)O(n2)。注意到辅助转移的 ggg 数组中 iii 维度维护的是两类儿子结点的链的差值,而一个儿子结点只能有最多一条连向父亲结点的链,最后可以转移到 fff 数组里的 ggg 也只有 g−1,∗,g0,∗,g1,∗g_{-1,*},g_{0,*},g_{1,*}g−1,∗ ,g0,∗ ,g1,∗ 三类。因此考虑把长度为 000 的链看作 111,长度为 222 的链看作 −1-1−1,则可以看作是在数轴上做随机游走,打乱儿子结点顺序后 gig_igi 这个维度只需要维护 O(n)O(\sqrt n)O(n ) 个 iii 的信息即可。此时算法的时间复杂度优化到 O(nn)O(n\sqrt n)O(nn ),可以通过该题。 :::success[代码] :::

旅游攻略(浙江嘉兴平湖)
1.东湖/明湖必去!!!夏天还有西瓜灯节(明湖)!🍉🍉🍉 2.李叔同纪念馆门口有鸽子!可以喂! 3.美食推荐:新仓小鲁苏,粽子(嘉兴),踏(ta)饼,西瓜😋😋 4.平湖博物馆:很漂亮,还有不定时活动!! 5.西瓜乐园:适合小朋友去! 6吾悦广场:平湖最好逛的商城!有海底捞,电影院,肯德基,蜜雪冰城…… (欢迎投稿!!!)


互动|用一句话证明你是信奥人
用一句话证明你是信奥人 hi,AC狗友们,玩梗时间又到啦! 只要一句话,让懂的人会心一笑,让不懂的人一脸懵——你就是本届“黑话王者”! 规则简单到像A+B Problem 在评论区留下一句只有信奥人才懂的梗/黑话/日常—— 可以是你的“当前状态”: > “我命由我不由CE” > “提交10次,AC 0次,心态9次” 也可以是你的“刷题习惯”: > “看到WA第一反应不是‘哇’,是‘Wrong Answer’” > “做梦都在想怎么优化那个O(n²)的循环” …… 🎁 奖励 活动截止,评论区符合参与条件的留言点赞TOP5每人获得, 罐头 × 50; @༺ཌༀ我要上浙大ༀད༻,@盛翰祺(不加团),@༺དༀ༒神.末日审判者༒ༀཌ༻,@格赫罗斯,@奶牛大学招生办 随机抽取5人,每人获得 罐头 × 20 @priority_queue, @Shirleynie,@浩云,@༺ཌༀ死·神ༀད༻,@上海交通大学-章老师 ⏰ 时间 即日起至 2026年3月29日 23:59 📮 参与方式 直接在本帖评论区留言,坐等点赞收割! ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 💚 来吧,让我看看谁的“信奥含量”超标! 往期互动


#创作计划#最小生成树的构造及应用
叠甲:没事干写一篇好玩,不喜勿喷,有问题欢迎指出,暂时已完结。 本文只讲KRUSKAL,我在VJUDGE拉了个比赛包含所有题目,A-R题为例题,S-Y为附加题。 前置知识:并查集,贪心,树的性质,请先行了解。 一、最小生成树的定义 > 生成树(spanning tree):一个连通无向图的生成子图,同时要求是树.也即在图的边集中选择 𝑛−1𝑛 −1n−1条,将所有顶点连通。我们定义无向连通图的最小生成树(Minimum Spanning Tree,MST)为边权和最小的生成树。 > FromFromFrom oi-wiki 二、KRUSKAL算法模板 Kruskal算法是一种贪心算法,非常好写,算法的思想是由边权从小到大遍历,只要两个节点还未联通,就把它们连上。维护连通性的问题,套用单次合并O(logn)O(\log n)O(logn) 或者 𝑂(α(𝑚))𝑂(\alpha(𝑚))O(α(m))的并查集即可。加上排序的O(mlogm)O(m\log m)O(mlogm),Kruskal算法的总复杂度为O(mlogm+mlogn)O(m \log m + m \log n)O(mlogm+mlogn)。 贴上模板代码(即A题代码) 三、例题 B 这就是最大生成树的模板,排序规则改掉就行了。 Code C 跑WWW遍最小生成树,注意在输入时给每条边加一个第几周开放的参数,跑最小生成树时检测边的开放时间是否小于等于当前时间即可,这样就不用每周都排序了。 Code D 假设能使用kkk个卫星设备,就相当于让kkk个点直接连通,在最小生成树中,一定会用k−1k-1k−1条边。那么最优方案就一定是把原图中最长的k−1k-1k−1条边的边权取消,只需输出最小生成树中第kkk长的边即可。 Code E 题目要求我们最大化任意两个部落之间的距离的最小值,实际上这个最小值就是在不同部落的任意两个居住点的最近距离。不难想到在部落内部尽量连较短的边,不让更短的边放在不同部落之间。因为要分为kkk个部落,因此只需要n−kn-kn−k条有用的边(遍历到这条边时两节点还未被联通的边)即可,所以直接输出第n−k+1n-k+1n−k+1条有用边的长度即可。(就是连结两个部落的边中最短的) Code F 构造为图论问题,快速幂预处理连边,没了。 Code G 在线算法不知道怎么办,考虑离线处理,把所有查询的边都放进去排序,跑最小生成树,跑的过程中如果是原本就有的边直接正常处理,如果是查询边,检测这条边是否有用(即两个点是否已联通),如果有用就把Yes放入答案,没有就放入No,注意查询之间相互独立,所以就算有用也千万不要加边。 Code H 直接连边O(n2)O(n^2)O(n2)指定炸,考虑删边,例如当xi≤xj≤xkx_i \leq x_j \leq x_kxi ≤xj ≤xk 时,只需要连接iii与jjj、jjj与kkk,而不需要连iii与kkk。那么我们按x,yx,yx,y分别排序后将相邻点连边即可。可以证明如果一条边是有效的,那么一定不会在按xxx排序和按yyy排序后都被鉴定为无效边。 Code I 就是求在不用第一条边的情况下,第一条边的两个点联通的最小边权。跑第2−m2-m2−m条边最小生成树过程中检测第一条边两个点的连通性即可,注意如果最终都无法联通,输出10910^9109。 Code J 首先买了第 III 样东西,再买第 JJJ样的情况显然可以看做一条边权为KI,JK_{I,J}KI,J 的边,那么直接买一样东西花费AAA元的情况怎么办呢?这时候就可以引入一个超级源点,即000号点,这样就可以把这种情况构造为一条从000联向任意一点的边权为AAA的边了。 Code K 和J题几乎一模一样,挖水井就是向超级源点建边,修筑水道就是普通连边。 Code L 不讲了,L≈\approx≈K,但是注意这是远古题目答案末尾一定要换行!!!我被这个坑了20分钟。 Code M 笑点解析: 感谢PPL友情出演 接近正解的错误方法PPL已经给我们介绍过了,就是建两个超级源点分别代表港口与机场,然后暴力跑Kruskal,但是这样有个问题:我们的目标不是让包括超级源点在内的所有点联通,只是1−n1-n1−n号点的联通,因此可能会出现无效连边(明明1−n1-n1−n号点已经联通了还非要去连接超级源点)。 那么怎么办呢?注意到超级源点可以用也可以不用,那么枚举这两个超级源点的使用情况跑4遍Kruskal即可,注意可以给每条边一个编号,说明它属于机场边,港口边还是道路边,这样就不需要每次枚举使用情况都排序了。 那么为什么J、K、L没有这个问题呢?因为J、K、L题都必须使用超级源点,但是这道题就不一样了。 Code N 先不考虑额外的MMM条边,只看如何最小化生成树的ax+aya_x+a_yax +ay 之和,显然最优方案是一个菊花图,即将所有点都直接连向axa_xax 最小的点。如果不考虑额外MMM条边时,一条边不在最小生成树内,那么再加入MMM条边后,也一定不需要考虑,所以只需要连上原始生成树的N−1N-1N−1条边和额外的MMM条边并跑Kruskal即可。 Code O 不讲了,O≈\approx≈K,建边的公式不同,改一下就行了。 Code P 看完前面的题,你会发现Road真不难 首先因为村庄数少,不难想到遍历所有村庄的修复状态跑2k2^k2k次最小生成树,时间复杂度O(2kmlogm)O(2^kmlogm)O(2kmlogm),48pts48pts48pts,考虑优化。 根据N题的剪枝方法,在不考虑村庄的情况下不在最小生成树内的边,有了村庄就更不可能在最小生成树内了。那么就可以预处理跑一边Kruskal,将最小生成树内的边放入新的边集,可以大幅缩减边数(1.1×106→1.1×1051.1\times10^6\to1.1\times10^51.1×106→1.1×105)。 根据M题的方法对包含村庄边在内的所有边进行预编号和预排序,这样就不用排2k2^k2k次序了。 最终时间复杂度O(mlogm+2knklogn)O(mlogm+2^knklogn)O(mlogm+2knklogn),也可以加上启发式合并O(mlogm+2knkα(n))O(mlogm+2^knk\alpha(n))O(mlogm+2knkα(n))。 Code Q 首先肯定是优先连载重限制较大的边最优,所以先将边权从大到小排序,然后用Kruskal重构树。它和普通的Kruskal有区别的一点是Kruskal重构树不是直接连边,而是创造一个虚拟节点,点权就是连接这条边的边权,让连接的两个点成为它的左右儿子,查询两个点路径的最小边权的最大值的问题就转化为查询两个点树上路径经过的虚拟节点的点权的最大值。 下列是关于Kruskal重构树的性质(从PPL那里偷来的): 结论:对于一个非叶节点 uuu,其点权必然大于其所有祖先的点权。 证明:若uuu的一个祖先的点权大于 uuu 的点权,则 uuu 的祖先必然先被加入重构树,成为 uuu的子树,矛盾。 推论111:对于两个叶节点 uuu , vvv ,其在重构树上的简单路径中点权的最小值必然是两点 LCA 的点权。 证明:两点 LCA 必然是两点简单路径深度最浅的节点。 推论 222:对于两个叶节点 uuu , vvv,其在原图上所有路径边权最小值的最大值必然是两个节点的 LCA 的点权。 证明:若原图上存在一条路径边权的最小值比两点 LCA 的点权(由推论2,该值即两点在树上的简单路径的最小值)更大,则那条边必然比两点 LCA 的点权那条边更早加入重构树,即那条边也应是重构树的一个非叶节点,矛盾。 所以朴素倍增求LCA即可。 Code R 不讲了,R≈\approx≈Q,上题是最大生成树,这题是最小生成树,没了。 Code 大家觉得我有必要写S-Y吗(实际上除了S我一道都不会)
有帮助,赞一个