Codeforces Round #806 (Div. 4)总结
作者:互联网
比赛地址
比赛情况
排名:?? / 27864
AC:7 / 7
题目分析
A
语法题
B
看一下出现多少种字母,加上字符长度就是答案
C
因为是倒推,所以 D
就加,U
就减,最后输出模10的余数即可
D
string+map
先把所有string放入一个map里
然后对于每一个string枚举分界点,判断是否存在两个字串都在map中
E
每个位置只会与3个位置有关,于是把每个点本身、旋转90,180,270的格子都找出来,看一下最少要变多少个
答案记得除4
F
题目要求 \(a_i<i<a_j<j\)
先把不满足 \(a_i<i\) 的数筛走
然后从前往后遍历,满足 \(i<j\)
现在约束条件只剩下 \(i<a_j\),此时只需要看一下有多少个 \(a_i\) 满足 \(a_i<i\) 且 \(i<a_j-1\),这一步可以用前缀和预处理
G
有个很明显的性质,如果某个地方使用了坏钥匙,后面必然全部使用坏钥匙
而 \(a_i\leqslant 10^9\),\(2^{30}=1073741824>10^9\),也就是说坏钥匙用最多30把后后面的数就全变成0了
于是我们可以枚举哪个地方开始用坏钥匙,然后向后统计30个
时间复杂度 \(O(n\log n)\) 左右
赛后总结
手速还是慢了
A还算顺利,看完后马上打,调了一下,2min时过
B理解题目时花了点时间,打得也挺快,7min时过
C也不错,较为顺利,12min时过
D就出大问题了
也开始想着用string写,写到一半,觉得string用得不熟,想着8位不用用哈希来写,然后调不出,于是又改回string,然后string取字串的函数忘了,被迫上网查,然后好不容易打了个string+map才在31min时过
E看完题后感觉很套路,打了段代码发现过不了样例,发现理解成翻转而不是旋转,纸上推了推再改了改44min时过了
F看完题后一开始觉得要用单调队列,打完后过不了样例,仔细想了一下,发现那个前缀和就行,59min时过
G一开始觉得要不断判断 \(k\) 和所有数减去的关系,然后死活调不出,然后发现某个地方用坏钥匙后最多30次就全变成0,然后打了个暴力,然后90min是并 过
标签:map,string,时过,30,Codeforces,然后,钥匙,Div,806 来源: https://www.cnblogs.com/zhangtingxi/p/16473092.html