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

1095 解码PAT准考证 (25分)

https://pintia.cn/problem-sets/994805260223102976/problems/1071786104348536832

题目大意:给出一组学生的准考证号和成绩,准考证号包含了等级(乙甲顶),考场号,日期,和个人编号信息,并有三种查询方式
查询一:给出考试等级,找出该等级的考生,按照成绩降序,准考证升序排序
查询二:给出考场号,统计该考场的考生数量和总得分
查询三:给出考试日期,查询改日期下所有考场的考试人数,按照人数降序,考场号升序排序
分析:先把所有考生的准考证和分数记录下来
1.按照等级查询,枚举选取匹配的学生,然后排序即可
2.按照考场查询,枚举选取匹配的学生,然后计数、求和
3.按日期查询每个考场人数,用unordered_map存储,最后排序汇总
注意:1.第三个用map存储会超时,用unordered_map就不会超时
        2.排序传参建议用引用传参,这样更快

#include <iostream>
#include <algorithm>
#include <vector>
#include <unordered_map>
using namespace std;
struct node{
	string t;
	int value;
};
bool cmp(const node &a,const node &b)
{
	return a.value!=b.value?a.value>b.value:a.t<b.t;
}
int main()
{
	int n,m,num;
	string s;
	cin>>n>>m;
	vector<node> vec(n);
	for(int i=0;i<n;i++) cin>>vec[i].t>>vec[i].value;
	for(int i=1;i<=m;i++)
	{
		cin>>num>>s;
		printf("Case %d: %d %s\n",i,num,s.c_str());
		vector<node> ans;
		int cnt=0,sum=0;
		if(num==1){
			for(int j=0;j<n;j++)
			   if(vec[j].t[0]==s[0]) ans.push_back(vec[j]);
		}else if(num==2){
			for(int j=0;j<n;j++)
			if(vec[j].t.substr(1,3)==s){
				cnt++;
				sum+=vec[j].value;
			}
			if(cnt!=0) printf("%d %d\n",cnt,sum);
		}else if(num==3){
			unordered_map<string,int> mp;
			for(int j=0;j<n;j++)
			   if(vec[j].t.substr(4,6)==s) mp[vec[j].t.substr(1,3)]++;
			for(auto it:mp) ans.push_back({it.first,it.second});
		}
		sort(ans.begin(),ans.end(),cmp);
		for(int j=0;j<ans.size();j++) printf("%s %d\n",ans[j].t.c_str(),ans[j].value);
		if((num==1||num==3)&&ans.size()==0||(num==2&&cnt==0)) printf("NA\n");
	}
	return 0;
}

 

值得注意的是:

map本身默认对key排序,但我们不需要。

我们想对map的value排序。故实际代码中用unordered_map,它是非排序版,比map快许多。

对map(或unordered_map)的value排序:

把map的key & value存到vector中,用sort对vector排序,这种方法一定要学会。

注:mp是map,ans是vector。

for(auto it : mp)
        ans.push_back({it.first, it.second});
sort(ans.begin(), ans.end(), cmp);  

参考:https://blog.csdn.net/liuchuo/article/details/84972869

原文地址:https://www.cnblogs.com/jianqiao123/p/12267257.html

时间: 2024-10-10 11:13:52

PTA乙级 (*1095 解码PAT准考证 (25分))的相关文章

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 行,每行给出一个考生的准考证号和

乙级 1095 解码PAT准考证

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

PTA 10-排序5 PAT Judge (25分)

题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/677 5-15 PAT Judge   (25分) The ranklist of PAT is generated from the status list, which shows the scores of the submissions. This time you are supposed to generate the ranklist for PAT. Input Spe

PTA乙级 (*1030 完美数列 (25分))

1030 完美数列 (25分) https://pintia.cn/problem-sets/994805260223102976/problems/994805291311284224 #include <iostream> #include <vector> #include <algorithm> typedef long long ll; using namespace std; int main() { int n; ll p; cin>>n>

PTA乙级(*1050 螺旋矩阵 (25分))

1050 螺旋矩阵 (25分) https://pintia.cn/problem-sets/994805260223102976/problems/994805275146436608 https://paste.ubuntu.com/p/Dn7fQ9Gf73/ #include <cstdio> #include <iostream> #include <cstring> #include <string> #include <cmath>

1095 解码PAT准考证

麻烦的一批!!!还好题目比较耿直,按要求输出即可,超时就换unordered_map. 新学了小玩意STL-pair,可以理解成一个结构体. struct pair{ typename1 first; typename2 second; }; 用途: 1.可以代替二元结构体及其构造函数,节省编码时间.类似 B1085 PAT单位排行. 2.可以作为map的键值对来进行插入. 1 #include"iostream" 2 #include"algorithm" 3 #

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 位是考生编

1025 PAT Ranking (25 分)

1025 PAT Ranking (25 分) Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ranklists will be merged immediately

PAT Advanced 1093 Count PAT&#39;s (25分)

The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and the 6th characters, and the second one is formed by the 3rd, the 4th, and the 6th characters. Now given any string, you are supposed to tell the numb