日记
今天也是不颓。
所以到底是颓还是不颓?
没搞懂。
等洛谷上有题解了再去看一遍。
神 tm Adhoc。
考虑对于一个已经选好的路径,我们找到高度相差最大的两个点,显然有结论:在这俩点里转来转去肯定是比当前路径更优的。于是我们直接找到一对 ∣hu−hv∣ 最大的 u,v,答案就是 2∣hu−hv∣
只能说我太蠢了。
自己想到了 75%,还是挺不错的。
下次能想到 100% 就更好了。
想到之前考试有道题。设所有的数异或和为 sum,当 sum=0 时肯定平局。否则一定在 sum 的最高位决出胜负。问题转化为:有 n 个数,里面有奇数个 1,先后手轮流取,取了奇数个 1 的人获胜。
考虑分类讨论,设有 cnt 个 1:
有偶数数个 0(n 为奇数)
- 当 cnt≡1(mod4)
Alice 先取一个 1,之后都和 Bob 取相同的。Alice 取了奇数个 1,Alice 得了 MVP!!! - 当 cnt≡3(mod4)
Bob 总和 Alice 取相同的,Bob 取了奇数个 1,Bob 得了 MVP!!!
有奇数个 0(n 为偶数)
- 当 cnt≡1(mod4)
同上情况 1,必胜。 - 当 cnt≡3(mod4)
Alice 取了 0,变成上面的情况 2 的后手,必胜。
唐题。
我们考虑 dp。dpi 表示到 i 的 h 的数量(其实就是方案数啦)。考虑转移:dpi=dpi−1+∑dpj。其中 j 满足 (j,i] 是一个合法的括号序列。
考虑如何快速求这个 ∑dpj。我们想到记录一个 beli 表示将 (
视为 1,)
视为 −1 的前缀和。维护一个 sumj 表示所有 beli=j 的 dpi 之和。但是我们发现一个问题:这个括号序列:()()
,第 3 个会从第 1 个转移而来。但是很显然,)(
并不是一个合法的括号序列。我们考虑如何 ban 掉这种情况。
我们发现出现这种情况当且仅当有 k∈(j,i] 满足 belk<beli。我们考虑开一颗线段树。下标为 i 的地方维护 beli 出现的最后一个地方。对于每个 bel 开一个队列。在线段树上查询 lst 表示 [1,beli−1] 的区间最小值,把队列里在 lst 之前的全扔出去,并从 sumbeli 中减去。然后转移 dpi=dpi−1+sumbeli。然后更新线段树,将 i 压进队列并将 sumbeli 加上 dpi。
最后的答案就是 dpn。
还是 赛格门特吹 好用。
听 dpfs 讲的。
考虑 dp,设 dpi 表示以 i 结尾,满足 k 连续的最小代价。考虑转移:
dpi=min{dpi−1+widpj−1+sumwi−sumwj−1+sumci−sumcj+wj直接删掉 i不删 i其中 sumwi 表示 w 的前缀和。sumci 表示与 i 颜色相同的前缀和。第二个方程具体来说就是:删掉 [j,i] 之间的所有数,但是同色的不能删,于是把它加回来。而我们不知道 j 的相同颜色的前驱是啥,于是直接减掉 sumcj−wj。j 要满足 [j,i] 之间至少有 k 个同颜色的。
考虑优化。对于每个颜色开一个 min 数组表示 dpj−sumwj−1−sumcj+wj 的最小值。又对于每个颜色开一个队列。当队列长度等于 k−1 时,就把对头取出,更新 min 数组。然后转移 dpi=min{dpi−1+wi,minci+sumwi+sumci}。转移完了扔进队列。
明天的模拟赛和重庆八中联考。又可以丢 CW 的脸了。
每次一看到这个高达 16.7% 的得分率我就头大。明明打的对的题,总是因为一些莫名其妙的愿因挂分。要么是实现太优秀,常数爆炸,要么是没注意细节。
There’s no time left.