蓝桥杯算法提高练习 ID: 280 班级排名
Description
达达在陶陶的影响下,也对学习慢慢的产生了兴趣。
他在每次考试之后,都会追着老师问,自己在班级的总名次是多少。考试一多,老师也不耐烦了,于是他给了达达所有人的成绩,让他自己去算出自己的排名。
可人太多了,达达也无法立即算出来,于是他想让你帮帮他。
Input
第一行为一个整数N,代表班级的学生总数。
接下来N行,每行一个字符串,代表一个学生的姓名,第一行总是DaDa。
接下来一行一个整数M,代表一共有M次考试。
每次考试有N行,每行有以一个空格分隔的一个正整数S和一个字符串P,代表名字为P的学生在这次考试中得了S分。
Output
一共M行,每行一个整数,代表达达在班级里的排名,排名是这一次考试过后的所有考试总分排名,如果达达和别人并列,达达总是排在前面。
Sample Input 1
3 DaDa A B 2 49 DaDa 49 A 48 B 80 A 85 B 83 DaDa
Sample Output 1
1
2
1 #include<iostream> 2 #include<algorithm> 3 #define name first 4 #define score second 5 using namespace std; 6 7 const int N = 110; 8 typedef pair<string , int> PII; 9 PII s[N], backup[N]; 10 11 int cmp(PII a, PII b) 12 { 13 if(a.score != b.score) return a.score > b.score; 14 else return a.name == "DaDa"; 15 } 16 int main() 17 { 18 int n, m; 19 cin >> n; 20 21 for(int i = 0; i < n; i ++) cin >> s[i].name; 22 sort(s, s+n, less<>()); 23 cin >> m; 24 25 while(m --) 26 { 27 for(int i = 0; i < n; i ++) cin >> backup[i].score >> backup[i].name; 28 sort(backup, backup+n, less<>()); 29 30 for(int i = 0; i < n; i ++){ 31 s[i].score += backup[i].score; 32 backup[i].score = s[i].score; 33 } 34 sort(backup, backup+n, cmp); 35 36 for(int i = 0; i < n; i ++) 37 if(backup[i].name == "DaDa") 38 { 39 cout << i+1 << endl; 40 break; 41 } 42 } 43 44 return 0; 45 }
本文来自博客园,作者:泥烟,CSDN同名, 转载请注明原文链接:https://www.cnblogs.com/Knight02/p/16003894.html