05歷屆試題 043拉馬車

2018wl發表於2020-10-02

試題 歷屆試題 拉馬車

資源限制
時間限制:1.0s 記憶體限制:256.0MB

問題描述
  小的時候,你玩過紙牌遊戲嗎?
  有一種叫做“拉馬車”的遊戲,規則很簡單,卻很吸引小朋友。
  其規則簡述如下:
  假設參加遊戲的小朋友是A和B,遊戲開始的時候,他們得到的隨機的紙牌序列如下:
  A方:[K, 8, X, K, A, 2, A, 9, 5, A]
  B方:[2, 7, K, 5, J, 5, Q, 6, K, 4]
  其中的X表示“10”,我們忽略了紙牌的花色。
  從A方開始,A、B雙方輪流出牌。
  當輪到某一方出牌時,他從自己的紙牌佇列的頭部拿走一張,放到桌上,並且壓在最上面一張紙牌上(如果有的話)。
  此例中,遊戲過程:
  A出K,B出2,A出8,B出7,A出X,此時桌上的序列為:
  K,2,8,7,X
  當輪到B出牌時,他的牌K與桌上的紙牌序列中的K相同,則把包括K在內的以及兩個K之間的紙牌都贏回來,放入自己牌的隊尾。注意:為了操作方便,放入牌的順序是與桌上的順序相反的。
  此時,A、B雙方的手裡牌為:
  A方:[K, A, 2, A, 9, 5, A]
  B方:[5, J, 5, Q, 6, K, 4, K, X, 7, 8, 2, K]
  贏牌的一方繼續出牌。也就是B接著出5,A出K,B出J,A出A,B出5,又贏牌了。
  5,K,J,A,5
  此時雙方手裡牌:
  A方:[2, A, 9, 5, A]
  B方:[Q, 6, K, 4, K, X, 7, 8, 2, K, 5, A, J, K, 5]
  注意:更多的時候贏牌的一方並不能把桌上的牌都贏走,而是拿走相同牌點及其中間的部分。但無論如何,都是贏牌的一方繼續出牌,有的時候剛一出牌又贏了,也是允許的。
  當某一方出掉手裡最後一張牌,但無法從桌面上贏取牌時,遊戲立即結束。
  對於本例的初始手牌情況下,最後A會輸掉,而B最後的手裡牌為:
  9K2A62KAX58K57KJ5
  本題的任務就是已知雙方初始牌序,計算遊戲結束時,贏的一方手裡的牌序。當遊戲無法結束時,輸出-1。

輸入為2行,2個串,分別表示A、B雙方初始手裡的牌序列。

輸出為1行,1個串,表示A先出牌,最後贏的一方手裡的牌序。
  
樣例輸入
96J5A898QA
6278A7Q973

樣例輸出
2J9A7QA6Q6889977

樣例輸入
25663K6X7448
J88A5KJXX45A

樣例輸出
6KAJ458KXAX885XJ645

資料規模和約定
  我們約定,輸入的串的長度不超過30
  資源約定:
  峰值記憶體消耗(含虛擬機器) < 256M
  CPU消耗 < 1000ms
  請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入…” 的多餘內容。

注意:
  main函式需要返回0;
  只使用ANSI C/ANSI C++ 標準;
  不要呼叫依賴於編譯環境或作業系統的特殊函式。
  所有依賴的函式必須明確地在原始檔中 #include
  不能通過工程設定而省略常用標頭檔案。
  提交程式時,注意選擇所期望的語言型別和編譯器型別。
  ----------------------------
  笨笨有話說:
  不斷刪除前邊的,又要後邊新增… 如果用陣列,需要開一個大點的,請佛祖保佑在遊戲結束前,不會用到陣列的邊緣。
  歪歪有話說:
  反正串也不長,不如每次操作都返回一個新的串。
  默默有話說:
  我一般都不吱聲,這是典型的佇列結構,動態陣列最好,沒有?自己造一個唄!
  
提交程式碼

相關文章