2022.10.10 ZRnoip20连day1
1.时间安排
8:30~8:50 读题。
T1贪心,T2DP,T3数据结构,T4构造,标准场。
T1有显然 \(n^2\) DP做法,不知道为什么不给部分分。
T2有50分可以 \(颜色数*n^2\) DP,还有20分的链可以用数据结构做,求的东西类似绝对众数,但是想不到怎么放树上做。
T3很有根号分治的味道,写的好可能有90分,但是常数很大,不好拿。
T4是关于lcs的构造,见的比较少,而且没小数据范围的分,感觉不是很可做。
8:50~9:20
把 \(n^2\) DP打出来,大概就是一个物品选了A不能选B,最后一共在 \(n\) 个里面选 \(n/2\) 个A,求最大价值的模型,样例没问题。
然后分析一波,发现等价于贪心选 \(r1-l2>r2-l1\) 变换后就是 \(r1+l1>r2+l2\),求下和排序选前 \(n/2\) 就行了。
9:20~9:50
打了T2的50分树上的卡上界背包,一时不知道链用什么数据结构维护,先开T3。
9:50~11:40
先写了T3的20分 \(n^2\) 暴力,然后思考根分的细节。
小于根号的,直接开根号棵线段树维护,按下标对 \(k\) 取余的值分类,修改的时候只涉及到同一棵树上的下标,复杂度 \(n\sqrt nlogn\)。
大于根号的,共用一棵线段树,每次修改时暴力向后跳根号步,复杂度也是 \(n\sqrt nlogn\)。
无奈常数太大,只能跑动 \(k=1\) 和 \(k=n\) 的特殊数据,只有40……。
然后想了一下数据随机,感觉有决策单调性,打表出来并没有。
11:40~12:00
发现T2的链只需要树状数组维护前缀的DP值和就好了,70分。
12:00~13:00
手推了一下T4的样例,没得到什么有价值的规律。
暴力打表,但是因为符合条件的字符串很多,也看不出规律。
摆烂+对拍T1。
result:
T1:100 T2:70 T3:40 T4:/
2.简要题解
T1:
见赛时思路。
T2:
普通的卡上界背包是通过子树大小卡的,复杂度证明可以理解为任意树上两点只会进行一次在lca处的转移。
本题在此基础上进一步卡上界,因为外层枚举关键点的颜色不可避免,所以用子树内关键点数量卡上界,可证明仍然是均摊 \(n^2\) 的,并且因为这题只需要求关键点数量大于连通块大小的方案数,可以进一步卡上界(即连通块大小超过关键点数量就取min),远远达不到上界 \(n^2\) 。
败在了时间复杂度分析上。
T3:
结论:\(\lfloor\frac{i-j}{k}\rfloor(i\geq j)=\lfloor\frac{i}{k}\rfloor-\lfloor\frac{j}{k}\rfloor-[i\mod k<j\mod k]\)
有这个结论后这题就是树套树模板了。虽然复杂度是 \(nlog^2n\),但是2e6居然只跑了1.3s。
正解是 \(nlogn\) 的分析性质去掉外层的树状数组,等搞懂补上。
T4:
神奇构造题。
当k=1时,可以让s="11", t="1"。之后会讲原因。
因为k非常大,所以考虑倍增构造。
倍增需要考虑*2,+1两种情况,分别讨论。
另x表示s的长度,y表示t的长度,(a,b)表示一个lcs在s,t中匹配的最后一个位置。
假设现在的s和t在(x-1,y)有1个匹配,在(x,y)有k-1个匹配(对应k=1的构造)。
对于*2操作:
若t最后一位是'1'(但实际上根据构造t最后一位和s最后两位始终相同),则s+="101000", t+="011000"
这时看(x-1,y)为:
s: 1 1101000
t: 1 011000
补上的串在新的(x-1,y)产生贡献为1,(x,y)处产生贡献为1。
看(x,y)为:
s: 11 101000
t: 1 011000
(x,y)处产生贡献为2k-2。
新串仍满足构造,并且方案数*2。
对于+1操作:
若t的最后一位为'1',则s+="000",t+="0100"。
类似上文仍可证明新串满足构造并且方案数+1。
于是就可以枚举二进制位倍增,串长是10logk级别的。
3.总结
1 .时间安排还是不合理,T1这种一眼题花的时间太长,有点过于谨慎,导致T4没有足够时间去思考构造(虽然T4的构造确实不是人类想的)。
2 .关于lis的构造常见,但是这是第一次遇到关于lcs的构造。倍增和归纳构造很妙,这种方法在构造题很常用。
3 .学到了新的树上卡上界背包技巧。上午有一瞬间觉得可以虚树DP,但是很麻烦,其思想是类似的,都是把\(n^2\)均摊出来。
4 .T3学到一个新的关于下去整的结论,上午就是卡在这个地方做不下去。

浙公网安备 33010602011771号