从30分涨到100分,记录一下结构体和vector的结合解题,感觉简单易懂, 也有大神更简化的, link.
#include<vector>
#include<iterator>
#include <algorithm>
using namespace std;
struct retinues{
int attack,health;
retinues(int a, int h){attack =a; health = h;}
};
vector<retinues> player1,player2;
int main()
{
int n;
cin>>n;
getchar();
string action;
int position,attract_v,health_v,flag = 0;
int attacker,defender;
int game_over = 0, player1_over = 0, player2_over = 0;
player1.push_back(retinues(0,30));
player2.push_back(retinues(0,30));
while(n--)
{
cin>>action;
if(action=="end") flag++;
else if(action=="summon"&&flag%2==0&&!game_over)
{
cin>>position>>attract_v>>health_v;
player1.insert(player1.begin()+position,retinues(attract_v,health_v));
}
else if(action=="attack"&&flag%2==0&&!game_over)
{
cin>>attacker>>defender;
player1[attacker].health -= player2[defender].attack;
player2[defender].health -= player1[attacker].attack;
if(player1[0].health<=0&&player2[0].health>0) player1_over = 1;
if(player2[0].health<=0&&player1[0].health>0) player2_over = 1;
if(player1[0].health<=0||player2[0].health<=0) game_over = 1;
if(player1[attacker].health<=0&&!game_over) player1.erase(player1.begin() + attacker);
if(player2[defender].health<=0&&!game_over) player2.erase(player2.begin() + defender);
}
else if(action=="summon"&&flag%2==1&&!game_over)
{
cin>>position>>attract_v>>health_v;
player2.insert(player2.begin()+position,retinues(attract_v,health_v));
}
else if(action=="attack"&&flag%2==1&&!game_over)
{
cin>>attacker>>defender;
player2[attacker].health -= player1[defender].attack;
player1[defender].health -= player2[attacker].attack;
if(player1[0].health<=0&&player2[0].health>0) player1_over = 1;
if(player2[0].health<=0&&player1[0].health>0) player2_over = 1;
if(player1[0].health<=0||player2[0].health<=0) game_over = 1;
if(player2[attacker].health<=0&&!game_over) player2.erase(player2.begin() + attacker);
if(player1[defender].health<=0&&!game_over) player1.erase(player1.begin() + defender);
}
}
if(player1_over == 1 &&player2_over != 1) cout<<-1<<endl;
else if(player2_over == 1 &&player1_over != 1) cout<<1<<endl;
else cout<<0<<endl;
cout<<player1[0].health<<endl;
cout<<player1.size()-1<<" ";
for(int i=1;i<player1.size();i++) cout<<player1[i].health<<" ";
cout<<endl;
cout<<player2[0].health<<endl;
cout<<player2.size()-1<<" ";
for(int i=1;i<player2.size();i++) cout<<player2[i].health<<" ";
return 0;
}