PAT_A1025 PAT Ranking C语言满分答案
借助了C++的sort函数
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct St
{
char id[15];
int score;
int l_number;
int l_rank;
}arr_st[30010];
int cmp(St a ,St b)
{
if(a.score!=b.score)return a.score>b.score;
else return strcmp(a.id,b.id)<0;
}
int main()
{
int N,K,num=0,i,j,r=1;//num为全部考生总数,r为最后总排序时的当前排名
scanf("%d",&N);
for(i=1;i<=N;i++)//录入及考场内排序
{
scanf("%d",&K);
for(j=0;j<K;j++)
{
scanf("%s %d",arr_st[num].id,&arr_st[num].score);
arr_st[num].l_number=i;
num++;
}
sort(arr_st+num-K,arr_st+num,cmp);
arr_st[num-K].l_rank = 1;
for(j=num-K+1;j<num;j++)//对该考场剩下的考生排序
{
if(arr_st[j].score == arr_st[j-1].score)
arr_st[j].l_rank = arr_st[j-1].l_rank;
else
arr_st[j].l_rank = j+1-(num-K);
}
}
//总排序
printf("%d\n",num);
sort(arr_st,arr_st+num,cmp);
printf("%s %d %d %d\n",arr_st[0].id,r,arr_st[0].l_number,arr_st[0].l_rank);//因为要和前一个人比较,第一个特殊不用比较
for(i=1;i<num;i++)
{
if(arr_st[i].score!=arr_st[i-1].score)
r=i+1;
printf("%s %d %d %d\n",arr_st[i].id,r,arr_st[i].l_number,arr_st[i].l_rank);
}
return 0;
}