【PAT甲级】 A1025 PAT Ranking

写的时候最后一个测试点一直没过去,后来在网上冲浪了一会才发现竟然有个极其sb的坑点- -
坑点:如果你的ID用long long存放,那么需要在输出时补前导0凑齐13位!!下次再也不用long long存ID了:)


```cpp
#include <bits/stdc++.h>
using namespace std;
struct Stu
{
	long long ID;
	int score;
	int local_number;
	int local_rank;
	int global_rank;
};
Stu testee[110][310];
Stu test[30010];
int num[110];
bool cmp(Stu a,Stu b)
{
	if(a.score!=b.score) return a.score>b.score;
	else return a.ID<b.ID;
}
int main(void)
{
	int N,cnt=0,sum=0;
	scanf("%d",&N);
	for(int i=0;i<N;i++)
	{
		scanf("%d",&num[i]);
		for(int j=0;j<num[i];j++)
		{
			scanf("%lld%d",&testee[i][j].ID,&testee[i][j].score);
			testee[i][j].local_number=i+1;
		}
		sort(testee[i],testee[i]+num[i],cmp);
		testee[i][0].local_rank=1;
		for(int j=1;j<num[i];j++)
		{
			if(testee[i][j].score == testee[i][j-1].score) testee[i][j].local_rank = testee[i][j-1].local_rank;
			else testee[i][j].local_rank = j+1;		
		}
	}
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<num[i];j++)
		{
			test[cnt]=testee[i][j];
			cnt++;
		}
	}
	sort(test,test+cnt,cmp);
	for(int i=0;i<N;i++)
		sum+=num[i];
	printf("%d\n",sum);
	test[0].global_rank=1;
	printf("%013lld %d %d %d\n",test[0].ID,test[0].global_rank,test[0].local_number,test[0].local_rank);
	for(int i=1;i<cnt;i++)
	{
		if(test[i].score == test[i-1].score) test[i].global_rank = test[i-1].global_rank;
		else test[i].global_rank = i+1;
		printf("%013lld %d %d %d\n",test[i].ID,test[i].global_rank,test[i].local_number,test[i].local_rank);	
	}
} 

发布了2 篇原创文章 · 获赞 1 · 访问量 92

猜你喜欢

转载自blog.csdn.net/weixin_42278063/article/details/104504584