1095 解码PAT准考证

Posted keep23456

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1095 解码PAT准考证相关的知识,希望对你有一定的参考价值。

 麻烦的一批!!!还好题目比较耿直,按要求输出即可,超时就换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
",stu[j].grade);
46                 }
47             }
48             if(flag == false) printf("NA
");
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
"); //以参加比赛人数为判断条件
58             else
59                 printf("%d %d
",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
");
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
",v[j].second);
75                 }
76             }
77         }
78     }
79     return 0;
80 }

 

技术图片

 

以上是关于1095 解码PAT准考证的主要内容,如果未能解决你的问题,请参考以下文章

PAT乙级1095 解码PAT准考证 (25 分)

1095 解码PAT准考证

B1095 解码PAT准考证

PAT Basic 1095 解码PAT准考证 (25 分)

乙级 1095 解码PAT准考证

乙级 1095 解码PAT准考证