One Last Dance

One Last Dance

Can you give me one last kiss?

这次是真的最后一舞了

1.20 水土入住晚自习

由于上午下午的狂暴玩耍,感到有点困倦

但是问题不大,遗憾的是没有把机房里面的一些文章拷过来。而且一直配不来 vscode,于是选择不管。

做 第一次省选模拟赛 的题,觉得非常厉害。

学习并感悟了一下 T3 的思考方式,写了 T23 的代码。

20240109T3 cut

(fzoi 内置题解)天下无敌巧妙的状态设计。注意到平凡的状态设计 \(f[l][r]\) 本身成为了时间复杂度的瓶颈,考虑改变答案的计算方式。本来的计算方式是,\(ans= \sum_t 时刻\ t\ 存活数量\)注意到尝试用数学方法刻画出当前状态,令

\[F_t(i)= \begin{cases} t, i 当前存活\\ t_i, i 已经 G 了,t_i 表示 i 死的时刻 \end{cases} \]

那么 \(ans=\sum_{i=1}^n F_{\infin}(i)\)\(\sum_{i=1}^nF_0(i)\) 的计算是容易的,只需要计算 \(t=0\to \infin\) 的过程中每一个 \(t\to t+1\) 的增量变化即可。

这着实是一个 ad-hoc 的思考方法,这样思考的好处在于,类似于势能法算期望的技巧(不需要保证推导过程中的每一步都是充要的),在这里,我只需要构造出一个 \(F\),使得:

  • \(F_{\infin}\) 和原来答案相同
  • \(F_{t}\to F_{t+1}\) 的转移是容易的

那么就可以了。

其实在本题中,我们刻画时间的方式是关注当前已经 G 了那些东西,且 G 的一定是一个区间 \(L,R\),故下面用 \(L,R\) 代替 \(t\),可以说现在的构造是:

\[F_{L,R}(i)= \begin{cases} t, i 当前存活\\ t_i, i 已经 G 了,t_i 表示 i 死的时刻 \end{cases} \]

而这里面的 \(t\) 具体是多少已经不重要了,因为我们只关心增量。

注意到到最后所有的 \(i\) 都会取 \(t_i\),所以对于第一行可以魔改,有这样一个构造:

\[F_{L,R}(i)= \begin{cases} t+dis(p,i), i 当前存活\\ t_i, i 已经 G 了,t_i 表示 i 死的时刻 \end{cases} \]

其中 \(p\) 是目前所在的位置 \(L\) 或者 \(R\)

注意到这样的好处在于,当我从 \(p=R\) 移动到 \(R+1\) 的时候,所有 \(F_{L,R+1}(i\ge R+1)=F_{L,R}(i)\)

这意味着,对于一个固定的 \(L\),所有的 \(R\) 对应的 \(F_{L,R}\) 都一样。

注意到会出现的 \(L\)\(\le k\),会出现的 \(R\)\(\ge k\)

\(f_i\) 表示 \(\sum_j F_{i}(j)\)

比较最开始所设计的 \(f[l][r]\),发现上面的一系列操作实际上是通过一个巧妙的状态设计,使得对于一个 \(l\le k\)\(f^{\prime}[l][r]\) 都一样,那么自然只需要记录 \(l\) 而不需要记录 \(r\)

感觉非常震撼,这是一个从来没有出现过的角度,如果想要直接从 \(f[l][r]\) 里面砍一个维度是不可能的,因为 \(r\) 记录了一些重要的信息,但是居然通过这样一个状态的转化,就使得 \(r\) 失去了作用。感觉这个可能会对应着更高思考维度上的一些事情。

接下来,考虑 \(f\) 的转移,自然的,可以认为转移过程中每一个点都是 \(p\) 行径的拐点,那么:

\[f_j(j\ge k)=\min_{i\le k}\{f_i+(i-1)dis(i,j) \} \]

另一侧同理。

注意 \(dis\) 可以拆开,然后转移式会成为一个斜率优化的形式。经过分析,发现只需要单调栈维护下凸壳即可。\(O(n)\)

1.21 DAY1

感觉今天的内心有点不安,我应该怎样对待 OI?

上午开整网络流,发现自己又忘记了对最小割的理解,G

下午学习线性规划对偶相关,人给整自闭了,感觉这个玩意非常考验我的自学能力。

晚上放弃学习对偶相关,然后去举办乘凉州喵,花时间看懂了,但是没有时间写,明天来吧。

BZOJ4977 跳伞求生

经典费用流 \(\to\) 模拟费用流 \(\to\) 反悔贪心。

其实这里还有一个更为直接的贪心,本质和反悔贪心等价:即首先考虑尽可能打败敌人使得获得的 \(\sum (c_i-b_i)\) 最大。那么不妨把所有敌人按照 \(c-b\) 排序,然后顺次扫描,贪心地找到可以打败当前敌人的最小的 \(a_i\) 即可。

此时还剩下一些 \(a_i\) 没有使用,这些 \(a\) 可以替换 用于攻击敌人但是更小的 \(a_i\) ,想来这个过程大概是容易的。

AGC038F Two Permutations

通过 \(A,B\) 是排列这个限制,知道对于 \(P,Q\) 所对应的置换环,可以进行的操作是可以选择将每一个置换环拆成一个个自环或者保持不变。然后求 \(P_i\neq Q_i\) 的最大值。

这个看起来很最小割,先复习了一下 小 M 的作物 来回顾了一下最小割的意义。

最开始一直想错了,以为是求 \(P_i=Q_i\) 的数量的最大值。憨憨的,直接建立 \(2n\) 个点,经过分析,发现需要链接的关系形如 只有两者同时在 S 的时候才有贡献 \(1\) 之类,可以连出对应的边。

为了保证同一个置换环的点同时属于 \(S/T\),需要在这些点之间链接双向边。

但是这样的问题在于复杂度不对了,链接这些双向边之后,网络流图不是二分图。

首先注意题目所求的是不等的对数的最大值。

对于每一个置换环建立一个点,直接省略掉双向边。

发现此时存在的情况是可能要求,如果两者不属于同一侧,那么应当被割掉 \(1\)

(下面 pqab 好像写反了)

所以,令 \(p_i\) 属于 \(S\)\(q_i\) 属于 \(T\) 的意义是拆成自环。

考虑每一个位置 \(i\)

  • \(a_i=i,b_i\neq i\),那么当且仅当 \(q\) 不拆(即 \(S\) 可以到达 \(q\)) ,需要被割掉 \(1\),所以链接 \(q\to T\) 即可。
  • \(a_i\neq i,b_i\neq i,a_i\neq b_i\),那么当且仅当两者都不拆的时候,需要被割掉 \(1\),链接 \(p\to q\)

其他情况类似。

ARC107F Sum of Abs

非常厉害的题目,一个很好的思考方式。

对于绝对值,经典的处理方式是变成 \(\max\{+,-\}\),于是现在的问题变成了给每一个数字赋一个 \(coef_i=\{-1,0,1\}\),使得如果两个点有边相连,那么要么二者某一个的 \(coef=0\),要么二者的 \(coef\) 相同。这样就处理了联通块的限制。然后求 \(\sum coef_ib_i\) 的最大值。

这看起来可以被转化为一个最小割的问题,但是问题是这里有 3 种不同的状态。

solution:

由于有三个状态需要表达,所以考虑将一个点拆成 \(X,Y\),并链接边 \((Y,X,\infin)\),表示这条边一定不能被割掉。

于是,此时 \(X,Y\) 的联通状态只有三种:\((S,S),(T,T),(S,T)\),令其分别代表 \(1,-1,0\)

注意到, \(X=T\)\(-1\) 等价; \(Y=S\)\(1\) 等价。

所以,可以这样分配权值:

  • 如果 \(b>0\),那么如果是 \(-1\) 的时候应当被割掉 \(2b\),所以连边 \((S,X,2b)\),这样如果想要 \(X=T\),必须割掉这条边。
  • 如果 \(b<0\),那么如果是 \(1\) 的时候那么应当被割掉 \(-2b\),连边 \((Y,T,-2b)\)
  • 连边 \((X,Y,a+2|b|)\) ,如果 \((X,Y)=(S,T)\),那么这条边自然不能留。

考虑怎么处理联通块的限制:

  • 如果 \(X_j=T\),那么 \(X_i=T\):所以连接 \((Y_i,X_j,\infin)\),这样当 \(X_j=T\) 的时候,\(Y_i\) 必不能是 \(S\)
  • 同理。即思路是通过连边,使得另外一种情况不合法,即使得 \(S,T\) 联通。

这里其实是一个非常深刻的对于最小割的理解,由上述对于 1,-1 的等价条件分析容易明白正确性。暴力模拟结合最小割可以证明正确性。即在进行建模的时候,一定要注意保证连边的时候不会使得其他的情况被否定之类。

二分图,做就好了。

(其实更为通用的解法是,\(X,Y\) 共有 \(4\) 条边,然后不妨暴力解方程的形式,来分配这四条边的权值,只不过由于这里只用到了两条边,所以 \((S,Y),(X,T)\) 这两条边并没有建立出来。对于建立出来的情况,需要注意一个细节,就是我为了保证我割边的意义是正确的,即一定只能恰好割两条边而不在跑网络流的过程中莫名其妙割了多条,我需要给这些分配的权值额外加上一个大常熟 \(C\),然后最后减去 \(2mC\) 之类。然后,由于有了一个大常数 \(C\),所以要注意前置对于 \(inf\) 的取法)

同时注意这里由于没有连接 \((S,Y),(X,T)\),所以实际上 \((Y,X,inf)\) 这条边可连可不连。

Gym101471J Son of Pipe Stream

有趣的题目。

solution:

首先这个 \(v\) 是骗人的,由于 \(f\) 可以取到实数,所以可以直接看做是一个 \(v\times f\) 的整体的流,对于这个新流最后的流量,计算的时候改成 \((\frac{F}v)^a\) 就可以了。

所以现在其实是两种不同的水。

自然可以想到,先不管水的不同,连一个超级源流出最大流 \(Z\),这个 \(Z\) 是由 \(F+W=Z\) 组成的。

进行一个猜想,所有的 \((F,W)\) 流满足下述条件都可以取到:

  • \(F\le Fmax\),只以 \(F\) 作为源点流出来的。
  • \(W\le Wmax\)
  • \(F+W\le Z\)

正确性比较显然,考虑 \((Fmax,Z-Fmax)\) 这样的极端情况,注意到最大流和增广的顺序无关,考虑一下最小割边中水流的分配。( \(Fmax\) 流中的最小割应当是 \(Z\) 流的一个真子集?)

自然地,认为答案肯定在 \(F+W=Z\) 的情况取到。

考虑答案的计算式:

\[F^aW^{1-a}=F^{a}(Z-F)^{1-a} \]

这是关于 \(F\) 的一个函数,然后 \(F\) 的定义域还有一个限制。

那么这其实就是一个数学问题,求导,发现导函数零点在 \(F=aZ\),且知道原函数是一个单峰函数,于是希望尽可能地接近 \(aZ\) 可以取到定义域内的最大值。

经过对于定义域的简单分讨,可以得到最优解时候的流量 \(F^{*},W^{*}\)

构造方案,假如直接从 Flubber 工厂开始跑 \(F^{*}\) 的流显然是不正确的,原因是可能在能流流量 Z 的最大流中,还需要对上述形成的方案做若干退流。

那么,还是先跑一个 \(Z\) 流,然后只保留下最大流边以及其对应流量,然后跑 \(F^{*}\) 就正确了。

CF1307G Cow and Exercise

线性规划,恐怖如斯。给我狠狠地折磨了。

再次复习了一遍线性规划的对偶,并通过高贵的 DTU 的 ppt 讲义自学了一下费用流的对偶。

然后看题解,发现还是看不懂。

复习了一下单纯性算法,虽然这道题并没有使用到。

偶然看到 拉格朗日对偶, 看了一小会儿发现不太能懂,润了。

开始通过 pb 的视频pbpb(cnblogs.com)用力理解这道题的官方 solution(pb 做法 0),发现懂了一半。

用力看 luogu 题解区的线性规划方法(pb 做法 1),看不懂他的对偶过程,经过下方另外一篇题解,勉强理解了到底是咋对偶的。但是还是不知道答案是咋算出来的。

放弃了线性对偶,看 luogu 最高赞 人类智慧,一通全通了上面的做法。

solution:直接看 luogu 的吧 /wn

1.22 友谊赛

上午打的时候并不是非常投入,状态没有调整过来,感觉有点像 NOIP 的吓人状态了。

先把题目都大致思考了一点。

T1 比较快的时间想到了,最开始思考了一下长链剖分之类,但是发现合并的时候的确是有问题。然后还是淀粉质,居然有点不会了,自己把重新理解了一遍,40min 左右写完。

然后开始做 T2,思考的时候就已经知道是大分类讨论题,也知道自己要写很多而且最后大概是调不出来的。但是坚持写下去,于是间间断断的就在走神。

最后总算写完了,接近 10kb,而且是不打空格的那种。但是一直调不过第一个砂玻样例,G。

出来心态很平和,但是很不满这个乡村基的偷工减料。

下午在车上给 czm 化疗了一下,也算是第一次和别人讲了讲自己对于一些事情,一些观念的理解。希望能帮助到几个人吧。

到机房很困,因为没有睡午觉。平时一直都有这个习惯的。

发现 T1 挂成 50pts,原来是取模没有取完,首先谴责xxx,其次谴责大样例。

发现 T2 思路爆了,想的太 naive 了,以为路径的形状只能是形如 四甲基乙烯,糗大。

吃完饭趴了15min.

晚上给小学妹讲了一下题目,感觉他们好强啊,原来是 5 年级就开始学的。但是这不重要,我有自己的机遇。

终于看懂了 T2 STD,觉得很妙,算得真好啊。

晚上补充我的 OI tricks ,在写日期 20240122 的时候觉得非常感慨,感觉自己能在这个时间点还能够学 OI 就已经是一个奇迹了。

记得自己似乎还有点东西想说的,但是实在想不起来了,就这样。

T2

觉得这种直接在 DAG 上按照拓扑序转移 DP,而直截地具有正确性,是之前没有注意到的角度,理解起来也感觉有点奇异,可能还并没有理解到其精髓。

感觉自己并不能很自然地想到这样的转移方式,考场上都是 f[x][y] 和 F[x] 分开处理两条路径在同一条道路上/不在同一条走。

正解阿巴阿巴讨论一点转移,都是考场上大致都讨论对了的,狂暴学习了一下 std,然后写写写。

1.23 模拟赛

感觉自己好愚蠢啊,菜死了。

考试的 4h30min 是否集中呢?我认为答案是否定的,认为一直都缺少一种长时间集中的能力,总是会被各种杂念干扰。那么这个自然很难说叫做尽了全力了。

由于 T3 是之前大致思路都看完了的题,所以场上没做。

T1 爆冲 3h30min,T2 1h。也许在晚上现在写总结的时候看来,也不妨可以称作一段美妙的经历。

感觉 jsy 好厉害啊,宛如 jly 再临,难道 FZOI 是蒋氏天下。难以想象这个是一个初三的学生,受到了极大的震撼。

下午狂暴调 T1,反悔贪心打死都写不对。晚上写 T3 倒是比较顺利。

幸福又痛苦,疲惫又轻松,且将这复杂难明的心绪托付给月分明。

T1 2023集训队互测R1T1 astral birth

T1,由于放在 T1 的位置,而且知道原题也是 胡策R1T1,所以认为这道题大概是一道结论题之类,肯定是存在了某一个非常简单厉害的结论之后,直接贪心就能做完。

于是一直在思考贪心的方法,首先根据样例,猜测我划分的方案应该是可以继承的,即可以通过类似增量的方式,从 \(m=x\) 的方案多增加一步推到到 \(m=x+1\) 的位置。

然后开始推答案的计算贡献形式,很遗憾的,这一步就搞错了,我认为的是,是当前局面一些段取 \(cnt0\),一些取 \(cnt1\);中间一个过渡段,取到 \(pre0+cnt1/suf1+cnt0\),但是实际上这个过渡段可以取到他的 LIS,即可能不仅仅是前后缀之类。

受此启发,称一个 \(cnt1>cnt0\) 的块叫做 \(I\) 类块,否则叫做 \(O\) 类块。

注意到一个连续段可以缩成一个 0/1。设一共有 \(m\) 个连续段。

觉得这个分裂很难做,正难则反,考虑做合并,反正最后分成 m-1 个部分的时候答案是 n 了。

考虑如何合并,猜测每次拆分出的段一定是一个单纯的段,即一定是只包含一种数的段。

由于涉及到对于中间过渡段的 pre/suf 的分析影响,大力分析了消减一个 \(I\) 类块的前缀 0/1,\(I\) 类块的后缀 0/1,等等;分析了过程中 \(I,O\) 可能出现的转化之类。发现上面那个结论是假的,理论上不正确,同时,对于第一刀,常常是不会砍在一个单纯段的旁边的。

看起来好像很寄。

出去吹风走了几步冷静一下。灵光一现,发现贡献等价于拆成 m+1 组,而不考虑过渡段的问题。

赶紧回去在草稿纸上证明,碰巧的,我的错误的计算贡献的方式也符合这个结论。

然后就继续歪到 sb 贪心去了。距离正解还差一步转化。

小结:

