题意:就是我们小时候玩的排火车游戏
我们只需要模拟游戏过程,每次A,B每个玩家放完牌后,判断排的字符串中是否有重复的,只需判断最后一张是否与之前的有重复的,如果有我们把这部分的字符串截取出来,然后注意要再翻转一下字符串,然后加到当前加牌的玩家的手牌中,直到一个玩家手牌用完并且没能从排的字符串中获取时,结束。
代码如下:
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
string t;
int len;
bool check(int flag)
{
len=t.length();
//cout<<t<<" "<<t[len-1]<<endl;
for(int i=0;i<len-1;i++)
{
if(t[i]==t[len-1])
{
string tt=t.substr(i,len-i);
reverse(tt.begin(),tt.end());
if(flag==1)
s1=s1+tt;
else
s2=s2+tt;
t=t.substr(0,i);
return 1;
}
}
return 0;
}
int main()
{
cin>>s1>>s2;
for(int i=0;i<1000000;i++)
{
//cout<<s1<<" "<<s2<<" "<<t<<endl;
if(s1=="")
{
cout<<s2<<endl;
return 0;
}
else if(s2=="")
{
cout<<s1<<endl;
return 0;
}
t=t+s1[0];
len=s1.length();
s1=s1.substr(1,len-1);
while(check(1))
{
t=t+s1[0];
len=s1.length();
s1=s1.substr(1,len-1);
//cout<<s1<<" "<<s2<<" "<<t<<endl;
}
if(s1=="")
{
cout<<s2<<endl;
return 0;
}
else if(s2=="")
{
cout<<s1<<endl;
return 0;
}
t=t+s2[0];
len=s2.length();
s2=s2.substr(1,len-1);
while(check(2))
{
t=t+s2[0];
len=s2.length();
s2=s2.substr(1,len-1);
//cout<<s1<<" "<<s2<<" "<<t<<endl;
}
}
cout<<"-1"<<endl;
}