【1141】PAT Ranking of Institutions (25分)【排序 map】

举报
野猪佩奇996 发表于 2022/01/23 23:57:59 2022/01/23
【摘要】 #include<iostream>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#include<algorithm> #include<map>#inclu...

  
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<math.h>
  5. #include<string.h>
  6. #include<algorithm>
  7. #include<map>
  8. #include<vector>
  9. #include<queue>
  10. #include<unordered_map>
  11. #include<string>
  12. #include<cctype>
  13. using namespace std;
  14. //用两个map标记学校和(加权总分,参赛人数),保存在结构体中进行排序后输出
  15. struct node{
  16. string school;
  17. int tws,ns;//加权总分 参赛人数
  18. };
  19. //cmp对结构体进行排序
  20. bool cmp(node a,node b){
  21. if(a.tws !=b.tws)
  22. return a.tws>b.tws;
  23. else if(a.ns !=b.ns)
  24. return a.ns<b.ns;
  25. else
  26. return a.school < b.school;
  27. }
  28. int main(){
  29. int n;
  30. scanf("%d",&n);//n个学生
  31. unordered_map<string,int>cnt;
  32. //cnt存储某学校名称对应的参赛人数
  33. unordered_map<string,double>sum;
  34. //sum计算某学校名称对应的总加权人数
  35. for(int i=0;i<n;i++){
  36. string id,school;
  37. cin>>id;//学生编号
  38. double score;
  39. scanf("%lf",&score);//学生分数
  40. cin>>school;//存入学校字符串
  41. //将学校字符串大写转小写
  42. for(int j=0;j<school.length();j++)
  43. school[j]=tolower(school[j]);
  44. if(id[0]=='B')
  45. score=score/1.5;
  46. else if(id[0]=='T')
  47. score=score*1.5;
  48. sum[school]+=score;
  49. cnt[school]++;
  50. }
  51. vector<node>ans;
  52. for(auto it=cnt.begin();it!=cnt.end();it++){
  53. struct node a={it->first,(int)sum[it->first],cnt[it->first]};
  54. //学校字符串 加权总分 学校参赛人数
  55. //注意加权总分要取整,否则会有3个错误点
  56. ans.push_back(a);
  57. }
  58. sort(ans.begin(),ans.end(),cmp);
  59. int rank=0,pres=-1;
  60. //pres表示前一个学校的加权总分
  61. //如果pres和当前学校的加权总分不同,说明rank等于数组下标+1,否则rank不变
  62. printf("%d\n",(int)ans.size());
  63. for(int i=0;i<ans.size();i++){
  64. if(pres!=ans[i].tws) rank=i+1;
  65. pres=ans[i].tws;
  66. printf("%d ",rank);
  67. cout<<ans[i].school;
  68. printf(" %d %d\n",ans[i].tws,ans[i].ns);//加权总分,参赛人数
  69. }
  70. system("pause");
  71. return 0;
  72. }

 

文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。

原文链接:andyguo.blog.csdn.net/article/details/104049285

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。