Codeforces Global Round 1
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)的相鄰兩項關系,我們聯想到,差分數組也是相鄰兩項的關系
嘗試一下,可以得到:
就是發現其實就是差分數組的臨項交換
那麽,可以轉化過去,等價於,s1=t1並且差分數組排序後相等。
F:
(比賽時根本就沒看到這裏。。。其實題目並不難)
就是給出dfs序,在dfs序在[l,r]的葉子中找到距離v最小的距離
兩種思路:
1.發現,如果固定1為根,那麽每個點距離1的dis放進線段樹,就是一個區間求min操作
根不定?離線+換根!
2.根不定?在線+分類討論子樹關系,相應的加上到根的距離或者減去到根的距離(大概區間會分成三段)
G:
分類討論的博弈論(具體細節看題解)
首先發現初始白點可以等價變成4個空點的事實。然後圖上就都是空點了。
發現這是樹上的“三子棋”,規模比較小,手玩之後從度數考慮下。
1.如果有一個點有大於等於4的度數,那麽先手必勝
2.如果一個點度數為3,並且兩個兒子度數都不小於2,那麽必勝
把這種情況也考慮到。
進一步,如果有大於等於3個有3個度數的點,那麽也是先手必勝。
3.所以剩下的只用考慮小於等於2個3度數的點了
①一個3度數:就是2的考慮方法。
②兩個3度數:如果存在一個子圖呈“骨頭”形,並且這個“骨頭”總點數是奇數,那麽先手必勝
4.剩下的都是平局(什麽**遊戲,後手必不勝啊。。)
H:
咕咕咕
Codeforces Global Round 1