我们先来看一下题目
解题思路
大模拟题,他怎么说就怎么写
不理解题意的自己去搓两把炉石传说就懂了!
存储随从用vector,这个增删随从方便呀!
代码
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
struct node{
int attack;
int blood;
};
vector<node> a,b;
int A=30,B=30;
int turn=1;
int main(){
int n;
cin>>n;
while(n--){
string order;
cin>>order;
node t;
if(order[0]=='s'){
int pos;
cin>>pos>>t.attack>>t.blood;
if(turn==1){
if(pos>a.size()) a.push_back(t);
else a.insert(a.begin()+pos-1,t);
}else{
if(pos>b.size()) b.push_back(t);
else b.insert(b.begin()+pos-1,t);
}
}else if(order[0]=='a'){
int attacker,defender;
cin>>attacker>>defender;
if(turn==1){ //A 攻击 B
if(defender!=0){
a[attacker-1].blood-=b[defender-1].attack;
b[defender-1].blood-=a[attacker-1].attack;
if(a[attacker-1].blood<=0) a.erase(a.begin()+attacker-1);
if(b[defender-1].blood<=0) b.erase(b.begin()+defender-1);
}else{
B-=a[attacker-1].attack;
if(B<=0) break;
}
}else{ //B 攻击 A
if(defender!=0){
b[attacker-1].blood-=a[defender-1].attack;
a[defender-1].blood-=b[attacker-1].attack;
if(b[attacker-1].blood<=0) b.erase(b.begin()+attacker-1);
if(a[defender-1].blood<=0) a.erase(a.begin()+defender-1);
}else{
A-=b[attacker-1].attack;
if(A<=0) break;
}
}
}else if(order[0]=='e'){
turn*=-1;
}
}
if(A<=0) cout<<-1<<endl;
else if(B<=0) cout<<1<<endl;
else cout<<0<<endl;
cout<<A<<endl;
cout<<a.size()<<" ";
for(int i=0;i<a.size();i++){
cout<<a[i].blood<<" ";
}
cout<<endl<<B<<endl;
cout<<b.size()<<" ";
for(int i=0;i<b.size();i++){
cout<<b[i].blood<<" ";
}
cout<<endl;
return 0;
}