#include <stdlib.h>
#include <string.h>
typedef struct
{
char score[101];
char name[201];
}school;
int cmp(school a,school b)
{
if (strlen(a.score)>strlen(b.score)) return 1;
else if (strlen(a.score)<strlen(b.score)) return 0;
if (strcmp(a.score,b.score)==1) return 1;
else if (strcmp(a.score,b.score)==-1) return 0;
if (strcmp(a.name,b.name)==-1) return 1;
return 0;
}
void swap(school *a,school *b)
{
school tmp;
strcpy(tmp.score,a->score);
strcpy(tmp.name,a->name);
strcpy(a->score,b->score);
strcpy(a->name,b->name);
strcpy(b->score,tmp.score);
strcpy(b->name,tmp.name);
}
void sqsort(school d[],int begin,int end)
{
int i,j,tmp;
school piv;
if (begin>=end) return;
i=begin;j=end;
tmp=begin+rand()*(end-begin)/RAND_MAX;
strcpy(piv.score,d[tmp].score);
strcpy(piv.name,d[tmp].name);
swap(&d[begin],&d[tmp]);
while (i<j)
{
while (i<j&&cmp(d[j],piv)) j--;
strcpy(d[i].score,d[j].score);
strcpy(d[i].name,d[j].name);
while (i<j&&cmp(piv,d[i])) i++;
strcpy(d[j].score,d[i].score);
strcpy(d[j].name,d[i].name);
}
strcpy(d[i].name,piv.name);
strcpy(d[i].score,piv.score);
sqsort(d,begin,i-1);
sqsort(d,i+1,end);
}
int main()
{
int n,i,j,k;
school data[5000];
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%s%s",data[i].name,data[i].score);
if (data[i].score[0]==’0’)
{
for (j=0;data[i].score[j]==’0’;j++);
for (k=0;k<=strlen(data[i].score)-j;k++) data[i].score[k]=data[i].score[k+j];
data[i].score[k]=’\0’;
}
}
sqsort(data,0,n-1);
for (i=n-1;i>=0;i--)
{
printf("%s",data[i].name);
if (i) printf("\n");
}
return 0;
}
第10个数据太阴险了,要不是有人提醒,我可能永远都是90分。