编程能力测试(PAT)由浙江大学计算机科学与技术学院组织。
每次测试都会在多个地区同时进行,测试完成后,将会对成绩进行统计与合并,生成总排名。
你的任务就是编写一个程序,将各地区人员的成绩合并汇总,生成最终排名。
输入格式
第一行包含整数 NN,表示测试将会在 NN 个地区同时进行。
接下来是 NN 个地区的成绩列表。
每个地区的成绩列表,第一行包含整数 KK,表示该地区的测试人数。
接下来 KK 行,每行包含一个学生的考号(1313 位数字)以及该学生的成绩。
输出格式
第一行输出总考生人数。
然后用以下格式输出最终成绩排名列表:
registration_number final_rank location_number local_rank
也就是输出考号,最终排名,地区编号,地区排名。
地区编号按输入顺序依次为 1∼N1∼N。
按照最终排名从前到后的顺序输出每个人的信息。
具有相同分数的人的排名也要相同,相同分数的人,考号较小的先输出。
数据范围
1≤N≤1001≤N≤100,
1≤K≤3001≤K≤300,
分数在 [0,100][0,100] 范围内。
输入样例:
2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85
输出样例:
9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4
#include <bits/stdc++.h>
using namespace std;
const int N=110;
const int K=310;
struct student
{
string id;
int grade, num, final_rank , local_rank;
bool operator <(const student &t)
{
if(grade!=t.grade)
return grade>t.grade;
return id<t.id;
}
};
// bool cmp(student a,student b)
// {
// if(a.grade!=b.grade)
// return a.grade>b.grade;
// return a.id<b.id;
// }
vector<student>grades[N];
vector<student>all;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
for(int i=0;i<n;i++)
// while(n--)
{
int k;
cin>>k;
for(int j=0;j<k;j++)
{
string s;int score;
cin>>s>>score;
// grades[i][j].id=s;
// grades[i][j].grade=score;
// grades[i][j].num=i+1;
grades[i].push_back({s,score,i+1,0,0});
}
sort(grades[i].begin(),grades[i].end());
for(int j=0;j<k;j++)
{
if(!j||grades[i][j].grade!=grades[i][j-1].grade)
grades[i][j].local_rank=j+1;
else grades[i][j].local_rank=grades[i][j-1].local_rank;
all.push_back(grades[i][j]);
}
// for(auto &it:grades[i])
// {
// cout<<it.local_rank<<endl;
// }
}
sort(all.begin(),all.end());
for(int j=0;j<all.size();j++)
{
if(!j||all[j].grade!=all[j-1].grade)
all[j].final_rank=j+1;
else all[j].final_rank=all[j-1].final_rank;
}
cout<<all.size()<<endl;
for(auto &it:all)
{
cout<<it.id<<" "<<it.final_rank<<" "<<it.num<<" "<<it.local_rank<<endl;
}
}
标签:输出,PAT,int,rank,grade,grades,排名,100
From: https://blog.csdn.net/black_blank/article/details/142236071