1012. The Best Rank (25)
2015-11-04 12:38
387 查看
1.首先是平均分A,再到C,M,E
2.通过重写不同的cmp函数,使用algorithm.h里面的sort进行排序
3.如果分数相同,则排名相同,例如90,80,80,80,70,则排名为1,2,2,2,5
2.通过重写不同的cmp函数,使用algorithm.h里面的sort进行排序
3.如果分数相同,则排名相同,例如90,80,80,80,70,则排名为1,2,2,2,5
//#include<string> //#include <iomanip> #include<vector> #include <algorithm> //#include<stack> #include<set> #include<queue> #include<map> //#include<unordered_set> //#include<unordered_map> //#include <sstream> //#include "func.h" //#include <list> #include<stdio.h> #include<iostream> #include<string> #include<memory.h> #include<limits.h> using namespace std; struct student{ int c, m, e, rank; int a; string course, ID; int tmpRank;//用来存在不同状态下的排名,主要是更新并列排名 student() :c(0), m(0), e(0), a(0), rank(9999999), tmpRank(9999999), course(""), ID(""){}; }; bool cmpC(const student&a, const student&b) { if (a.c > b.c) return true; else return false; } bool cmpM(const student&a, const student&b) { if (a.m > b.m) return true; else return false; } bool cmpE(const student&a, const student&b) { if (a.e > b.e) return true; else return false; } bool cmpA(const student&a, const student&b) { if (a.a > b.a) return true; else return false; } int main(void) { int n, m; cin >> n >> m; vector<student> stu(n); for (int i = 0; i < n; i++) { cin >> stu[i].ID >> stu[i].c >> stu[i].m >> stu[i].e; stu[i].a = (stu[i].c + stu[i].m + stu[i].e); stu[i].course = ""; stu[i].rank = 9999999; } //比较平均分 sort(stu.begin(), stu.end(), cmpA); for (int i = 0; i < n; i++) { if (i == 0) stu[i].tmpRank = 0; else if (stu[i].a == stu[i - 1].a) stu[i].tmpRank = stu[i - 1].tmpRank;//如果分数相同,则排名相同 else stu[i].tmpRank = i;//分数不同,则是i,例如 100 90 90 80 ,排名应该为1,2,2,4 if (stu[i].rank > stu[i].tmpRank + 1) { stu[i].rank = stu[i].tmpRank + 1; stu[i].course = "A"; } } //比较C语言 sort(stu.begin(), stu.end(), cmpC); for (int i = 0; i < n; i++) { if (i == 0) stu[i].tmpRank = 0; else if (stu[i].c == stu[i - 1].c) stu[i].tmpRank = stu[i - 1].tmpRank;//如果分数相同,则排名相同 else stu[i].tmpRank = i;//分数不同,则是i,例如 100 90 90 80 ,排名应该为1,2,2,4 if (stu[i].rank > stu[i].tmpRank + 1) { stu[i].rank = stu[i].tmpRank + 1; stu[i].course = "C"; } } //比较Mathematics sort(stu.begin(), stu.end(), cmpM); for (int i = 0; i < n; i++) { if (i == 0) stu[i].tmpRank = 0; else if (stu[i].m == stu[i - 1].m) stu[i].tmpRank = stu[i - 1].tmpRank;//如果分数相同,则排名相同 else stu[i].tmpRank = i;//分数不同,则是i,例如 100 90 90 80 ,排名应该为1,2,2,4 if (stu[i].rank > stu[i].tmpRank + 1) { stu[i].rank = stu[i].tmpRank + 1; stu[i].course = "M"; } } //比较English sort(stu.begin(), stu.end(), cmpE); for (int i = 0; i < n; i++) { if (i == 0) stu[i].tmpRank = 0; else if (stu[i].e == stu[i - 1].e) stu[i].tmpRank = stu[i - 1].tmpRank;//如果分数相同,则排名相同 else stu[i].tmpRank = i;//分数不同,则是i,例如 100 90 90 80 ,排名应该为1,2,2,4 if (stu[i].rank > stu[i].tmpRank + 1) { stu[i].rank = stu[i].tmpRank + 1; stu[i].course = "E"; } } map<string, student> ma; for (int i = 0; i < n; i++) { ma[stu[i].ID] = stu[i]; } for (int i = 0; i < m; i++) { string tmp; cin >> tmp; if (ma.find(tmp) == ma.end()) cout << "N/A" << endl; else cout << ma[tmp].rank << " " << ma[tmp].course << endl; } return 0; }
相关文章推荐
- WEB前端学习 Day4(定位)
- .NET, ASP.NET, CLR版本问题总结
- C++第十三课 结构体
- Spring整合JMS
- nginx篇四
- CentOS6 Linux系统添加永久静态路由的方法
- 1011. World Cup Betting (20)
- MYSQL-用户权限的验证过程(转)
- 1011. World Cup Betting (20)
- [LeetCode] Serialize and Deserialize Binary Tree
- Error:No such property: nexusUsername for class
- Metal Shader Compiler Options
- Mac--键盘输入的技巧
- don't touch your phone in any unfamiliar way(转)
- Codeforces Round #192 (Div. 1) C. Graph Reconstruction 随机化
- jquery滚动到指定元素,模仿锚点
- Android硬件抽象层(HAL)概要介绍和学习计划
- brew-cask 之本地更新 node
- jQuery过滤器
- ubuntu远程桌面连接windows系统