首页 > 其他 > 详细

Codeforces Round #618 部分题解

时间:2020-03-21 20:23:38      阅读:41      评论:0      收藏:0      [点我收藏+]

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\)

Codeforces Round #618 部分题解

原文:https://www.cnblogs.com/p-b-p-b/p/12541690.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!