//小哼和小哈玩小猫钓鱼,每人先摸6张牌,小哼先拿牌,然后依次出牌,若牌与桌上的相同则将出的牌放在牌尾,并将之间的牌放入手牌的末尾,否则将牌打至桌上,问谁能获胜。
#include <cstdio>
#include <queue>
#include <stack>
using namespace std;
int main()
{
queue<int>q1;
queue<int>q2;
stack<int>s;
int i,j,a,n,temp;
int vis[10]={0};//vis数组保存1~9的牌有没有在桌上(栈中),不可能在栈中出现两张相同的牌,否则早就被钓走了
for (i=1;i<=6;i++)
{
scanf("%d",&a);
q1.push(a);
}//小哼拿六张牌
for (i=1;i<=6;i++)
{
scanf("%d",&a);
q2.push(a);
}//小哈拿六张牌
while((!q1.empty())&&(!q2.empty()))//小哼和小哈手上必须都有牌(栈都不为空),否则有一个没牌了,游戏结束
{
temp=q1.front();
q1.pop();//不管赢牌输牌都要把牌先拿出来(如果赢牌就要放在最后,输牌就要放在桌上,反正都不会在这了~~)
if (vis[temp]==1)//如果桌上有这张牌
{
q1.push(temp);//先把这张牌放入小哼的排尾,接下来就是拿桌上的牌
while(s.top()!=temp)//这里注意桌上的大小为temp的牌只可能有一张~~,所以只要栈顶不为temp即可
{
q1.push(s.top());//把桌上的第一张牌拿走放在小哼的排尾
s.pop();
}
vis[temp]=0;//取消标记,桌上没有temp牌了~~
}
if (vis[temp]==0)//如果桌上没有这张牌,别忘了把这张牌放在桌上(之前不要放是因为赢牌了)
{
s.push(temp);
vis[temp]=1;//打上标记,temp牌桌上有了
}
//以上都为小哼的操作
temp=q2.front();
q2.pop();
if (vis[temp]==1)
{
q2.push(temp);
while(s.top()!=temp)
{
q2.push(temp);
s.pop();
}
vis[temp]=0;
}
if (vis[temp]==0)
{
s.push(temp);
vis[temp]=1;
}
}
if (q1.empty())
printf("小哈获胜\n");//小哈手中还有余牌
else
printf("小哼获胜\n");//小哼手中还有余牌
return 0;
}