Codeforces Round #618 部分题解

A,B

咕了。

C - Water Balance

先考虑最小化第一个位置。考虑包含第一个位置的最后一次操作\(a\),以及前一次和他有交集的操作\(b\)。容易看出操作\(b\)如果不被\(a\)包含就不优,而既然被包含了就可以删掉。

所以可以证明第一次操作必然包含第一个位置,并且以后的操作不会再包含第一个位置。

如果第一次是\([1,r]\),那么显然\([2,r]\)的数不会再变小,因为如果还能变小就说明第一次操作不是最优的。

所以就是每次操作一个前缀之后就删掉。显然建出\((i,sum_i)\)的凸包就完事了。

代码:https://codeforces.com/contest/1299/submission/73880533

D - Around the World

众所周知,环的权值可以拆成若干个关于dfs树的环的权值异或和。

既然是异或,那么显然一个连通块贡献的异或值应该被存在一个线性基内。

考虑一个与1相连的连通块。如果只有一条边相连,那么断掉就贡献空集,连上就贡献连通块内的线性基。如果有两条边\((1,u),(1,v)\)相连,那么可以贡献空集、连通块内的线性基、再带上一个\((1,u)\oplus (1,v)\oplus (u,v)\)的线性基。

爆搜可以发现本质不同的线性基只有374种,并且可以预处理两个线性基合并的结果,于是\(dp_{i,s}\)表示前\(i\)个块线性基是\(s\),可以\(O(1)\)转移。

代码咕了。

E - So Mean

我是题解的搬运工……

考虑\(sum=\frac {n(n+1)} 2 = 1\pmod {n-1}\),所以询问\(n-1\)个位置得到1当且仅当被抠掉的位置是\(1\)\(n\)

知道了\(1\)\(n\),就可以知道每个位置的奇偶性。

如果用上面的方法接着往中间推,询问次数会爆炸,我们需要更好的方法。

考虑CRT,我们求出每个位置模\(3,5,7,8\)的余数。

先把\(1,2,3,4,n,n-1,n-2,n-3\)的位置给求出来。

对于模3,询问\((1,2,x),(2,3,x)\)可以求出来。

对于模5,询问\((1,2,3,n,x),(1,2,4,n,x),(1,3,4,n,x),(2,3,4,n,x)\)可以求出来。

对于模7,询问\((2,3,4,n,n-1,n-2,x),(2,3,4,n,n-1,n-3,x),(2,3,4,n,n-2,n-3,x),(2,3,4,n-1,n-2,n-3,x),(1,3,4,n-1,n-2,n-3,x),(1,2,4,n-1,n-2,n-3,x)\)可以求出来。

我们先把模4求出来。由于奇偶性已经确定,对偶数问\((1,2,3,x)\),对奇数问\((1,2,4,x)\)

\((1,2,3,4,n,n-1,n-2,n-3)\)中的\(1,2,3,4\)某一个替换成\(x\),可以得到模4的4种余数,以此再加上已知一个位置模4的余数,就可以确定模8的余数。

于是做完了,询问次数大概是\(15.324n\)

posted @ 2020-03-21 19:54  p_b_p_b  阅读(208)  评论(0编辑  收藏  举报