2019牛客暑期多校训练营(第四场)
A. meeting
solved by rdc 30 start, 38 AC -1(37 WA)
复盘 除了 BFS 起点 dis 设成 1 蠢了点之外,没什么问题。
做法 等价于求虚树的直径,两边 BFS 即可。
B. xor
解体 by rdc,148+eps start,卡了将近半场比赛
复盘
- 意识到了问题等价于对两个线性基张成的线性空间求交。
- 莽了一发,时间复杂度不合理的分治回答区间查询【尽量计算好复杂度再上机】
- 仿着HDU 多校1,1002 来。不想清楚具体该维护什么就开始送。
- 送了之后开始胡乱调试。
- 彻底解体!
题解
- 线段树节点表示区间内,线性基交。
- 查询可以分成 log 个线段树节点,对每个节点查询 x 即可。
- 比赛的总想着查询的时候要进行 log 次线性基合并
C. sequence
solved by F0_0H, 60 start, 148 AC (-4 78 RE,79 MLE,124,135 WA)
题意 给定a,b序列,最大化a序列区间最小值b序列区间和的乘积
题解
- 枚举a序列最小值,单调队列预处理左右边界的限制
- 根据a的正负性,查询b序列区间最小值和区间最大值即可
本以为是一道被出烂的原题,没想到还有O(n)的做法,强
D. triples I
solved by rdc,85 start,140 AC(-3 97 TLE, 111,130 WA)
复盘 首先 111 交的还是求 xor 的版本。手算样例!手算样例!手算样例!。其实出成 xor 这是个更好玩的题目。
做法
- 考虑到一个数二进制表示,在奇数位上的 1 和在偶数位上的 1,对答案的贡献。
- 输入是 3 的倍数,1 个元素就 win 了。
- 不是 3 的倍数
- 奇数为有 1,偶数位有 1。\(|S|=2\),构造方式为,先令 \(x=0,y=a\),搬运一个奇数为上的 1 或者偶数位上的 1 到 \(x\),那么一定可以使得 \(y \% 3=0\),我们再在 \(x\) 选择一个合法的为 0 的数位设为 1 使得 \(x\%3=0\) 即可。
- 只有奇数位有 1,或,只有偶数位有 1,且至少有 3 个 1。\(|S|=2\),构造类似。
- 否则解体。
E. triples II
solved by F0_0H 192 start, 214 AC(212 WA)
题意 n个三的倍数的数,or起来得到a的方案数
题解
- 基本容斥
- 设x为a奇数位为1的个数,y为a偶数位为1的个数
- \(ans = \sum_{0\leq i\leq x, 0\leq j\leq y}pow(f[x-i][y-j], n)*C(x,i)*C(y,j)*sign(i+j)\)
- \(f[i][j]\) 表示奇数位1有i个,偶数位1有j,能凑成a的方案数
- $sign(x) = $ x&1 ? -1 : 1
I. string
solved by sdcgvhgj, 38 start 68 AC -2(52,57 TLE)
题意 求不同的子串个数,反过来相同也算相同
做法
- PAM求出不同回文串个数a,正反串建广义SAM求不同的正反子串个数b,答案为(b-a)/2+a
- TLE两发因为数组只开了两倍,其实因为还有反串应该开四倍
数组需要开到 x 倍的时候小心一点【例如:线段树常见的写法是 4 倍,manacher 两倍,前向星存无向边两倍】
J. free
solved by F0_0H 18 start, 29 AC
题意 求s,t最短路,可将k条边权值置零
题解 标准变形最短路问题
- \(dis[i][j]\) 表示\(s->i\)消去了\(j\)条边的最短路
- dij跑最短路即可
K. number
solved by rdc 5 start 16 AC
复盘 基本的前缀和差分,在边界(长度为 0 的前缀)犹豫了,导致耽误不少时间。