题目:
每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜。本题就请你实现这个功能。
输入第一行给出一个正整数 N(≤105),即考生人数。随后 N 行,每行按下列格式给出一个考生的信息:
准考证号 得分 学校
其中准考证号是由 6 个字符组成的字符串,其首字母表示考试的级别:B代表乙级,A代表甲级,T代表顶级;得分是 [0, 100] 区间内的整数;学校是由不超过 6 个英文字母组成的单位码(大小写无关)。注意:题目保证每个考生的准考证号是不同的。
首先在一行中输出单位个数。随后按以下格式非降序输出单位的排行榜:
排名 学校 加权总分 考生人数
其中排名是该单位的排名(从 1 开始);学校是全部按小写字母输出的单位码;加权总分定义为乙级总分/1.5 + 甲级总分 + 顶级总分*1.5的整数部分;考生人数是该属于单位的考生的总人数。
学校首先按加权总分排行。如有并列,则应对应相同的排名,并按考生人数升序输出。如果仍然并列,则按单位码的字典序输出。
- 10
- A57908 85 Au
- B57908 54 LanX
- A37487 60 au
- T28374 67 CMU
- T32486 24 hypu
- A66734 92 cmu
- B76378 71 AU
- A47780 45 lanx
- A72809 100 pku
- A03274 45 hypu
- 5
- 1 cmu 192 2
- 1 au 192 3
- 3 pku 100 1
- 4 hypu 81 2
- 4 lanx 81 2
说明:emmm,很遗憾,这道题我没有拿满分,我只得到了22分(满分25),不知道怎么得到最后的那三分了。
代码:
- #include
- using namespace std;
-
- struct students{
- string school;
- float zongfen=0.0;
- int cnt;
- };
-
- bool cmp(students a,students b){
- if(a.zongfen!=b.zongfen)return a.zongfen>b.zongfen;
- else if(a.cnt!=b.cnt)return a.cnt
- else return a.school
- }
-
- int main(){
- int n;
- cin>>n;
- map
mp; -
- students stu;
- for(int i=0;i
- string testname,schoolname;
- float score;
- cin>>testname>>score>>schoolname;
-
- string level=testname.substr(0,1);
- /*
- string lowerschoolname;
- for(char ch:schoolname){
- lowerschoolname+=tolower(ch);
- }
- */
- transform(schoolname.begin(),schoolname.end(),schoolname.begin(),::tolower);
- if(mp.count(schoolname)>0){
- mp[schoolname].cnt++;
- if(level=="A")mp[schoolname].zongfen+=score;
- else if(level=="B")mp[schoolname].zongfen+=score/1.5;
- else mp[schoolname].zongfen+=score*1.5;
- }
- else{
- students stu;
- stu.school=schoolname;
- stu.cnt=1;
- if(level=="A")stu.zongfen+=score;
- else if(level=="B")stu.zongfen+=score/1.5;
- else stu.zongfen+=score*1.5;
- mp[schoolname]=stu;
- }
- }
- vector
vec; - for(auto it=mp.begin();it!=mp.end();it++){
- vec.push_back(it->second);
- }
- sort(vec.begin(),vec.end(),cmp);
- cout<
size()< - int rank=1;
- for(int i=0;i
size();i++){ - vec[i].zongfen=floor(vec[i].zongfen);
- if(i>0&&vec[i].zongfen!=vec[i-1].zongfen){
- rank=i+1;
- }
- cout<
" "<" "<" "< - }
- return 0;
- }
-
相关阅读:
[linux] 由创建用户开始
云计算的部署方式(公有云、私有云、混合云、社区云)
腾讯云国际Linux 系统如何配置防火墙软件 iptables?
软件工程国考总结——选择题
七、【Vue-Router】router-link标签的replace属性
Shell编程条件语句(if、case)
【LeetCode刷题-滑动窗口】--340.至多包含K个不同字符的最长子串
开发常用语
Linux常用命令练习
springboot+vue+elementui买菜优选系统java
-
原文地址:https://blog.csdn.net/m0_74058555/article/details/134060493