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\)
T2
T1 半小時不到就 A 了,然後就開始了悲慘的 T2。
給定序列 \(A\),每次從中取出所有 \(x\),放到頭或者尾,求最少步數使 \(A\) 單調遞增。
先模擬了一堆小樣例,企圖定下一個下界再進行構造,然後啥發現沒有,這個換來換去似乎沒有任何的規律。
然後專心考慮換到一邊發生了什麼變化。
容易發現換過來的一堆必須是連續的,因為題目不讓我們從中間插進去,於是想著列舉一箇中間的斷點,然後兩邊貪心一波。可是總能發現一些 hack 情況,於是一直搞一直搞搞了個極其複雜的做法。
寫完後又一直調一直調,因為過不了大樣例就一直找 hack, 一直改,死活不願意放棄。
最後得分 \(0\)。
其實在想著列舉中間斷點的時候就已經沒有救了。
誰!告!訴!你!每!個!都!要!移!動!
事實上,考慮不移動的會簡單很多。只要中間沒有交叉,其它的全都排左排右就可以了。
中間不需要換的同樣也是連續的。我在前面的貪心中考慮的諸多需要特判的移動“減免”情況在這裡都不用考慮,因為肯定會被包括進去。
但還沒有結束,因為 \(O(n^2)\) 是過不了的。
不過很容易想到連續的不重複的部分直接搞個簡單 dp 就行了。
C
找到最多的
abc
或cbc
子串。
我怎麼會傻到認為直接大力 dp 就能過的?顯然 aabbcc
就是反例, 因為這裡是可以交叉的。
有一個重要的性質,c
c
然後驗證。這個有單調性,所以二分就行了。
D
T2 都想不出來想什麼 D!
最後
在 T2 做了很久的情況下真的是很難說服自己把它放棄——雖然 SOP 如是要求。
請嚴格遵守 SOP,說不定下一題做一會兒再回來就能想到了。