CF 807Div2

A

升序排序,如果\(a_{i+n}<a_{i}+x\)就是无解否则有解
证明:
如果对于\(a_i\),\(a_{i+n}<a_i+x\)
对于\(a_{i+j},a_{i+n}<a_{i+j}+x,j\in N\)
由决策包容性知:\(j=0\)是最优决策

B

你只需要记录上一个非零点,记为\(last\)
如果当前点是一个零点就让\(last\)减一,而当前点加一,答案加一
最后答案还要累加上整个数组的和
最后的最后,开long long

C

注意数据范围上来爆开\(1e18\)不能暴力模拟
这个时候存一下每个区间对应的来源
std::lower_bound快速回溯到修改前串的位置
可单次\(O(clogc)\)的时间复杂度查到这里对应修改前字符串的哪个字母

D

就是对于连续的\(0\)段和\(1\)段,它们的数量不会改变
所以可以先出一个特判
然后就是开头结尾不相同的特判

正解是考虑它们相邻元素的\(xor\)
\(a_i=(s_i\space xor \space s_{i+1}),i\in [1,n]\),
\(b_i=(t_i\space xor \space t_{i+1}),i\in [1,n]\),
如果有相同个数的\(1\)就是可行的,最小步数为
\(\sum\limits^{sum_1}_{i=1}|a_i-b_i|,sum_1\)\(1\)的个数

E

这个题赛时想到了利用\(log\)的做法但是不知道是不是真的

以下为口胡区
首先对于每一个出现的数开一个桶维护出现次数
然后维护次数对数的前缀和
答案是最小值+前缀和到最大值

正解
这个答案是
\(\log_2( {\sum\limits_{i=1}^{n} 2^{a_i}})\),向下取整
于是可以使用std:bitset<222222>实现,时间复杂度\(O(\frac{n^2}{w})\)
bikuhiku实现的std::bitset<ui>高精度终于有用辣

F

咕了

posted @ 2022-07-16 19:49  2K22  阅读(16)  评论(0)    收藏  举报