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}
【总结】
- 首先建立一个 School 结构体,包含了学校名字、学生人数以及学校得分。(由输出的形式来决定)
- 据题意,考虑到需要排序,可以根据结构体来排序。
- 接着到主函数。对每个数据的处理,首先处理学校名字,全部转成小写,然后使用一个map来定义对应学校与序列号的对应关系。这里有一个小技巧,来判断该学校名是否已经存在。
if(mp.count(school)==0)
这个count可以统计出现与否,而find返回的是出现的位置。