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\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 }

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

时间: 2024-10-26 14:05:50

1095 解码PAT准考证的相关文章

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

1095 解码PAT准考证 (25分) https://pintia.cn/problem-sets/994805260223102976/problems/1071786104348536832 题目大意:给出一组学生的准考证号和成绩,准考证号包含了等级(乙甲顶),考场号,日期,和个人编号信息,并有三种查询方式查询一:给出考试等级,找出该等级的考生,按照成绩降序,准考证升序排序查询二:给出考场号,统计该考场的考生数量和总得分查询三:给出考试日期,查询改日期下所有考场的考试人数,按照人数降序,考

乙级 1095 解码PAT准考证

PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级:A 代表甲级:B 代表乙级: 第 2~4 位是考场编号,范围从 101 到 999: 第 5~10 位是考试日期,格式为年.月.日顺次各占 2 位: 最后 11~13 位是考生编号,范围从 000 到 999. 现给定一系列考生的准考证号和他们的成绩,请你按照要求输出各种统计信息. 输入格式: 输入首先在一行中给出两个正整数 N(≤)和 M(≤),分别为考生人数和统计要求的个数. 接下来 N 行,每行给出一个考生的准考证号和

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

PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级:A 代表甲级:B 代表乙级: 第 2~4 位是考场编号,范围从 101 到 999: 第 5~10 位是考试日期,格式为年.月.日顺次各占 2 位: 最后 11~13 位是考生编号,范围从 000 到 999. 现给定一系列考生的准考证号和他们的成绩,请你按照要求输出各种统计信息. 输入格式: 输入首先在一行中给出两个正整数 N(≤)和 M(≤),分别为考生人数和统计要求的个数. 接下来 N 行,每行给出一个考生的准考证号和

PAT B1095 解码PAT准考证

半个月了,每天做几道题PAT基础题,终于把基础的95道题目做完了.总体来说,没有太难的东西,偶尔几个题目有点复杂而已. 加油,离3月份的考试越来越近了,还有155道题目等着我呢!!! B_1095题目如下: 1095 解码PAT准考证 (25 分) PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级:A 代表甲级:B 代表乙级: 第 2~4 位是考场编号,范围从 101 到 999: 第 5~10 位是考试日期,格式为年.月.日顺次各占 2 位: 最后 11~13 位是考生编

B1095 解码PAT准考证

题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/1071786104348536832 PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级:A 代表甲级:B 代表乙级: 第 2~4 位是考场编号,范围从 101 到 999: 第 5~10 位是考试日期,格式为年.月.日顺次各占 2 位: 最后 11~13 位是考生编号,范围从 000 到 999. 现给定一系列考生的准考证号和他们的成绩,请你按照

PTA乙级1091-1095

1091 N-自守数 (15 分) 如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3,而 2 的末尾两位正好是 9,所以 9 是一个 3-自守数. 本题就请你编写程序判断一个给定的数字是否关于某个 N 是 N-自守数. 输入格式: 输入在第一行中给出正整数 M(≤),随后一行给出 M 个待检测的.不超过 1000 的正整数. 输出格式: 对每个需要检测的数字,如果它是 N-自守数就在一行中输出最小的 N 和 NK?2?? 的值,以一个空格隔

1095. Cars on Campus (30)——PAT (Advanced Level) Practise

题目信息 1095. Cars on Campus (30) 时间限制220 ms 内存限制65536 kB 代码长度限制16000 B Zhejiang University has 6 campuses and a lot of gates. From each gate we can collect the in/out times and the plate numbers of the cars crossing the gate. Now with all the informati

PAT 1095. Cars on Campus (30)

1095. Cars on Campus (30) Zhejiang University has 6 campuses and a lot of gates. From each gate we can collect the in/out times and the plate numbers of the cars crossing the gate. Now with all the information available, you are supposed to tell, at

PAT (Advanced Level) 1095. Cars on Campus (30)

模拟题.仔细一些即可. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<map> #include<queue> #include<cstring> #include<stack> #include<vector> #include<iostream> using namesp