Good Bye 2019 A~G题解
http://codeforces.com/contest/1270
辣鸡比赛毁我青春
A
比较最大的牌即可
B
找相邻两个差的绝对值>=2的数
如果不存在,则每次只能±1或不变,必然不存在合法区间
C
设和为s1,异或和为s2
一种方法是把s2*2,那么加2^x等于异或2^(x+1)
从后往前构即可,因为不会影响到异或和的当前位
一种更sb的方法:
加上两个数,第一个为s2,第二个为(s1+s2)
那么和变成s1+s2+(s1+s2)=2(s1+s2),异或和变成s2^s2^(s1+s2)=s1+s2,满足要求
D
交♂互题
先用两次操作求出两个不同位置的数,即第一次为1~k,第二次为1~k+1挖掉第一次找到的,设第一次的为x1,第二次的为x2
只需要直到第二次询问的数中有多少个比x2小即可知道m
注意最多只能询问n次,所以必须保证每次都能判掉一个新的数
根据x1和x2的大小来讨论,每次把第二次询问的数中一个未知的数换成x1,根据得到的数的大小情况来判断
如x1<x2,则若要判断的数比x2小,那么就会使询问结果不变,否则会变大(删掉了小于x2的x1)
E
迫真计算几何
设当前坐标xy为奇奇、奇偶、偶奇、偶偶的个数为abcd
①若abcd中只有一个不为0,则把所有的点的坐标/2,显然这样不会使答案改变
②若a+d和b+c不为0,则可以把a+d分到A,把b+c分到B
把距离平方,则在同一组之间的距离为偶数,在不同组的距离为奇数
③若a+d和b+c中有一个不为0(假设是a+d),那么把a分到A,把d分到B
那么在同一组之间的距离为4的倍数,在不同组的距离模4余2
因为模2余1的数在模4意义下为1或3,两个模2余1的数相加模4必然为2
F
设前缀为sum,则题目所求为\(\sum_{k=1}^{n}{\sum_{l,r}{[\frac{r-(l-1)}{sum[r]-sum[l-1]}=k]}}\)
设\(t[i]=i-k*sum[i]\),则可以变成\(\sum_{k=1}^{n}{\sum_{l,r}{[t[l]=t[r]]}}\)
平衡规划,设T为阈值
对于n<=T的,暴力枚举k,用map统计t相同的个数计算
对于n>T的,可以发现1的个数很小,所以枚举l,再枚举1的个数,求出有多少个合法的r,可以找r所在的0区间直接算
G
限制可以转为\(1<=i-a_i<=n\),对i向i-ai连一条有向边
那么必然存在一个环,找到这个环,设上面的点分别为\(i_1,i_2,i_3...i_k\)
则存在\(i_1-a_{i1}=i_2,i_2-a_{i3}=i_3...i_k-a_{ik}=i_1\),即\(a_{i1}+a_{i2}+...+a_{ik}=0\)