目录
A. How Much Does Daytona Cost?
B. Aleksa and Stack
C. Vasilije in Cacak
D. Reverse Madness
E. Iva & Pav
A. How Much Does Daytona Cost?
Solution:题目没说序列长度,因此只要有k就成立。
#include
#include
#include
#include
#include
#include
B. Aleksa and Stack
Solution:构造题,一种构造方法是数足够大就可以,我赛时构造方法是,从1开始每一个数都%3等于1,即从1开始,公差为3的等差数列。
#include
#include
#include
#include
#include
#include
C. Vasilije in Cacak
Solution:结论题,赛时打表找的规律。1-n个数里面选k个数,则[1+...+k,k+...+n-k+1]区间里所有的数都可以被构造出来。
#include
#include
#include
#include
#include
#include
D. Reverse Madness
Solution:赛时过的很少,但其实题意看懂很简单。题目给出一个字符串,以及k个区间(题目保证不重叠),然后q个询问,每次给出一个位置,一定在一个区间[l,r]内,然后翻转[min(x,l+r-x],max(x,l+r-x)],不难看出翻转的区间关于(l+r)/2对称,因此swap(s[x],s[l+r-x])即可,即枚举半个区间长度即可。对于是否翻转,还有一个技巧就是异或,如果对称的两个点异或值为1则翻转了奇数次,需要翻转,否则不需要翻转。最终复杂度o(n)。
#include
#include
#include
#include
#include
#include
E. Iva & Pav
Solution:区间与运算明显单调递减,因此,可以二分,左端点确定,二分右端点,chk的时候如果直接遍历区间会tle,因此拆位维护1的数量,对于区间[l,r],count(1)=(r-l+1)时,这个位置才有贡献,因此每次chk循环三十次即可,也就是O(1)复杂度。
#include
#include
#include
#include
#include
#include