炉石传说(CCF201609-3)

传送门

题解:这个题一直放着,因为好多人说很复杂,看了看不就是使用list进行模拟就行了么,于是就说用dev c++写一写,越写越有感觉,真的不要被题面难住了,直接模拟就行了。

附上代码:


#include<iostream>
#include<cstdio>
#include<list>

using namespace std;

struct node{
	int hp;
	int at;
};

list<node>xian,hou;

using namespace std;

int main()
{
	node temp1;
	temp1.hp=30;
	temp1.at=0;
	xian.push_front(temp1);
	hou.push_front(temp1);
	int n;
	string s;
	cin>>n;
	int flag=1;
	int po,at,hp;
	for(int i=1;i<=n;i++){
		cin>>s;
		if(s=="end"){
			flag=-flag;
		}else if(s=="summon"){
			cin>>po>>at>>hp;
			node temp;
			temp.hp=hp;
			temp.at=at;
			if(flag==1){
				int cnt=0;
				int ff=0;
				for(list<node>::iterator iter=xian.begin();iter!=xian.end();iter++){
					cnt++;
					if(cnt==po+1){
						xian.insert(iter,temp);	
						ff=1;
						break;
					}
				}
				if(!ff){
					xian.push_back(temp);
				}
			}else{
				int cnt=0;
				int ff=0;
				for(list<node>::iterator iter=hou.begin();iter!=hou.end();iter++){
					cnt++;
					if(cnt==po+1){
						hou.insert(iter,temp);	
						ff=1;
						break;
					}
				}
				if(!ff){
					hou.push_back(temp);
				}
			}
		}else if(s=="attack"){
			int attaker,defener;
			cin>>attaker>>defener;
			int diao1,diao2;
			int cnt1=0,cnt2=0;
			if(flag==1){
				list<node>::iterator iter1,iter2;
				for(iter1=hou.begin();iter1!=hou.end();iter1++){
					cnt2++;
					if(cnt2==defener+1){
						diao1=(*iter1).at;
						break;
					}
				}

				for(iter2=xian.begin();iter2!=xian.end();iter2++){
					cnt1++;
					if(cnt1==attaker+1){
						diao2=(*iter2).at;
						break;
					}
				}
				
				(*iter1).hp-=diao2;
				if((*iter1).hp<=0){
					if(cnt2!=1){
						hou.erase(iter1);
					}
				}
				(*iter2).hp-=diao1;
				if((*iter2).hp<=0){
					if(cnt1!=1){
						xian.erase(iter2);
					}
				}
			}else{
				list<node>::iterator iter1,iter2;
				for(iter1=xian.begin();iter1!=xian.end();iter1++){
					cnt2++;
					if(cnt2==defener+1){
						diao1=(*iter1).at;
						break;
					}
				}

				for(iter2=hou.begin();iter2!=hou.end();iter2++){
					cnt1++;
					if(cnt1==attaker+1){
						diao2=(*iter2).at;
						break;
					}
				}
				
				(*iter1).hp-=diao2;
				if((*iter1).hp<=0){
					if(cnt2!=1){
						xian.erase(iter1);
					}
				}
				(*iter2).hp-=diao1;
				if((*iter2).hp<=0){
					if(cnt1!=1){
						hou.erase(iter2);
					}
				}
//			for(list<node>::iterator iter=xian.begin();iter!=xian.end();iter++){
//				cout<<(*iter).hp<<" "<<(*iter).at<<endl;
//			}
//			cout<<endl;
//			for(list<node>::iterator iter=hou.begin();iter!=hou.end();iter++){
//				cout<<(*iter).hp<<" "<<(*iter).at<<endl;
//			}
//			cout<<endl;
		}
	}
	}
	node temp2=xian.front();
	node temp3=hou.front();
	if(temp2.hp>0&&temp3.hp<=0){
		cout<<1<<endl;
	}else if(temp2.hp<=0&&temp3.hp>0){
		cout<<-1<<endl;
	}else{
		cout<<0<<endl;
	}
	cout<<temp2.hp<<endl;
	int len=xian.size()-1;
	cout<<len<<" ";
	for(list<node>::iterator iter=xian.begin();iter!=xian.end();iter++){
		if(iter!=xian.begin()){
			cout<<(*iter).hp<<" ";
		}
	}
	cout<<endl;
	cout<<temp3.hp<<endl;
	len=hou.size()-1;
	cout<<len<<" ";
	for(list<node>::iterator iter=hou.begin();iter!=hou.end();iter++){
		if(iter!=hou.begin()){
			cout<<(*iter).hp<<" ";
		}
	}
	cout<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/zhouzi2018/article/details/82697964