PAT (Basic Level) Practice (中文)1095 解码PAT准考证 (25 分)

PAT 准考证号由 4 部分组成:

  • 第 1 位是级别,即T代表顶级;A代表甲级;B代表乙级;
  • 第 2~4 位是考场编号,范围从 101 到 999;
  • 第 5~10 位是考试日期,格式为年、月、日顺次各占 2 位;
  • 最后 11~13 位是考生编号,范围从 000 到 999。

现给定一系列考生的准考证号和他们的成绩,请你按照要求输出各种统计信息。

输入格式:

输入首先在一行中给出两个正整数 N(≤104)N(≤10^4 )N(≤104)和M(≤100)M(≤100)M(≤100),分别为考生人数和统计要求的个数。
接下来NNN行,每行给出一个考生的准考证号和其分数(在区间[0,100][0,100][0,100]内的整数),其间以空格分隔。
考生信息之后,再给出MMM行,每行给出一个统计要求,格式为:类型 指令,其中

  • 类型为 1 表示要求按分数非升序输出某个指定级别的考生的成绩,对应的指令则给出代表指定级别的字母;
    -类型为 2 表示要求将某指定考场的考生人数和总分统计输出,对应的指令则给出指定考场的编号;
  • 类型为 3 表示要求将某指定日期的考生人数分考场统计输出,对应的指令则给出指定日期,格式与准考证上日期相同。

输出格式

对每项统计要求,首先在一行中输出Case #: 要求,其中#是该项要求的编号,从1开始;要求即复制输入给出的要求。随后输出相应的统计结果:

  • 类型为 1 的指令,输出格式与输入的考生信息格式相同,即准考证号 成绩。对于分数并列的考生,按其准考证号的字典序递增输出(题目保证无重复准考证号);
  • 类型为 2 的指令,按人数 总分的格式输出;
  • 类型为 3 的指令,输出按人数非递增顺序,格式为考场编号 总人数。若人数并列则按考场编号递增顺序输出。

如果查询结果为空,则输出NA

输入样例

8 4
B123180908127 99
B102180908003 86
A112180318002 98
T107150310127 62
A107180908108 100
T123180908010 78
B112160918035 88
A107180908021 98
1 A
2 107
3 180908
2 999

输出样例

Case 1: 1 A
A107180908108 100
A107180908021 98
A112180318002 98
Case 2: 2 107
3 260
Case 3: 3 180908
107 2
123 2
102 1
Case 4: 2 999
NA

思路

  • 就是按要求写函数, 使用自定义规则的sort()

AC code

#include<iostream>
#include<vector>
#include<unordered_map>
#include<algorithm>
using namespace std;
struct Student{string name;int score;
};
bool cmp1(const Student& a,const Student& b){if(a.score==b.score) return a.name<b.name;return a.score>b.score;
}
struct Site{string id;int cnt;
};
bool cmp2(const Site& a,const Site& b){if(a.cnt==b.cnt) return a.id<b.id;return a.cnt>b.cnt;
}int main(){int N,M;cin >> N >> M;vector<Student> v(N);for(int i=0;i<N;i++){cin >> v[i].name >> v[i].score;}int choice;for(int i=0;i<M;i++){cin>>choice;if(choice==1){string level;cin >> level;printf("Case %d: %d %s\n",i+1,choice,level.c_str());vector<Student> res;for(auto& stu:v){if(stu.name[0]==level[0]) res.push_back(stu);}sort(res.begin(),res.end(),cmp1);for(auto& stu:res){printf("%s %d\n",stu.name.c_str(),stu.score);}if(res.empty()) printf("NA\n");}else if(choice==2){int site,cnt=0,sum=0;cin>>site;printf("Case %d: %d %d\n",i+1,choice,site);for(auto& stu:v){if(stu.name.substr(1,3)==to_string(site)){cnt++;sum+=stu.score;}}if(cnt>0) printf("%d %d\n",cnt,sum);else printf("NA\n");}else{string date;cin>>date;printf("Case %d: %d %s\n",i+1,choice,date.c_str());vector<Site> res;unordered_map<string,int> mp;for(auto& stu:v){if(stu.name.substr(4,6)==date){mp[stu.name.substr(1,3)]++; }}for(auto& [k,v]:mp){res.push_back({k,v});}sort(res.begin(),res.end(),cmp2);for(auto& site:res){printf("%s %d\n",site.id.c_str(),site.cnt);}if(res.empty()) printf("NA\n");}}return 0;
}

