Codeforces Global Round 1

题解:The Editorial of the First Codeforces Global Round

A:其实mod 2计算一下就行了

B:删掉最长的k-1段,sort

C:

x是a的二进制最高位,

考虑对于a!=2^(x+1)-1,一定可以找到一个c<a,使得c&a=0,并且c xor a=2^(x+1)-1,那么gcd就是2^(x+1)-1了。已经最大

对于a=2^(x+1)-1,gcd(a&b,a^b)=gcd(b,a-b)=gcd(a,b),所以,gcd最大是a的最大因数(除了自己),并且由于b<a,把b取到这个因数即可。

D:

发现,对于三个[x,x+1,x+2],其实贡献等价于:[x,x,x],[x+1,x+1,x+1],[x+2,x+2,x+2]

所以,不妨对于形如[x,x+1,x+2]的只保留小于等于2个即可

设f[i][t1][t2]表示,前i个,有t1个[i-1,i,i+1],t2个[i,i+1,i+2]的最大值

那么枚举一个合法的t3,就是[i+1,i+2,i+3]的个数,对于剩下的i+1,直接[i+1,i+1,i+1]尽量拼凑即可。(因为后面不会再用到i+1了)

转移到f[i+1][t2][t3]

(这样设的好处是,可以明确得到需要决策的剩下个数,并且对于i以后不会再考虑,所以[i,i,i]直接放就可以了)

E:

这种:c(i)'=c(i-1)+c(i+1)-c(i)的相邻两项关系,我们联想到,差分数组也是相邻两项的关系

尝试一下,可以得到:

Codeforces Global Round 1_例题

就是发现其实就是差分数组的临项交换

那么,可以转化过去,等价于,s1=t1并且差分数组排序后相等。

F:

(比赛时根本就没看到这里。。。其实题目并不难)

就是给出dfs序,在dfs序在[l,r]的叶子中找到距离v最小的距离

两种思路:

1.发现,如果固定1为根,那么每个点距离1的dis放进线段树,就是一个区间求min操作

根不定?离线+换根!

2.根不定?在线+分类讨论子树关系,相应的加上到根的距离或者减去到根的距离(大概区间会分成三段)

G:

分类讨论的博弈论(具体细节看题解)

首先发现初始白点可以等价变成4个空点的事实。然后图上就都是空点了。

Codeforces Global Round 1_例题_02

发现这是树上的“三子棋”,规模比较小,手玩之后从度数考虑下。

1.如果有一个点有大于等于4的度数,那么先手必胜

2.如果一个点度数为3,并且两个儿子度数都不小于2,那么必胜

  把这种情况也考虑到。

  进一步,如果有大于等于3个有3个度数的点,那么也是先手必胜。

3.所以剩下的只用考虑小于等于2个3度数的点了

  ①一个3度数:就是2的考虑方法。

  ②两个3度数:如果存在一个子图呈“骨头”形,并且这个“骨头”总点数是奇数,那么先手必胜

4.剩下的都是平局(什么**游戏,后手必不胜啊。。)

H:

咕咕咕