CCF 炉鱼传说为什么我总是得80分,到底少考虑了什么?

#include
using namespace std;
struct gamer{
int total;
int attack[8];
int health[8];
};
struct gamer x,y;//x为先手,y为后手
void moveright(struct gamer *z,int index)
{

for(int i=(*z).total+1;i>index;i--)
{

    (*z).attack[i]=(*z).attack[i-1];
    (*z).health[i]=(*z).health[i-1];

}

}
void moveleft(struct gamer *z,int index)
{
for(int i=index;i<(*z).total;i++)
{
(*z).attack[i]=(*z).attack[i+1];
(*z).health[i]=(*z).health[i+1];
}
(*z).attack[(*z).total]=0;
(*z).health[(*z).total]=0;
}
int main()
{
x.attack[0]=0;x.health[0]=30;//定义0为英雄的位置
y.attack[0]=0;y.health[0]=30;
x.total=0;
x.total=0;
for(int i=1;i<=7;i++)
{
x.attack[i]=0;y.attack[i]=0;
x.health[i]=0;y.health[i]=0;
}
int n,index;
int flag=0;

cin>>n;
while(n--&&x.health[0]>0&&y.health[0]>0)
{

string ope;
cin>>ope;
if(ope=="end")
 {
    if(flag==0)
    flag=1;
    else flag=0;
    continue;
}
if(ope=="summon")
{
    cin>>index;
    if(flag==0&&index<=7&&index>=1&&x.total<=7)
     {

        if(x.health[index]>0)
       {

          moveright(&x,index);
       }

          cin>>x.attack[index]>>x.health[index];
       x.total++;
     }
     else if(flag==1&&index<=7&&index>=1&&y.total<=7)
     {

        if(y.health[index]>0)
       {
          moveright(&y,index);
       }
          cin>>y.attack[index]>>y.health[index];
        y.total++;
     }
}

if(ope=="attack")
{
    int a,b;
    cin>>a>>b;
    if(flag==0&&a>=1&&a<=7&&b>=0&&b<=7)
    {
        x.health[a]=x.health[a]-y.attack[b];
        y.health[b]=y.health[b]-x.attack[a];
        if(x.health[0]<=0)
        break;
        if(y.health[0]<=0)
        break;

        if(x.health[a]<=0)
        {
            moveleft(&x,a);x.total--;
        }
        if(y.health[b]<=0)
       {
            moveleft(&y,b);y.total--;
         }
    } 
    else    if(flag==1&&a>=1&&a<=7&&b>=0&&b<=7)
    {
        y.health[a]=y.health[a]-x.attack[b];
        x.health[b]=x.health[b]-y.attack[a];
        if(x.health[0]<=0)
        break;
        if(y.health[0]<=0)
        break;
        if(y.health[a]<=0)
         {
         moveleft(&y,a);y.total--;
         }
        if(x.health[b]<=0)
         {
         moveleft(&x,b);x.total--;
         }
    } 

}

}

if(x.health[0]!=0&&y.health[0]==0)
cout<<"1"<<endl;
else if(x.health[0]==0&&y.health[0]!=0)
cout<<"-1"<<endl;
else cout<<"0"<<endl;

cout<<x.health[0]<<endl;
cout<<x.total<<" ";
for(int i=1;i<=x.total;i++)
cout<<x.health[i]<<" ";
cout<<endl;

cout<<y.health[0]<<endl;
cout<<y.total<<" ";
for(int i=1;i<=y.total;i++)
cout<<y.health[i]<<" ";

return 0;
}

http://blog.csdn.net/wwwa1231/article/details/53407414