泛做题记录
乱写题目记录
5月
泣いた細胞が海に戻る
世迷言がへばりつく
燕が描いた軌跡を
なぞるように灰色の雲が来ている
25
ABC187 F Close Group
\(n\le 18\),状压。用 \(dege(x)\) 表示与节点 \(x\) 相连的节点集合,检查子图是否为完全图只需要检查子图是否为子图内所有 \(dege(x)\) 的子集即可。
用 \(f(S)\) 表示使 \(S\) 中满足题目条件的最少连通块个数,显然 \(f(S) = \min\limits_{T\sub S}(f(T) + f(S \backslash T))\)。
CF71E Nuclear Fusion
想一大堆……
其实只需要按顺序处理。在匹配完一个元素后在补集里找找能把前面都处理掉的集合并起来即可。code
27
CF599E Sandy and Nuts
也是状压dp,状态相当好设计,为 \(f(u, S)\)。
其实不是很难,需要满足题目的条件不复杂,分讨即可,感觉很普遍。
可以指定一节点防止算重,这点算是学到了。code
28
P4306 [JSOI2010] 连通数
感觉不是很牛的题,floyd + bitset 做完了。
30
P2315 [HNOI2005] 数三角形 \(\mathcal{O}(n^3)\)
\(\mathcal{O}(n^3)\) 的暴力可过呢,前缀和统计一下某个点能延续斜边多长,枚举底边统计下。
学了下 \(\mathcal{O}(n^2\log n)\) 的做法,算了明天写吧。
6月
手を取り合い
愛し合えたら
ついに叶わなかった夢を殺す
思考の成れ果て
その中枢には熱異常が起こっている
1
P2315 [HNOI2005] 数三角形 \(\mathcal{O}(n^2\log n)\)
算是一种很普遍的思路吧。确定一个限制,和很多数学题一样呢。
确定一个有贡献的区间,这样可以用线段树或树状数组维护了。还有能有贡献的有单调的特点,可以用优先队列维护。最近做的ABC408F是一样的。
有意思的是 \(\mathcal{O}(n^2\log n)\) 没有 \(\mathcal{O}(n^3)\) 快。
4
P10914 [蓝桥杯 2024 国 B] 跳石头
黄题,倒着转移,很简单。
我 bitset 某位赋值写f[i] |= (1 << c[i])。
P6134 [JSOI2015] 最小表示
对条件进行转化,使得原图任意两点的连通性保持不变,等价于删去一条边,该边两端仍连通。
显然是没有后效性的,因为和这条边可以被另一条路替代,而另一条路上的边和被删去的边显然没有关系。
然后是可达性统计,确定对于边 \((u, v)\) 存在 \(u\rightarrow x\) 和 \(x\rightarrow v\)。
感觉不是很难想的题。其实很难对全局维护什么,想着对整张图做什么很白痴是吗。
实际上对于局部有要求什么的题目很多啊。为什么我总是很难想到。
P3674 小清新人渣的本愿
bitset的基本操作和一个简单操作以及莫队。
好标准的题目。
6
UVA1439 独占访问2 Exclusive Access 2
没有见过的思路。把点分为一些集合,集合内部无连边,这样最长路就是集合个数减一。
剩下是状压dp。
10
UVA11825 Hackers' Crackdown
很简单的状态压缩,注意一下题目,不要像我一样看错两遍题意就很能切了。
11
P1013 [NOIP 1998 提高组] 进制位
证明进制为 \(n\)。然后以 \(\mathcal{O}(n!)\) 枚举每个字母代表的数字是什么。
时间复杂度 \(\mathcal{O}(n!n^2)\)。
P1039 [NOIP 2003 提高组] 侦探推理
\(\mathcal{O}(Dm)\) 暴力枚举罪犯和星期(\(D\) 表示一星期有几天),然后在这个条件下检查所有话。
处理输入是很烦人的,我觉得拼凑出合法的句子去比较输入比较好,会少很多情况。
时间复杂度最劣差不多是 \(\mathcal{O}(D^2mp^2)\)。
13
P1050 [NOIP 2005 普及组] 循环
打表找规律,容易发现前一位的循环节一定是这一位循环节的因子。
然后稍微思索一下可以发现不会超过 \(10\) 倍,因为这一位经过 \(10\) 个数仍没有变回去说明进入另一个循环了。
需要高精度,时间复杂度是 \(\mathcal{O}(k^3)\)。
P1240 诸侯安置
比较常见的思路。将图形的行列换位置不会改变答案。然后动态规划。
时间复杂度为 \(\mathcal{O}(n^2)\)
14
P8811 [蓝桥杯 2022 国 C] 六六大顺
推式子。然后高精度。
15
CF165E Compatible Numbers
其实去年也写了这题
*2200
高维前缀和板子。时间复杂度 \(\mathcal{O}(n2^n)\)。code
CF383E Vowels
*2700
补集思想,求元音字母的交集很困难,但求被其补集包含的集合就简单很多。
也是高维前缀和。时间复杂度是 \(\mathcal{O}(n2^n)\)(\(n\) 为字母个数)。code
CF449D Jzzhu and Numbers
*2400
明显比上题难
定义 \(f(\mathbb{S})\) 表示集合中含有子集 \(\mathbb{S}\) 的集合数量。高维后缀和处理。
显然 \(2^{f(\mathbb{S})}\) 是 \(\operatorname{AND}\limits_{j = 1}^k a_j \supset \mathbb{S}\) 的方案数。那高维差分处理一下,\(f(\mathbb{S})\) 就表示 \(\operatorname{AND}\limits_{j = 1}^k a_j = \mathbb{S}\) 的方案数。
\(f(0)\) 就是答案了。
时间复杂度\(\mathcal{O}(n2^n)\)。code
21
P2482 [SDOI2010] 猪国杀
很著名的一道模拟题目。确实是第一次做。
这题的复杂度难以估计,总之是跑的过去的。
如果纯粹由我来写的话,我可能会写几步就想优化吧。
但其实没必要,希望自己能好好记住。
27
P1561 [USACO12JAN] Mountain Climbing S
.是一道普通贪心题。
贪心策略是使有牛下山时尽可能使山上有牛。
需要将牛分为 \(U(i) \ge D(i)\) 和 \(U(i) \lt D(i)\) 两种情况,让第二类牛先上能满足贪心。
其他比较简单。时间复杂度 \(\mathcal{O}(n)\)。
P1484 种树
反悔贪心板子。
先贪心选最大,然后做一个用于反悔的坑。
变成链表上操作,方便模拟题意。
时间复杂度 \(\mathcal{O}(n\log n)\)。
7月
若痕迹都不曾亲眼见过
若连平凡都显得像个传说
身旁流萤探起万家灯火
再波澜坎坷 也可以依托
4
P1081 [NOIP 2012 提高组] 开车旅行
处理小A小B从某个城市出发下一个目的地是简单的。
因此可以用倍增处理出从某个城市出发 \(x\) 步的目的地。
时间复杂度 \(\mathcal{O}(n\log n)\)。
5
AGC018 C Coins
开始随便选,然后交换即可。
用六个堆维护每个人换成另外两种币的收益。
显然会有两两互换或三人互换的情况。容易证明多人互换的情况可以用前两种情况表示。
容易证明时间复杂度是 \(\mathcal{O}(n\log n)\)。code。
P3664 [USACO17OPEN] Modern Art P
简单题,前缀和能轻松检查是否有重合。注意特殊情况。
有点贪心思想。每个颜色的矩阵最小时可能的颜色数最大。
数组开小了
时间复杂度 \(\mathcal{O}(n^2)\)。
7
若痕迹都不曾亲眼见过
若连平凡都显得像个传说
身旁流萤探起万家灯火
再波澜坎坷 也可以依托
P4423 [BJWC2011] 最小三角形
大概是平面最近点对升级版。
\(\mathcal{O}(n^3)\) 暴力做法显然。考虑优化。
假设现在已经处理出左右两边的最小三角形,已得最小边长至少为 \(d\) ,考虑合并。
显然,到中轴线距离大于 \(d/2\) 的点是没用的,这大大降低了暴力的范围。
将有用的点排序,从小到大地暴力枚举每个点,显然如果枚举到的三个点有两个竖直/水平距离大于 \(d/2\),构成的三角形是没有贡献的,这又大大降低了暴力的范围。
于是就能过了。
实际上枚举 \(20\) 个点即可,所以很快。时间复杂度是 \(\mathcal{O}(n\log n)\),带一个比较大的常数。
P10484 送礼物
折半搜索板子题。
将礼物分为均分两类,对第一类枚举所有情况,统计一下。
然后第二类二分查找。
用
setT了,最好还是卡卡常注意边界情况
P2346 四子连棋
首先猜测答案不会太大,然后考虑 IDDFS。
剩下的就很基础了。
存在不用动的特殊情况
考虑特殊情况应该也是做题的一环
P8763 [蓝桥杯 2021 国 ABC] 异或变换
打表找规律,然后模拟一下,容易发现循环节是 \(2^{\lceil\log_2n\rceil}\)。
P8906 [USACO22DEC] Breakdown P
不容易想到折半搜索吧。我觉得怎么想都不自然
倒序处理,删边变加边,比较好想。考虑处理最短路径。
正序倒序最多分别分到 \(k = 4\)。\(k = 1\) 容易处理。
\(k = 2\) 时考虑全局维护 \(f(i, j)\) ,表示 \(i \rightarrow j\) 经过两条路的最短路径。
这是好处理的也不是很显然,因为加边 \((u, v)\) 只与 \(f(u, i), f(i, v), i\in V\) 有关。\(\mathcal{O}(n)\) 地处理。
则 \(1\rightarrow x\) 的路径长为 \(f(1, x)\),\(n\) 同理。
然后 \(k = 3\),\(k = 4\) 同理。对于 \(x\) 来说,\(1\rightarrow x\) 经过 \(3\) 条路径的长最小为 \(\min\{f(1, i) + w(i, x)\}\)。
\(k = 4\) 把 \(w(i, x)\) 换为 \(f(i, x)\) 即可。
处理完合并即可。
时间复杂度比较神奇吧……
仔细分析,大概是 \(\mathcal{O}(n^3)\) 的
8
P2501 [HAOI2006] 数字序列
容易想到将 \(a_i - i\) 转化为最长不降子序列问题。
第一问是简单的,用类似求最长上升子序列的 \(\mathcal{O}(n\log n)\) 的方式求出。
令 \(c(i)\) 为以 \(i\) 为结尾的最长不降子序列长度。
对于第二问,有结论,两个不改变的数中间变化后可以只有两种数,一种是左端点,一种是右端点。暴力枚举临界点。
最长不上升子序列的个数很多,每种都需要求,考虑动态规划。
定义 \(f(i)\) 为将 \([1, i]\) 变为以 \(i\) 为结尾的不降序列的最小变化量。
则有
容易前缀和处理。\(j\) 的位置可以用 vector 存。
时间复杂度是 \(\mathcal{O}(n^2)\),但能跑过……
9
P8548 小挖的买花
二维背包。
考虑到 \(f_j\le 500\),新鲜度的容量开到 \(501\) 即可,用 \(501\) 表示新鲜度大于 \(500\) 的情况。
然后转移很容易。
考虑到背包表示的是恰好的情况,容易用前缀后缀处理出至少和至多的情况。
这题目的边界情况好猎奇
P3188 [HNOI2007] 梦幻岛宝珠
分组背包。
因为题目保证的特殊条件,导致这题好像不是很难可以想到按 \(2^b\) 分组,背包的容量按 \(a\) 算,这样背包的容量就大大下降了。
定义 \(f(i, j)\) 表示 \(2^i\) 组内的元素,用 \(j\) 的容量的最大价值。处理这个是容易的。
然后考虑分组背包,定义 \(g(i, j)\) 表示用 \(j\) 个 \(2^i\) 的总价值能获得的最大代价。得到状态转移方程
转移用 \(f(i, j)\) 就行了。
关于初始化:
初始化显然应该与定义有关。
\(f(i, j)\) 应全制为 \(0\),因为后面考虑的是能获得的最大价值,所以不需要考不存在的状态。
P9437 『XYGOI round 1』一棵树
\(\color{#39C5BB}{[EASY]}\)
从别的节点到该节点和从该节点到别的节点是一样的。然后就好做了。
定义 \(f(u)\) 表示 \(sub(u)\) 中以 \(u\) 为结尾的途径的和。容易得到状态转移方程式
显然 \(root\) 的对答案贡献为 \(f(root)\),考虑换根。
得到 \(f(u)\) 中不经过 \(v\) 的途径的和 \(g(u) = f(u) - f(v) \times 10^{\lg a_u} + size(v) \times a_u\),当 \(v\) 为树的 \(root\) 时,\(sub(u)\) 的对贡献为 \(g(u) \times 10^{\lg{a_v}} + size(u) \times a_v\)。
答案就是 \(\sum\limits_{u\in V} f(u)\)。
P2466 [SDOI2008] Sue 的小球
\(\color{#FFA500}{[NORMAL]}\)
记 \(t_i\) 为接到第 \(i\) 个球的时间。答案是 \(\sum\limits_{i = 1}^{n} y_i - t_i\times v_i = \sum\limits_{i = 1}^n y_i - \sum\limits_{i = 1}^nt_i\times v_i\)。
\(\sum\limits_{i = 1}^n y_i\) 为定值,要求最小化 \(\sum\limits_{i = 1}^nt_i\times v_i\)。直接做大概不容易,换种思路,每次移动消耗的时间会令所有未接的球价值减小,从整体看,计算所有小球减少的权值,令其总和最小。
起点看成下落速度和高度为 \(0\) 的小球,将小球按 \(x\) 排序。对于某个时刻,接到的球构成一段区间,所有未接到的球单位时间减少的价值容易用前缀和后缀预处理。
考虑区间 DP,定义 \(f(i, j, 0/1)\) 表示编号 \([i, j]\) 的小球全部接完,停在左/右的最小代价,转移方程显然。
关于初始化
最值开始考虑错了,实际上是 \(1\times10^{13}\) 左右量级的,要开
long long,初始化用0x3f够了。但是我的
ans是int。糖丸了。
10
P1541 [NOIP 2010 提高组] 乌龟棋
\(\color{#39C5BB}{[EASY-]}\)
容易想到状态 \(f(i, j, k, l)\) 表示用了 \(i/j/k/l\) 张标有 \(1/2/3/4\) 的卡牌。转移显然。
P10236 [yLCPC2024] D. 排卡
\(\color{#39C5BB}{[EASY-]}\)
队列是一个不断缩小的区间,考虑区间动态规划。
定义 \(f(i, j, 0/1)\) 表示区间 \([i, j]\) 还未处理,上一个处理的在区间左/右的最大值。
转移显然,不过这样定义处理 \(f(i, i, 0/1)\) 时要直接计算对答案的贡献。
做的时候考虑了下后效性,处理 \([i, j]\) 时,\([1, i - 1]\) 和 \([j + 1, n]\) 的结果已经是最优的,且和 \([i, j]\) 没有关系,与 \([i, j]\) 的结果有关的显然只有 \(a_{i - 1}\) 和 \(a_{j + 1}\)
状态也是基于这设计的
P6419 [COCI 2014/2015 #1] Kamp
\(\color{#39C5BB}{[EASY]}\)
明显是换根 DP。
对于 \(u\) 来说,把所有人送回家的路径是一棵树,以下均为此树。
定义 \(len(u)\) 表示 \(sub(u)\) 中 \(u\) 到叶子节点的最长距离。答案是这颗树的边长和 \(sum(u) \times 2\) 减去 \(len(v)\)。
据上述,重要的是 \(sum(u)\) 和 \(len(u)\)。 \(len(u)\) 的转移可能会导致最长链的长度变化,因此需要维护次长距离。
转移都比较简单。
理解错题意地做了 1 个小时,一定要充分理解题目再做题啊!
11
P12844 [蓝桥杯 2025 国 A] 树
\(\color{#39C5BB}{[EASY+]}\)
令 \(v \in son(u)\),可以想到用 \(f(u, 0/1/2)\) 表示只考虑 \(sub(u)\),选择了 \(u\)/选择了 \(v\)/其余情况的方案数。
\(f(u, 0)\) 只能由 \(f(v, 2)\) 转移而来,\(f(u, 2)\) 从 \(f(v, 1), f(v, 2)\) 转移而来。
\(f(u, 1)\) 的转移稍显复杂,需要从\(f(v, 1)\) 和其他子树中转移出来,转移方程为
可以用前缀积和逆元 \(\mathcal{O}(\log V)\) 处理。
时间复杂度 \(\mathcal{O}(n\log V)\)。
大概是树上背包吧
P10793 『SpOI - R1』Double Champions
\(\color{#39C5BB}{[EASY+]}\)
无解是简单的。
首先需要发现如果存在包含关系,那么大区间无效,证明从略。去掉大区间,区间按左端点排序,然后按顺序分段即可。
P9400 「DBOI」Round 1 三班不一般
\(\color{#FFA500}{[NORMAL]}\)
定义 \(f(i, j)\) 表示处理了 \([1, i]\) 所有寝室,有连续 \(j\) 个寝室亮度大于 \(b\) 的方案数。
容易得到
观察下标,相当与一个区间开头加上一个数,末尾删去一个数。
开一个下标区间为 \([1, n + a]\) 的线段树,开始相当于只维护区间 \([n + 1, n + a]\),然后不断左移。区间乘维护简单。
不错的 trick!
数据结构优化 DP 怎么这么千变万化(叹气)
12
P6289 [COCI 2016/2017 #1] Vještica
\(\color{#FFA500}{[NORMAL]}\)
注意到公共前缀只和字符的出现次数相关。容易处理出 \(2^n\) 种情况的所有公共前缀。
考虑状压 DP,设 \(f(\mathbb S)\) 表示集合 \(\mathbb S\) 需要的最小节点数,\(b(\mathbb{S})\) 表示 \(\mathbb{S}\) 的最长公共前缀。
对于两个集合 \(\mathbb{P, Q\;(P \cap Q = \varnothing)}\),\(f(\mathbb{P \cup Q}) = f(\mathbb P) + f(\mathbb Q) - |b(\mathbb{P \cup Q})|\)。
有 \(b(\mathbb{P \cup Q}) \subset b(\mathbb P),b(\mathbb{P \cup Q}) \subset b(\mathbb Q)\), 证明从略。
P12026 [USACO25OPEN] Compatible Pairs S
\(\color{#39C5BB}{[EASY+]}\)
Sol 1
考虑向 \(A - id(i), B - id(i)\) 连边,注意 \(A = B\)。
发现形成的图没有除了自环以外的环,且每个节点的度数只能为 \(1\) 或 \(2\)。
几乎没见有人写过的证明
如果环长为奇数,会有一条边两个端点的和即被要求 \(A\) 和 \(B\),这是不可能的。
如果环长为偶数,发现从一个点出发两边系数 \(A, B\) 的系数恰好相反,则通过移项可以得到 \(A = B\)。
这样,对这个无向图遍历一遍计算答案即可,需要注意的是,自环要后跑,原因显然。
Sol 2
贪心。将奶牛群按 \(id\) 从小到大排序,先和 \(B - id\) 匹配,再和 \(A - id\) 匹配,正确性显然。注意一下自己与自己匹配就做完了。
P1330 封锁阳光大学
\(\color{#39C5BB}{[EASY-]}\)
二分图染色模板题。
31
P12734 理解
\(\color{#FFA500}{[NORMAL]}\)
定义状态 \(f(u, i)\) 表示处理了 \(sub(u)\) 中所有关键节点,任意时刻记住的节点不超过 \(i\) ,不包含处理 \(u\) 的最小时间。
初始化:由实际意义,对于关键节点 \(u\),需要有 \(f(u, 0) = \inf\),其他都为 \(0\)。
大部分的转移简单。需要注意到对于 \(f(u, i)\),可以有 \(v\in son(u)\),从 \(f(v, i)\) 转移到 \(f(u, i)\),因为处理完别的子树后可以把 \(u\) 删了。
状态很差呢……
为什么实际含义是这样的呢,方便转移吧,否则可能需要再开一维吧
8月
1
P11911 [PA 2025] 集合 1 / Zbiory 1
\(\color{#39C5BB}{[EASY-]}\)
集合操作容易用 bitset 维护。
注意全局变量不能开太大,很神秘啊,这个限制为 2GB。
P12197 Hash Killer I
\(\color{#FFA500}{[NORMAL]}\)
当 \(b\) 为偶数时,由于 \(b^{64}\equiv 0 \pmod M\),故只需要出现 aaa...a,baa...a,这样的字符串即可。
否则,令 \(t_0 = 0\),\(\overline{t_i}\) 表示 01 串 \(t_i\) 的取反。
令 \(t_i = t_{i - 1} + \overline{t_{i - 1}}\),\(hash(t_i) = b^{2^{i - 1}}hash(t_{i - 1}) + hash(\overline{t_{i - 1}}),hash(\overline{t_i}) = b^{2^{i - 1}}hash(\overline{t_{i - 1}}) + hash(t_{i - 1})\)。
当 \(g(i) = hash(t_i) - hash(\overline{t_i})\),则 \(g(i)\equiv 0\pmod M\) 时,出现哈希冲突。
化简可得 \(g(i) = (b^{2^{i - 1}} - 1)g(i - 1)\),即 \(g(i) = \prod_{j = 1}^i(b^{2^{j - 1}} - 1)g(i - 1)\)。
因为 \(b^{2^{i - 1}} - 1 = (b - 1)(b+1)(b^{2} + 1)(b^{2^{2}} + 1) \cdots(b^{2^{i - 2}} + 1)\)。所以 \(2^n\mid b^{2^{i - 1}} - 1\Longleftrightarrow 2^{\frac{i(i + 1)}{2}}\mid g(i)\)。
当 \(i = 11\) 时,有 \(\frac{i(i + 1)}{2} > 64\),故输出 \(t_{12}\) 即可。
这也太神秘了
打卡 Thue Morse 序列。
P12375 「LAOI-12」MST?
\(\color{#39C5BB}{[EASY]}\)
容易想到怎么做的数学题,意义不大。
由于做此题的时间跨度比较久,导致计算时采用了两种定义,寿命-=2hour,引以为戒。
做题没有深度思考,导致容易的写法没想到。
牢记 \(\sum_{i = 1}^n{i^2} = \dfrac{n^3}{3} + \dfrac{n ^2}{2} + \dfrac{n}{6}\)。
2
P12028 [USACO25OPEN] Moo Decomposition G
\(\color{#39C5BB}{[EASY-]}\)
想到倒序处理。注意幂数要开 long long。
P11766 「KFCOI Round #1」遥不可及 Sol 1
\(\color{#FFA500}{[NORMAL-]}\)
注意到对于任意节点,最长边一定经过直径的中心,找出中心,然后对每个节点考虑其所处的两种情况:从子树到外的最长链和从外到子树内的最长链。
3
P11766 「KFCOI Round #1」遥不可及 Sol 2
更容易想到一个很典的换根 DP,维护最长链,考虑到某些儿子的特殊性,单独维护一个次长链。
15
P2480 [SDOI2010] 古代猪文
\(\color{#FFA500}{[NORMAL-]}\)
题目要求 \(ans = g^{\sum_{d \mid n}\begin{pmatrix}n\\d\end{pmatrix}} \bmod 999911659\)。由欧拉定理容易得 \(ans \equiv g^{\sum_{d \mid n}\begin{pmatrix}n\\d\end{pmatrix}\bmod 999911658} \bmod 999911659\)。
显然求出 \(\sum_{d \mid n}\begin{pmatrix}n\\d\end{pmatrix}\bmod 999911658\) 后可以用快速幂。同时 \(999911658 = 2 \times 3 \times 4679 \times 35617\),不能用 Lucas 定理。但是对四个质因子分别应用 Lucas 定理,可以得到一个满足 CRT 的线性同余方程组。即
运用一下 exCRT 的思想,实际上求出的 \(x\) 满足 \(x \equiv \begin{pmatrix}n\\d\end{pmatrix}\pmod{999911659}\)。
剩下的就简单了。code。
注意到欧拉定理应用于 \(g\bot 999911659\),而 \(g\in [1, 1\times 10^9]\),可能相等,需要特判。
18
P13755 【MX-X17-T4】Yet another Game problem
二分答案,检查答案是否能大于 \(v\)。可以得到答案。考虑如何检查。
将 \(\{a\}\) 中大于 \(v\) 的看成 \(1\),小于等于 \(v\) 的看成 \(-1\)。则只要存在真后缀满足所有元素的和大于等于 \(0\),可以满足要求。
证明
数学归纳法。注意序列长为 \(2\) 时结论成立。
定义 \(suf(i) = \sum\limits_{j = i}^na_i\),对于一个后缀 \([p, n]\),如果 \(suf(p)\) 满足 \(suf(p) \ge 0\) 且在后缀所有 \(suf(i)\) 中严格最大,直接到 \(p\) 的位置,此时无论 Bob 怎么操作,新区间一定存在一个真后缀满足所有元素的和大于等于 \(0\)。
如果 \(suf(p)\) 不是严格最大的,其后第一个最大的是 \(suf(p')\),显然 Bob 只需要使区间变为 \([p, p'-1]\),区间内就不存在大于等于 \(0\) 的真后缀了。
不存在 \(suf(p) \ge 0\),则 \(p = n\)。不满足目标。
由证明可知,选的是严格后缀最大值的位置。
浙公网安备 33010602011771号