A1025(PAT)
题目描述
PAT Ranking
代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct student{
char id[14];
int score;
int team_number;
int local_rank;
int all_rank;
}stu[1000000];
bool cmp(student a,student b)
{
if(a.score!=b.score)
{
return a.score>b.score;
}
else
{
return strcmp(a.id,b.id)<0;
}
}
int main()
{
int total=0;
int num=0;
scanf("%d",&num);
for(int i=1;i<=num;i++)
{
int n=0;
scanf("%d",&n);
for(int j=1;j<=n;j++)
{
scanf("%s %d",stu[total].id,&stu[total].score);
stu[total].team_number=i;
total++;
}
sort(stu+total-n,stu+total,cmp);
stu[total-n].local_rank=1;
for(int j=total-n+1;j<total;j++)
{
if(stu[j].score==stu[j-1].score)
{
stu[j].local_rank=stu[j-1].local_rank;
}
else
{
stu[j].local_rank=j-(total-n+1)+1+1;
}
}
}
sort(stu,stu+total-1,cmp);
printf("%d\n",total);
for(int i=0;i<total;i++)
{
if(i==0)
{
stu[i].all_rank=1;
}
else if(stu[i].score==stu[i-1].score)
{
stu[i].all_rank=stu[i-1].all_rank;
}
else
{
stu[i].all_rank=i+1;
}
printf("%s %d %d %d\n",stu[i].id,stu[i].all_rank,stu[i].team_number,stu[i].local_rank);
}
return 0;
}
思路
数据输入后先在组内排序,再对整体进行排序。构造student结构体对输入信息进行存储。
收获
- 注意c++标准库中 sort(start, end, 排序方法) 函数的的用法[1]。
- 利用cmp()函数的返回,巧妙实现先排序成绩,成绩相同时再排序编号。
|