1025 PAT Ranking (25分)

 

 

 这题还算简单的。也一次提交就过了。只是用时和内存比不上柳神的代码...不知道为什么。可能string和cin,cout比较耗时吧...

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<string>
 4 #include<vector>
 5 #include<algorithm>
 6 using namespace std;
 7 struct node{
 8     string id;
 9     int score,location,L_rank,F_rank;
10     node(){
11     score=location=0;
12     L_rank=F_rank=1;
13     }
14 };
15 bool cmp(node x,node y){
16     if(x.score!=y.score) 
17       return x.score>y.score;//分数高的在前面 
18     else
19       return x.id<y.id;//id小的在前面 
20 }
21 int main()
22 { 
23   int N,K;
24   cin>>N;
25   string id;
26   int score,sum=0;
27   node x;
28   vector<node> res;
29   for(int i=1;i<=N;i++){
30       cin>>K;
31       sum+=K;
32       x.location=i;
33       vector<node> Q;
34       for(int j=0;j<K;j++){
35           cin>>x.id>>x.score;
36           Q.push_back(x);
37       }
38     sort(Q.begin(),Q.end(),cmp);
39     res.push_back(Q[0]);
40     for(int i=1;i<Q.size();i++){
41         if(Q[i].score==Q[i-1].score)
42            Q[i].L_rank=Q[i-1].L_rank;
43         else
44            Q[i].L_rank=i+1;
45         res.push_back(Q[i]);
46     }
47     
48     
49   } 
50   sort(res.begin(),res.end(),cmp);
51   for(int i=1;i<res.size();i++){
52         if(res[i].score==res[i-1].score)
53            res[i].F_rank=res[i-1].F_rank;
54         else
55            res[i].F_rank=i+1;
56     }
57   cout<<sum<<endl;
58   for(int i=0;i<res.size();i++){
59       cout<<res[i].id<<" "<<res[i].F_rank<<" "<<res[i].location<<" "<<res[i].L_rank<<endl;
60       
61   }
62   return 0;
63 }

 柳神:https://www.liuchuo.net/archives/2180

posted @ 2020-03-22 16:12  wsshub  阅读(177)  评论(0)    收藏  举报