CCF 201609-3 炉石传说 100分
Posted 登登登ccc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF 201609-3 炉石传说 100分相关的知识,希望对你有一定的参考价值。
题目来源:- 计算机软件能力认证考试系统
#include<bits/stdc++.h>
using namespace std;
struct summon {
int att;//攻击力
int hea;//生命值
summon(int a,int h):
att(a),hea(h) {};
};
int main() {
int n,p,a,h,pos1,pos2;
string type;
bool pri=0;//先手标志
vector<summon> v1= {summon(0,30)},v2= {summon(0,30)};
cin>>n;
while(n--) {
cin>>type;
if(type=="summon") {
cin>>p>>a>>h;
//ps:emplace(position,element)插入元素后,会把插入位置后的元素自动后移
if(pri==0)
v1.emplace(v1.begin()+p,summon(a,h));
else
v2.emplace(v2.begin()+p,summon(a,h));
} else if(type=="attack") {
cin>>pos1>>pos2;
if(pri==0) {
v1[pos1].hea-=v2[pos2].att;
v2[pos2].hea-=v1[pos1].att;
} else {
v2[pos1].hea-=v1[pos2].att;
v1[pos2].hea-=v2[pos1].att;
}
//攻击结束后判断是否有随从生命值小于0,小于0则从数组中删除
//ps:erase(iteration)删除元素后,会把删除位置后的元素自动前移
for(auto it=v1.begin()+1; it<v1.end(); it++)
if(it->hea<=0)
v1.erase(it);
for(auto it=v2.begin()+1; it<v2.end(); it++)
if(it->hea<=0)
v2.erase(it);
} else {
pri=!pri;//遇到"end"回合反转
}
}
//第一行输出
if(v2[0].hea<=0)
cout<<"1"<<endl;
else if(v1[0].hea<=0)
cout<<"-1"<<endl;
else
cout<<"0"<<endl;
//第二、三行输出
cout<<v1[0].hea<<endl;
cout<<v1.size()-1;
for(int i=1; i<v1.size(); i++)
cout<<" "<<v1[i].hea;
//第四、五行输出
cout<<endl<<v2[0].hea<<endl;
cout<<v2.size()-1;
for(int i=1; i<v2.size(); i++)
cout<<" "<<v2[i].hea;
return 0;
}
以上是关于CCF 201609-3 炉石传说 100分的主要内容,如果未能解决你的问题,请参考以下文章