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 的显然没用。

posted @ 2022-06-04 01:04  SyadouHayami  阅读(73)  评论(0编辑  收藏  举报

My Castle Town.