1. 程式人生 > >The Summer, The Winter

The Summer, The Winter

按照題目說的進行模擬操作就好了,注意維護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;
}