Codeforces 903E Swapping Characters
題目大意
考慮一個未知的長為 $n$($2\le n\le 5000$)由小寫英文字母構成的字符串 $s$ 。給出 $k$($1\le k\le 2500$,$nk\le 5000$)個字符串 $s_1, s_2, \dots, s_k$,$s_i$ 由 $s$ 通過交換 $s[x_i]$ 和 $s[y_i]$($x_i \ne y_i$ )得到。求 $s$,若有多解輸出任意一個接,無解輸出 -1。
解法
假設輸入的 $k$ 個串不全相等。(否則平凡)
取 $s_1$、$s_2$,$s_1\ne s_2$ 。(此 $s_1, s_2$ 并非指輸入的 $s_1, s_2$ 。)
設 $i$ 是兩者不相同的第一個位置,則二者中至少有一個的「交換位置」包含 $i$ 。
據此,可以先假設 $s_1$ 的一個交換位置是 $i$ ,枚舉 $s_1$ 的另一個交換位置,進行檢驗。
若不可能,再假設 $s_2$ 的一個交換位置是 $i$ ,枚舉 $s_2$ 的另一個交換位置。
這種做法的時間復雜度為 $O(kn + n^{2}k)$,可接受。
TODO
能否進一步縮小可能的交換位置的范圍(candidate swapping index pair),下面嘗試討論這一問題。
不失一般性,設 $s_1$ 的交換位置為 $(i, j)$,$s_2$ 的交換位置為 $(i', j')$ 。
分類討論:
- $i$ 不是 $s_1$ 的第一個交換位置,即 $j < i$ 。
1.1 $s_1[i] = s_1[j]$
1.2 $s_1[i] \ne s_1[j]$ - $i$ 是 $s_1$ 的第一個交換位置,即 $j > i$ 。
轉載于:https://www.cnblogs.com/Patt/p/8046836.html
總結
以上是生活随笔為你收集整理的Codeforces 903E Swapping Characters的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洱海租敞篷车多少钱一天
- 下一篇: 春风得意马蹄疾的下一句是什么呢?