BIT training long round #2 summary
BIT 校赛 5h赛第二场总结
选自 2022 年第四届河南省 CCPC 大学生程序设计竞赛 正式赛
- solved 9/12, rk3, 罚时 15 发
赛时 rk1 体验卡(半小时不到),B首杀,还挺好(C 差点也首杀,难受,还是赛时没想明白)。
历程
这场没怎么犯病,先开的 B 题,大概有思路,第一版的 DP 过程写的有问题(纯 ICU),但样例根本不需要 DP......5 发罚时就这样交上去了,最后一发还被卡了,原定的是最长串限制在 20,卡飞了。
这场 G 好逆天。
接着开的是 K,一眼基环树加根号,最开始忘了讨论 a,b 很小,点没有到环上的情况了,又重写了一个,大部分时间在写找环。
J 不想思考写线段树合并结果是时空双双被卡......
接着是 H,不知道为什么写这么久,最后有个小细节没处理好,又挂了几发。
C 做了很久,一开始就想到维护上升段个数了,但最后的答案统计改了好几版,兜兜转转才转到组合数上(一开始一直写的排列数),组合数的参数又改了好几版,中途发现线段树还写挂了!
最后半小时想开掉 I,最终被完虐,哎哎工程题怎么这么坏。
部分题解
B - Hash
经过取模,区间哈希值就变小了,此时分成两个串是更优的,大概长度为 \(8\) 的子串哈希值就会被取模,所以最坏情况下,所有长度大于 \(16\) 的串都是劣的,都存在更好的多分割方案。
于是直接 DP 就行,复杂度 \(O(16n)\)。
K - 复合函数
连有向边后形成基环树,可以发现环长种类数不超过 \(\sqrt{n}\),并且只要 \(b-a \equiv 0~ (mod~ w)\) ,那环长 \(w\) 就是可接受的。要注意 \(\min(a,b)\) 很小时,一些点可能走不到环上,记录环长的同时还要记录每个点离环的距离,复杂度是 \(O(n\sqrt{n})\) 的。
J - Mex Tree
转化后就是求,任意定一个根后:
- 每个点子树的 Mex 值是否为 \(a_u\)。
- 去掉这个点的子树,剩下点的 Mex 值是否为 \(a_u\)。
题目限制卡的很死,不能写线段树合并,考虑更好的做法。
题目限制了没有两个点权值一样,那判断一个子树的 Mex 值是不是 \(a_u\) ,只要判断这个子树小于 \(a_u\) 的值的数量是否为 \(a_u-1\) 即可。而判断去掉子树剩下的点的 Mex,只要 \(u\) 的子树均不存在小于 \(a_u\) 的值,那剩余的子树 Mex 值就是 \(a_u\)。
从小到大加点,用线段树维护即可。
C - Serval 的试卷答案
考虑对一个区间进行隔板法分割,分割 \(x\) 个板子就有 \(x+1\) 道题,设区间长度为 \(n\) ,我们需要在 \(n-1\) 个板子中选择 \(k-1\) 个。
对于值不上升的位置(如 \(AA,BA,DA,DD\cdots\)),我们必须要隔板,而其他位置任意分割,设这样的非法位置有 \(x\) 个,答案即为 \(\binom{n-1-x}{k-1-x}\),即从 \(n-1-x\) 个任意分割的隔板中选择 \(k-1-x\) 个剩余的隔板。
线段树维护区间连续位置 \(s_1s_2,s1,s2\in \{A,B,C,D\}\) 的数量,复杂度为 \(O(16nlog n)\)。

浙公网安备 33010602011771号