The Summer, The Winter
阿新 • • 發佈:2019-01-02
按照題目說的進行模擬操作就好了,注意維護slave佇列
剛開始的時候wa了,因為在對死亡者進行pop的時候,可能死亡的是英雄,那等到顯示slave的時候就會越界
#include <cstdio> #include <string> #include <iostream> using namespace std; class slave { public: int h, a; slave(){} slave(int hh, int aa){h=hh,a=aa;} }; class person { public: int num; slave* que[10]; person(){num = 0;que[0]=new slave(30,0);} void push(int pos,int at, int hl) { if(pos<=num) { for(int i=num+1;i>pos;i--) que[i]=que[i-1]; } num++; que[pos]=new slave(hl, at); } void pop(int pos) { for(int i=pos;i<num;i++) que[i]=que[i+1]; que[num--]=NULL; } void out() { for(int i=1;i<=num;i++) cout<<que[i]->h<<" "<<que[i]->a<<endl; } }; int main() { int n; while(cin>>n) { int now = 0; person s[2]; while(n--) { string op; cin>>op; int a,b,c; if(op=="summon") { cin>>a>>b>>c; s[now].push(a,b,c); } else if(op=="attack") { cin>>a>>b; //at,def slave* me, *you; for(int i=0;i<=s[now].num;i++) if(i==a) me=s[now].que[i]; for(int i=0;i<=s[!now].num;i++) if(i==b) you = s[!now].que[i]; me->h-=you->a; you->h-=me->a; if(me->h<=0 && a) s[now].pop(a); if(you->h<=0 && b) s[!now].pop(b); } else if(op=="end") { now=!now; } } if(s[0].que[0]->h>0&&s[1].que[0]->h>0) cout<<0<<endl; else if(s[0].que[0]->h<=0) cout<<-1<<endl; else if(s[1].que[0]->h<=0) cout<<1<<endl; for(int i=0;i<2;i++) { cout<<s[i].que[0]->h<<endl; cout<<s[i].num<<" "; for(int j=1;j<=s[i].num;j++) cout<<s[i].que[j]->h<<" "; cout<<endl; } } return 0; }