Codeforces Round #598 (Div. 3) F. Equalizing Two Strings 思维 + 逆序对
生活随笔
收集整理的這篇文章主要介紹了
Codeforces Round #598 (Div. 3) F. Equalizing Two Strings 思维 + 逆序对
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
傳送門
文章目錄
- 題意:
- 思路:
題意:
給你兩個長度為nnn的串a,ba,ba,b,每次可以同時翻轉a,ba,ba,b中任意一段長度為L(1≤L≤n)L(1\le L\le n)L(1≤L≤n)的子串,問能否通過若干次操作使兩個串相同。
思路:
首先他們包含的字符個數不同的話肯定是不能轉換成相同的串的。
否則的話,通過觀察,有個顯然的結論:如果某個串有兩個相同的字符,那么可以證明兩個串一定可以變成一樣的。
這個結論比較顯然,我們先通過交換使兩個相同字符相鄰,讓后再每次交換長度為222的字串的時候選擇這個相鄰的字符,這樣這個串是不變的,而上面哪個串一定可以通過交換相鄰位置的操作變成下面哪個串,所以是正確的。
那么當串中沒有相同的字母的時候怎么辦呢?我們還是考慮交換相鄰兩項,交換相鄰兩項?可以聯想到逆序對,那么我們求出來兩個串的逆序對個數,也就是將兩個串排序之后的操作次數,如果兩個串逆序對個數同奇偶,那么一定可以變成一樣的。這個也比較顯然,當某個串排序完成之后,可以交換相鄰兩項偶數次,這樣相當于沒有變化,一直到另一個串也排好序為止。
總結
以上是生活随笔為你收集整理的Codeforces Round #598 (Div. 3) F. Equalizing Two Strings 思维 + 逆序对的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南瓜根的功效与作用、禁忌和食用方法
- 下一篇: 生三七的功效与作用、禁忌和食用方法