天天看點

洗牌問題(模拟)

題目大意:

已知兩堆牌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