pta德才论第234测试点无法通过(段错误)

img

img


#include <stdio.h>
#include <string.h>

struct date{
char a[10];
int b,c,d;
int sum;
};
void sort(struct date *B,int n);
int main()
{
int n,s1,s2;
scanf("%d%d%d",&n,&s1,&s2);
struct date B[n],B1[n],B2[n],B3[n],B4[n];
for(int i=0;i<n;i++){
scanf("%s%d%d",B[i].a,&B[i].b,&B[i].c);
B[i].sum=B[i].b+B[i].c;
}
int a1=0,a2=0,a3=0,a4=0;
for(int i=0;i<n;i++){
if(B[i].b>=s1&&B[i].c>=s1){

    if(B[i].b>=s2&&B[i].c>=s2){
        a1++;
        B1[a1]=B[i];
    }
    else if(B[i].b>=s2&&B[i].c<s2){
        a2++;
        B2[a2]=B[i];
    }
    else if(B[i].b<s2&&B[i].c<s2&&B[i].b>=B[i].c){
        a3++;
        B3[a3]=B[i];
    }
    else{
        a4++;
        B4[a4]=B[i];
    }
}
}
sort(B1,a1);
sort(B2,a2);
sort(B3,a3);
sort(B4,a4);
printf("%d\n",a1+a2+a3+a4);
for(int i=1;i<=a1&&B1[i].b>=s1&&B1[i].c>=s1;i++){
    printf("%s %d %d\n",B1[i].a,B1[i].b,B1[i].c); 
}
for(int i=1;i<=a2;i++){
    printf("%s %d %d\n",B2[i].a,B2[i].b,B2[i].c); 
}
for(int i=1;i<=a3;i++){
    printf("%s %d %d\n",B3[i].a,B3[i].b,B3[i].c); 
}
for(int i=1;i<=a4;i++){
    printf("%s %d %d",B4[i].a,B4[i].b,B4[i].c); 
    if(i<a4){
        printf("\n");
    }
}

}

void sort(struct date *B,int n)
{
for(int i=1;i<=n-1;i++){
for(int j=i+1;j<=n;j++){
if(B[i].sum<B[j].sum){
struct date t=B[i];
B[i]=B[j];
B[j]=t;
}
else if(B[i].sum==B[j].sum){
if(B[i].b<B[j].b){
struct date t=B[i];
B[i]=B[j];
B[j]=t;
}
else if(B[i].b==B[j].b){
if(strcmp(B[i].a,B[j].a)>0){
struct date t=B[i];
B[i]=B[j];
B[j]=t;
}

            }
        }
    }
}

}