2020杭电多校
打星为 upsolve
Round 1
rank 524 (1/12)
棒子,我x你仙人.jpg
1004
签到
n>=3 都是 abcabacabc…
*1005
为什么你们都会二次剩余啊
考虑 fib 通项,将根号五用二次剩余化成常数
二项式定理展开,每一项等比求和
卡卡常,幂次对 MOD-1 取模
*1006
分块 好题
考虑将度数大于 \(\sqrt{n}\) 的点记作特殊点,易知特殊点最多 \(\sqrt{n}\) 个
由于其他点度数不超过 \(\sqrt(n)\) 询问直接暴力
同时维护特殊点的相邻点的权值信息,这里我用了分块来保证整体复杂度在 \(n\sqrt{n}\) 级别
修改一个点权值的时候只需要更新其相邻特殊点的信息即可,由于特殊点不超过 \(\sqrt{n}\) 个,暴力更新的复杂度也能保证
*1009
首先按 p sort一下,用单调栈筛出 a 单调递减的所有机器人
之后按照 p 递增的顺序考虑,维护一个可行的(有机会成为领先的)机器人的集合,可以发现这是一个下凸包
新加入一条线的时候,如果和最后一条直线的交点的横坐标(时间) > 最后两个直线的交点的横坐标,就踢掉最后最后一个直线
类似于维护凸包,最后栈的大小就是答案
小心维护 p a 都相等的点,即带入构建凸包,但不算答案
*1011
字符串,我的后缀自动机卡不过去
Round 2
rank 50 (6/12)
1001
按权值 sort 一下,从后往前并查集
1005
费用流,保留每个工人极值点左右 50 个点的机器,之后费用流
每次新加边增广就行,不用重新建图
1006
取个模数算一下,O(n) 验证
1007
二分答案 + dp
二分直径长度 limit,考虑 dp \(f[u][k]\) 表示 \(u\) 这颗子树选 \(k\) 个边反转时 叶子到 \(u\) 的最长路径的长度
合并时若两条路径 > limit 则不能转移,最后看 \(f[1][k]\) 是否有值
\(O(kn\log{n})\)
*1009
暴力
注意到对于每行一定经过偶数次,记录每次经过的 y 坐标,sort 后 \([y_{i}+1,y_{i+1}] (i = 0,2,4….)\) 就是这行经过的格子
然后暴力
1010
暴搜
1012
dp
观察答案为 \((r-l+1) + m - 2*lcs\)
考虑 \(f[i][j][k]\) 表示 \(S[1-i]\) 匹配长度为 \(j\) 的子序列,子序列在 \(T\) 串的结尾为 \(k\) 时子序列起点在 \(S[1-i]\) 中最靠右的位置
用前缀和做一个 \(O(n*m^2)\) 的 dp 即可