Codeforces Round #726 (Div. 2) E2. Erase and Extend (Hard Version) 贪心
傳送門
文章目錄
- 題意:
- 思路:
題意:
給你一個長度為nnn的串sss,你有兩個操作可以使用:
(1)(1)(1)從sss的結尾刪除一個字母。
(2)s=s+s(2)s=s+s(2)s=s+s。
讓你通過若干次操作使其變成一個長度為kkk的串,且其字典序最小。
n,k≤5e5n,k\le5e5n,k≤5e5
思路:
首先通過E1E1E1我們暴力前綴可知答案一定是一個前綴不斷重復多次得到的答案,這個也比較好理解,不多加贅述。
設當前最優解的前綴長度為lenlenlen,當前遍歷第iii個的時候,與將最優前綴重復若干次后該位置比較,也就是將imodleni\bmod lenimodlen的位置,有三種情況:
(1)a[i]>a[imodlen](1)a[i]>a[i\bmod len](1)a[i]>a[imodlen],這個時候直接退出就好了,因為最優串字典序一定更小。
(2)a[i]=a[imodlen](2)a[i]=a[i\bmod len](2)a[i]=a[imodlen],這個時候繼續往下比即可。
(3)a[i]<a[imodlen](3)a[i]<a[i\bmod len](3)a[i]<a[imodlen],這個時候顯然更新成長度為iii的時候更優,所以len=i+1len=i+1len=i+1。
這個貪心直覺上是正確的,正確性也有人證過,我這個小菜雞就不多說了。
總結
以上是生活随笔為你收集整理的Codeforces Round #726 (Div. 2) E2. Erase and Extend (Hard Version) 贪心的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人参茶的功效与作用、禁忌和食用方法
- 下一篇: Codeforces Round #72