大概是CCF 第三题比较简洁的一道题吧

尽量设计好一个数据结构:

                                      node t[2][10]: 存双方的英雄和随从

                                       int    num[2]: 存隋朝的数量

                                      用p来实现双方的切换,因为有统一 的接口,所以就不用分情况讨论,将两者看出统一

做了太多PAT ,想着双方同时死亡怎么办,后来想不可能 因为英雄的攻击力为0  

再次吐槽,PAT真是太多吐槽点

#include <bits/stdc++.h>
using namespace std;
struct node {
    int atk;
    int hel;
};
node t[2][10];
int  num[2];
int  p,n,flag;
void _formal (int player,int pos) {
    if (pos==0) {
        if (player) flag=1;
        else        flag=-1;
        return ;
    }
    for (int i=pos;i<num[player];i++)
        t[player][i]=t[player][i+1];
    num[player]--;    
}
void _insert (int pos,node tmp) {
    for (int i=num[p];i>=pos;i--) 
        t[p][i+1]=t[p][i];
    t[p][pos]=tmp; num[p]++;
}
void _attack (int x,int y) {
    int p1=p,p2=p^1;
    t[p1][x].hel-=t[p2][y].atk;
    t[p2][y].hel-=t[p1][x].atk;
    if (t[p1][x].hel<=0)  _formal (p1,x);
    if (t[p2][y].hel<=0)  _formal (p2,y);
}
int main ()
{
    cin>>n; t[0][0].hel=t[1][0].hel=30;
    while (n--) {
        string str; cin>>str;
        if (flag) continue;
        if (str[0]=='e') p^=1;
        else if (str[0]=='s') {
            int pos,h,a; cin>>pos>>h>>a;
            node tmp={h,a}; _insert(pos,tmp);
        } 
        else {
            int x,y; cin>>x>>y;
            _attack(x,y);
        }
    }
    cout<<flag<<"\n";
    p=0;
    for (int i=1;i<=2;i++) {
        cout<<t[p][0].hel<<"\n"<<num[p];
        for (int j=1;j<=num[p];j++)
            cout<<" "<<t[p][j].hel;
        cout<<"\n";
        p^=1;
    }
    return 0;
}