ABC408
目录
我的渴望转啊转啊
我的悔恨转啊转啊
我仍坚信我已坍塌
坍塌在她的废墟下
赛时
A - Timeout
检查是否存在 \(T_i - T_{i - 1} \gt S\)。code
B - Compression
排序,去重。code
C - Not All Covered
求最小覆盖,差分。code
D - Flip to Gather
首先可以将其全变为 1,再尝试把两边变为0 ,需要 \(T\) 次操作 。
定义 \(f(i)\) 表示将字符串 \([1, i]\) 全变为 0 所需要的操作数,\([1, i]\) 中 0 会使 \(T\) 减小,1 会使 \(T\) 增大。
定义 \(g(i)\) 表示将字符串 \([i, n]\) 全变为 0 所需要的操作数,一样做。
然后前缀min就好。code
E - Minimum OR Path
从高到底枚举每一位,如果某条边上该位为 \(1\),就暂时删去。然后检查 \(1\) 能否到 \(n\)。能就将那些边永久删去。不能就让答案加上这一位。
并查集检查连通性。code
补题
F - Athletic
赛时想到了,来不及写。
按 \(H\) 排序,定义 \(f(i)\) 表示最多次数,顺序遍历过程中将 \(i - D\) 的 \(f(i)\) 加入到线段树中,然后在下标区间里找最大值。
update(1, 1, n, a[i - d].second, f[i - d]);
f[i] = query(1, 1, n, max(1, a[i].second - r - 1), min(n, a[i].second + r)) + 1;
这样写是错的,因为会从不存在的状态里转移过来。
要写成
update(1, 1, n, a[i - d].second, f[i - d] + 1);
f[i] = query(1, 1, n, max(1, a[i].second - r - 1), min(n, a[i].second + r));
浙公网安备 33010602011771号