新砖混乱

时间:2013-02-24 21:36:29

标签: c++

桌子上有一排排成一排。每个人都有一个字母。你的任务是重新排列那些砖块,使它们上面的字母创建一些指定的铭文。在重新安排时,您只能用指定的字母交换相邻的砖块(您将获得m对(a1,b1),...,(am,bm),并且您只能在其中一个上交换砖块,并且可以在第二,对于一些i = 1,..,m)。您应该检查是否可以实现这一点 - 如果是 - 计算所需的最小交换次数。

输入

输入的第一行有一个整数c。然后c测试用例如下:每个测试用例由两行小写字母(a..z)组成,长度不超过100000(起始和结束配置的描述),下一行中有一个整数m,然后有两行字母的m行ai,bi in each。

输出

对于每个测试用例,如果无法重新排列砖块,则应打印-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 个答案:

答案 0 :(得分:1)

你有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`

答案 1 :(得分:0)

4 - 4 testcases
(now two lines which were said, they define strings to swap one into another)
ab
ba
0 - zero strings which define bricks

Now, you can't rearrange nothing, because you have no strigns. return -1.

Now the secons testcase:
(two lines which define strings to trasform one into another)
abc
cba
3 - three bricks
ab
cb
ca
And above we ahve three bricks. So we can, to my understanding, swap these bricks letters, so swap a with b, c with b, and c with a, so basically all possible swaps are allowed).

Third testcase - analogical to the second, but you're only allowed to swap "a" with "b".
cabbbc
cbabbc
1
ab

And so on...

abba
baab
1
ab

这是我对任务的理解。

答案 2 :(得分:0)

测试用例是开始和结束位置(两行字符),后跟一个数字。该数字描述了有多少可能的转换。然后有可能的过渡。因此,在您的示例中,第一个测试用例是“当没有可以交换的字母时,从ab到ba需要多少步骤?” (答案-1是“不可能”的答案。)第二个测试案例是“如果可以交换ab,cb或ca,从abc到cba需要多少步骤?”答案是3.第三个测试案例是“如果可以交换ab,从cabbbc到cbabbc需要多少步骤?”等

答案 3 :(得分:0)

让我解释测试用例(按重新排列的顺序)

ab
ba
0

您不能从“ab”到“ba”,因为不允许掉期=>输出-1

cabbbc
cbabbc
1
ab

您可以交换相邻的ab,只需在第二个和第三个字符上执行一次即可。 =>输出1

abba
baab
1
ab

同样,前两个和后两个,使两个交换=>输出2

abc
cba
3
ab
cb
ca

您无法直接交换ac,因为它们不相邻。相反,将ab交换并获取bac。然后,将ac交换,然后获取bca。最后,与b交换c并获取cba =>输出3

如果你可以将“ab”换成“ba”,你也可以将“ba”换成“ab”。这在任务描述中并不明显,但样本测试用例明确了这一点。