PAT (Basic Level) Practice (中文)1095 解码PAT准考证 (25 分)相关推荐

  1. PTA平台 · PAT(Basic Level) Practice(中文) 题目集

    前  言 ※  PTA是 程序设计类实验辅助教学平台 ,里边包含一些编程题目集以供练习. ※  PAT是 浙江大学计算机程序设计能力考试(Programming Ability Test),分为乙级( ...

  2. 【PAT (Advanced Level) Practice】1086 Tree Traversals Again (25 分)

    众所周知只有前序遍历和后序遍历是不可能推出中序遍历的,所以我就不废话了 由树的前序遍历和中序遍历可以推后序遍历 由树的中序遍历和后序遍历可以推前序遍历 #include <cstdio> ...

  3. 【PAT (Advanced Level) Practice】1149 Dangerous Goods Packaging (25 分)

    1149 Dangerous Goods Packaging (25 分) When shipping goods with containers, we have to be careful not ...

  4. 【PAT (Advanced Level) Practice】1113 Integer Set Partition (25 分)

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...

  5. 1001 害死人不偿命的(3n+1)猜想 (15分) PAT (Basic Level) Practice (中文)C语言版

    PAT (Basic Level) Practice (中文) 1001 害死人不偿命的(3n+1)猜想 (15分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一 ...

  6. PAT (Basic Level) Practice (中文)1058 选择题 (20 分)

    PAT (Basic Level) Practice (中文)1058 选择题 (20 分) 文章目录 PAT (Basic Level) Practice (中文)1058 选择题 (20 分) 题 ...

  7. PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642 题目描述 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下 ...

  8. 1048 数字加密【PAT (Basic Level) Practice (中文)】

    1048 数字加密[PAT (Basic Level) Practice (中文)] 原题链接:1048 数字加密 (pintia.cn) 1.前言 PAT(乙级)2015年冬季考试 第三题 分数: ...

  9. 【题解】PAT (Basic Level) Practice (中文)

    互联网行业的小白,写博客的目的是为了记录自己的学习过程.对自己学习中所犯的错误做一个总结.由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教! PAT Basic Level P ...

最新文章

  1. 量子计算与AI“双拳”出击,他们锁定38种潜在抗疫药物
  2. MySQL原生密码认证
  3. 漫步微积分五——速度和变化率
  4. 华为Mate系列新机海外亮相 或将于MWC2019发布
  5. python语音读取
  6. 安卓 实现一个简单的计算器
  7. 【CASS精品教程】CASS 9.2绘制地籍图详细实验案例教程
  8. PHP许愿墙的经济可行性,深入PHP许愿墙模块功能分析
  9. 运行maple需要java_maple:如何在启动时包含我的库
  10. java连接mysql数据库实现图书馆管理系统
  11. OpenGL 编程指南 ( 原书第 9 版 ) --- 第二章
  12. Altera的单时钟同步FIFO,带empty和full端口
  13. 计算机操作与规范,计算机操作基础与汉字规范码拼音拼形训练
  14. IT30: IT人创业项目路演!!!
  15. mong 按 geometry 搜索 地理位置信息
  16. html判断手机浏览器,JS判断浏览器iOS(iPhone)、Android手机移动端
  17. Moonriver史上首次全球黑客松正式开启,15万美元奖金持续资助开发者建设Moonriver生态
  18. 结合Elementplus源码讲解BEM的使用
  19. 1.Postman之发送get请求
  20. 无障碍模式设计:别让无障碍,成为一种障碍

热门文章

  1. 正则表达式篇之——电影净化器
  2. 全国计算机等级考试荣誉,快来领取属于你的荣誉证书
  3. 无尽的永恒什么用 dnf大转移无尽的永恒有什么用 怎么得 会涨价吗
  4. rfa 文件读取_rfa文件用什么软件打开?什么是文件扩展名为RFA?
  5. 58同城招聘字体反爬
  6. flink1.13.2源码编译遇到的坑(三)Browserslist: caniuse-lite is outdated. Please run next command `npm update
  7. 有限小数用c语言,分数化为有限小数或无限循环小数(c实现)
  8. ccs报错:error #10234-D: unresolved symbols remain
  9. 在 C/C++中 static 关键字详解
  10. 利用ADS中的Design-Guide进行微带线单枝节匹配