TT和他的猫

#include<bits/stdc++.h>
using namespace std;
struct wid
{
	long long text;//交流数量 
	int favor;//喜爱程度 
	bool top;//是否被置顶 
};
int main()
{
	int T;
	cin>>T;
	for(int i=0;i<T;i++)
	{
		int n;
		cin>>n;
		deque<wid> line;
		for(int j=1;j<=n;j++)
		{
			string str;
			cin>>str;
			int numstr=0;
			if(str=="Add") numstr=1;
			else if(str=="Close") numstr=2;
			else if(str=="Chat") numstr=3;
			else if(str=="Rotate") numstr=4;
			else if(str=="Prior") numstr=5;
			else if(str=="Choose") numstr=6;
			else if(str=="Top") numstr=7;
			else if(str=="Untop") numstr=8;
			
			string MSG;
			switch(numstr)
			{
				case 1://Add 不与某个窗口重复,则创建成功 
					{
						int opt=0;
						cin>>opt;
						bool tag=false;
						for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列 
						{
							if((*it).favor==opt) tag=true;
						}
						if(tag) MSG="same likeness.";
						else  
						{
							MSG="success.";
							wid newwid;
							newwid.favor=opt;
							newwid.text=0;
							newwid.top=false; 
							line.push_back(newwid);
						}
						cout<<"OpId #"<<j<<":"<<" "<<MSG<<endl;
						break;
					}
				case 2://关闭窗口 
					{
						int opt=0;
						cin>>opt;
						bool tag=false;
						deque<wid>::iterator p;
						for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列 
						{
							if((*it).favor==opt) 
							{
								tag=true;	
								p=it;
								break; 
							}
						}
						if(tag) 
						{	
							cout<<"OpId #"<<j<<":"<<" "<<"close "<<(*p).favor<<" with "<<(*p).text<<"."<<endl;
							line.erase(p);	
						}
						else{
							cout<<"OpId #"<<j<<":"<<" "<<"invalid likeness."<<endl;
						}	
				
						break;
					}
				case 3://Chat w 
					{
						long long opt=0;
						cin>>opt;
						bool tag=false;
						if(line.empty())
						{
							cout<<"OpId #"<<j<<":"<<" "<<"empty."<<endl;
						}
						else{
							deque<wid>::iterator p;
							for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列 
							{
								if((*it).top) //存在顶层窗口 
								{
									tag=true;	
									p=it;
									break; 
								}
							}
							if(tag)//存在top 
							{
								(*p).text+=opt;
							} 		
							else{//无top,取第一个 
								p=line.begin();
								(*p).text+=opt;
							}
							cout<<"OpId #"<<j<<":"<<" "<<"success."<<endl;
						}
						break;
					}
				case 4://Rotate
				{
					int opt=0;
					cin>>opt;
					if(opt>line.size()||opt<1)
					cout<<"OpId #"<<j<<":"<<" "<<"out of range."<<endl;
					else{
						int x=0;
						deque<wid>::iterator p;
						for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列 
						{
							x++;
							if(opt==x)
							{
								p=it;//第x个 
								break;
							}
						}
						wid tmp;tmp.favor=(*p).favor;tmp.text=(*p).text;tmp.top=(*p).top;
						line.erase(p);
						line.push_front(tmp);//opt-1位置下的窗口放在队首 
						cout<<"OpId #"<<j<<":"<<" "<<"success."<<endl;
					}
					break;
				 } 
				case 5://Prior 喜爱度最大放队首 
				{
					bool tag=false;
					if(line.empty())
					{
						cout<<"OpId #"<<j<<":"<<" "<<"empty."<<endl;
					}
					else{	
						deque<wid>::iterator p=line.begin();
						
						int maxx=(*p).favor;
						for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列 
						{
							if((*it).favor>maxx) 
							{
								maxx=(*it).favor;	
								p=it;
							}
						}
					
						wid tmp;tmp.favor=(*p).favor;tmp.text=(*p).text;tmp.top=(*p).top;
						line.erase(p);
						line.push_front(tmp);
						cout<<"OpId #"<<j<<":"<<" "<<"success."<<endl;
					}
					break;
				}
				case 6://Choose
					{
						int opt=0;
						cin>>opt;
						bool tag=false;
						
						deque<wid>::iterator p=line.begin();
						for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列 
						{
							if((*it).favor==opt) //喜爱值为opt的窗口放在队首 
							{	
								tag=true;
								p=it;
								break; 
							}
						}
						wid tmp;tmp.favor=(*p).favor;tmp.text=(*p).text;tmp.top=(*p).top;
						line.erase(p);
						line.push_front(tmp);
						if(tag) cout<<"OpId #"<<j<<":"<<" "<<"success."<<endl;
						else
						cout<<"OpId #"<<j<<":"<<" "<<"invalid likeness."<<endl;
						break;
					}
				case 7://Top 
					{
						int opt=0;
						cin>>opt;
						bool tag=false;
						//先置顶,再取消已有的状态 
						
						for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列 
						{
							if((*it).favor==opt) //喜爱值为opt的窗口置顶 
							{	
								tag=true;
								(*it).top=true;
								break; 
							}
						}
						if(tag) 
						{
							cout<<"OpId #"<<j<<":"<<" "<<"success."<<endl;
							for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列  如果有顶层窗口,取消置顶 
							{
								if((*it).top&&(*it).favor!=opt) //存在顶层窗口 
								{
									(*it).top=false;
									break; 
								}
							}
						}
						else
						cout<<"OpId #"<<j<<":"<<" "<<"invalid likeness."<<endl;
						break;
					}
				case 8://Untop
					{
						bool tag=false;
						for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列  如果有顶层窗口,取消置顶 
						{
							if((*it).top) //存在顶层窗口 
							{
								tag=true;
								(*it).top=false;
								break; 
							}
						}
						if(tag) cout<<"OpId #"<<j<<":"<<" "<<"success."<<endl;
						else
						cout<<"OpId #"<<j<<":"<<" "<<"no such person."<<endl;
						break; 
						
					}
			
			}	
		}
		for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列  如果有顶层窗口,取消置顶 
			{
				if((*it).top) //存在顶层窗口 
				{
					if((*it).text!=0) cout<<"OpId #"<<++n<<": "<<"Bye "<<(*it).favor<<": "<<(*it).text<<"."<<endl;//有对话 
				//	line.erase(it);//删除顶层 
					break; 
				}
			}
			for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列 
			{
				if((*it).text!=0&&(*it).top==false) cout<<"OpId #"<<++n<<":"<<" "<<"Bye "<<(*it).favor<<": "<<(*it).text<<"."<<endl;
			}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值