分析错了的:

  • 过渡段的贡献计算方式
  • 第一个段和最后一个段可以合并(后改正)
  • sb 贪心。

分析正确的:

  • 连续段可以缩,即砍在 11 的中间没有用。
  • 每次拆分出的段一定是一个单纯的段,即一定是只包含一种数的段
  • 灵光一现,发现贡献等价于拆成 m+1 组,而不考虑过渡段的问题。

对这一闪的灵光有点感动。

solution:

DP 啊哥,为什么不 DP? DP 65pts 部分分。怎么评价?哥?

感觉考场上根本没有意识到这个东西可以 DP 做,思考部分分的时候发现不会写部分分然后直接零蛋。

考虑对 \(2^n\) 种划分的方式进行 DP,设 \(f_{i,j,0/1}\) 表示 i 是第 \(j\) 组的结尾,前面是否出现过过渡段。

转移考虑枚举下一个组的结尾 \(r\),根据是否选择成为过渡段,而对应加上贡献。

这样是 \(O(n^4)\) 的,考虑减少转移的复杂度。

经典的,对于这种一次从 \(i\to r\),需要枚举 \(r\) 而导致复杂度上升的 DP,考虑转化成为一步步走。

巧妙地,设 \(f_{i,j,k=0/1,h=0/1}\) 表示前 \(i\) 个数,分成了 \(j\) 段,且第 \(j\) 段可以扩展,想要扩展的是数字 \(h\)\(k\) 意义不变。

特别的转移是,对于过渡段,\(f[i-1][j][0][0] \to f[i][j][1][1]\)

通过这个 DP,考察一下 \(k\) 的作用,容易发现等价于本来可以分 \(m\) 组,现在可以分 \(m+1\) 组。

所以其实可以直接设 \(f_{i,j,h}\)\(ans[m]=f_{n,m+1,0/1}\)

DP 复杂度来到 \(O(n^2)\) 的瓶颈。

继续考察这个 DP 做的事情。

