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

简介: 【1141】PAT Ranking of Institutions (25分)【排序 map】【1141】PAT Ranking of Institutions (25分)【排序 map】
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
#include<unordered_map>
#include<string>
#include<cctype>
using namespace std;
//用两个map标记学校和(加权总分,参赛人数),保存在结构体中进行排序后输出
struct node{
  string school;
  int tws,ns;//加权总分 参赛人数
};
//cmp对结构体进行排序
bool cmp(node a,node b){
  if(a.tws !=b.tws)
    return a.tws>b.tws;
  else if(a.ns !=b.ns)
    return a.ns<b.ns;
  else 
    return a.school < b.school;
}
int main(){
  int n;
  scanf("%d",&n);//n个学生
  unordered_map<string,int>cnt;
  //cnt存储某学校名称对应的参赛人数
  unordered_map<string,double>sum;
  //sum计算某学校名称对应的总加权人数
  for(int i=0;i<n;i++){
    string id,school;
    cin>>id;//学生编号
    double score;
    scanf("%lf",&score);//学生分数
    cin>>school;//存入学校字符串
    //将学校字符串大写转小写
    for(int j=0;j<school.length();j++)
      school[j]=tolower(school[j]);
    if(id[0]=='B')
      score=score/1.5;
    else if(id[0]=='T')
      score=score*1.5;
    sum[school]+=score;
    cnt[school]++;
  }
  vector<node>ans;
  for(auto it=cnt.begin();it!=cnt.end();it++){
    struct node a={it->first,(int)sum[it->first],cnt[it->first]};
    //学校字符串 加权总分 学校参赛人数
    //注意加权总分要取整,否则会有3个错误点
    ans.push_back(a);
  }
  sort(ans.begin(),ans.end(),cmp);
  int rank=0,pres=-1;
  //pres表示前一个学校的加权总分
  //如果pres和当前学校的加权总分不同,说明rank等于数组下标+1,否则rank不变
  printf("%d\n",(int)ans.size());
  for(int i=0;i<ans.size();i++){
    if(pres!=ans[i].tws)  rank=i+1;
    pres=ans[i].tws;
    printf("%d ",rank);
    cout<<ans[i].school;
    printf(" %d %d\n",ans[i].tws,ans[i].ns);//加权总分,参赛人数
  }
  system("pause");
  return 0;
}
相关文章
|
6月前
|
Go
go map进行有序的排序
go map进行有序的排序
52 0
|
1月前
|
前端开发 JavaScript 索引
JavaScript 数组常用高阶函数总结,包括插入,删除,更新,反转,排序等,如map、splice等
JavaScript数组的常用高阶函数,包括遍历、插入、删除、更新、反转和排序等操作,如map、splice、push、pop、reverse等。
18 0
|
6月前
|
算法 测试技术 C#
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II
|
6月前
|
存储 JavaScript 前端开发
JavaScript实现Map并排序
JavaScript实现Map并排序
124 0
|
6月前
|
C++
c++ set、map的四种自定义排序方法
c++ set、map的四种自定义排序方法
317 0
|
6月前
|
算法 测试技术 C++
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II
【map】【单调栈 】LeetCode768: 最多能完成排序的块 II
|
存储 自然语言处理 数据可视化
按Value对Map进行排序,技术大佬们都在用这个方法
在Java中,Map的排序一般会根据Key或者Value来进行。按照Value对Map进行排序,通常会用在以下几种场景。
|
存储 C++ 容器
<C++>map 容器快速上手|自定义数据类型排序的避坑理解(下)
<C++>map 容器快速上手|自定义数据类型排序的避坑理解
308 0
<C++>map 容器快速上手|自定义数据类型排序的避坑理解(下)
|
Go
go map进行有序的排序
go map进行有序的排序
106 0
|
前端开发 JavaScript
js对map排序,后端返回有序的LinkedHashMap类型时前端获取后顺序依旧从小到大的解决方法
在后端进行时间倒序查询后,返回map类型的数据,在postman获取是这样:
537 0