码迷,mamicode.com
首页 > 其他好文 > 详细

1095 解码PAT准考证

时间:2020-02-26 18:47:38      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:getc   begin   好题   cin   typename   scan   false   style   mes   

 麻烦的一批!!!还好题目比较耿直,按要求输出即可,超时就换unordered_map。

 新学了小玩意STL-pair,可以理解成一个结构体。

struct pair{
   typename1 first;
   typename2 second;  
};

用途:

1.可以代替二元结构体及其构造函数,节省编码时间。类似 B1085 PAT单位排行。

2.可以作为map的键值对来进行插入。

 1 #include"iostream"
 2 #include"algorithm"
 3 #include"vector"
 4 #include"unordered_map"
 5 using namespace std;
 6 
 7 struct Student {
 8     string id;
 9     int grade;
10 } stu[10010];
11 
12 bool cmp1(Student a,Student b) {
13     if(a.grade != b.grade) return a.grade > b.grade;
14     else return a.id < b.id;
15 }
16 
17 bool cmp2(pair<string,int> a,pair<string,int> b) {
18     if(a.second != b.second) return a.second > b.second;
19     else return a.first < b.first;
20 }
21 
22 int main() {
23     int N,M;
24     scanf("%d%d",&N,&M);
25     for(int i = 0; i < N; ++i) {
26         getchar();
27         cin>>stu[i].id;
28         scanf("%d",&stu[i].grade);
29     }
30     int type;
31     string ins;
32     for(int i = 1; i <=M; ++i) {
33         scanf("%d",&type);
34         getchar();
35         cin>>ins;
36         printf("Case %d: %d ",i,type);
37         cout<<ins<<endl;
38         if(type == 1) {
39             sort(stu,stu+N,cmp1);
40             bool flag = false;
41             for(int j = 0; j < N; ++j) {
42                 if(ins[0] == stu[j].id[0]) {
43                     flag = true;
44                     cout<<stu[j].id;
45                     printf(" %d\n",stu[j].grade);
46                 }
47             }
48             if(flag == false) printf("NA\n");
49         } else if(type == 2) {
50             int cnt = 0,score = 0;
51             for(int j = 0; j < N; ++j) {
52                 if(ins == stu[j].id.substr(1,3)) {
53                     cnt++;
54                     score+=stu[j].grade;
55                 }
56             }
57             if(cnt == 0) printf("NA\n"); //以参加比赛人数为判断条件
58             else
59                 printf("%d %d\n",cnt,score);
60         } else {
61             unordered_map<string,int> m;
62             for(int j = 0; j < N; ++j) {
63                 if(ins == stu[j].id.substr(4,6)) {
64                     m[stu[j].id.substr(1,3)]++;
65                 }
66             }
67             if(m.size() == 0) printf("NA\n");
68             else {
69                 //把map中的键值对通过键值对结构体pair插入到vector中
70                 vector<pair<string,int>> v(m.begin(),m.end());
71                 sort(v.begin(),v.end(),cmp2);
72                 for(int j = 0; j < v.size(); ++j) {
73                     cout<<v[j].first;
74                     printf(" %d\n",v[j].second);
75                 }
76             }
77         }
78     }
79     return 0;
80 }

 

技术图片

 

1095 解码PAT准考证

标签:getc   begin   好题   cin   typename   scan   false   style   mes   

原文地址:https://www.cnblogs.com/keep23456/p/12368094.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!