傳送門
七道構造題,外加一道暴力,妙啊! 話說構造題太考驗思維了,想不到就沒了。
A.Card Game
- 直接貪心即可
B.Interesting Subarray
- 可以發現當且僅當存在相鄰的兩個不滿足條件時才存在,也就是說任意一個不合法的子段一定有這麼一個相鄰的位置不合法。
C.Make Good
- 因爲要求,注意到有一個乘二,所以說最後一個位置相當於是已經確定了,然後倒着推過去就可以O(log)的時間用一個數完成要求的構造。
- 或者還有一種構造方法。設剛開始的和爲s1,異或和爲s2。
- 第一個數是s2,第二個爲(s1+s2)。然後發現這樣就可以了???神奇。
D. Strange Device
- 簡單
交互題構造題。 - 只需要將前k+1個選擇k次,那麼返回的只會有第m大的出現k+1-m次,第m+1大的出現k次,然後找到返回值中小的那個的個數就好了。
E. Divide Points
- 剛開始一本正經地以爲是神仙的二分圖匹配的問題,結果還是構造???
- 奇偶討論。因爲要討論的關係,所以直接按照x,y分別的奇偶性討論即可,一共有四種可能。
- 注意到如果有不止一種可能,那麼就一定能分成兩組(如果x-y都同奇偶,有兩組,那麼它們最後的距離mod4是不一樣的)。
- 否則全部座標除以二繼續做。可以預先全部變成正數。
F. Awesome Substrings
- 首先計算一個前綴和記錄爲s[i],那麼相當於是求
- 注意到k如果很大的話那麼,那麼有效的滿足
- 那麼我們就可以平衡規劃了。
- 時暴力,的部分枚舉左端點以及1的個數,計算右端點在這個區間內滿足的個數,時間。
- 可以用map完成暴力(雖然超級慢),然後要求上面兩個時間相等即可。
G. Subset with Zero Sum
- 真·構造。首先化一下很醜的約束式子變成。
- 超級優美——直接i向a[i]連邊,然後找環即可。
H. Number of Components
基礎線段樹- 剛開始想建一個樹出來LCT,然後似乎有單調隊列???難搞
- 然後發現一個性質,聯通快一定是連續的一段區間。否則左邊一塊隔着幾個和右邊一塊相連,你會發現中間的幾個一定會和左邊的或右邊的相連。
- 既然如此,那麼問題就轉化爲了找分界點了。
- 分界點一定滿足。
- 現在我們想要維護分界點的個數。直接做並不好做。考慮轉換一下模型。
- 對於上面的式子我們不妨找到的,將的的位置賦爲1,賦爲0.那麼最後對於這個,我們得到的序列是類似11…110…00這樣的。如果我們在這個序列前面加一個1,後面加一個0,那麼這個序列是這個形態當且僅當相鄰位置不同的個數爲1.
- 我們對於每一個都維護一個的相鄰位置不同的個數,以爲關鍵字開一個權值線段樹,維護。
- 可以注意到修改一個位置pos只會跟pos-1或pos+1在h中與pos的0/1狀態有關,影響到的剛好是一個區間。分類討論即可。
- 線段樹上只需要記錄最小的是什麼和最小的數的個數。
- 由於修改自己不好改,所以不妨離線下來,全部一起操作。預處理也可以變成類似的操作。