小的時候,你玩過紙牌遊戲嗎?
有一種叫做「拉馬車」的遊戲,規則很簡單,卻很吸引小朋友。
其規則簡述如下:
假設參加遊戲的小朋友是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
題解:直接模擬,說實話-1情況我並沒有考慮明白,只好設定乙個計數器,我能想到的就是雙方牌數相同.測試資料也並沒有這樣的資料,也真的是太水了0.0
#include
#define ll long long
#define inf 0x3f3f3f3f
#define pb push_back
#define rep(i,a,b) for(int i=a;i#define rep1(i,b,a) for(int i=b;i>=a;i--)
using
namespace
std;
const
int n=1e5+100;
ll arr[4][4];
int main()
pp=!pp;
}else
st.push(a),mp1[a]++;
if(q1.empty())
break;
}else
pp=!pp;
}else
st.push(a),mp1[a]++;
if(q2.empty())
break;
}pp=!pp;
}if(cnt==1e3)
if(q1.empty())
藍橋杯 歷屆試題 拉馬車 棧與佇列
問題描述 小的時候,你玩過紙牌遊戲嗎?有一種叫做 拉馬車 的遊戲,規則很簡單,卻很吸引小朋友。其規則簡述如下 假設參加遊戲的小朋友是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 我...
棧和佇列 單調佇列 單調棧
講解部落格鏈結 一 單調棧 1 什麼是單調棧?單調棧是指乙個棧內部元素具有嚴格單調性 單調遞增,單調遞減 的一種資料結構。2 單調棧的兩個性質 滿足從棧頂到棧底具有嚴格的單調性 滿足後進先出的特徵,越靠近棧底的元素越早的進棧。3 元素進棧的過程 對於當前進棧元素x 如果x 棧頂元素,x 進棧。否則 ...
棧和佇列 佇列
佇列 又一種特殊的線性表 佇列 queue 是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表 允許刪除的一端稱為隊頭 front 允許插入的一端稱為隊尾 rear 當佇列中沒有元素時稱為空佇列。佇列的修改是依先進先出的原則進行的。新來的成員總是加入隊尾 即不允許 加塞 每次離開的成員總是...