MOFN


私信TA

用户名:uq_54533765588

访问量:247

签 名:

等  级
排  名 33199
经  验 461
参赛次数 0
文章发表 1
年  龄 21
在职情况 学生
学  校
专  业

  自我简介:

解题思路:这个题用队列加vector的方法十分容易理解。就是需要考虑清楚每一步的过程.

(当然,这是我小白的时期写的,肯定有很多不对的地方。。。还请多多指正)。

注意事项:

参考代码:

#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;

queue <char> a;
queue <char> b;
vector <char> c;//公共,用于排火车(我们那边习惯这么叫) 
int found()//这个函数的作用是判断当前的牌和之前已经排好的牌有没有一样的
{
	for(int i=0;i<c.size()-1;i++)
	{
		if(c[i]==c.back())
			return i;
	}
		 return inf;
}

void print()//                                                         最后打印结果的函数
{
	if(a.empty())
	{
		while(!b.empty())
		{
			cout<<b.front();
			b.pop();
		}
	}
	else if(b.empty())
	{
		while(!a.empty())
		{
			cout<<a.front();
			a.pop();
		}
	}
}

void match()//                                                        最主要的函数
{
	int flag=1;
	while(a.size()!=0&&b.size()!=0)
	{
		if(flag%2==1)//a出牌 
		{
			if(!c.empty()) //                             如果公共牌库不是空的,那么就要判断有无相同的牌了
			{
				c.push_back(a.front());
				a.pop();
				int temp=found();
				if(temp!=-1)
				{
					for(int i=c.size()-1;i>=temp;i--)
					a.push(c[i]);
					c.erase(c.begin()+temp,c.end());
					flag--;//                     再加上后面的flag++,就是还是轮到a 
				}
			}
			else//                                        如果是空的,那就直接往里面扔牌
			{
//				cout<<1;
				c.push_back(a.front());
				a.pop();
				//cout<<a.size();
			}
		} 
		else//b出牌 
		{ 
			if(!c.empty()) 
			{
				c.push_back(b.front());
				b.pop();
				int temp=found();
				if(temp!=-1)
				{
					for(int i=c.size()-1;i>=temp;i--)
						b.push(c[i]);
					c.erase(c.begin()+temp,c.end());
					flag--; 
				}
			}
			else
			{
				c.push_back(b.front());
				b.pop();
			}
		}
//		print();
//		cout<<endl;
		flag++;	//                                            这样用一个flag就可以在A、B间来回更替~~
//		cout<<a.size()<<endl;
//		cout<<b.size();
	}
}

int main()
{
	string sa,sb;
	cin>>sa>>sb;
	for(int i=0;i<sa.size();i++)
	{
		a.push(sa[i]);
	} 
	for(int i=0;i<sb.size();i++)
	{
		b.push((sb[i]));
	}
	match();
	print();
	return 0;
}


 

0.0分

0 人评分

  评论区

  • «
  • »