1. 程式人生 > 其它 >2021.7.21 校內模擬賽遊記

2021.7.21 校內模擬賽遊記

為什麼想了那麼久的 T2 都不會啊 /yiw

T1

定義 \(f(n)\)\(n < 10\) 時結果是 \(n\),否則設 \(d(n)\)\(n\) 在十進位制下各位數的和,求 \(x \in [l, r], f(x) = a\) 的個數。

看到題目發現所有的 \(f(x)\) 都可以化成 \(f(d(n))\), 於是就準備寫數位 dp 了,可是想起以前寫數位 dp 寫掛的悲慘遭遇,就覺得第一題不會直接上數位 dp 的。

然後容易發現 \(f(n)\)\(1, 2, 3, \cdots 9, 1, 2, \cdots, 9, 1, \cdots\) 這樣子迴圈的,那麼就直接一個式子算出來就可以了。證明的話,首先,如果不進位那麼肯定是成立的,因為數加一,和也一定加一。所以只需要考慮進位的情況,而進位前到進位後,最後的那個 \(9\)

在模 \(9\) 意義下就是 \(0\),所以還是給整個加了 \(1\)

T2

T1 半小時不到就 A 了,然後就開始了悲慘的 T2。

給定序列 \(A\),每次從中取出所有 \(x\),放到頭或者尾,求最少步數使 \(A\) 單調遞增。

先模擬了一堆小樣例,企圖定下一個下界再進行構造,然後啥發現沒有,這個換來換去似乎沒有任何的規律。

然後專心考慮換到一邊發生了什麼變化。
容易發現換過來的一堆必須是連續的,因為題目不讓我們從中間插進去,於是想著列舉一箇中間的斷點,然後兩邊貪心一波。可是總能發現一些 hack 情況,於是一直搞一直搞搞了個極其複雜的做法。
寫完後又一直調一直調,因為過不了大樣例就一直找 hack, 一直改,死活不願意放棄。

最後得分 \(0\)

其實在想著列舉中間斷點的時候就已經沒有救了。
誰!告!訴!你!每!個!都!要!移!動!

事實上,考慮不移動的會簡單很多。只要中間沒有交叉,其它的全都排左排右就可以了。
中間不需要換的同樣也是連續的。我在前面的貪心中考慮的諸多需要特判的移動“減免”情況在這裡都不用考慮,因為肯定會被包括進去。

但還沒有結束,因為 \(O(n^2)\) 是過不了的。
不過很容易想到連續的不重複的部分直接搞個簡單 dp 就行了。

C

找到最多的 abccbc 子串。

我怎麼會傻到認為直接大力 dp 就能過的?顯然 aabbcc 就是反例, 因為這裡是可以交叉的。

有一個重要的性質,c

全部扔到最後肯定是最優的。那麼可以列舉最後的幾個 c 然後驗證。
這個有單調性,所以二分就行了。

D

T2 都想不出來想什麼 D!

最後

在 T2 做了很久的情況下真的是很難說服自己把它放棄——雖然 SOP 如是要求。

請嚴格遵守 SOP,說不定下一題做一會兒再回來就能想到了。