1. 程式人生 > >Codeforces Global Round 1

Codeforces Global Round 1

inf 分數 i+1 找到 dfs序 for code 一個 有一個

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