比赛:Codeforces Round #427 (Div. 2)
时间:2017.7.31晚
开场发现有6道题,都是水题(可能我只会做水题)
A:比较\(2t_1+sv_1\)与\(2t_2+sv_2\)的大小
B:给你一个数字串,要求所有数字的和\(\geq k\),问你最少要改多少个数字。从\(0\)到\(9\)枚举,每次把当前数字改成\(9\)
C:给你\(n\)个星星,亮度呈周期性变化(周期相同且\(\leq11\)),每次问你一个矩形内的星星在时刻\(t\)的亮度和是多少。就出每个星星在每一个时刻的位置,用前缀和维护
D:一个关于回文串的题:一个串是\(1-\)回文串当且仅当这个串是回文串。一个串是\(k-\)回文串当且仅当这个串的前一半与后一半相同且前一半是\((k-1)-\)回文串。用回文自动机维护不超过当前串长一半的最长回文后缀。
E:一道交互题。有一个序列,长度为n,有\(n-2\)个元素是\(x\),剩下两个是\(y\)。你可以询问一个子序列的异或和,要你找出哪两个位置是\(y\)。
我们考虑两个\(y\)的下标(设为\(a,b\)),那么\(a,b\)用二进制表示一定有至少一位不同。我们从大到小枚举二进制位\(i\),询问所有第\(i\)为\(1\)的二进制位,直到其中有一个\(y\),设这位为\(k\)。然后从第\(k-1\)位开始从大到小枚举二进制位\(i\),就可以求出这两个答案第\(i\)位分别是什么。再从\(k+1\)位开始从小到大枚举二进制位\(i\),就可以求出这两个答案的第\(i\)位是什么。
其中只有第\(k\)位询问了一次,其他位都询问了两次,所以询问次数是\(2\lceil log n \rceil-1\)
时间复杂度:\(O(nlogn)\)
原题中\(n=1000\),询问次数\(\leq19\)
F:给你一个\(n\)个点\(n\)条边的连通图,问你删去一条边(你选)后两点之间最短路的距离的最大值。直接数据结构+DP乱搞。
最后有\(6\)个人AK了