您有n块砖在桌子上排成一行。每个字母上只有一个字母。您的任务是重新排列这些积木,以便在其上的字母创建一些指定的铭文。重新排列时,您只能交换具有指定字母的相邻砖块(给您m对(a1,b1),...,(am,bm)对,并且只允许交换其中一个砖块上带有ai以及两个砖块上带有bi的砖块第二,对于某些i = 1,..,m)。您应该检查是否有可能完成此操作,如果可以,请计算所需的最少交换次数。
输入项
输入的第一行有一个整数c。然后是c个测试用例:每个测试用例都由两行长度不超过100000(表示起始和结束配置)的小写字母(a..z),下一行中的一个整数m和第二行中的两个字母组成的m行ai,bi在每个人中。
输出量
对于每个测试用例,如果不可能重新排列积木,或者如果可能的话,应该打印最小数量的交换,则应打印-1(如果可以,则以232为模,输出该值)。
Input:
4
ab
ba
0
abc
cba
3
ab
cb
ca
cabbbc
cbabbc
1
ab
abba
baab
1
ab
Output:
-1
3
1
2
我不明白这个问题,有谁能帮助我理解测试用例,无需指导我给出提示和算法,只是向我解释这个问题,谢谢
最佳答案
您有4个测试用例。
Case 1:
start config: `ab`
end config: `ba`
allowed adjacent swaps: none
result: -1 - without any allowed swap, you can't get from `ab` to `ba`
Case 2:
start config: `abc`
end config: `cba`
allowed adjacent swaps: `(ab)`,`(cb)`,`(ca)`
result: 3
example solution: `abc -> (cb)@(1,2) -> acb -> (ca)@(0,1) -> cab -> (ab)@(1,2) -> cba`
Case 3:
start config: `cabbbc`
end config: `cbabbc`
allowed adjacent swaps: `(ab)`
result: 3
example solution: `cabbbc -> (ab)@(1,2) -> cabbbc`
Case 4:
start config: `abba`
end config: `baab`
allowed adjacent swaps: `(ab)`
result: 2
example solution: `abba -> (ab)@(2,3) -> abab -> (ab)@(0,1) -> baab`
关于c++ - 新砖症,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15056926/