发现其实等价于挑出一个最长的子序列,使得这个新的子序列的连续段数=x+1。(其实这个观察,就按照我考场的想法,也是基本上就能做到这个位置的,只是没有注意到这部转化。这启示一定要多多回头审视过程,多角度考虑过程的意义

挑出一个最长子序列不好做,在这个位置做正难则反,考虑本来挑出的子序列就是原序列,考虑对于形如 010 的这种,考虑删去 1 段,并将两侧的 0 合并成为一段的过程。过程答案的损失是 1 的长度,直截的考虑是每次删去最短的。

但是又注意到,对于 01(01)010 删去括号内的 01 其实非常亏,因为这其实删去一个本来已经合并起来的 00 的一个 0。

所以,当我删去某一个位置的时候,旁边的两个位置都不能删。这是经典的反悔贪心。

特殊的,注意到删除中间的位置会使得 连续段 数量-2,而删去最左/右只会 -1。

小问题,四种情况跑一遍,分别钦定一下即可。(但是有一坨细节,非常好双向链表,使我代码旋转)

T2 2023集训队互测 R1T3 树

略写了。

依照之前做过的某道题的经验,上了一个树剖得到了一个小常熟 2log 做法企图卡过去但是失败了。

正解还是在考虑按照层来确定,果然是结合分治方法。这个角度当时想过,但是最后放弃了。

这种题,确定出 图 的形态之类,都是先找到一个判定方法,然后分治判定之类。

T3 2023集训队互测 R3T2 谢谢喵。

很厉害的 DS 题。

树上询问,一定要注意考虑树上差分的方法。

一个崭新的树链剖分的使用角度:划分出轻重儿子之后,可以暴力 nlogn 扫描轻子树而获得对于一条重链的所有“旁支”的信息。

1.24 自习

准备去给友谊赛T3sequence 干了。

早上过来刚刚看了一点 CH 定理相关,重新理解了一下特征值之类,然后就被 yr 拉去看她的 THUSC 列表,对 D1T1 D1T2 都进行了思考讨论。过程中发现自己对于 一类树上拼路径问题(子树信息合并问题),以及对于树套树的理解不够深入,于是进行了一个复习。

下午过来继续准备 sequence,被特征值,特征向量,特征根 等等搞乱了,感觉没有搞明白 CH 定理的基本逻辑。

然后去见识了一下 yr D1T2 我没有想到的 淀粉质+线段树 的代码。看了 D1T3,发现是高维前缀和,但是理解了一段时间,修正了自己之前的理解。

然后去直接问了 jsy 他的 sequence 的做法,受到了震撼,非常高明。jsy 真的啥都会,而且今天好像也在学习我没听说过的科技。不由得感慨,也许我确实还不够努力。

看 jsy 的代码,以为他用了某种我没有见过的 分治FFT 的用法,然后去复习了一下分治 FFT,然后发现看错了。

继续在 CH 的泥潭里面探索,完全依赖官老师的遗产而前进。终于,通过惊心动魄的思考,对这坨关系有了隐约笨拙的理解。

偶然发现 luogu 居然有常系数线性递推的模版题,非常高兴,终于有这种比较详尽的资料的。

晚自习通过努力并结合多方面的资料,搞清楚了。感觉之所以花费了这么多时间的原因在于最开始的时候没有找到一些逻辑完整的资料。那么这么低的效率,是否是在浪费时间呢?不是的,脚步不妨放慢一点,在自己探索过程中,虽然心里面非常焦急,但是确实一步步地前进着,思考着。

不知道为什么,晚上本来该安安心心的把这件事情彻彻底底搞完,但是没忍住,继续看 yr 的题。复习了一下 巧克力(随机分组+中位数二分+斯坦纳树),思考 杜老师

warning:ntt 原理完全忘了只会背板子。基本子串字典。

1.25

早上脑子不是很好,洗了把脸清醒一下。

完成了 Cayley-Hamilton 定理学习笔记,诚意之作,好!

认为今天上/下午状态都不够紧张,还是应当更激动一点。可能是因为中午没睡好,有点睡不着,躺在床上脑子反而很清醒,干脆用来想 今天上午发现的,对于 CH 定理应用的一个矛盾点 之类去了。最后迷迷糊糊,睡得很浅。

要被气疯了。晚上下午在调题,主要在调 PTZ winter 2020 Day2 G Ambiguous Encoding 和 Gym 104821E Extending Distance,调题过程中有一个共同点,就是首先写了一发没写对,然后肉眼没看到问题,然后写了一个对拍,很快就找到原来是一个细节地方写挂了。但是愚蠢的地方在于,改正这个细节之后,不去再交一发,而是还认为这是一份有问题的代码,然后去把数个环节都写完一遍对拍之后,唯唯诺诺地提交发现突然就过了!

感觉浪费了大量的时间。主要问题在于可能经过几天的学习,整个人还是有点疲惫了,晚上脑子确实也如同浆糊一般,保留了思考题目的能力,但是失去了一些常识性的逻辑推断。大概是所有的脑力都用于去推断代码逻辑了,md。

真气疯了!!!

「CF402E」Strictly Positive Matrix

注意到要么是 0 要么 \(>0\),且主对角线上存在 \(\neq 0\)

考虑矩阵乘法的意义,自然想到看成是邻接矩阵。

注意不能简单认为只要图联通就好了。随便举一个反例,因为这里是矩阵自己和自己做乘法,有一点区别。

solution:考察最后矩阵情况,那么合法条件等价于原图强联通。

CF1667E Centroid Probabilities

挺厉害的计数题,感觉有段时间没有做过计数题了,略显生疏。

自己思考的话,考虑容斥,钦定一个巨大子树之类,但是没有往下想。

solution:

考虑重心的第三定义,一个点是重心等价于它是最深的子树大小 \(\ge n/2\) 的点。

计算出 \(f_i\) 表示 \(siz_i\ge n/2\) 的方案数,通过退式子可以做到 \(O(1)\)

\(g_i\) 表示答案,由定义,\(f_i\) 中算多的是存在某一个 \(j>i\) 使得 \(g_j\) 才是重心。

同时要求 \(i\) 得是 \(j\) 的祖先,考虑 \(j\) 不断向根跳,不断选父亲的过程,容易发现只关心从 \(>i\) 的最后一个点选父亲的时候是否选到 \(i\),还是说选到 \(<i\)。如果选到 \(<i\),那么此时的方案不在 \(f_i\) 内。所以这个概率是 \(\frac 1i\)

所以 \(g_i=f_i-\frac 1i \sum_{j=i+1}^n g_j\)

还是感觉非常厉害。

AGC019F Yes or No

这就是 AGC。首先有 sb DP,但是我优化不动。

solution:

转二维平面行走问题,感觉非常 ad-hoc

小粉兔吧/hsh

PTZ winter 2020 Day2 G Ambiguous Encoding

sb 题。

PTZ winter 2020 Day3 F Farm of Monsters

反悔贪心题,但是我就是想不到这道题可以做反悔贪心。

Gym 104821E Extending Distance

对于平面图最小割转对偶图最短路的逆用。

考虑平面图最短路转对偶图最小割。那么现在的目标是使得最小割增加 k,这个是简单费用流。

1.26

上午听 pb,都很考验思维,能听懂大概但是自己想不出来。群友们都放假了,我的心情也有点浮躁,好想摆烂啊————

中午调整了一下心态,认为我不应忘了把目光放长远一点。放到长远未来的回望,放到眼前当下的吴武陵。

下午,给看了一段时间的 杜老师 给干了,然后把视频比较快地回放了一遍,把第一遍没弄明白的点听了一下。写了一点题。

晚上口胡了 thu 的博弈论 T1,胡了 20min 胡出来了?

写了一点题,但是好想放假!今天中午第一次想起来食堂一楼是有面食的,吃了一次,结果晚上去的时候就发现没有了,一问可能以后也没有了/fn/fn/fn;甚至超市今天也不开,我要放假/oh/oh/oh

本来还在写题,然后被 yr 拉住了。yr 在她对 czm 的化疗之后,产生了一些问题。于是我就又花了很多的时间去给 yr 打字讲了一下我的一些观点,于是总结都没写完/cy/cy 但是也对一些之前没有想清楚的问题,有了一定深度的思考。

发现其实自己以前很多的逻辑链条都有点忘记了,但是不重要,只要我还在向前走。

希望这也不算是在浪费时间吧,虽然觉得上课时间不应该做这些事情,我应该以一个常规备赛省选的选手的标准来要求,可能才能算得上不留遗憾。

「THUSCH2017」杜老师

前置题目:「CF895C」 Square Subsets

经过 luogu 标签提示,考虑线性基,那么可以想到把奇偶性表示成为 0/1 塞进线性基之类。

然后自然根号讨论一下 mxprime 的大小,可以得到一个比较合理的做法。

但是时间复杂度还是爆,主要问题依旧在于插入线性基的时间复杂度。

solution:

观察到如果区间长度超过某一个范围,那么线性基很容易被塞满,即一个素数有对应线性基只需要 \(\lfloor \frac{l-1}p\rfloor \neq \lfloor \frac rp \rfloor\)

CF1887E Good Colorings

肯定要考虑为什么题目保证有解,那么为什么呢?

solution:

pb 在尝试归纳证明题目有解的过程中,注意到比较困难的情况是每一行每一列都恰好有两个已知数字的情况。

那么这个可以比较自然地联想到 网格图 \(\to\) 二分图的套路。

那么肯定形成了若干个环,目标是得到一个四元环,使得环上没有相同边全。

然后结合操作次数 \(\le 10\sim\log n\) 的限制,可以想到每次从中间问一条边把环拆成两半,而正好可以保留下其中一半。

CF1656I Neighbour Ordering

pb:做题的思路:

  1. 所有有性质的图,强行构造

  2. 构造不出来,说明性质很强,考虑什么样的图才能有构造。

始终秉持从易到难考虑的原则,才能下手问题。即秉持一个规约的思想。

solution:

从环开始考虑。

考虑加边,发现加的边上不能加点。那么这意味着一定可以找到哈密顿回路。

考虑在拉出哈密顿路的过程中,边的关系会发现一些变化,现在可能有很多条边。发现如果不是平面图,那么也 G 了。

于是就是上面两个条件。

没写代码/hsh。感觉不好写

Google Code Jam 2018 Round 3 B

感觉 pb 的题面大概是给错了吧,什么叫做 构造一个图,使得没有图和他同构;但是交互库又会返回一个编号被打乱的图给我,让我复原原标号。

难道交互库返回给我的这个图,和原图不是同构的吗?

我觉得,从最后复原标号的意图来分析,题目的意思应该是构造一个 \(n\) 点,每个点度数均为 4 的带标号无向图,使得图里面没有“等效氢”。

solution:

进行一个感性,发现如果随机连边,而且每一个点的度数还是 4 ,那么看起来很难搞出一个有等效氢的东西。

考虑随机一个图,考虑怎么检查这个图是没有等效氢的,假如没有,那么就赢了

利用 同构判定鸡 的算法 3,反正图是我们随出来的,所以可以认为这个算法三有正确性,即最开始给每一个点标 \(1\),然后一轮迭代对每一个点周围形成的可重集 hash 之后重标号,一直做到稳定。

Ptz Winter 2021 Day4I Color

solution:

对于每一个颜色单独考虑,发现最后可以视作 \(\frac{m+1}2\) 组匹配,分出 \(\frac{m+1}2\) 个大小为 2 的集合。第一个条件是 \(2|(m+1)\)

考虑 \(n\) 个点当前已经连好的边形成的方案,可以视作是在往最后需要形成的 \(\frac{m+1}2\) 个集合里面填数字。那么现在集合大概有三种,\(0,1,2-set\),表示填了几个数字。

于是可以很自然的得到一个限制,当前 \(2 \times 0-set+ 1-set \le m+1-n\),否则说明前面 \(n\) 个数字里面这类颜色的边出现得太少了。

因为 \(c_0+c_1+c_2=\frac{m+1}2,c_1+2c_2=n\),所以上面的条件也等价于 \(c1+c2\le \frac{m+1}2\)

考虑构造证明上面两个条件充要。考虑归纳,即如果 \(n\to n+1\) 可以即可。

新加一个点,关注一下放置在这个点上面的性质,最为明显的就是连的边颜色不同。

当然可以将其考虑成为一个二分图匹配的问题:

左边 m 个点表示 m 种颜色,右边 n + 1 个点,前 n 个点表示图中的点,最后一个点表示不连边。左边到源和右边到汇的容量都是 1 ,只有第 n + 1 个点到汇的容量是 m − n 。如果图中第 j 个点旁边没有第 i 种颜色,就从 i 到 j 连一条容量为 1 的边。i, j 匹配的意义就是第 j 个点要向新点连颜色为 i 的边。另外,每种颜色还要向右边第 n + 1 个点连两倍 0-set 个数条边,每条边的容量也都是 1 。——pb

阿巴,然后发现搞出来的是一个 正则二分图,所以必然存在完美匹配

厉害。没写。

CCPC Finals 2021 H Harie Programming Contest

solution:

大力讨论。

考虑先取出一组匹配,假如干的两个点都不在匹配中,那么显然可以。

(假如有一个在,一个不在,分别设为 \(u,v\),考虑删掉 \(u\) 之后,找到的新增广路如果不经过 \(u\),那么没有删的时候显然答案更大;所以等价于需要找到从左侧点未匹配点出发,到 \(u\) 结束的增广路,且这条增广路不经过 \(v\)。考虑把算错的剪掉,枚举每一个 \(v\),算一算他的增广路之类??)

考虑两个点都在匹配中的情况:

对于异侧,通过讨论,可以发现等价于需要从这两个起点找到两条增广路,分析可知这两条增广路必定不交。

对于同侧,为什么保证不交,那么等价于以二者为原点跑的最大流流量为 \(2\),即最小割 \(=2\),即支配树上 lca 为根。

注意这里对支配树和最小割的联系。

没写。

Invertation in Tournament

兰道定理,但是发现自己曾经已经证明了,但是不知道证明的就是兰道定理。

当时证明的结论是:哈密顿路上的点一定可以是按照出度从大到小排序的。

这是因为,假如我已经对排序后前 \(i\) 个点构造了哈密顿路,如果有边 \(i\to i + 1\),那么赢麻了;如果有边 \(i + 1\to i\),那么我直接认为 \(i\)\(i + 1\) 在同一个强联通块,首先 \(i + 1\) 如果向上一个强联通块 \([x,i]\) 连边,那么对于 \(j\in [x,i]\),不考虑到 \([i + 2,n]\) 的边(那么最多只有朝强联通块内部的出边,而 i+1 全连上了这个强联通块),他们的度数必然比 \(i+1\) 小,矛盾。考虑 \([i+2,n]\),试图通过这些点来补充度数,发现必定是 \(j\in [x,i+1]\) 都向他们连边,不然 \(i + 1\)\(i\) 还是会合并,所以度数关系始终不满足条件。

考虑这个结论如何来证明兰道。考虑按照出度从大到小把哈密顿路提出来,实际上等价于兰道定理的按照入度从小到大排序。

要想只存在一个强联通分量,那么对于任意一个间隙 \((i,i+1)\),必然存在至少一条从 \([i+1,n]\) 指向 \([1,i]\) 的边,容易得到兰道的条件。

solution:

考虑一个有 \(\ge 3\) 个强联通分量的图,发现只需要操作中间某一个强联通分块的点就可以了。对于所有 \(x\to y\),都有 \(x\to T\to mid\to S\to y\)

对于只有两个强联通块,现在的问题在于如果操作了某一个点,可能会使得本块内的其他点走不到这个被翻转点。

此时,注意到一个性质:\(n>3\) 个点的强联通竞赛图存在 \([3,n]\) 的哈密顿回路。于是,取一个 \(n-1\) 元回路的剩下点即可。

故而这些情况都只需要操作一个点,暴力枚举这个点是啥,然后兰道判断是否成立即可。

剩下的,对于 \(n\le 3\) 的情况,两个块总的 \(N\le 6\),暴力。

Unknown

非常 nb。

\(n\) 个点,初始没有边。给定 \(m\) 个集合,对于每个集合 \(S\) ,你都可以选择一组 \(u, v\in S\) ,然后连边 (u, v) 。最小化最终的图中树的个数。注意是树而不是连通块。\(n, m \le 10^5\)

(数的不是生成树。。。)

solution:

考虑一条边发挥的作用,首先是可以合并两个联通块,这个时候会产生 1 的贡献

其次,对于一棵树,增加第一条边会使得其变成基环树,(基环树不是树)所以也会有 1 的贡献。但是后续对这个联通块内部加的边就没有意义了。

考虑把最终答案图的所有多余的没有贡献的边都去掉,视作没有进行这些操作

CF1142E Pink Floyd

solution:

考虑如果只有绿边,假设对于前 \(i\) 个点,已经问出了一个根在 rt 的满足条件的外向树。

那么只需要问一下 rt 和 \(i+1\) 的边即可,考虑是否将 \(i+1\) 作为新的 rt。

考虑有红边会发生什么。

假如只有一条红边,那么发现问题在于,假如有红边 \(i+1\to rt\),那么 G 了,因为这个时候 \(i+1\) 将成为新根,而且需要重新问一遍和前面所有 \(i\) 个点的关系,即重新合并。这样的过程多来几次,操作次数显然是无法接受的。

处理方法也很简单,考虑最初把 rt 置为 \(i+1\)

考虑更复杂的情况,假如红边形成的是 DAG。

观察上述对于红边只有一条的处理方法,其本质在于保证在后面合并的过程中,不存在有 红边 \(i+1\to rt\) 的情况。换句话说,只有当一个点 \(u\),使得 \(!\exist j\in[i+1,n], s.t. (j\to u)\ is\ red\) 的时候,它才可能成为当前的根。

那么,首先考虑只对入度=0的点执行上述不断合并的过程。在合并过程中,如果需要换根,那么 rt 作为一个本来入度为 0 的点,通过红边指向了其所在的 DAG,被换掉后,其所在的 DAG 的剩余部分对于新根而言不可达,注意到剩余部分可能新产生若干个入度=0的点,且这些点所有指向它的红边都已经在前面被删掉了,即可以成为新的根,所以把这些新的压进去继续做即可。

只能说注意力非常强。

(考虑最后形成的形状,是绿边形成一个 rt 的外向树,然后 rt 还挂了一个由红边组成的 DAG)

考虑不是 DAG 的情况,考虑对于每一个块,抽一个生成树出来,舍弃返祖边,即认为返祖边最开始就没有输入(可以发下这些返祖边不可能出现在 rt 和 i+1 的判定中),仅保留树边和前向边,那么就转化成了 DAG。

非常巧妙!

1.27

上午大力听线代,硬着跟到下课,人听麻了,然后剩下 30min 直接开摆。

没想到下午还有线代,虽然 cdw 讲得很慢,但是还是非常抽象。

觉得今天讲的知识很妙,觉得今天的题都很妙!

感觉 cdw 讲得确实很意识流,大概是思维太快了,或者说实力强导致看很多步骤都觉得自然。导致很多对于我的理解难点,cdw 不会对这种难点进行一个强调,或难或易一视同仁,就很神。

但是,可以看出的是,回想以往听 cdw 的体验,感觉今天的体验感好了很多,这也许可以折射出我的进步。

【UER #3】开学前的日历

一时好奇点进去看的题/hsh,口胡了一下很快胡出来了,觉得非常小清新。

首先观察这个操作,看到这个组合数的形式,结合网格图,很容易猜想大概就是路径计数了。

发现如果不考虑 \(k\) 的限制,那么每次就是给定一个起点,然后可以向下向右走,然后给每一个点加上走到这个位置的方案数。

总的来看,就是有 \(q\) 个源点,对于网格图每一个点,求有多少条从源点向下或向右移动抵达它的路径。

如果没有 \(k\) 的限制,那么可以直接设 \(f_{i,j}\) 表示答案,给 \(q\) 个源点处 \(+1\),然后 \(f_{i,j}+=f_{i-1,j}+f_{i,j-1}\)

考虑 \(k\) 的限制,也不难处理,考虑 \(f_{i,j,k}\) 表示当前这个 \(f\) 值还需要走 \(k\) 步才可以“享有”。相当于一个后缀加的 tag。

于是,流程是,先做 \(f_{u,v,k}+=f_{u-1,v,k+1}+f_{u,v-1,k+1}\)。进行完这一步后,\(f_{u,v,0}+=f_{u-1,v,0}+f_{u,v-1,0}\)

1.28

晚自习,给 pink floyd 做了并补了前天总结没有写完的部分;然后做 WC2015 混淆与破解,非常厉害的题目!

偶然看到了一个写得很好的关于正交线性基的博客,是自己可能高一的时候看过的,但是当时看得很困难,觉得很晦涩,现在觉得写得很有道理!

晚自习前半段学习的心态还算不错,后半段格外的心神不宁,整个人变得有点焦躁,大概是因为忽然又直面了生活的不确定性。有点浪费 WC2015 混淆与破解 这道好题。

感觉 cdw 讲的题都是好题啊,但是没有时间做了。

WC2015 混淆与破解

简要题意(防止以后看不懂题):

给定下述两个算法,输入 \({0, 1}^n\) 输出 \({0, 1}\)

  • 算法1:将这个 \(1\times n\) 的向量在 \(F_2\) 下乘上一个 \(n\times m\) 的矩阵得到一个 \(1\times m\) 的 01 向量;然后用得到的这个长度为 \(m\) 的向量去查某一个表,根据表的结果回答 \(0/1\)
  • 算法2:\(a_0, \dots , a_{n−1}\) 作为输入,\(a_n, \dots , a_{L−1}\)\(0\),执行 \(q\) 个随机打乱操作 \(a_u := ¬(a_v ∧ a_s) ⊕ a_d ⊕a_e\),输出 \(a_0=0/1\)

输入后者,求拟合比例最大的前者。\(n ≤ 64,m ≤ 4,L ≤ 256,q ≤ 1024\),保证存在错误比例小于 1% 的答案,且 \(m\) 更小时不存在。

solution:

即是需要构造出这 \(m\) 个长度为 \(n\) 的向量,和 \(2^m\) 的表,或者叫做函数 \(f:x\to y, x\in[0,2^m),y\in{0,1}\)

考虑如果我已经构造出了这些向量,得到矩阵 \(A\)。那么这个表的构造是容易的,只需要随机很多个原向量 \(v\),然后得到 \(v\times A\) 的结果,这是 \(x\);同时用算法 2 算出正确结果,这是 \(y\);看一下 \(y=0/1\) 哪一个多即可。

发现其实 \(A\) 的作用就是把 \(2^n\) 个向量分成 \(2^m\) 类。

考虑如果 \(F_2^n\) 的向量 \(u,v\) 在同一个组,那么意味着 \(u A= vA\Rightarrow (u-v) A\),意味着 \(u-v\)\(A\) 正交。

不妨考虑将 \(A\) 构造 \(F_2^n\) 空间中线性无关的 \(m\) 个基,其 \(rank=m\) 故而可以得到 \(2^m\) 个分类(我肯定希望有更多的分类选择)。设 \(B\)\(A\) 的正交线性基,其 \(rk=n-m\)

(题外话,对于 \(dim A+dim A^{\bot}=n\) 的证明:考虑正交于 \(A\) 等价于正交于 \(A\)\(dim A\) 个基,于是这就相当于是 \(dim A\)\(n\)\(dim A\) 行方程组,由于取的是基,所以可以解出刚好 \(n-dim A\) 个自由元,即 \(dim A^{\bot}\))

通过上面的观察,我们发现按照我们 A 这个分组算法,对于分到某一组的 \(u\),与其同组的向量会有 \(2^{n-m}\) 个,且就是 \(u+span(B)\)

你说得对,但是这就是正交线性基,HP 4700,护甲 329,魔抗 201 的英雄。有不可阻挡,有护盾,还能过墙。有控制,甚至冷却时间只有1秒,只要15点蓝。转换姿态时甚至可以刷新W的cd,还有真实伤害。然后,护甲和魔抗提升后还能获得技能加速,缩短Q的cd,还缩短释放时间,然后还有攻击力。W就啊啊啊啊啊啊!!!

假如我们知道 \(B\),求 \(A\) 有很多种方法,可以看上面正交线性基里面的博客,也可以看这道题 UOJ 某 gf 大佬的 submission.

考虑求 \(B\),考虑随机一个向量 \(x\),判定他是不是在 \(B\) 里面,如果在,那么插入线性基。直到 rk=n-m。

咋判定呢?还是随机。考虑随机 \(\omega\) 个向量 \(y\),用算法 2 判定 \(y\)\(y+x\) 是否在同一组。

由于题目给了 \(0.01\) 的混淆比例(改变 \(y\) 或改变 \(y+x\) 的算法 2 结果),那么把一个对的 \(x\) 判定成不在 \(B\) 中的概率是 $(0.98)^{\omega} \sim 28% $;错的判对,那么肯定是因为 \(2^m\) 的表中 \(1\) 很多或者 \(0\) 很多,导致虽然应当被分在两个不同组的数有了同样的结果。考虑最极端的情况,有 \(15\) 个 1 和 \(1\) 个 0,错误概率是 \((\frac{1+15^2}{16^2})^{\omega}\)

如果对的判错,那么意味着我们需要浪费时间多找。同时可能随到一些线性相关的东西。所以结合正确率和时间效率的考量,一个取法是 \(\omega = 64\),这也很方便压位执行算法2.

1.29 && 1.30

听 ntf,讲得非常快,少部分题目可以跟。

觉得 Gym102538E Easy Win 肯定是原题,但是打死都找不到,不找了/hsh。下午意外看到 bxy 的总结,发现他找到了原题!当时的评价是:"做看题赛 T2,已经把正解写出来了,但是没有意识到自己写的是正解。。。(没有注意到调和级数)"

补了昨天总结,复习 count (本来是觉得 classic 和 Easy win 有点像,但是当时没有看懂 classic)

复习了一点斯特林生成函数,点值和下降幂的关系,补了下降幂多项式乘法(转点值相乘再转下降幂)的板子。

简单复习集合幂级数的 exp/ln,复习有标号无向连通图计数,看了一眼点双连通图计数,发现比 点双连通生成子图计数 困难得多,没看懂。

复习 yr 的高明构造题,质疑了 yr 的题解但是最后发现自己是消愁。感觉这真的是一个非常人类智慧的题目。

复习闵可夫斯基和(Forged in the Barrens)

不知道为什么,突然很想看未明子的视频,所以去看了。可是时间到底是消耗了,于是焦虑也就萦绕在我心间。感觉这种因为认为“所有时间都应该做学系”而产生的焦虑已经不是第一次和我见面了,上一次,我是怎么面对的?

下降幂多项式乘法

点值和多项式的下降幂表示之间有密切的联系!

\(f(x)=\sum b_i x^{\underline i}=x!\sum b_i\frac{1}{(x-i)!}\)

注意这里对于 \(x!\),不是把它当成生成函数的占位,而是理解成计算值。

那么 \(\frac{f(i)}{i!}=\sum b_j\frac{1}{(i-j)!}\),即 \(\frac{f(i)}{i!}=[x^i] (b*e^x)\)

也就是说,多项式点值的 EGF 就是其下降幂表达式系数的 OGF 乘上 \(e^x\)

于是,两种表示方法可以很容易的相互转化。

点双连通生成子图计数

solution:

先根据 \(F=ln(G+1)\) 求出 \(F\) 表示联通生成子图个数的生成函数

点双的意义就是没有割点,设 \(F_{i}\) 表示已经去除了 \(\le i\) 的割点的方案数。

考虑从 \(F_{i}\to F_{i+1}\),首先把 \(i\) 从图中删掉,对于 \(i\) 不是割点的情况,那么图依旧联通;否则会分成若干个联通块。

发现和最开始求联通生成子图的应用场景完全一样,对 \(F_i^{\prime}\) 做 ln,然后再把 \(i\) 的贡献加回来,那么 \(i\) 肯定就不是割点了。

注意删 \(i\) 的时候,需要平移 \(F\) 的细节

构造题

solution:

首先不考虑递增条件。

由于注意力超凡,我们注意到形如 \(a[1\dots p]=0,a[p]=x,a[p+1]=y,a[p+1\dots n]=0\) 的解只有一组。

同时注意到所有的解都能通过 \(a[i-1]-=1,a[i]+=2,a[i+1]-=1\) 的方法收缩到一个形如上面的解。

由于 \(p,x,y\) 是唯一的,所以其可以通过 \(a[i-1]+=1,a[i]-=2,a[i+1]+=1\) 到达所有解。

加回递增限制,从 \(p,x,y\) 开始,使用上述操作贪心,使得满足递增即可。

除了超凡的注意力,无话可说。

开学前的涂鸦

solution:

题目 DZY Loves Chinese II 给出了一个重要结论:

对无向连通图 \(G(V,E)\) 的任意生成树 \(T\),给每条非树边分配一位,每条树边用长为 \(m-n+1\) 的二进制数表示(覆盖这条边的非树边为 \(1\),其余为 \(0\)),那么删掉一组边集后图不连通当且仅当这些二进制数在异或运算下线性相关

一个证明

关键:

  • 图的回路在 \(F_2\) 下封闭,构成一个线性空间,且维数恰为 \(m-n+1\),且每一条生成树的非树边对应的环恰构成基。
  • 图的割在 \(F_2\) 下封闭,构成一个线性空间,且维数恰为 \(n-1\),且一个有根生成树的每一条树边对应的割恰构成基(\(E=(u,v),u\in subtree, v\in ALL\backslash subtree\))
  • 图的回路空间和割空间互为正交补。

证明:

环空间可以考虑是 \(m\) 个变量,\(n\) 个方程(度数为偶数),但是这 \(n\) 个方程的秩是 \(n-1\)(知道度数总和),所以环空间的大小是 \(2^{m-n+1}\)。且考虑每一条非树边只会出现在某一个 基环 里面。(cdw:所有环一定可以由这些基环得到,对于一个环,如果经过一条非树边,就异或一下。最后已经不包含非树边,如果还是环,那么就和树的定义违背)

由于确定了一个点集,就可以确定一个割集,所以割集有 \(2^{n-1}\) 个。且考虑每一条树边显然只会出现在某一个 基割 里面。

考虑一个欧拉回路,必定经过割集偶数次,所以他们正交。同时由于二者度数相匹配,所以是补。


那么,如果删掉的边集存在一个子集使得其异或为 \(0\),即对于每一个环都恰有偶数条边与这个环重合(发现和权值异或0等价),那么这个子集和环空间正交,那么这个子集就是一个割集。所以要求选出的边集线性无关。

有了上述结论之后,发现不同二进制表示只有 \(3k\) 种(考虑加一条非树边,会在两个端点最多增加两种,非树边本身构成一种),爆搜+剪枝即可,碰到线性相关直接润。

solution2:

缩掉 1,2 度点,那么直接套用有标号无向连通图计数。

Gym 102268J Jealous Split

看漏条件了。。。没看到 \(m_i\) 表示的是最大值,以为是预先给定的

神仙题。

solution:

首先考虑如何划分可以满足条件而不考虑分段数量。

由于注意力旺盛,注意到对于 \(\forall lim\),如果我们只要当前块 \(s_i\ge lim\) 的时候就保留最后一个使得其 \(\ge lim\) 的数并分段,那么这将成为一个合法的方案。

证明:设 \(last_i\) 是每块最后一个数,\(x_i=last_i-(s_i-lim) > 0\),那么 \(lim-x_i\) 表示最后一个外的和。有 \(lim-x_i+last_i-(lim-x_{i+1}+last_{i+1})\le last_i\le m_i\),故合法。(考虑第一个不等号,主要利用 \(x_i>0\)

问题是这样可能得不到一个 \(k\) 的划分。

首先通过二分,得到一个 \(k+b(b\ge 0)\) 的划分,此时限制为 \(lim\)

由于注意力旺盛,所以考虑对序列倒着,做 \(lim+1\) ,得到 \(k-a(a>0)\) 的划分

可以证明,这两个划分一定有公共点,取划分的公共点,拼起来就是刚好为 \(k\) 的。

贺一个证明:反证:如果没有重合点,那么肯定有一段 \(mid+1\) 划分会包含 \(mid\) 划分(左右端点不同的),但是可知 \(mid\) 划分加上一个正整数(在贪心过程中 \(0\) 不会出现在 \(mid\) 右端点以及 \(mid+1\) 左端点,可以忽略)肯定可以 \(≥mid+1\),而这里多加了至少两个数所以矛盾。
然后要使加起来个数 \(=k\) 的话每出现一个重合点块数就会 \(-1\)\(-0\)(一段都重合),不出现就不会,换句话说,每一个使块数 \(−1\) 的点都是重合点。因为(\(lmid<lmid+1,rmid<rmid+1\)),所以一定能找到一个重合点,使得两者加起来刚好为 \(k\)(被夹住了)

即其正确性来自:上下界之间的所有数字都可以通过调整取到

Gym102331H Honorable Mention

感觉自己码力好差,写+调 3h,但是白鸟 2h 就搞定了。

题目的另一个版本是 k-Maximum Subsequence Sum,做法是线段树模拟费用流。

但是这个做法无法挪用,因为本题中流量可以很大。

考虑一个经典的线段树,节点维护 \(f[i][0/1][0/1]\) 表示选了 \(i\) 个连续段,首尾选没选。注意合并的时候,如果两个都是 \(1\),也可以假装是选了两段。这个是 max+ 卷积,\(f\) 的处理可以做到 \(n\log n\)

考虑怎么回答一个询问,考虑 wqs 二分,对于线段树上 log 个节点,求出 \(f_{i,*,*}-ki\) 的最大值,并把 log 个结果合并。

对于求出 \(f-ik\) 的最大值,还是考虑二分,因为 \(f\) 显然也是凸的。

(注意 wqs 二分确实有一箩筐细节。。。久了没写确实不会;同时注意合并 log 个节点的时候,不能跳过某一个段不选!)

这是一个 log^3 的做法,cf 可过,fzoi 不可过。

考虑优化,想要省掉线段树节点上最内层的二分,这是整个过程中最重复的部分。

考察这个过程,其本质是对于 \(q\) 个询问,每一个询问都需要做 \(log\) 轮 wqs。

我们考虑换个角度看这个“表”,考虑把一轮的询问一起做。

一轮的询问的 wqs 的 mid 是不一样的,但是注意到如果我们把同一轮的询问按照 mid 排序,那么其在线段树节点上的决策点单调。

所以可以给线段树上每一个节点维护一个指针,那么每一轮询问最差把线段树全扫一遍,\(nlogn\),总复杂度 \(O(nlognlogv)\)

感觉这种去二分化的思想还是非常厉害的。

CF1239E Turtle

感觉评分虚高。

\(f_i\) 表示第一行前缀和,\(g_i\) 表示第二行后缀和,对于一个方案,答案 \(\max f_i+g_i\) 之类。

考虑假如已经分配好了两行的值域。

考虑在第一行 \(i\) 位置放一个 \(v\),会使得后缀 \(+v\);那么很自然地考虑第一行应该是递增的排布,因为考虑交换两个数,不会使得任何一个 \(f_i\) 变小。

同理,第二行就应该是递减的排布。

那么这个问题已经好做很多了,由于分别是递增和递减的关系,考虑 \(\max f_i+g_i\) 这个函数,很容易发现会形如一个先下降再上升的形状。

所以 \(ans=max(f_n+a_{2,n},g_1+a_{1,1})\),而 \(a_{1,1}\)\(a_{2,n}\) 是两个定值,只需要两行的和接近即可。

这个可以暴力 DP 做。

CF1142D Foreigner

DP 套 DP,感觉这方面的题没有怎么做过,都没有往这方面思考过啊。

solution:

可以先考察一下合法的数的形状。按照生成方式,大概会是:

1,2,3,4,5,6,7,8,9,1x,2x,3x,\dots,1xx,2xx,3xx

等价于:

int h=1,t=0;
for(int i=1;i<=9;++i) a[++t]=i;
while(h<=t) {
    int r=h%11;
    for(int i=0;i<r;++i)
        a[++t]=a[h]*10+i;
    ++h;
}

注意到这样生成的 \(a\) 是递增的。

脑子里面有了这个数列的形状之后,我们不妨考察一下,通过在一个 排名为 \(b\)\(a\) 后面加一个 \(i\)(变成 \(10a+i\))的新 rk。

对于 \(10a+i\),它是由 \(a\) 生成的,而所有排名为 \(x(x<b)\) 的都会生成 \(x\bmod 11\) 个,本来有 9 个,\(a\) 在生成 \(i\) 之前还生成了 \(i\) 个。所以 \(rk^{\prime}=\sum_{x=1}^{b-1} (x\bmod 11) + i+10\)

发现我们只关心 \(rk\bmod 11\),所以 \(rk^{\prime}=b(b-1)/2+i+10 \bmod 11\)

到这里,如果熟悉 DP 套 DP 的话,我猜想已经可以看出来可以 DP 了。

考虑一个统计所有子串的经典方法:统计所有后缀的前缀,在这里,由于我会做的是 push_back,就计算所有前缀的后缀。(这其实也是 SAM 的思想)

\(f_{i,rk}\) 表示所有以 \(i\) 结尾的子串,排名在模 11 意义下为 \(rk\) 的数量。

转移即可。

Gym104373H Permutation on Tree

高明的,没有见过的处理拆贡献方法。

对于题目求 \(\sum |p_i-p_{i-1}|\),这个绝对值很烦,考虑枚举一个 \(pivot\),计算 \(\sum [(p_i>=pivot)\neq (p_{i-1}>=pivot)]\)

感觉这个就和求 \(\sum i\times f_i\) 变成求 \(\sum_i \sum_{j\le i}f_j\) 一样,非常厉害。

每一个数字变成 0/1,转化为求解所有拓扑序的相邻对不同的个数之和。

感觉这个也很像前几天排序网络的题,转化为 01 序列是否可以排序,这似乎是一个很通用的思想。

剩下一个树形 DP,设 \(f_u,g_{u,i},h_{u,i}\) 分别表示 \(u\) 子树的拓扑序总方案,\(u\) 子树拓扑序使得第 i 个位置是 \(0/1\) 的方案,\(u\) 子树拓扑序使得 \(i\)\(i+1\) 不同的方案。大力转移即可。

由树形背包复杂度分析,总复杂度 \(O(n^3)\)

树形背包复杂度这次不小心写假了,有点惭愧/lh

【ULR #2】跳蚤猜密码

感觉是对着知识点出出来的题目。。。

solution:

首先,如果我问一个空的,那么我可以知道 \(det(A)\)

由于行列式的计算非常复杂,所以如果我问的东西太复杂,那么是很难分析出啥有用的信息的(只能暴力解方程)

所以,发现如果我仅给 \(a_{i,j}+1\),(虽然这样看起来比较浪费我的询问),那么我可以知道代数余子式 \(C_{i,j}\)

所以,一共使用 \(n^2+1\) 次询问,我们可以获得 \(det(A)\)\(A^{\vee}\)。(注意 \(A^{\vee}\) 应该是 \(C^{T}\)

众所周知,\(A A^{\vee}=det(A)\times I\),所以 \(A=\dfrac{det(A)}{A^{\vee}}\)

一个问题是,需要保证 \(A\) 满秩才有上面的式子。

问题不大,可以先随机一个矩阵 dlt,然后对所有询问都加上这个,那么我们解出就会是 \(A+dlt\),由于 dlt 是我们随机的,所以 \(A+dlt\) 大概是满秩的。

最后一个问题,询问次数限制是 \(n^2\),需要砍掉一次询问才行。

注意到 \(det(AA^{\vee})=det(A)^n\Rightarrow det(A^{\vee})=det(A)^{n-1}\),所以我们考虑不问 \(A^{\vee}_{n,n}\) 而是暴力解出来。

1.31 & 2.1

感觉时间混得很快啊。

上午做了点线代,然后听讲,觉得这个人讲的不好,不听了/hsh

下午打模拟赛,2:10 开始。T1 没注意算复杂度以为自己秒了;想了比较长时间的 T2,最开始想得非常简单,以至于质疑样例(,推了很多,但是没啥用;T3 没咋想。

看到时间差不多了给 T1 打了,发现最后算答案的部分暴力合并背包好像是 \(O(2^n Y^2)\) 的 G 了。

但是可以肯定的是这道题大概只能这样做,那么对着这个复杂度开砍,首先注意到由于我每次插入一个物品复杂度是 \(O(Y)\),所以与其于我 \(Y^2\) 合并背包,不如直接 \(O(KY)\) 插入。

但是这样还是过不了。考虑 meet in the middle 给 \(2^n\) 干了,由于太久没有打 mitm,所以最开始写的是预处理所有 \(ppc<n/2\) 的集合...

属实给我绷住了好一会儿。。。5 点去吃了蛋糕之后就有点无心做题了,本来说给 T23 打个暴力的,懒了,再推了推 T2 的性质提前结束。

晚上抽空写了一点列表。

想了想 T3,开敲了一个 naive 想法,没敲完。

2.1 做了一天 T3。

早上做梦梦见今天省选,梦到我坐在大巴车上,前面坐着 yr,然后发现今天就是省选,一下子惊醒了,朦胧中发现自己躺在水土宿舍。

来机房,心里面是按照今天打省选 day2 来估计的。结果让我做 T3。

开始做的时候有点急,总是想着赶紧把我的做法修好然后新拿一套,那么这样自然是做不好事情。

之后,已经做好了今天中午不午休的打算了。一点一点做,做得不平静,因为一直都有点斗志在里面。

下午,由于没有午休,所以状态有点差,迷迷糊糊一直做。

做到晚上,终于发现假了,心情有点波动;之前不是没有刚题的经历,但是最后刚了很久都刚出来了,但是今天不一样。

也许,正是拥有这样的经历,才让我更好的认识到我到底走在什么样的道路上。

T2 修马路

距离正解差一步。

枚举中心,分析一下,知道树会长成一圈一圈的样子,随着深度增加,到根的距离肯定单调。

然后发现一个结论,\(maxdep\le 2\),证明略。

solution:

继续发现一个结论,非叶子节点在最优解中肯定只有一个,可以感性证明,考虑增加非叶节点的意义即可。

T3 盖房子

由于考场没怎么思考,所以下来决定先自己想想。

首先很容易地得到了一个贪心的做法。但是没有打这个贪心的代码。

然后自然想到倒着来做 DP。

分析样例,由于样例太简单了,所以非常 naive 的算了 under sp 啥的就开始算,发现样例大一点就过不了。

觉得样例不算大,所以直接把这个 36 个点的样例画出来。然后开始暴力手摸。(感觉纯粹对贪心的理解太差了,应该把这个贪心的代码写出来比较好)

终于发现需求关系应该长成树的样子,应该做一个树上 DP。然后开始暴力手摸。(感觉纯粹对贪心的理解太差了,应该把这个贪心的代码写出来比较好)

简单看了一下题解,发现前面贪心啥的都想对了,但是我的 DP 和他截然不同。简单看了一点 std 发现不是很好懂,决定硬钢自己的做法。

终于发现设 \(f_{i,0/1}\) 太少了。设了一个 \(f_{i,0/1/2}\),大力分析了一通转移。然后开始暴力手摸。(感觉纯粹对贪心的理解太差了,应该把这个贪心的代码写出来比较好)

终于发现做不了了。过程花费接近 12h 吧。

怎么说呢,时间大部分花在手摸,即认为自己会在某些细节方面写错,但是事实证明这些我以为会写错的细节都没有写错,全都是因为思路不全面。

其实过程中多次发现做不了了,最后这个致命的问题,也绝对不是最后一次才发现。那么每次改正思路改正了啥呢?大概全都是因为每次碰到致命问题的时候,都出去走一圈,但是走一圈回来就忘了(,就以为暗戳戳把问题替换了,就以为有性质,可做了。

着实有点不好评价。感觉自己真菜,这么明显的问题都看不出来,这么一件事情搞这么久。感觉脑子真的很笨,分析一个过程也好,分析一个贡献计算式也好,分析很慢而且分析不远。

大概在很早的时候,我就已经知道我走的是一条必定放弃的路,但是我不撞南墙不回头。

「2020-2021 集训队作业」Yet Another Linear Algebra Problem

对着 cauthy-binet 出的题。

solution:

第一问,给出 \(n\)\(F_3^m\) 向量,求选出 \(m\) 个使得其是基的方案数,方案数 \(\mod 3\)。等价于选出 \(m\) 个线性无关的向量,那么这些向量自然就是基了。

观察到,设这 \(m\) 个向量构成一个 \(m\times m\) 的矩阵 \(A\),由线代知道线性无关等价于 \(det(A)\neq 0\),在 \(F_3\) 下就是 \(det(A)=1\)

问题是怎么计数。

由于 \(det(A)=1\),所以问题等价于 \(\sum det(A)\)

考虑 cauchy-binet 公式的形式,现在设 \(A\) 是一个 \(n\times m\) 的矩阵,考虑构造一个 \(m\times n\) 的矩阵 \(B\),使得对于任意一个 \(|S|=m,S\in[n]\),都有 \(det(B_{m,s})det(A_{s,m})=1 \Leftrightarrow det(A_{s,m})=1\)

\[det(BA)=\sum_{|S|=m,S\in[n]} det(B_{m,s})det(A_{s,m}) \]

那么这个 \(B\) 是什么呢?注意到在 \(F_3\) 下, \(x^2=x\),结合 \(B\) 的形状,知道 \(B=A^{T}\)

所以只需要求 \(det(A^{T}A)\) 就是答案。

那么第二问我们类似考虑。

两个条件:向量线性无关,且颜色不重复;那么其实颜色不重复也就等价于在颜色空间中线性无关,那么很自然就是 det。

恰好的,在 \(F_2\) 下,只有两个条件同时满足的时候,即 \(x=1\)\(y=1\) 的时候 \(xy=1\),所以容易列出式子:

\[\sum_{|S|=m,s\in[n]} det(C_{m,s})det(A_{s,m})=det(CA) \]

其中 \(C_{i,j}=1\) 当且仅当颜色 \(i\) 集合中有向量 \(j\)

[北京省选集训2019] 生成树计数

可以结合 [省选联考 2020 A 卷] 作业题 生成树计数,一起看。

考虑矩阵树定理实际上计算的是 \(\sum_{T}\prod_{e\in T}w_e\)

这里我们需要计算的是 \(\sum_{T}(\sum_{e}w_e)^k\),但是由于是 \(k\) 次的形式,还是可以考虑拆成 \(\prod\)

因为 \((\sum_{e}w_e)^k\) 的计算方法是类似多重集,即 \(\sum \binom{k}{c_1,c_2,\dots,c_{n-1}}\prod w_i^{c_i}\),所以考虑把 \((\sum_{e}w_e)^k\) 搞成 EGF 的乘法。

容易发现,结合上面的计算式,发现 \((\sum_{e}w_e)^k=[\frac{x^k}{k!}]\prod e^{w_i x}\)

然后直接套矩阵树定理即可,多项式只需要保留前 \(k\) 项进行计算。注意做乘法的时候,由于实质是 EGF,所以转移需要乘上 \(\binom{i,j}\) 的系数。

[LuoguP2435] 染色

插头 DP 入门题。非常简单地回顾了一下 yyx 的插头 DP PPT,看到亿么多分讨直接润了。

被卡场了,发现原来是 vector 函数传参的时候要写成 const vector<int>& 比较好。

[HNOI2012] 集合选数

搞笑题目。

每一个数可以写成 \(base2^i3^j\) 的形式,那么将其放在以 \(base\) 为左上角的网格图的 \((i-1,j-1)\) 位置,每张图是独立的,且每张图的限制是不能选相邻的 \(1\)

我以为这里如果直接暴力状压可能复杂度不太对,可能存在某些高明的方法来做,结果正解就是暴力状态,复杂度是 \(O(pass)\)

然后空间开小了,对拍不出来问题,急死我了!

2.2

好想放假,明明已经星期五了,为什么还有这么久才放假。

上午状态还可以,把总结之类的补了补,然后去给好好地修了修我两年前写的 FWT 学习笔记,并增补了一些新的理解。

感觉下午晚上脑子状态都不好,整个人有点晕乎乎的,提不起心力来(即使是摸鱼也觉得烦。下午洗了脸,但是没啥用,没有比较振奋的意思,恹恹。

最后下午写了一点列表,帮 yr 查了查她的 FFT 为什么 RE(封装的时候 struct 内部空间开太大了)。晚上不想做列表了,随便去找了几道题做。

处于一个不想动脑子但是知道自己应该动脑子的心态,有一点焦虑却又不想动。

啊啊啊,我觉得你应该用力主动做出改变。不要再往后退。

9:30 了,开始急了,所以呢?

决定去操场跑几圈,希望能好一些。

[CF449D] Jzzhu and Numbers

\[\begin{align*} &[x^{\varnothing}]\prod (1+x^{i})^{c_i}\\ =&[x^{\varnothing}]IFWT(\prod FWT(1+x^i)^{c_i})\\ =&\sum_s (-1)^{|s|}[x^s](\prod FWT(1+x^i)^{c_i})\\ =&\sum_s (-1)^{|s|}\prod_{s\subseteq t} 2^{c_t}\\ =&\sum_s (-1)^{|s|}2^{\sum_{s\subseteq t}c_t} \end{align*} \]

所以这道题的做法就是先在 \(\phi(mod)\) 下用 FWT 把 \(2\) 的幂次做出来,然后带入上式。

CF1458E Nim Shortcuts

有点厉害。

手动模拟博弈过程,发现一旦额外钦定的点对多起来就完全做不了了,我们需要一点更为直观的分析方法。

考虑把必胜/败用 1/0 表示画在二维网格图上分析。

然后分析错了,G。

solution:

考虑这坐标轴,初始的时候,只有 \(y=x\) 上的点是 \(0\)

假如题目硬钦定 \((x,y),x>y\)\(0\),那么此时对于这张网格图的改变是,\(\forall z\ge x,(z,z)\) 变成 \(1\)\((z,z+1)\) 变成 \(0\)

由于第 \(x\) 列所有位置在将来一定都是 \(1\),所以可以认为是把这列从坐标轴中删去,然后为 \(0\) 的位置还是 \(y=x\) 这条线。

形式化的,假如当前删了 \(cutx\) 列,\(cuty\) 行,现在新加入一个点对 \((x,y)\) 那么:

  • \(x-cutx==y-cuty\),无事发生。
  • \(x-cutx<y-cuty\),第 \(x\) 列被删掉。
  • \(x-cutx>y-cuty\),第 \(y\) 行被删掉。

考虑对于一个询问,我们需要维护的就是它左下角被删了多少个行列。

把修改和询问都按照 x 排序,从左往右扫描并维护 \(x\) 被删的情况,同时树状数组维护 \(y\) 被删的情况即可。

「CF1439E」 Cheat and Win

经典,黑白翻转问题,SG 等价于每一个黑棋子的异或和。

通过打表/手膜可以发现一个黑棋子的 SG 是 \(2^{深度}\)

那么现在只需要把虚树建立出来就好。

考虑递归建立虚树,设当前需要建立虚树的左上角 \((x,y)\),右下角 \((x+2^k-1,y+2^k-1)\)

然后分成三个部分,由于树的形状,在把下面和右边部分的两颗虚树的 rt 放在主部分的对应边角,递归进入主部分。

最开始我拿了一个有 nlogn 个点的虚树出来,由于后面还要做树剖啥的,空间炸了。

学习了一下题解,进行了一点改进。

有一些细节需要注意。

[POI2012] PEN-Salaries

首先发现能够进一步确定的点是若干条儿子只有一个的链。

然后开始我的 sb 思路,首先认为一坨子树可以认为是等价的,然后记下三元组 \((lim,siz,id)\) 表示最大值是 \(lim\),块里面有 \(siz\) 个点,属于 \(id\) 的子树。

一通观察分析之后,发现只需要按照 lim 从小到大处理,然后对于当前的情况,算一算还剩下多少个点可以填,算一算前面操作的时候 确定了多少个点/确定了那些值域范围一定是自己的(由于 lim 的顺序,所以当前一定会被影响)。

然后假了。

solution:

注意到这样的特殊情况:

data.in:
10
1 10
1 9
2 0
3 0
2 5
5 0
4 0
7 0
5 0
5 2

发现并不能简单的把同一个子树的视作一块之类,比如上面的这个例子,\(3,4,7\) 号点都可以确定,但是链底的 8 号不行。

所以应该给每一个点独立的算一个三元组出来,然后就对了。

P4853 yyf hates dagequ

设出 \(f_{i,j,k}\) 表示表示当我们到第 \(i\) 个节奏的时候已经打了 \(j\) 个 combe,之后 \(k\) 个节奏可以强行改的期望得分。

在设一个 \(g_{i,j,k}\) 表示到达这个状态的概率。

只关心当前的连击 \(\mod 60\) 之后,触发时间 \(0...5\) 的强判的概率,预处理一下。

额外的贡献是容易计算的,预处理一下。

然后做完了。

2.3

上午听 hd 的多项式,因为部分内容之前已经学过了,所以听得相对轻松。

下午晚上把 hd 的 ppt 全都过了一遍,把没懂的地方学了一下。

晚上帮 bxy 调了调 多项式带余除法,然后自己写,发现自己硬是写不对,然后开始摆烂。

感觉今天心里面一直很焦虑,因为觉得自己效率太低了。心里面很堵。

2.4

我摊牌了!

上午下午比较集中,写了点多项式。

然后给刘芸彤讲了下转置原理多点求值。

晚上直接开摆!

2.5

If I can heal the conflict that's within.

I'll know the war has reached the bitter end.

今天头脑一直都比较清楚。

发现自己又开始着急,想不出题着急,写不对着急。这是头脑壅弊,磨砺太少。

上午 pyb 给我分配了补那场模拟赛的事情,但是发现那场模拟赛是我们高二高三考过的原场。但是发现自己还是不会做 T2,实在惭愧。

下午做 CF1326F2 Wise Men (Hard Version) 做得很慢,心情比较平静。

虽然今天的集合幂级数列表是以前做过的,但是都还是把 gtr 的讲义回顾了一下,拿不准的重新看了一下,忽略了一些不想管的题目。

把 2.3 到 2.5 的题解都写到这里。

LJJ 学二项式定理

看到 mod,思考单位根反演。

hd:计算机更喜欢的操作是枚举所有情况,不合法附加系数 0,合法系数就是 1。

[六省联考 2017] 组合数问题

\[\sum_{i\bmod k=r} \binom{nk}i \bmod p \]

如果你是 sb,你就会注意到 \(k\) 很小,就会直接上单位根反演。但是这里不行,因为反演之后单位根解不出来。

solution1(jly):

一个重要的观察:\([x^i](1+x)^{nk}=\binom{nk}i\)

所以题目式子等价于 \([x^r]((1+x)^{nk}\bmod (x^k-1)))\),这是循环卷积。

暴力循环卷积快速幂,\(k^2\log\)

solution2:

考虑 DP 这个式子。

我们考虑上面这个式子的组合意义,它相当于在 \(nk\) 个不同物品中选出 \(t\) 个,且满足 \(t \bmod k=r\) 的方案数。考虑设计状态 \(f_{i,j}\) 表示当前考虑到前 \(i\) 个物品,所选数量 \(mod k\) 的余数为 \(j\) 的方案数

然后用由于 \(k\) 很小,矩阵快速幂优化转移

P5488 差分与前缀和

挺典的题目,我居然没做。

对于前缀和,考虑 \(a_i\)\(k\) 阶前缀和之后 \(a^k_j\) 位置的贡献,这显然可以视作一个二维平面走路径的问题,容易发现系数之和 \(\delta=j-i\) 有关,然后进而发现系数是一个插板法之类,然后卷起来。

对于差分,依旧转为二维平面的问题一样分析,考虑选了几个 -1 就好。

题解的方法:考虑把前缀和 和 差分看做是乘上一个 OGF,然后解封闭形式(需要用到广义二项式定理)。感觉比较笨重。

[AH2017/HNOI2017] 礼物

拆开之后,发现有一个二次函数求最值的简单分讨,最后发现目标是选定 \(j\) 最大化 \(\sum a_{i+j \bmod n}b_i\) 这种。

这个很点,这个就是 ABC291G 的弱化,写成卷积形式就做完了。

[UR#3] 链式反应

半在线卷积毕业题。

题目描述说得很杂,读明白之后,会发现形如二叉树上,每一个非叶子节点会随便选择一个 \(x\in S\),然后挂 x 个叶子。

\(F(x)\) 是答案的 EGF,\(S(x)\) 是集合 \(S\) 的 EGF,可以发现 \(F=\frac 12 F^2S+1\) 这种。

solution:

首先考虑 DP,枚举两个子树并分配标号,两个子树之间无序所以 \(\frac 12\)

\[f_i=\frac 12\sum_{j,k} [i-1-j-k\in S]\binom{i-1}{j}\binom{i-1-j}k f_jf_k \]

拆一下组合数:

\[\frac{f_i}{(i-1)!}=\frac 12\sum_{j,k} \frac{S_{i-1-j-k}}{(i-1-j-k)!} \frac{f_jf_k}{j!k!} \]

这很 EGF,\(F^{\prime}(x)=\frac 12 S(x)F(x)^2+1\)

有一种牛顿迭代解一阶微分方程的方法,但是我不会。

但是其实这很半在线卷积,提取系数得:\(f_n=\frac{1}{2n}\sum_{i=1}^n s[i-1]f^2[n-i]\)

由于 \(s\) 是已知的,所以 cdq 的流程就是每次把 \(f^2[l\dots mid]\) 搞出来,然后 \(f^2[l\dots mid] * s[0,r-l)\to f[mid+1,r)\) 就可以。

所以问题的关键在于 \(f^2\) 的处理。

一个 naive 的想法是每次直接 \(f[l\dots mid] * f[0,r-l)\to f^[mid+1,r)\)。但是发现比如在 \(l=0\) 的时候,\(f[0,r-l)\) 还没有求出。

但是有一个好消息是,发现只会在 \(l=0\) 的时候会出问题,其他时候这样做都是正确的。(初始的时候把 \(n\) 搞成 2 的次幂)

那么,我们考虑当 \(l=0\) 的时候只做 $f[0,mid]*f[0,mid]\to $,考虑如何把 \(f[mid+1,r) * f[0,mid]\) 的贡献补上。

注意到只需要对于每一个 \(l\neq 0\),补做一个 \(f[0,r-l)*f[l,mid]\) 即可。

其实,假如是 \(f[n]=\sum_{i=1}^{n-1} f[i]g[n-i]\) 可能会更好看。

  • \(l=0\)\(f[0,mid]*g[0,mid]\to f(mid,r)\)
  • \(l\neq 0\)\(f[l,mid]*g[0,r-l)+f[0,r-l)*g[l,mid]\to f(mid,r)\)

有一个常数优化,由于我只要 \(f(mid,r)\),所以循环卷积次数可以定为 \(len\) 而非 \(1.5len\)

CF1326F2 Wise Men (Hard Version)

牛逼题。

初看完全没有思路,再看胡了一个 \(O(3^n2^nn^2)\) 的抽象 DP 然后毫无进展。

solution:

发现最麻烦的地方在于我们很难把这个图的信息给它加入某计数过程,这个条件有一点严苛,但是又没有把方案数卡得很死,于是这就是我们所喜闻乐见的最不好计数的题。

那么,为了方框限制,我们考虑一个容斥,记 \(f_s\) 表示 \(\sum_{s\subseteq t}ans_t\),即一个后缀和,即不管 \(0\) 的限制。

此时,\(s\) 是若干 \(1\) 段的 exp。

考虑通过 dp 处理出 \(g_s\) 表示 \(s\) 集合里面的数形成一条链,满足相邻都有边的方案数。

在这里,exp 对应的其实是子集卷积,所以我们搞出来 \(h_i(s)\) 表示 \(ppc=i\),然后 \(s\)

发现,现在其实还是不是很好求 \(f_s\)(注意 \(f_s\) 表示的是全集的在 s 情况下的方案数,不是仅仅选出 s 集合的方案数),因为实际上一个 \(s\) 等价于长度为 \(l_1,l_2,\dots l_m\) 的 1 段,我们需要求出 \([x^U]\prod_i h_{l_i}\)。我们不可能对于每一个 \(s\),都 \(n2^n\) 暴力做。

咋办捏?

发现如果两个 \(s\) 对应的长度可重集 \(\{l_1,l_2,\dots l_m\}\) 一样,那么他们的方案数一样。

同时注意到 \(\{l\}\) 实际上是对于 \(n\) 的分拆,\(n=18\) 的分拆数是很小的。所以暴力计算出每一种分拆数的 \(\prod h\)

最后记得 \(f\) 是套了一次容斥的答案。

bugs:

  • 分拆数复杂度写假了。
  • 不会求出 \(s\) 对应的可重集
  • hash 冲突。当然这个是最难蚌的。

[CTSC2010] 性能优化

增进了对于 DFT 的理解。

注意到保证输入的 \(n\) 能表示成若干个不超过 \(10\) 的正整数的乘积,那么本来的 DFT 是拆成两半分治,我们这里枚举 n 的因子 d 拆成 \(d\) 个部分,每一个是 \(n/d\) 的子问题分治。

细节忽略。

2.6

(write at 2.9)

最后一天了,模拟赛,打之前一直在告诫自己,考得怎么样无所谓,重要的是一定要集中,预备一下省选的心态。

没看后面的题先冲 T1,想得比较快,发现注意到 gcd 的 log 性质之后就很好做了,但是大样例以知过不了,狂暴 assert 到 8:40+ 决定先看看后面的题。

思考了 1h+ 的 T2,以为自己想出来了,很高兴。回去看 T1,发现是贡献计算的时候犯了一个 sb 错误,10:30 总算是解决了。

写 T2,写到一半就觉得不对劲,重新推了一遍式子发现自己果然推错了,G。

没有办法,继续思考 T2。但是时间不是很多了,于四海抽空去看了一眼 T3,简单推了推,知道大概是生成函数的题之类但是有点复杂,不管。

继续硬想 T2,没想出来,打了一个暴力也懒得交上去了。

感觉总体来说,虽然成绩不高,但是整个过程的思考体验还是不错的,心态也不错。

生活不妨慢一点,没必要这么快。

中午把床收掉了,没有午休,下午脑子意料之中的不好,觉得白鸟讲 T3 讲得有点怪,所以听了一部分就开始自己推。

后半部分就在清空这个电脑/hsh

T2

第一眼感觉要 meet in the middle 之类,因为觉得这个 \(n\le 60\) 说不定有啥 4 分的 mitm 之类。

想了想发现不行,因为最大的问题便是在于上面的选择会影响到下面的选择。

感觉计算式子很行列式,但是行列式多了一个 \((-1)^{\sigma (p)}\) 的系数,尝试了一下能不能吧这个系数构造进行列式里面去,构造了一下发现不行。转念一想假如这个可以的话,那行列式就应该有这样的计算方法,而我却从来没有见过,于是否定了这样的方法。

一时间没有什么办法,于是直接考虑把每一个位置写成一个形式幂级数,\(x^{2^j}zy^{2^{a_{i,j}}}\),然后对于每一个 \(s\),求 \([x^{U}z^{n}y^{s}] \prod_i\sum_j x^{2^j}zy^{2^{a_{i,j}}}\),以一个子集卷积+FWT的形式暴力去掉所有限制。

首先发现 z 可以省略掉。然后用 FWT 和 FMT 的式子大力推导,拆分。

第一次抄错了 \(\prod\)\(\sum\) 的顺序,导致最后推出了一个不需要枚举 \(x^{d}\) 的式子,以为复杂度对了。

但是后面推对以后,发现推到最后还是根本做不了,因为这个"积和式" \(\prod\sum\) 一直都和 \(x^d\) 有关,根本处理不了。

那 G 了。发现 \(a=\{0,1\}\) 的部分分自己也不会做,更 G 了。

solution:

仍然考虑行列式。

注意到我们只关心系数是否为 0 而不关心具体的值。所以我们只需要给矩阵每一个位置随机一个额外系数,这样 -1 就不会抵消掉。直接按照行列式计算就好。

这个正确的概率是 \(\frac np\) 其中 \(p\) 是我们自己选择的一个模数。

为什么呢?其实就是 Schwartsz-Zippel 引理

对于一个 \(F_p\) 上的最高次数是 \(d\)\(n\) 变元多项式,随机取 \(r_1,r_2,\dots,r_n\),那么 \(f(r_1,r_2,\dots,r_n)\) 的概率是 \(\frac dp\)

证明

在这里,可以看成是 \(n^2\) 个变元的多项式,且由于是行列式,所以每一项都是 \(n\) 次的。

T3

寒假模拟赛

断断续续想了很久,但是啥都不会,G。

T1 移动箱子

看起来是一个比较清新的题目,贡献柿子列一列就大概知道要整除分块之类,但是就是不会。

暴力模拟的话,需要在过程中计算一个 rst 表示当前剩余的量。这个玩意的计算形如一个后缀 max,发现对于不同的 k 的取值种类很多,没有办法。

有一个想法是,注意到操作是可逆的,那么套路地会去思考能不能找到某一种比较优秀的中间状态,但是没有找到。

solution:

发现如果堆与堆之间独立,即没有 rst,那么答案是比较方便计算的。

注意到操作是可逆的,为了避免 rst 的出现,从大到小扫描 \(k\),发现 \(rst\) 会出现仅当 \(k\le \lfloor\frac{y_1}{x_2-x_1}\rfloor\)。此时,不妨直接将两堆合并,使用 \((x_2-x_1)y_2\) 步逆操作,将两堆合并成 \((x_1,y_1+y_2)\)。由于这些逆操作是必做的,所以有正确性。

由于合并一次必然使得堆数 \(-1\),所以过程中最多出现 \(2n\) 种不同堆,每一个堆出现的时刻是 \(k\in[l,r]\),且在时刻内与其他的堆贡献独立。

由于贡献计算式子是 \(f(y,k)=yt-\binom{t+1}{2}k\),其中 \(t=\lfloor\frac yk\rfloor\),在 \(t\) 固定的时候是以 \(k\) 为下标的区间加等差数列。显然整除分块,最多有 \(\sqrt y=O(\sqrt m)\)\(t\),那么一共需要做 \(O(n\sqrt m)\) 次区间加等差数列,由于这是一个静态的问题,所以可以通过维护二阶差分的方法做到每次 \(O(1)\)

复杂度就是 \(O(n\sqrt m)\)

T2

2.14

感觉这与其于叫做总结,不如叫做日记。

寒假没干啥事,心里面很愧疚。想要评价一下这个寒假,竟却又觉得不能一笔抹杀,否则抹杀掉的竟是整个过去。

知道今天早上得把智能机交还父母,昨天晚上不断让步最后接近 1 点睡了,本来是准备早点睡养足精神的,寒假太放纵了。

早上 6点7点8点9点 各醒了一次。为什么呢?

驱逐堕落的遐思,烧毁贪婪的温床,再一次披上思想的甲兵。从家到学校一路上的五味陈杂早已埋在冰山之下,现在看来,这真是一个独一无二的早上,一次宝贵的体验。也许以后再也难有这样一个早上,将斗争明明白白展到面前看。

到机房,把水土那边新增积累的 tricks 之类整理到这边的大集合里面,然后听 pyb 灌鸡汤。感觉这种鸡汤多是明悟者的有感而发,而对于那些仍在路上的人却大概是天书了,只能说听懂了的都听懂了,没听懂的都没听懂。

想寒假模拟赛的 T1,发现时间过得很快啊,刹那间捕捉到的是一缕幸福。

下午状态将就。晚上经典犯困,洗了脸,好了。

感觉题目完全做不完啊,特别是寒假的欠帐。想了比较长时间的寒假模拟赛的 T1T2,但是都不会,G。看 T1 的题解,写得不慢,但是调了很久,一度质疑数据错了。最后发现是爆 long long 了,不好评价。

CF1924E Paper Cutting Again

原题:[ARC114E]Paper Cutting 2

第一时间没有发现是原,第一瞬间思考的是计算以每一条线作为最后一条线的概率。

发现不对,计算的是操作步数的期望。想着慢慢来,设了一个 \(f_{i,j}\) 表示到达这个状态的期望。然后发现答案其实就是 \(\sum g\) 表示到达 \(i,j\) 的概率。但是这个是 \(O(n^2)\)

然后回到 计算以每一条线被选中的概率,正在思考怎么算,时间不够了。

solution(zlt):首先将题目转化成预先选定一个 \(n+m-2\) 的排列 \(p\),并按照排列顺序进行操作。如果操作的这条线已经在前面被干掉了那么就不管,可以发现在这样的情况下,每一条线被选中的概率不变。那么,如果想要 \(x=i\) 这条线被选中,意味着他在排列中先于 \(y=(j\le\frac ki)\)\(x=(j\le i-1)\) 之前,那么这个的概率就是 \(\frac{1}{i+\frac ki}\)

solution(pb):把 n^2 DP 值可以推出来是一个仅和 \(i,j\) 有关的柿子,可以直接算。

反思一下,这个其实是一个经典转化,即变成预先钦定一个排列,然后对应的方案是 同分布 的。第一时间隐隐约约有点想法,但是没有理解到。

ARC168E Subsegments with Large Sums

首先 DNA 动了想到 wqs 二分,但是发现不会用就抛了。

转化成了一个图论问题,每一个点只会往后面连最多 3 条边(多一条连到 \(n+1\) 表示结束的边)且边权是 \(0/1\)。然后求从 \(1\)\(k\) 步到 \(n+1\) 的最大权值和。

没办法,只能设一个 \(n^2\)\(dp\),当前在 \(i\),走了 \(j\) 条边,最大权值。

solution:

nb tea.需要主动去发掘一个具有凸性的参数

考虑 wqs 二分。。。。说明这个做题的直觉是正确的,只是没有坚持下去。

怎么才能 wqs 二分呢?重点是找到某一个根据选择段数增加而具有凸性的东西。显然,我们要求的权值和是没有凸性的。

考虑这样转化题目:当前有 \(n\) 个区间 \([i,r_i]\) 有价值 \(1\),选出尽可能多的两两不交的区间,使得 \(\sum (len-1)\le n-K\)(选出 \(\ge K\) 段的等价条件)

猜测 \(\sum (len-1)\) 是有凸性的。

一个巧妙的证明:用 p 段和 p + 2 段的方案可以凑出两个 p + 1 段的方案,因此 \(2s_{p+1} ≤ s_p + s_{p+2}\)。为什么一定可以凑出呢?懒得打了,希望以后还记得。

结束了。

[Ptz Winter 2020 Day 6 D] Split in Sets

首先注意到是 and。

如果 k=n,那么答案是 \(\sum a_i\),赢麻了。

考虑现在如果把某一些 \(a\) 合并在一起会使得答案减小的话,一个直觉的想法就是要尽量保留最高位。

即,猜一个贪心结论:(设 cnt 是当前最高为是 \(1\) 的数量)

  • 如果 \(cnt<k\),那么这 cnt 个会单独分组,并递归到子问题 \((n-cnt,k-cnt)\)
  • 如果 \(cnt\ge k\),那么剩下的 n-cnt 个必定在同一组,且当前位置必定有 \((k-1)\times 2^j\) 的贡献,递归到子问题 \((cnt+1,k)\)

这个结论是容易证明的,做完了。

2.15

大概是生物钟正在调整,上午听了几道题就很想睡觉了。跟yr讨论了一下讲课的一道题,并简单验了一下 yr 出的构造题的题解,上午就差不多结束。

中午吃完饭摆了一小会,睡醒心里面却是立刻涌起无穷无尽的焦虑,无穷无尽的焦虑。纯纯的内耗。

下午晚上在做题,感觉自己做题速度相比之下有点慢,做不完一点。

虽然今天是第二天,但是已经想要玩原神了。

[ARC167E] One Square in a Triangle

solution(pb):

取一个端点在 \((0,0)\),设另外两个点分别是 \((a,b)\)\((x,y)\)

考虑叉乘,发现面积是 \(\frac 12|ay-bx|\),所以题目实际上就是要求 \(s=ay-bx\)

这个实际上是对 \(a,b\) 的线性组合,且最小可以组合出 \(gcd(a,b)\)。(简单证明:把 \(a,b\) 都除 gcd,那么最小凑出 \(1\) 是肯定的;且凑出的数肯定是 gcd 的倍数)

考虑取出所有 \(gcd=1\)\(a,b\),exgcd 得到一组 \(y,x\) 使得 \(ay-bx=1\)

当前这个三角形是不包括一个完整的小正方形的,(由右手定则,注意 \((x,y)\) 肯定在 \((a,b)\) 的左边),考虑使得其包含距离 \((x,y)\) 最近的小正方形,即 \((x-1,y+1)\)

(注意,如果 \(x<0\),那么依旧不存在这个小正方形;其他情况下肯定存在,且由于 \((x,y)\) 是距离直线 \(y=\frac ba x\) 最近的整点,可以证明有且仅有一个)

此时的面积是 \(\frac{a+b+1}2\),暴力枚举 \(a,b\) 来凑即可。实测只需要枚举到 \(1000\)

有一些本来就无解的情况,提前排除掉。

(特别的,要求 \(a+b+1=4\) 的时候上述方法找不到解)

solution(yxm) 不知道怎么想出来的。

[AGC012E] Camel and Oases

感觉不能算黑题。

容易注意到 \(v\) 的取值只有 log 种,从大到小记为 \(v_0\dots v_m\)

每一个 \(v_i\) 都对应一些是区间的联通块,容易注意到 \(v_i\) 的区间包含 \(v_{i+1}\) 的区间,即存在树形结构。

枚举 \(v_0\) 中的一个区间,判定是否可行。等价于每层只能选择一个区间,要覆盖掉某一个前缀和一个后缀。

自然考虑枚举 \(S\) 来分配哪些层用于前缀。预处理 \(f_s,g_s\) 表示 \(s\) 用于前/后缀的最长长度即可。

现在的问题是不允许 \(n 2^m\)

问题不大,注意到一个 \(s\) 只可能对某一个 \(v_0\) 中的区间造成贡献。简单判一下,\(O(2^m log)\) 之类。

[CF1540E] Tasty Dishes

好吃好吃,增进了对于特征向量的理解。

容易注意到 \(d_i=\min_j\{d_j+1\}\) 表示 \(a_i>0\) 的时刻。

然后捏?

solution:

接下来不妨先假定没有修改,只有询问,那么 \(d\) 首先是固定的。

CF hint: What if you really, really wanted to use matrix exponentiation?

令矩阵 \(A\)\(a_{i,j}=[i=j\vee \exist (i,j)\in E]j\),发现每轮操作就是对那些 \(a>0\) 的位置做 \(A e_i a_i\),其中 \(e_i\) 是一个仅有第 \(i\) 行为 \(1\)\(n\times 1\) 的向量。

\(x_k\) 是一个 \(n\times 1\) 的向量表示操作 \(k\) 轮之后的 \(a\),那么:

\[x_k=\sum_i A^{k-d_i} e_ia_i \]

CF hint:How can you multiply some vectors by a matrix in O(N) time? (go back to linear algebra class)

需要求的是若干个矩阵乘向量的和,众所周知,矩阵乘向量 \(A\bar{v}\)\(n^2\) 的。联系 CH定理 的知识,考虑特征值和特征向量。

注意到在这里,\(A\) 是一个上三角矩阵,且容易验证 \(\lambda_i=i\),(因为 \(A_{i,i}=i\),所以 \(|A-iE|\) 不满秩且秩刚好是 \(n-1\),同时有对于齐次方程 \((A-iE)x=0\) 的解空间(即正交补空间)是一维的)。

对于 \(\lambda_i=i\),怎么求解其对应的特征向量 \(f_i\) 呢?可以随便找一个矩阵手画一下,然后就会发现向量 \(f_i\) 只会在 \(f_{i,1\dots i}\) 有值且不妨令 \(f_{i,i}=1\)(解空间是一维,钦定一个就足够了),那么由于是一个上三角矩阵,所以就从 \(i-1\) 一步步往上解就好

发现,如果把 \(\bar v\) 叙述成 \(f\) 的线性组合,不妨设 \(\bar{v}=\sum w_if_i\),那么 \(A\bar {v}=A\sum w_if_i=\sum w_i\lambda_if_i\),这样就是 \(O(n)\) 了。

(平时为什么不用这个方法呢?原因是特征根没有这么好求解,只是本题是一个上三角矩阵)

于是,同理我们考虑把 \(e_i\) 写成 \(e_i=\sum w_{i,j} f_j\)

\(w\) 的求法:首先 \(w_{i,i}=1\),假设已经求出所有的 \(w_{j<i}\),知道 \(e_i=f_i-\sum f_{i,j}e_j=f_i-\sum f_{i,j}\sum_k w_{j,k}f_k\),所以 \(w_{i,k\neq i}=\sum f_{i,j}\sum w_{j,k}\)

那么:(注意 \(d_i>k\) 的部分,应该直接给答案加上 \(a_i\))

\[\begin{align*} x_k&=\sum_i A^{k-d_i} e_ia_i\\ &=\sum_{d_i\le k} A^{k-d_i} a_i \sum_j w_{i,j}f_j\\ &=\sum_{d_i\le k} a_i \sum_j \lambda_j^{k-d_i} w_{i,j}f_j\\ &=\sum_j \lambda_j^{k} f_j\sum_{d_i\le k} w_{i,j}a_i\lambda_j^{-d_i} \\ \end{align*} \]

所求是 \(x_k\) 的第 \(l\)\(r\) 项的和,预处理对于每一个 \(j\) 预处理 \(f_j\) 的前缀和。

考虑每次枚举 \(j\) 回答询问,后面的 \(\sum_i\) 可以每一个 \(j\) 维护一个 bit。那么这样询问的复杂度就是 \(qnlogn\)

现在考虑加入修改操作。

首先考虑 \(d\) 的变化,发现只会变 \(O(n)\) 次,每次暴力重构每一个 BIT 即可。\(O(n^3)\)

BIT 的 \(O(n)\) 重构:c[i]=s[i]-s[i&i-1]

普通的数的增加,只需要对于每一个 BIT 做单点修改,\(O(qn\log)\)

总复杂度 \(O(n^3+qn\log n)\),非常好吃。

Query On A Tree 17

solution:

一个结论是:写出树的 DFS 序,并且将 \(i\) 重复 \(a_i\)(点权)次,那么最浅的带权重心的子树对应的区间一定包含这个序列的中位数(因为其长度应该大于等于总长一半,否则可以再往上走一步)。

于是我们维护这个序列长度和按照 DFS 序的点权前缀和,这当然就契合重链剖分的维护特点,于是我们每次查询中位数,然后从那个点树上倍增就可以找到带权重心。

时间复杂度为 \(O(n+qlog^2)\)

[Gym104857H] Computational Complexity

妙!

solution:

暴力模拟,发现当 \(n\le 13\) 的时候 \(f,g\ge n\),所以可以去掉 max。

脑补一下 \(f,g\) 长啥样,可以感受到很多值都是一样的。那么有一个 key observation 是,记 \(f^{\prime}\)\(f\) 的差分数组,那么

\[f^{\prime}(i)=[2|i]g^{\prime}(i/2)+[3|i]g^{\prime}(i/3)+[5|i]g^{\prime}(i/5)+[7|i]g^{\prime}(i/7) \]

\(g\) 同理。

那么对于所有 \(i\),如果 \(gcd(i,2*3*5*7)=1\),那么 \(f^{\prime}(i)=g^{\prime}(i)=0\)

有推论,对于上述的 \(i\)\(i\times 2^a\times 3^b\times 5^c\times 7^d\) 的差分也都是 \(0\)

这意味着,所有有值的位置必定可以写成 \(i\in[1,13],n=i\times 2^a\times 3^b\times 5^c\times 7^d\),这个的总数在 \(log^5\) 级别。

所以把所有有值的差分数组全部求出来,再还原。每次二分回答询问。

CF1889E Doremy's Swapping Trees

感觉这种树上 2-set 状物(优化建图)之前曾经见过一次,当时似乎是对于置换环的考虑,但是忘光了!

solution:

考虑选出的边集 \(E1,E2\),如果边 \(<u,v>\in E1\),为了保证交换之后连通性不变,则 T2 中 u 到 v 路径上的所有边都必须属于 E2。这是 2-sat 状物。

优化建图并tarjan出强联通块,答案就是 2 的强联通块数次幂。

因为考虑任意一个方案,按照拓扑序之类操作肯定是可以操作出来的。

2.16 模拟赛1D1

昨天晚上玩到接近 1 点钟,躺在床上一下子就后悔了。我难道不知道我会后悔吗?早上 6:30 起床,炸。

下午很困。本来准备趴下睡一会儿,但是眼睛一闭就是题目,想睡又睡不着/zk

晚上前半段比较精神,后半脑袋开始有点刺痛。

8:30 想要睡觉。

9:00 放弃 T1 并倒下

9:15 起来。想 T2

10:20 发现 T2 起始步骤爆了,全假了。心态问题开始出现,但是整个人一下子就清醒了。

10:35 给 T3 胡了一个结论,但是摆烂,回去做 T1

10:40 发现 T1 似乎可以直接暴力分讨硬做。

11:30 写完 T1

剩下 30min 在拍 T1,发现 T1 数据很难造,因为一旦 LDS \(\ge 3\) 答案就是 \(0\)

感觉自己要抱灵,心理大概做好预期,觉得爆灵没啥。

结果真的爆了,这大概是我 OI 生涯第二次爆灵,第一次应该是在 2023 10月。吃饭的时候想了很多,但是都忘了,总之是很低落的。

今天太阳很好,我想。回到机房,似乎这个时候才意识到发生了什么事情,第一时间的反应是觉得很荒唐。太荒唐了。

吹风。当时的心境已经忘了,那便忘了。只是觉得和 10 月份好像,都来了,都来了。

怀揣着苦涩再来分析 T1,最后发现多测每次应当 a[n+1]=0。太爽了。

我现在笑着回忆中午的情思,感慨一笑难求。

2.17 模拟赛1D2

打了一会儿,就犯晕。中午睡觉质量很低,眼睛闭上脑子还在转不停。

所以睡了等于没睡,感觉除了最开始的 1h 左右,一整天都脑袋刺痛。这样也许可以更好地锻炼脑子,我想。

听了听昨天T3,今天T2的讨论。

不想订正,第一次打 luogu 月赛。

口胡 ABC 并帮 yr 调了一点。

虽然处于没有脑子的状态,但是硬刚今天 T3 oper,觉得自己的做法还有救。

虽然处于没有脑子的状态,但是我一刻都没有停息。回头看,不免惊讶于我这样坚持着走了一天。

但是关于回家摸鱼不睡觉,总结为太懦弱了。

2.18

又搞了很久昨天 T3oper,发现自己的做法彻底假了。我做不到每次新加一个点之后维护反悔贪心,因为反悔贪心很厉害,反悔贪心实质上保证了过程中不会出现长度 \(\ge 3\) 的增广路。而我用线段树维护的话,也需要保证只存在 新增/反悔 两种增广路 \(\ge 1\) 的操作,但是由于新加的点是任意位置的,所以破坏了反悔贪心的性质,所以我没有办法维护。

这又是一次硬刚失败的经历,10.2kb。上次失败是前几周在水土那个 DP 啥的。这次也花了不少的时间,因为是在昨天晚上头痛的时候决定开搞的,当时就隐约有会错的预感,写的时候也多是大脑浑浊的状态,所以这个结果也符合预期?反正最开始其实是奔着锻炼代码实现的目的去(单单代码实现的话是不需要废脑的),也一直清楚如果要把这个算法正确性分析清楚的话需要考虑模拟费用流,但是不管,写着玩儿。

今天下午,对拍拍出来手摸,结合模拟费用流一分析,发现 G 了。

本来觉得没什么,但是写完上面的话,却怅然若失了。

为什么我会这样写总结呢,因为我舍不得忘记这段经历。


昨天晚上还是 12:00+ 睡的,本来说 11:30,但是早上可以多睡会儿。

最近晚上间断会爆走回家,这是从 NOIP 之后某天 whk 开始做的。最近走的路上会唱歌。

上午昏昏欲睡,觉得 zjk 讲得很用心,但是就是有点听不下去。

中午睡沙发,看了点鬼畜,然后清醒了。感觉沙发还是很有用的。

下午比较精神,晚上最开始有点困,后面头痛。

没做啥题。

口胡 ARC

2.19

上午在摸鱼,中午爽睡 50min,下午状态不错,晚上略微犯困,最后写总结的时候头痛。

感觉已经欠了很多题目了,后面似乎也没啥时间,那么在这里把从 2.16 至今 4 天想到的东西(当然忘了一些),学的东西,都记录下来。(全部口胡一遍)

写不完了了,感觉 bxy 边听课边记录下自己的想法是一个很好的习惯,可以让自己保持注意力集中的同时提高效率。

感觉这些题,到省选完了都写不完了。

写了代码:

  • 染色数组:首先有一个 sb n^2 DP,然后发现可以很容易的线段树优化成 nlogn。然后发现转移矩阵非常特殊,合并起来也很特殊,分析了很久但是没有用。然后发现实际上限制很强(不能有 \(\ge 3\) 的LDS),然后直接顺着做,发现简单分讨就分讨完了。
  • 博弈:考场上知道应该从小到大连出 DAG,但是由于不知道 SG 值的结论,G 大了。solution:结论:先手必胜 \(\Leftrightarrow\) 将无向图的边定向为从小到大,然后将得到的 DAG 视作博弈图,SG 不为 \(0\)。然后考虑怎么算方案,注意到形成的其实是树,只是树边 xjb 定了方向,但是我们还是可以算。(借鉴 万分之一的光 之类)。随便抓一个根,设 f_{u,i,j} 表示 \(u\) 子树所有 \(\oplus sg=j\),且若 \(u<fa\)\(sg_{fa}=i\),否则 \(sg_u=i\) 的方案数。\(j\) 可以 FWT 转成点值干掉。然后 MEX 的计算没有办法只能状压 DP,这个转移柿子不难。考虑分析复杂度,复杂度类似 The Doubling Game 的分析。关键在于注意到 \(sg=i\) 的至少需要 \(2^i\) 个点。
  • ABC341:没啥营养。
  • ARC172: A 注意到2的次幂的性质非常强,所以可以随便做。B:分析限制,对于两个相同的位置 \(i,j\),需要满足 \(i-1+n-j<=k\)。考虑从前往后放每一个数字,发现可以填写的数字是固定的。C:把前缀和放到二维平面,操作等价于把一个前缀往下平移一个,看是否存在 s>0 到 s<=0 的位置,数这样的前缀数量。显然答案就是 s 符号会变化的i的个数。D:nb 构造题。官方题解写得很好。E:当时猜到了必定有解且解唯一,但是没有细想。官方题解写得很好。
  • DTCPC2024(LUOGU 月赛):B 被卡了好久。首先注意到 00 有分割作用。然后注意到每一个段必定可以消成只有一个1。C:nb 题。首先我们肯定要使得花费尽可能短的步骤拼凑出 k。然后通过调整法可以发现最优解必然形如 (((r1)r2)r3),其中 r1 表示 r1 对形如 \(()()()\dots\) 的括号。D:log^2 冲过去了,log 做法还是考虑扫描线,注意取值变化只会有 O(n) 次。E:贪心。F:solution:厉害题。首席有一个聪明的转化,操作次数等于 最后的序列和原序列不同位置 的数量/2。然后就可以 DP 了,设 \(f_{i,j,k,0/1}\) 表示当前填写了 j 个 1,最后一段 1 长度为 k。但是卡空间,一个傻波的想法是认为 k 的范围是 sqrt,然后滚动维护 \([i-30,i]\);聪明的做法是,无法对 i 滚动数组,考虑对 k 滚动数组,即一轮一轮转移,即设 \(f_{i,j,_}\),_ 和 k 意义相同。H:特别注意可以手动捏一个二元环出来而不利用任何已经存在的边。J:发现操作等价于任意交换。L:bitset 好题,容易发现关键在于求出有哪些 a_i-a_j ,这个可以 bitset,每次不断位移。

没写代码:

  • [ABC335G] 涉及到离散对数相关,现在已经忘了怎么做了。题解 优秀实现
  • [Gym104686J] Mortgage:后缀的前缀最小平均数,假如问的是 \([i,i\dots n]\) 那么就变成了 ABC341G,随便一个单调栈维护掉。问题在于怎么处理这个版本的问题,感觉直接在单调栈上二分就可以了??这个当然是不行的,问题是怎么求 stk[i] 和 stk[i-1] 之间的答案,这些点可能在最终的凸包内。solution1:线段树,每一个节点维护对应区间的凸包,每次拆成 log 个区间,在凸包上二分 log 次。solution2:考虑经典猫树分治,然后xjb搞,当然还是要二分凸包。
  • [Ptz Winter 2020 Day 6 E] The Destruction of the Crystals:首先容易发现启动了一个之后剩下的方向就全都固定了,然后感觉到大概就要网格图转二分图了。solution:确实要转二分图。其次注意到除了第一个被引爆的炸弹,其他的炸弹都会炸掉其在的行和列,而第一个炸弹只能炸掉一个方向。然后画画图感知一下。可以知道一个联通块如果存在环,那么就可以把第一个炸弹没有炸到的补上,所以这个贡献是很好算的;否则一定是在一个叶子启动。
  • Ptz Summer 2022 Day2E Ternary Search:感觉很典的题目,但是啥都没想到。solution:考虑归约问题,考虑最小值,发现只能放在固定两个位置,且贡献也是固定的(左边比它大的数量和右边比它大的数量的较小值),然后就可以删掉这个值不管了。这个是很好维护的,每次 push_back 一个数,只会使得 右边比他大的数量 增加,且 max 的决策只会改变 \(O(n)\) 次,各显神通(比如二分预处理一下阈值在哪里)。思想相似的:permutation graph,也是从最大/小值入手。
  • Ptz Summer 2022 Day2H Grammy Sorting:solution:从链的情况入手,发现操作等价于插入排序。扩展到“树”,发现只需要对每一个叶子到根的这条链都做一次就好(当然最后一次必须包括 1)。考虑 DAG,让解决的点是拓扑序的一个后缀。那么这一次就要解决最靠后的还没被解决的点,多个后继,在插入排序的过程中要往权值最小的父亲走,就像树的情况的最后一步一样。
  • [ARC118E] Avoid Permutations 考虑对于一个固定方案的答案计算是经典的。容易想到把容斥,钦定一些点不合法,容易想到把 \(-1\) 的系数拆到每一次选择上。solution:然后发现只需要记录两个 \(0/1\) 就能够处理排列的限制,然后瓶颈在于需要枚举下一个的坐标,那么经典地把决策变成一步一步走。
  • Modular Sequence:先转化到 \(y=1\) 的情况,然后DP,然后发现状态数并不是 n^2 而是 \(n\sqrt n\)

等待学习的题目:

  • 水土最后一场模拟赛 T3;寒假模拟赛 T23
  • [PTZ summer 2021 Day 4 B] Cactus:没听懂。
  • [PTZ summer 2021 Day 5 D] Interval:没听。
  • [Gym104869L] Rook Detection:会一点。
  • Giant Penguin:会一点。
  • [2nd ucup stage 12 A] SQRT Problem:solution:大力分析取值规模。大力毛咕咕。最后要万能欧几里得之类,我不会。
  • 所以k小生成树怎么做
  • 考虑复习一下 奥日与迷雾森林
  • 消消乐:考场已经自己想出了结论,但是没有时间去想后面的计数了。
  • 考虑复习 老机
  • 维护 mex 的方法:Holy Diver P4137, Rmq Problem / mex, P9970 [THUPC 2024 初赛] 套娃,Another MEX Problem

强调:

  • 两次,因为多测没有写 a[n+1]=0,挂分。

没写完的明天继续补充。

2.20

上午状态还可以,但是人太菜了,T1 做到 10:00 然后被搞破防了,心态爆炸,后面 2h 做得得不好。

md,又是被自己菜破防的一天。

中午没有怎么睡觉,然后下午晚上状态很不好。

下午写 T2,但是一直算不对,全是一些奇奇怪怪的细节写错了,骂娘。

2.21

走在上学的路上,我感觉的确如 yr 所说,可能我考试的时候神经太紧绷了,这是欲速则不达。看着所剩无几的时光,我的心态应该是珍惜的,在考试的时候我也应当快乐,而不是后面回溯性建构自己的快乐。当然,这种放松,必然不能是摆烂和放纵。最后几天,我希望留下一个美好的结尾,这个结尾不应该是由挣扎构成。

模拟赛,心里面杂念太多了,完全占据了头脑,怎么想题?怎么想题?怎么想题?没有一点想要打代码的欲望。

想要放松一点,想要不想太多,想要仅仅是投入考试,沉浸思考,享受这个过程;但是欲买桂花同载酒,终不似,少年游。

下午不知道为什么,摸鱼,心里面很纠结,觉得都是垃圾,那么我自然也是垃圾。

写 T1,写出来发现过不了样例,emo 了很久,然后发现是样例贺错了。看到自己因为一道题,因为一场模拟赛而心情这般起伏,突然惊觉自己似乎一点自信没有了。没有自信,所以不敢写代码,害怕写错,害怕没有结果。鼓不起来勇气,真是太懦了,太懦了!

写 T3,先把考场上的想法补了一下,发现假麻了。然后打正解,难得集中。

我陈述我的傻逼,但这并不能任何减轻我的罪责。

为什么包袱这么重?为什么压力这么大?我不知道。可能有些路,确实只能自己走。

If I can heal the conflict that's within.

I'll know the war has reached the bitter end.

2.22

感觉心态还是没有调整好,希望能够尽快调整好。

做 T1 的时候脑子有点晕晕的,做完精神了,但是心情开始浮躁。这是另一个方面,即使题目会做,也应该保持单纯的做题的心态。

T2 想了比较长的时间,但是想错了一个点导致全盘皆输。感觉心态不对。

后面很饿。

下午出分,又被打击到了,感觉思想境界太低了,这不是我。我将是一个成功的失败者。

T3 sub78 原来可以暴力跑 m 次,这样居然可以跑过,我觉得很不可思议,爆亏 26pts。

由于中午没有怎么睡好,导致下午状态不佳有点头痛。心里面隐隐有所感悟,于是写了一篇鲜花。

晚上头痛。

2.23

简单把题目看完,第一感觉 T1 是插头 DP,T2 是 DS,T3 位运算

心里面感到很疲惫,啥都不相干,然后在学校里面逛了 2h。

回来写插头 DP,写得很慢。

然后开摆了。


2.24 晚上回来,感觉状态还行但是不是特别好。

给 match 看懂了,写了一点,然后去打 ABC

不会 ABC F 期望 DP,我自裁。问题在于把这道题看作是一个博弈论的题目,而没有看成是一个期望 DP 的题目,然后误以为需要设置一个阈值之类,然后难免陷入分讨的泥潭。

求大了,掉大分。

期望 DP/oh/oh/oh,大概是太久没有做了。

G 胡了一个线段树分治,然后为了避免 3log 线段树维护的东西非常麻烦。但是实际上扫描线就好了,纯学傻了。

2.24

考试的时候状态不是特别好,人有点恍,但是心态还行。

简单手模了一下 T1 觉得不太好做扔了,想了 2h 多的 T23 但是会不了一点。

然后觉得时间差不多了,开始打暴力。T1 爆搜都打了好久/lh,一直写错。然后看到 T1 还有部分分,思考了一下没有 ? 的部分,考虑了一下贡献是咋计算的,发现似乎很好算;然后利用线性性拆开计算即可。(感觉做得还算熟练,最开始就感觉到这题的思路是探究一下贡献计算然后拆开每一个位置计算)

T2,最大的问题在于肯定不能容斥两次,这样虽然尽力拆分,但是总是拆不开的,必须要想办法去掉一次容斥。灵光一现,发现可以化到 X=1 的情况,当时还很激动,但是还是没有想到怎么只容斥一次。solution:等价于,对于每一个元素,必定存在某一个 \(a_i\) 使得它没有,也存在一个使得他有。这个条件可以转化成为存在一条边 \((u,v)\) 使得 \(a_u\oplus a_v\) 包含这个元素。然后就可以对这个做 or 卷积。感觉这个转化还是非常巧妙的。

T3 搞了一个 nq,有很多部分分都没有时间打了。没订正。但是一个很好的思想,遇到这类存在 ? 然后需要计算最大贡献的题目,可以考虑先钦定 ?=1,然后计算 \(\sum\Delta (1\to 0)\)


下午晚上有点焦虑,心态还需要进一步调整。

晚上被 match 折磨晕了,最后也没有做出来。

感觉手很冰。

2.25

希望能够在省选前调整好心态。

8:10 把 T1 切了,感觉应该是全场第一个切的,但是有这种感觉,说明大大分心了,说明还是没想明白。

发现 T2 很典,然后开始推柿子,式子推完看 T3。简单想了想 T3,觉得大概是很可做的题目,因为这种多个函数套在一起的,并不难。

回来开始写 T2,不过样例,开始怀疑是不是这道题不能用势能法,因为势能法需要满足鞅与时停定理之类,但是我不会这个定理。

然后把式子反复检查了几遍(梦回解析几何),发现有个正负号变错了,且答案最后需要除 \(n\)

此时 9:40,非常优势。只是肚子不太舒服。

开始推 T3 了,感觉状态有点下滑,不太集中,不纯粹。

觉得 T3 题面描述得很不清楚,样例一点用的没有。最开始一直以为本质相同的子序列只能计算一次,算了半天发现算不了,怎么办呢?只能猜子序列不同当且仅当位置集合不同,然后硬着头皮推;计算 \(H\) 的时候,\(n\) 是否会变化呢?不知道,看到第二问相对复杂,所以做 \(n\) 不会变的简单情况。由于害怕数错,所以计数方法非常愚蠢,写出的答案式子丑陋无比,然后啪啦啪啦往下推了一页纸,推了好久还反复推错,最后打了一个暴力发现样例都算不对,人麻了,不知道是哪一步错了。

最让我满意的一点是,想到了怎么求 \(\sum \binom ni x^i\) 且要求 \(2|i\)。根据经验,可以考虑添加一个 \(-1\) 进去,然后发现 \((1+x)^n\) 求得是 偶+奇数,\((1-x)^n\) 求的是 偶-奇。注意一个 \(\frac 12\) 的系数不要写掉了。

T3 啥都没写,结束了。


T3 题目果然读错了,虽然推的很曲折,但是柿子倒是推对了,很好!

这提示我们,对于子序列的计数,可以认为是先选好一个序列,然后 \(2^n\) 挖掉一些位置;而不是说计算一个序列,他是多少个序列的子序列,这样是愚蠢的。对比:

我的方法:

\[\begin{align*} g(v,x)&=\sum_{2|len} \binom {len}{x} v^x (n-v)^{len-x} n^{m-len} \binom{m}{len}\\ &=v^x\binom mx n^m \sum_{2|len}\binom{m-x}{len-x} n^{-len} (n-v)^{len-x}\\ &=v^x\binom mx n^{m-x} \sum_{2|len}\binom{m-x}{len-x} (\frac{n-v}n)^{len-x}\\ &=\frac12 v^x\binom mx n^{m-x}((\frac{n-v}n+1)^{m-x}-(\frac{v-n}n+1)^{m-x})\\ ans&=\sum_{2\mid (x+1)}g(v,x)\\ &=\frac 12\sum_{2\mid (x+1)}\binom mx v^x ((2n-v)^{m-x}-v^{m-x})\\ &=\frac 14((2n)^m-(2n-2v)^m)-2^{m-2}v^m \end{align*} \]

题解:

对于序列 \(a\),枚举其恰好有 \(i\) 个数在当前点子树内 (令 \(siz=v\)),这样的方案数就是 \(\binom mi v^i(n-v)^{m-i}\)。除去 \(i=0/m\) 的情况,考虑有多少子序列符合条件。对于 \(v\) 中的部分,它要选出奇数个数,根据对称性,答案是 \(2^{i−1}\)。对于 \(v\) 外的部分,要保证子序列长度为偶数,根据对称性答案是 \(2^{m−i−1}\),所以:

\(ans=\sum_{i=1}^{m-1}\binom mi v^i(n-v)^i2^{i-1}2^{m-1-i}=2^{m-2}(n^m-v^m-(n-v)^m)\)

这就是 solution 的魅力吗。

然后关心上下联通块的大小,需要求 \(f_{i,j},g_{i,j}\) 分别表示子树/上方 \(j\) 个点的联通块的方案数。

问题在于 \(g\) 的转移不能套用树形背包复杂度计算。但是注意到转移都是卷积形式,且过程中所有多项式次数 \(\le n\),那么考虑维护 \(f(0\dots n)\) 的点值,然后最后用拉格朗日插出系数

注意由于拉格朗日插值是 \(O(n^2)\) 的,所以要把这些点值加在一起计算。

第二问反而简单;略。


下午状态挺不错,帮助 yr 写了 T2 并发现势能法的时候不需要计算 \(g\) 表示 \(f\) 的差分数组;然后写 T3。

晚上有点头痛,没干啥事。

后面在研究 yr 新出的题。

2.26

9:30 T1 初步

9:50 一阶段对拍结束

10:00 GGG!

10:40 无脑!无脑!

11:30 写不对,fk

11:40 wssb,but, how to unlimit ?

12:00 continue;

12:20 急急急

心态,心态。

T1 最开始猜了若干结论,然后得到一个在 \(n\bmod 4=0\) 的构造。先是拍了半天看这个构造是否合法,发现合法。然后思考是否还有其他解,写了一个暴力发现确实有,GGG!。

分析发现 \(n\bmod 4=2\) 可能有解,然后分析了一下 k 的奇偶性;但是想不到怎么构造!

去看了看后面的题,发现 T2 是原,T3 看起来也很可做。

发现在 \(n\bmod 4=2\) 直接 \(010101\) 就好了,无脑啊!然后又多拍了拍。T1 大概一共做了 2h。

然后去写 T2,但是改了很久,一个细节一直没写对。然后最后还只有 60pts,因为没有取模!吸取教训!这个是我最近养成的坏习惯;就是写计数题的时候,对于乘 -1,我喜欢直接写 a=mod-a,想着反正后面也不会爆;但是今天不是计数题/ll

中途被叫去教室收书,耽搁了一些时间。

回来做 T3,首先华丽丽地忘记了之前分析依据并产生质疑。推了一会儿发现之前想的是对的。

然后打 K=0 的 sb 分,写得很急,发现一直没有彻底分析清楚。分析明白之后也半天算不对,然后发现是爆 long long 了。

也就是说,从 12:20 左右开始,心情就开始急躁。真是奇怪啊,我提醒我要注重过程,所以我担心我作出题的高兴是因为太在意结果。但是可能也间接压抑了本身做题的高兴,导致打得不激动,不全情投入,这又当然不是一个很好的过程。最后想要让自己分析集中一点,分析果断一点,不要怕分析错,反而犹犹豫豫畏手畏脚,十分在意 T3 没拿啥分数的结果,心态爆炸。(也就是观念还是被误导了,动力不应仅仅来自结果,我很难承受这样大风险,但是这也是一种必须的锻炼吗)感觉这是一个很大的思维陷阱,重要的是过程,但过程中重要的是想要得到好结果,不服输;那么,想要得到好结果不就是在承认结果很重要吗?不,重要的是 想要,想要试一试这天有多高。过程对自己交差,结果对他人交差;两个都想要,道路是是自己交差就是对他人交差。真是虚虚渺渺,动荡不安。

太脆弱,太单薄。


中午没怎么睡,下午迷迷糊糊,比较懒散不想做事情,感觉混着混着就过去了。

随便找了点 DP 题做,晚上摸爆了。


和 yr 现在初步出了这样一道题:

有一个停车场有 \(n\) 个车位,每天早上和晚上会分别有 \(a_i, b_i\) 个车停进来,然后在晚上/早上出去,保证 \(a_i, bi\le n\)。一共有 \(m\) 天,早上停好车之后白天会出太阳,晚上停好车之后晚上会下雨,所以车位有干,湿两种状态。下雨会打湿车位,太阳会烘干车位,但一个车位如果停了车,那么不受影响。可以随意钦定第一天刚到早上的干湿状态,一组 \(a,b\) 的权值定义为 \(min\sum 刚到早上的干车位 + 刚到晚上的湿车位\)。现在给出 \(q\)\([l,r]\),询问 \(a_{l\dots r},b_{l\dots r}\) 的权值(即 \(l\) 是第一天,初始干湿随意)。

贡献计算提示得非常明显,本来贡献计算不长这个样子的。

设刚到早上有 \(p_i\) 个干车位,刚到晚上有 \(q_i\) 个湿车位,等价于:

\[\min \sum_{i=1}^m p_i+q_i\\ s.t.\ p_i\le a_i, q_i\le b_i, n-p_i\ge q_i, n-q_i\ge p_{i+1},p_i\ge b_i-q_i,q_i\ge a_{i+1}-p_{i+1} \]

很容易发现这个 \(p,q\) 是骗人的,等价于

\[\min \sum_{i=1}^{2m} p_i\\ s.t.\ p_i\le a_i, a_i\le p_i+p_{i-1}\le n \]

由初始干湿任意,可以发现这样一个贪心:\(p_1=0,p_i=\max(0,a_i-p_{i-1})\)。正确性可以考虑调整法,首先对于 \(p_2\)\(p_2=a_2\),那么如果我们把 \(p_2\) 调小,\(p_1\) 调大,那么肯定不优,因为更大的 \(p_2\) 可以使得 \(p_3\) 有可能更小。而 \(p_3\) 可以就取能取到的最小值,因为这样值肯定最小,而把 \(p_3\) 调大,\(p_4\) 调小的分析等价于 \(p_1,p_2\)

先考虑怎么快速算某一个 \(p_i\),可以将过程视作对一个变量 \(p\) 进行 \(i\) 次操作,每次要么选择 \(p=0\),要么选择 \(p=a_i-p\),求最优操作能得到的最大值。注意到操作一是置为 \(0\),自然考虑枚举最后一次 \(p=0\) 的操作,于是 \(p_i=\max_j \sum_{k=j}^i a_k(-1)^{i-k}\)

这个和区间和很接近,只是多了一点系数,但是也好处理,发现对于位置(\(i\))奇偶性相同的,他们的系数序列一样,考虑把问题分成两个部分做。

这个时候可以预处理前缀和了,\(p_i=\max_j s_i-s_j\),考虑询问有 \(L\) 的限制,每一个询问的答案就是 \(\sum_{i=L}^R \max_{L\le j\le i} s_i-s_j=\sum s_i-\sum_i min_{L\le jle i} s_j\),这是一个前缀 min 的形式,我们只需要离线下来,扫描线从后往前扫,线段树维护当前前缀 min,每次询问就是是区间求和。

\(O((n+q)\log n)\)

2.27

今天心态说好不好说坏不坏,被 T1 卡心情郁闷了一段时间,但是调整了过来。

考完感觉莫名很烦躁,也没想到 T3 这么简单。最开始以为是被自己菜的,后面感受了一下,觉得大概是不舍,最后一场模拟赛就这样收场了,并没有酣畅淋漓,只是步步维艰,左顾右盼。

中午没怎么睡着沙发被捷足先登了,机房略吵。

下午还算有精神,给白鸟讲了讲我的 T1,他写出来证明我思路是对的,确实只是被卡常。学习了一下 std 的 T1,省掉了我的 set,对于条件的转化更明白深入,厉害的。

发现 6 道题挂了 20+50+0+80+0+(-55) 分,都是一些奇怪的小锅,RP 暴涨。然后给今天 T3 20 分钟一遍过了,难评。

晚上感觉有点困,效率很低。

2.28

早上过来很想摆烂,和 yr 简单聊聊有所触动,反思了一下。

然后 vp 了最近一场 div2,比较顺利地切完 E,小看了 F,以为很简单,这个时候白鸟过来问题,于是就是和白鸟讨论问题了。

中午想摸鱼又不想摸鱼,很烦燥。今天的沙发也被捷足先登了,愤怒!

下午先结束了最近看的一本小说,然后把 F 做了,口胡的 sa 一遍写对,很高兴。

然后继续看 luogu 月赛的题,觉得确实很有质量,可惜以前都没有发现。

隐隐约约很烦躁,然后开始看过去写的总结,看到了这样一句话:

懒得等车,在金色的日落下慢慢地朝向家的方向走,零落有鸟叫。

失败了,但是会赢。我默念。

这居然是我写出来的话,现在觉得一方面略显稚嫩,另一方面却又自愧不如。

今天一直都有点焦虑的感觉,然后就想要划水,但是这显然毫无作用,只会加深我的负罪感。

然后对着之前的总结复习知识点,进度很慢。

然后被俄乌战况勾引了。

2.29

早上过来,继续接着昨天晚上没看完的东西看,继续复习一些不是很熟悉的算法。

前半部分心态还算不错,看着过去的自己,觉得自己一路上做得不错,除了每次放假/周末的放肆,没有一刻没有保持思考,保持质疑,保持前进的心情。从没有后退,每次都顶着心里的不情愿迎上。

我希望明后两天,我能够怀有这样一种自信:我的表现一定能够对得起自己;同时怀有这样一种放松:无论如何,OI 已经教会了我更多,即使失利,这段时光早已不可磨灭。

去年春测之前写下了这样的话,虽然现在看来可能没有做到:

我感知着心中纷乱的头绪,不断想要使自己明白后天的考试不过是人生的一个小部分,不是什么结局,更应该是同任何一个瞬间一样无时无刻绽放生命光彩的片刻。我恍然中了然对这场比赛的重视程度,期待责任完成的瞬间。

切勿为部分生活落泪,君不见一切人生都催人泪下。

看了看经典名场面 faker 的回眸。摆了一会儿,越摆心里面越难受,干脆睡觉。

中午本来睡得挺香,但是一群低年级的需要用隔壁教室,把在里面睡觉的我赶走了。回来继续趴着想继续睡,但是他们一直叽叽喳喳乱叫,难受。

下午晚上随便 xjb 看了看。

不断在调整自己的心态,试图让自己明白,明后两天的时间,和我人生中的任何一段时间没有任何的区别,他们都同样的独特,同样得富有价值。

晚上收到了来自 pt 的祝福,很惊喜,他告诉我:“加油,无论如何都有好结果”,我突然意识到我也是被幸福包裹着的。

但是随后,我便有点想要打摆了/qd。我开始反思是不是我又开始自负了,又开始以为自己很有希望,又升起了莫须有的虚荣之心。

我再次提醒自己:

  1. 对于经历的一切,应该抱有一种基本的“冷酷”,认识到这些都是我的养料;于是便表现为乐观。
  2. 我不应该自信我能够进入省队,我应该自信的是我不辜负
  3. 我将成为一个成功的失败者,但是其实我现在已经成功了,我在过去的每分每秒从未退缩;我接下来需要做的,就是学会去面对这场失败,去经历这独一无二的体验。

要学会去面对绝望中的一线希望。NOIP 之前的我,错把这一线希望看的无穷大,所以考场上接受不了一点挫折;NOIP 之后的我,逐渐认识到希望确实只有一线,然后被这巨大的绝望逼迫着往前走,进而也开始害怕这希望,进而不想接受也不愿接受;我希望,明天的我,能够坦然地撞上这南墙。

我不是希望我能功成名就,我希望的是我能够获得足够的成长,我有了足够的思想境界和能力;我现在祈盼明日的心态要保持好,实际上是在期盼我有这份坚定,我能够面对失败和绝望。

那么,即使最后发现我没有这份心智又怎么样呢?这只会让我更坚强。


这些东西,感觉我可能明白得太晚了,虽然这段时间不断给自己强调,但是到时候如何表现却依然是未知数。多多少少需要点“缘分”和“命数”

但是生活本来就是充满不确定性的,如何面对这种不确定性也是必修课。另一个方面,不妨豪迈一点,大胆地迎接所有的风浪。

NOIP 考完我哭着走出考场,这次我将笑着走出去,走向无垠的荒野。

DAY1

昨天晚上反复醒了 3,4 次,但是好消息是每次入睡都在做梦,而且做的这几个梦还都是连续的。

继续调整自己的心态,觉得自己之前就是开考前之的神经太紧绷了,导致开赛前就把脑子用爆了。

这次开始之前相对放松了,然后开始了,感觉最初的时候脑子不是非常清楚,所以决定用没有脑子的时间去把题面都看看,评估一下难度

然后看到 T1 是一个感觉不难的状物,T2 考我二进制,T3 神秘蛇皮计数题。

提醒自己要放松一点,要把这个当成是正常的模拟赛来打。我觉得最好的状态应该是不急不躁,稳扎稳打,心里面攒着一股深刻的冲劲,但是也把做题本身当成是一种享受。难道做题本身不就是一种享受吗,我现在能够有做到这个位置想题的机会,是多少人都梦寐以求的?如果这都不算享受,那什么才叫做享受呢?

T1 感觉做的还算不错把,心里面虽然隐隐约约怀着 对于我今天心态如何 的忐忑,但是还是很快就分析出来了。一点一点不着急地打代码,边打边思考,这着实是值得肯定的。

最后写错的地方在于上下取整的问题,9:30 过了大样例,心里面一下子很高兴,于是心里面的压抑被打破了。

思考是不是造点极端数据,或者写一个暴力对拍一下,但是看了一遍觉得没有什么好写的,自信离开。

捕捉到了心里面产生骄傲,觉得自己不能骄,于是开始焦。觉得自己不能焦,于是开始焦自己不能焦。最后,后面 3h30min 钟,虽然也不是没有认真思考的片段,但是心里面始终不舒服。

我之前做了如此多的思想工作,为什么还是没有用呢?之前一直在教自己在省选之前应该如何看待省选,但是考场之上却又是一番全新的体验。

感觉这个可能和我的底色有关,犯了错误之后,心里面的愧疚是很重的,也就是说我不太能宽恕自己的错误。这支持着我前进,但是当我在考场之上犯心态的错误的时候,重要的不是被愧疚淹没,而是重整旗鼓。

于是这里似乎出现了一些结构上的问题,因为想要重整旗鼓就意味着需要反思,而愈是反思,我却越是容易导向完完全全的空虚的忏悔。但是反思其实并没有错,错的是只思考不行动。只要动起来,一切都不是问题。为了不让错误变得更大,要有从零开始的心态,然后秋后算的账才更好看。

用行动去证明,用行动去证明。

我理解思想的转变需要一定的时间,但是我不相信我改不过来,我不相信这既是命,我不相信。


到晚上了,开始感觉有点窒息。

看了看 vlog 的视频,厘清了一些错误。

你的生命在哪里展开,哪里就是历史的界面

狂暴摆烂了,可惜本来计划的一些事情没有完成

DAY2

2024.3.27 补写的。

起床心情比较放松,很平静。

到了门口肚子有点不舒服,提前进去随便找了一个教学楼解决了。

我已经忘了我是以一种怎样的心情踏入考场的,但是总之还不错。

我再次告诫自己,每一刻都是同等重要的,要相信自己可以做好;如果一时间心态出问题了,那么应该是不计前嫌,这样秋后算账的时候才好看。————当然这句话现在看来确实是正确的。

看 T1,觉得非常可做,思路很直接,感觉随便贪心一下,二分答案一下,然后 log 判定是容易的。

发现 T2,3 题面巨长无比,简单看了看觉得可能 T2 还可以多做一点,T3 是一点都做不了的;于是开始写 T1。

很可惜,细节部分还是没有想清楚。

一个重要的贪心结论是直接不加验证地凭借直觉给出的,当时觉得很自然很直截,后果就是 G。说明对于一个问题的细节情况/corner case/其他的解法,第一时间没有办法把握住,说明对于问题的分析能力还不够。还不够专注,还不够谨慎,还不够熟练。

发现小的样例都能过,自己随便捏了一点小的也是对的,就是大样例 4,5 过不了。

当时以为是代码实现的问题,然后憨憨地暴力打调试行打了很久很久,很久很久。

中途出去上厕所,看到操场上有人在打篮球,心里面升起一股不真实的感觉,只看到摇晃的日光反射在操场四周摇曳的树叶上锃亮。

不知道是什么蒙蔽了我的思想,我终于在付出了巨大时间代价之后想起来我还可以对拍,是啊,为什么不对拍呢?

拍出来了,稍微改了一会儿改对了,但是只剩下 1h+,G。

但是这不重要,重要的是,当我终于过掉 T1 大样例的时候,我的心在呐喊:刺激!(可惜我并不是 东京奥运会男团决赛 的马龙)

结束了,出考场,走楼梯下楼,在门口等 FZ 集合。那么这个时候肯定需要一段环境描写,因为正如我永远记住了 NOIP 考场上T2爆炸偶然看到窗外郁郁葱葱的那一瞥,我也想要永远记住一中这片操场。

打篮球的人已经走了,操场很空旷但是阳光很热烈。地砖是那种老式小方块砖,晶晶莹莹都倒了阵型。侧面艺术楼里面走出来一些人,我只好背对着科技楼,这样没有人会看到我的失态。

说好要笑着走出来,不是吗?(虽然看起来,我时至今日都还没有走出来...? 不,我已经走出来了。)


没有想到回去没有车,只能一个人去做轻轨。积极地 和酒店前台沟通拿到我寄存的笔记本。

由于 NOIP 从八中出发找过一次轻轨站,大致知道是在啥方位,凭着心中一股直觉往那边走,竟然真的找到了,而且没有走弯路。

吃了轻轨站门口花溪牛肉粉的一碗面。

路上心情很奇怪,也没有很伤心,甚至在微笑,但是却不得不承认其实是麻木。

似乎上午的经历对我没有产生任何的影响,我只是正常回家,然后正常地投入隔膜。


现在看,大概是我当时不愿意相信我的OI生涯已经结束了吧,所以一瞬间把一切都埋得深深的。

写着写着听到采茶纪,是赛前 1 个月喜欢听的歌,瞬间破防了。

恍恍惚惚间,我还是一个坐在位置上写总结的 OIer,正如我无数次所做的那样。

好吧,这大概是我最后一次来 601。

posted @ 2024-02-29 22:02  _Famiglistimo  阅读(109)  评论(2编辑  收藏  举报