#include<stdio.h> #include<string.h> int maxsize=1005; typedef struct{ char name[333]; int age; int grade; }StudentInfo; void qsort(StudentInfo st[], int l, int r){ StudentInfo temp; int i=l,j=r; if(l<r){ temp=st[l]; while(i!=j){ while(i<j){ if(st[j].grade>temp.grade) --j; else if((st[j].grade==temp.grade)&&(strcmp(st[j].name, temp.name)>0)) --j; else if((st[j].grade==temp.grade)&&(strcmp(st[j].name, temp.name)==0)&&(st[j].age>=temp.age)) --j; else break; } if(i<j){ st[i]=st[j]; i++; } while(i<j){ if(st[i].grade<temp.grade) ++i; else if((st[i].grade==temp.grade)&&(strcmp(st[i].name, temp.name)<0)) ++i; else if((st[i].grade==temp.grade)&&(strcmp(st[i].name, temp.name)==0)&&(st[i].age<=temp.age)) ++i; else break; } if(i<j){ st[j]=st[i]; j--; } } st[i]=temp; qsort(st, l, i-1); qsort(st,i+1, r); } } int main(){ int i,n; StudentInfo si[maxsize]; while(scanf("%d", &n)==1){ for(i=0; i<n; i++){ scanf("%s%d%d",si[i].name, &si[i].age, &si[i].grade); } qsort(si, 0, n-1); for(i=0; i<n; i++){ printf("%s %d %d\n",si[i].name, si[i].age, si[i].grade); } } return 0; } /************************************************************** Problem: 2198 User: admin Language: C Result: Accepted Time:13 ms Memory:1356 kb ****************************************************************/