CodeForces - 1333D Challenges in school №41(构造+模拟)
題目鏈接:點擊查看
題目大意:給出 n 代表字符串長度,k 代表操作次數,還有一個長度為 n ,只包含 ' L ' 和 ' R ' 的字符串 s ,對于每次操作,可以選擇數對不相交的 i ,滿足 a[ i ] == ' R ' && a[ i +1 ] == ' L ' ,操作可以使得?a[ i ] = ' L?' , a[ i +1 ] =?' R?' ,問能否恰好進行 k 次操作,使得所有的 L 都位于字符串的左半部分,且所有的 R 都位于字符串的右半部分
題目分析:1750 分的一道構造題,比賽時完全交給隊友去做了,自己簽完到后直接去了 F 題,賽后反思感覺應該去幫隊友一下的,因為補題的時候發現這是一道偏向模擬的構造題,相對來說我還是比較擅長的。。有點可惜,死腦筋去磕 F 題,導致 D 和 F 兩個題都沒做出來,唉
首先要理解題目中的操作其實就是交換滿足條件的相鄰的一對字符,而讀完題后我是直接猜出了一個結論,那就是無論如何交換,最后使得字符串滿足條件的操作總數是相同的,而可以變換的是如何分組,舉個很簡單的例子,對于 RLRLRL 這個字符串,我們可以一回合直接改變第一對,第二對以及第三對 RL ,也就是一次操作為
3 1 3 5
也可以分三個回合分別改變這三個位置,也就是輸出
1 1
1 3
1 5
明白了這里之后就不難想了,因為 n 只給到了 3000 ,所以我們可以直接 n * n 去貪心維護出分組最少的情況,分組數可以記為 cnt ,同時記得維護一下總操作數 tot ,有了這兩個變量之后就可以特判 -1 的情況了,顯然如果 k 比最小分組 cnt 還要小時,或者 k 比總操作數 tot 都要大時是 -1 的情況,其余情況都是可以通過拆分最小分組 cnt 來達到的,剩下的模擬就好了,實現起來也是有技巧的,具體的可以參考代碼
代碼:
?
?
總結
以上是生活随笔為你收集整理的CodeForces - 1333D Challenges in school №41(构造+模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CodeForces - 1333C E
- 下一篇: CodeForces - 1333F K