题目:
每次 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;
- }
-
相关阅读:
万字长文:我眼中区块链各赛道正在演进的技术趋势
【学术写作规范】论文写作注意事项
计算机视觉系列-轻松掌握 MMDetection 中 全景分割算法 MaskFormer(三)
第一章 教育基础(01 教育与教育学的产生与发展)
MacOS安装redis
电脑屏幕录制:录制高清视频画面以及声音
C. Robot in a Hallway(递推/前缀和/动态规划)
c++入门(二)
【PAT(甲级)】1068 Find More Coins
提高Producer的发送速度
-
原文地址:https://blog.csdn.net/m0_74058555/article/details/134060493