暑假集訓CSP提高模擬4 & 暑假集訓CSP提高模擬5

xrlong發表於2024-07-25

暑假集訓CSP提高模擬4 & 暑假集訓CSP提高模擬5

模擬賽 4

超越一切,策略喜人。

帶來終結,結論脫塵。

構造之力,充滿全身。

最後一擊,碼力成神。

  1. T1 White and Black

    顯然策略,考慮最淺的節點不符合一定會點,如果子節點是白也一定會點回去,只有是黑的時候不動。

    是黑的貢獻可以先減去,再在算到它時加上。

    發現這樣和深度也無關了,只需要統計有幾個黑色的子節點即可。

  2. 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)\) 作了。

  3. Black and Black

    簡單構造(wkh2008:這叫簡單構造)。

    考慮先從 \(1\) 填到 \(n\)

    \(sum>0\),若有解,一定有字首和是正或字尾和是負的點。

    因為值只有 \(1,-1\) 所以一定有字首和為 \(1\) 或字尾和為 \(-1\) 的點。

    找到以後直接前字尾加減即可。

    \(sum<0\) 類似即可。

  4. Black and White

    動態點分治板子,碼量巨大。

    我太菜了,有點碼量就寫不出來……

    其實可以直接用線段樹維護,考慮兩個點集交的直徑的端點一定是這兩個點集所包含的 \(4\) 個直徑端點中的兩個。

    於是可以合併了。

模擬賽 5

聽好了:

聽好了聽好了,聽好了聽聽好了。每個聽好了都聽好了聽好了,為聽好了帶來聽好了的聽好了。

聽好了所聽好了的聽好了都聽好了,聽好了所聽好了的聽好了都聽好了聽好了的聽好了。

聽好了(聽好了聽好了)

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽好好好好好好好好了了

聽好,好好聽好。

好聽,聽聽了好。

  1. T1 簡單的序列(sequence)

    從大到小貪心即可。

  2. T2 簡單的字串(string)

    什麼做法都可以過。

    可以簡單 \(n^2 \left\vert s \right\vert\)bitset 就可過了。

    也可以顯然做到 \(O(n \left\vert s \right\vert)\)

  3. T3 簡單的博弈(tree)

    首先需要知道 \(sg\)

    其次就是板子。

    考慮從兒子轉移,因為也需要將直接兒子斷掉,所以 \(sg\)\(+1\),然後異或起來就行了

  4. 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 壓起來跑多遍就行了。

相關文章