Codeforces Round #796 (Div. 2) Solution Set
没有打 div1,小失策。
网断了,很脑残。
开题顺序:d(pre) e a b (dc/cd) f
2a:
如果二进制只有一位,那就是带上这个二进制位加一(如果 \(n=1\) 那就答案是 \(3\)),不然的话你直接取 lowbit 就好了
2b:
如果有一个奇数,答案是偶数个数;如果全是偶数,那么保留二进制位最低的那个,先除到奇数,然后全加起来。
2c:
显然作为答案的字符出现了奇数次,其他的都是偶数次。因为这个东西没法儿 hack 提示作用还是很明显
2d:
分 n<=k 和 n>k 讨论,贡献还是很清楚明了的。n<=k 就是取一个长为 k 的区间再加 k(k-1)/2,否则就是所有的 a 的和再加上 n(2k-n-1)/2。
2e:
先搞出每个边的权值,然后从小到大加入当前的森林。记加之前森林的边权和为 v,加之后为 v',边权为 e,如果 v+e≠v' 那就说明 e 替换掉了一条边,进而说明 e 不能要。你想下 kruskal 在搞什么就清楚了
2f:
你考虑暴力,找到一个能改的区间 [l,r] 并且 \(\sum_{i=1}^{l-1} a_i-b_i = \sum_{i=1}^{r} a_i-b_i=0\),改之后枚举 l'∈[l,r] 和 r'∈[l,r] 继续递归改。这样复杂度爆炸了,直接并查集复杂度均摊就好了。
至于为啥要是 0,因为你操作不是 0 的显然没用。