题目描述
见题目描述,直接模拟即可
样例
显然样例没啥问题
C++ 代码
#include <iostream>
#include <queue>
#include <stack>
#include <set>
using namespace std;
int turn=0;//游戏进行到第几轮
string A,B;
queue<char> a,b;//A,B的手牌
stack<char> table;//桌子上牌的顺序
set<char> s;//已经出过的牌
int flag=1;//flag=1时A先出牌,flag=0时,B先出牌
int main(){
cin>>A>>B;
for(auto x:A) a.push(x);
for(auto y:B) b.push(y);
while(1){
turn++;//游戏轮次加一
if(flag){//A出牌
char temp=a.front();
a.pop();
if(s.count(temp)){//A打算出的牌已经出过了,就把牌桌的牌放成A的手牌
a.push(temp);
while(table.top()!=temp){
char t=table.top();
s.erase(t);//放回一张,牌桌上出国的牌的种类减一
table.pop();
a.push(t);
}
char t=table.top();
s.erase(t);
table.pop();
a.push(t);
}
else if(a.empty()) break;//A没牌了,输
else {
table.push(temp);//加入牌桌
s.insert(temp);//标记这种牌出现过,再出现就可以收牌
flag=0;//轮到B了
}
}
else{//与A同理
char temp=b.front();
b.pop();
if(s.count(temp)){
b.push(temp);
while(table.top()!=temp){
char t=table.top();
s.erase(t);
table.pop();
b.push(t);
}
char t=table.top();
s.erase(t);
table.pop();
b.push(t);
}
else if(b.empty()) break;
else {
table.push(temp);
s.insert(temp);
flag=1;
}
}
if(turn>100000) break;//10万次还不结束,显然游戏无穷尽,直接退出
}
if(a.empty()){
while(b.size()){
cout<<b.front();
b.pop();
}
return 0;
}
else if(b.empty()){
while(a.size()){
cout<<a.front();
a.pop();
}
return 0;
}
else cout<<"-1"<<endl;
return 0;
}