暑假集訓CSP提高模擬4 & 暑假集訓CSP提高模擬5
模擬賽 4
超越一切,策略喜人。
帶來終結,結論脫塵。
構造之力,充滿全身。
最後一擊,碼力成神。
-
T1 White and Black
顯然策略,考慮最淺的節點不符合一定會點,如果子節點是白也一定會點回去,只有是黑的時候不動。
是黑的貢獻可以先減去,再在算到它時加上。
發現這樣和深度也無關了,只需要統計有幾個黑色的子節點即可。
-
T2 White and White
逆天題。
考慮直接暴力有 \(n^2k\) 和 \(nkp\) 兩種。
先考慮 \(nkp\),就是列舉最後一段的餘數,套個樹狀陣列可以最佳化到 \(nk\log p\),原題可過。
賽時因 wang54321 優秀大常數做法讓學長一怒之下 \(1500 ms \to 500 ms\) 將所有樹狀陣列卡了。\(n^2k\) 的暴力更顯然,設 \(dp_{i,j}\) 表示前 \(i\) 個分了 \(j\) 塊,\(s_i\) 表示字首和。考慮最佳化。
發現關鍵性質 \(dp_{i,j}\equiv s_i \pmod p\),所以所有的轉移決策對應方程都是同於的,所以 \(dp_{k_1,j-1}>dp{k_2,j-1}\) 時 \(k_2\) 一定不劣於 \(k_1\)。
可以直接 \(O(nk)\) 作了。
-
Black and Black
簡單構造(wkh2008:這叫簡單構造)。
考慮先從 \(1\) 填到 \(n\)。
若 \(sum>0\),若有解,一定有字首和是正或字尾和是負的點。
因為值只有 \(1,-1\) 所以一定有字首和為 \(1\) 或字尾和為 \(-1\) 的點。
找到以後直接前字尾加減即可。
\(sum<0\) 類似即可。
-
Black and White
動態點分治板子,碼量巨大。
我太菜了,有點碼量就寫不出來……
其實可以直接用線段樹維護,考慮兩個點集交的直徑的端點一定是這兩個點集所包含的 \(4\) 個直徑端點中的兩個。
於是可以合併了。
模擬賽 5
聽好了:
聽好了聽好了,聽好了聽聽好了。每個聽好了都聽好了聽好了,為聽好了帶來聽好了的聽好了。
聽好了所聽好了的聽好了都聽好了,聽好了所聽好了的聽好了都聽好了聽好了的聽好了。
聽好了(聽好了聽好了)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽好好好好好好好好了了
聽好,好好聽好。
好聽,聽聽了好。
-
T1 簡單的序列(sequence)
從大到小貪心即可。
-
T2 簡單的字串(string)
什麼做法都可以過。
可以簡單 \(n^2 \left\vert s \right\vert\) 套
bitset
就可過了。也可以顯然做到 \(O(n \left\vert s \right\vert)\)
-
T3 簡單的博弈(tree)
首先需要知道 \(sg\)。
其次就是板子。
考慮從兒子轉移,因為也需要將直接兒子斷掉,所以 \(sg\) 要 \(+1\),然後異或起來就行了
-
T4 困難的圖論(graph)
是真困難。
顯然考慮到建虛點,從節點到虛點為 \(0\),虛點到節點為 \(1\),考慮直接從虛點開始跑最短路。
但這樣會有問題:當 \(a\to b\) 最短不經過 \(a\) 的虛點是,距離會多算一。
對每個虛點建出最短路 \(DAG\),考慮當 \(a\) 是 \(b\) 祖先時 \(a\to b\) 貢獻會加一。
期望是 \(O(n^2)\) 的。
考慮
bitset
加速,發現無法開不定長的,要是開定長的就是 \(O(\frac{n^2*k}{w})\) 不如不幹。但我們可以手寫,用
unsigned long long
壓起來跑多遍就行了。