1085 PAT单位排行 (25 分)
【我的代码】
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("%d\n1 ",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}
【总结】
if(mp.count(school)==0)
这个count可以统计出现与否,而find返回的是出现的位置。