1025. PAT Ranking (25)

来源:互联网 发布:唐七公子知乎 编辑:程序博客网 时间:2024/06/16 19:05

1. 原题: https://www.patest.cn/contests/pat-a-practise/1025

2. 思路:

题意:
对考生成绩进行局部和整体排名。
思路:
每个考生结构体进行排序就可以了。
排序函数可以单独写,为了简便,写在结构体里面(重载)。

3. 源码(已AC):

#include<iostream>#include<vector>#include<algorithm> //使用sort()#include<string>using namespace std;struct stu//学生的结构体{bool operator<(const stu &b) const//重载比较运算符{if(score != b.score)return score > b.score;elsereturn id < b.id;}string id;//存储idint score;int location;int local_rank;int total_rank;//存储总排名};int main(){//freopen("in.txt", "r", stdin);int N, K;vector<stu> person;int amount = 0;//总人数cin >> N;vector<stu>::iterator it;//vector的迭代器for(int i = 1; i <= N; i++){cin >> K;amount += K;for(int j = 0; j < K; j++)//读入数据{stu student;cin >> student.id >> student.score;student.location = i;person.push_back(student);}it = person.end() - K;sort(it, person.end());//排序int cur_rank = 1;int cnt = 0;int last_score = -1;for(it; it != person.end(); it++)//局部排名{cnt++;if(it->score != last_score){it->local_rank = cnt;cur_rank = cnt;last_score = it->score;}else{it->local_rank = cur_rank;}}}sort(person.begin(), person.end());int cur_rank = 1;int cnt = 0;int last_score = -1;for(it = person.begin(); it != person.end(); it++)//整体排名{cnt++;if(it->score != last_score){it->total_rank = cnt;cur_rank = cnt;last_score = it->score;}else{it->total_rank = cur_rank;}}cout << amount << endl;//输出结果for(it = person.begin(); it != person.end(); it++){cout << it->id << " "<< it->total_rank << " "<< it->location << " "<< it->local_rank << endl;}return 0;}


0 0