題目大意:
已知兩堆牌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