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

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\)

你可能感兴趣的:(Good Bye 2019 A~G题解)