1085 PAT单位排行 (25 分)

2019-11-18 23:07:40 浏览数 (1)

1085 PAT单位排行 (25 分)

【我的代码】

代码语言:javascript复制
 1#include<iostream>
 2#include<algorithm>
 3#include<map>
 4using namespace std;
 5struct sch{
 6    string name;
 7    float score=0;
 8    int stu=0;
 9}arr[100005];
10bool cmp(sch A,sch B){
11    if((int)A.score!=(int)B.score) return (int)A.score>(int)B.score;
12    else if(A.stu!=B.stu) return A.stu<B.stu;  
13    else return A.name<B.name;      
14}
15int main(){
16    int N;scanf("%d",&N);    
17    int num=0;//学校数
18    map<string,int> mp;                
19    for(int i=0;i<N;i  ){
20        string id,school;float score;
21        cin>>id;scanf("%f",&score);cin>>school;
22        for(int j=0;j<school.length();j  ){   
23            school[j]=tolower(school[j]);
24        }
25        if(id[0]=='B') score/=1.5;          
26        if(id[0]=='T') score*=1.5;
27        if(mp.count(school)==0){          
28            mp[school]=num  ;
29            arr[num-1].name=school;
30        }
31        arr[mp[school]].score =score;    
32        arr[mp[school]].stu  ;        
33    }
34    sort(arr,arr num,cmp);             
35    int mingci=1;
36    printf("%dn1 ",num);            
37    cout<<arr[0].name;
38    printf(" %d %d",(int)arr[0].score,arr[0].stu);
39    for(int i=1;i<num;i  ){                    
40        if((int)arr[i].score!=(int)arr[i-1].score)  
41            mingci=i 1;            
42        printf("n%d ",mingci);            
43        cout<<arr[i].name;
44        printf(" %d %d",(int)arr[i].score,arr[i].stu);
45    }
46    return 0;
47}

【总结】

  1. 首先建立一个 School 结构体,包含了学校名字、学生人数以及学校得分。(由输出的形式来决定)
  2. 据题意,考虑到需要排序,可以根据结构体来排序。
  3. 接着到主函数。对每个数据的处理,首先处理学校名字,全部转成小写,然后使用一个map来定义对应学校与序列号的对应关系。这里有一个小技巧,来判断该学校名是否已经存在。
代码语言:javascript复制
 if(mp.count(school)==0)

这个count可以统计出现与否,而find返回的是出现的位置。

0 人点赞