CF1984 記錄

eastcloud發表於2024-06-11

吐槽

真跟上次說的一樣打一場掉一場了,最近 CF+AT 加起來打了四場全部掉一車,我都不知道到底是我晚上狀態很差還是純菜,就比如這場 D 寫了一車分討最後還是掛細節,B 編了個離譜做法但是漏了一堆 case,本來以為也是細節問題今天一看還是假。

不過就算這次比賽狀態好可能還是隻能到 E,我應該還是編不出 F 和 G 的細節,細節細節還是細節,程式碼不夠簡潔,編了一車錯誤細節,到底應該寫點啥提升呢,如果有看到的同學能否給點建議/kel。

還有就是我發現我思維路徑非常古怪,總是往一些比較神秘的古怪的路徑去想,沒能馬上抓住一些簡潔的特徵和性質,這可能還是訓少了的問題,總之還是要多做一點分討或者一些觀察性質的題目,不僅是要找到這個性質,如何運用也很重要。

CF1984A

定義一個陣列的權值為最大值減去最小值,問你能否將給定的陣列劃分為非空的兩部分,並使得兩部分權值不同,要求構造方案。\(n > 2\)

首先這個要求構造不同的題目,你肯定先想構造一些極值然後另一邊自然取不到這個最大值,這個思路在種類數大於等於 3 的時候肯定可行,由於 \(n>2\),所以在種類數為 2 的時候你讓一邊顏色全相等就行,種類只有一種顯然不行。

CF1984B

定義好數為所有數位上的數都大於等於 5 的數,多次問你一個數能不能被表示成兩個數位相同的好數的和。\(10 \leq x \leq 10^{18}\)

現在看來感覺是個很恐怖的題,因為我一開始的思路與正確思路非常不一樣,感覺要立馬想到應該這麼思考很困難,但是這只是個 B。

遇到這個題有幾種思考方法,我賽時想的是先構造極值,看是否在 \(555+555\)\(999+999\) 這種區間內然後再特判一些不能被表達的數,但是這樣會有一些碰到 0 的時候不合法的問題,並且這種情況還不是那麼好判斷,怎麼辦呢?

構造不行那就觀察性質找衝要類似的東西,性質從定義本身出發,你發現末位 9 一定不行,然後末位必然產生進位,於是就拋棄最後一位繼續看,有前面傳遞的 1,因此這次變成了是 0 一定不行,到最後則是 1 不行,於是簡單的判斷就可以完成。

還是要多想,多想一步有沒有假,多想一下有沒有更簡單的實現方式。

CF1984C

給定一個陣列 \(a\),初始時 \(c=0\),每次要麼 \(c \leftarrow c+a_i\) 要麼 \(c \leftarrow |c+a_i|\),C1 求 \(c\) 最大值,C2 求 \(c\) 轉移到最大值的方案數。

感覺比 B 簡單,這個思考過程比較平凡。考慮樸素轉移,不難發現最大值要麼從上一次最大值轉移過來要麼從最小值轉移過來,最小值同理,因此你只要維護最大值和最小值的方案數和權即可。

CF1984D

給定一個字串,問有多少個該字串的子串使得原串可以被劃分為若干個字串滿足它們要麼是這個子串,要麼是 \(\text{a}\)

賽時一直在編 KMP 然後分討分討分討,但是其實我後面已經發現了所有必要結論,還在那裡亂搞,蚌埠住了,感覺放早上我都不屑於寫(說大話中)。

考察這個字串應該是什麼樣,分為是不是全都是 \(\text{a}\) 討論,前者是平凡的,後者你就考慮非 \(a\) 部分要麼是所有串的週期要麼是這個東西加 \(\text{a}\) 要麼是若干串拼在一起,然後分討?不,其實你發現非 \(a\) 部分只有 \(n\) 因子種,完全可以暴力列舉。

\(a\) 怎麼辦,你發現你需要算一個類似 \([x^P]\frac{x^{L+1}-1}{x-1}\frac{x^{R+1}-1}{x-1}\) 這樣的東西,很麻煩?不,暴力能過,考察每個 \(P\) 貢獻次數,這也是類似調和數的東西,總之能過,這個題就很離譜。

CF1984E

給定一棵樹,你需要最大化點分樹兒子,求這個最大值。

這個題一眼樹 dp,但是狀態設計是困難的,怎麼辦呢?

還是想性質,想想兒子在原樹上的可能分佈形態,發現是最大獨立集,dp 就做完了嗎?

不,你發現如果根是葉子那它剖下來那層也可以是葉子,且你發現把葉子當作根一定最優,於是你要算去掉一個葉子之後的最大獨立集,這個容易,然後真的做完了。

CF1984F

給定序列 \(b_n\),問你有多少種把給定字串的 \(\text{?}\) 替換成 \(\text{P}\)\(\text{S}\) 的方式使得存在一個數列 \(a_n\) 滿足 \(|a_i| \leq m\) 且如果該位置是 \(\text{S}\) 那麼就是 \(a\) 的字首和,否則字尾和。

考察一些樣例可以發現你總能規約到 \(\text{PSPSPSPSPS}\) 這種交替出現的形式,若不然則可以把中間連續的去掉。

然後你考慮對這樣的限制計數,直接做不太行,dp 的時候會受到前面選擇的限制,肯定要做一些等價轉化,你發現 \(\text{PS}\) 連著其實代表整個 \(a\) 的和應該是多少,而固定和做 \(n^2\) 化解限制可以接受,於是你欽定和,然後根據和 dp,這是容易的。

CF1984G

給定排列 \(p\),讓你求一個最大的 \(k\) 使得你只做將中間連續 \(k\) 個數移動這樣的操作就能將排列排序,需要輸出方案。

一個關鍵點在於你發現 \(k=n-2\) 很強,考慮看看能不能做交換,發現特定情況可以,然後分討分討就做完了,咋沒啥說的。

具體情況在於你先按照 2 個 2 個迴圈移位,把要交換的放到前後,然後再換一下就能保持迴圈移位特點不變,就做完了。

程式碼偷懶就沒補。