题目大意:
已知两堆牌s1和s2的初始状态,
其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去。
现在输入s1和s2的初始状态 以及 预想的最终状态s12
问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出"-1"。
解题思路:
很浅白的模拟题= = 不懂为什么别人要把它归类到广搜。。。所以我又重新分类了。。。
直接模拟就可以了,关键在于状态记录,然后判重
若s1和s2在洗牌后的状态,是前面洗牌时已经出现过的一个状态,且这个状态不是预想的状态S12,就说明无论怎样再洗牌都不可能达到S12了,因为这个洗牌操作已经陷入了一个“环”
如果状态没有重复过,则一直模拟洗牌,直至s12出现
记录状态可以用map<string,bool>vist
Map的缺省值为0
知道这个就不难了
Sample Input
Sample Output
View Code