当前位置:网站首页>PAT甲级1153 Decode Registration Card of PAT (25 分)
PAT甲级1153 Decode Registration Card of PAT (25 分)
2022-07-25 15:24:00 【nekoha_dexter】
1153 Decode Registration Card of PAT (25 分)
A registration card number of PAT consists of 4 parts:
- the 1st letter represents the test level, namely, T for the top level, A for advance and B for basic;
- the 2nd - 4th digits are the test site number, ranged from 101 to 999;
- the 5th - 10th digits give the test date, in the form of yymmdd;
- finally the 11th - 13th digits are the testee's number, ranged from 000 to 999.
Now given a set of registration card numbers and the scores of the card owners, you are supposed to output the various statistics according to the given queries.
Input Specification:
Each input file contains one test case. For each case, the first line gives two positive integers N (≤104) and M (≤100), the numbers of cards and the queries, respectively.
Then N lines follow, each gives a card number and the owner's score (integer in [0,100]), separated by a space.
After the info of testees, there are M lines, each gives a query in the format Type Term, where
- Type being 1 means to output all the testees on a given level, in non-increasing order of their scores. The corresponding Term will be the letter which specifies the level;
- Type being 2 means to output the total number of testees together with their total scores in a given site. The corresponding Term will then be the site number;
- Type being 3 means to output the total number of testees of every site for a given test date. The corresponding Term will then be the date, given in the same format as in the registration card.
Output Specification:
For each query, first print in a line Case #: input, where # is the index of the query case, starting from 1; and input is a copy of the corresponding input query. Then output as requested:
- for a type 1 query, the output format is the same as in input, that is, CardNumber Score. If there is a tie of the scores, output in increasing alphabetical order of their card numbers (uniqueness of the card numbers is guaranteed);
- for a type 2 query, output in the format Nt Ns where Nt is the total number of testees and Ns is their total score;
- for a type 3 query, output in the format Site Nt where Site is the site number and Nt is the total number of testees at Site. The output must be in non-increasing order of Nt's, or in increasing order of site numbers if there is a tie of Nt.
If the result of a query is empty, simply print NA.
Sample Input:
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
Sample Output:
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
题目大意:
给出n个记录和m次查询。每个记录都有一位的考试类型,3位的课室,6位的年月日,3位考生id。查询包括了两部分,一部分是type, 一部分是内容,如果type == 1, 要求输出该等级的id和分数,按分数从大到小排列,如果分数相同则让id小的排前面。
如果type == 2,就输出指定课室的人数以及总分。如果type == 3 则输出给出的日期,按照人数从大到小,如果人数一直,课室号小的优先。
思路:
观察他们排序的要求,除了2以外,排序方式都是有一个总分优先,id随后。
用map<string, int> 来应对第三种情形。
参考代码:
#include<unordered_map>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
struct node{
string id;
int v;
};
vector<node>list;
int n, m, flag;
string c;
bool cmp(node a, node b){
return a.v != b.v ? a.v > b.v : a.id < b.id;
}
int main(){
scanf("%d%d", &n, &m);
list.resize(n);
for(int i = 0; i < n; ++i) cin >> list[i].id >> list[i].v;
for(int i = 1; i <= m; ++i){
cin >> flag >> c;
printf("Case %d: %d %s\n", i , flag, c.c_str());
vector<node> ans;
int num = 0, total = 0;
if(flag == 1){
for(int j = 0; j < n; ++j)
if(list[j].id[0] == c[0]) ans.push_back(list[j]);
} else if(flag == 2){
for(int j = 0; j < n; ++j)
if(list[j].id.substr(1, 3) == c) num++, total += list[j].v;
if(num != 0) printf("%d %d\n", num, total);
} else {
unordered_map<string, int > mp;
for(int j = 0; j < n; ++j){
string t = list[j].id.substr(4, 6);
if(t == c) mp[list[j].id.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].id.c_str(), ans[j].v);
if(((flag == 1 || flag == 3) && ans.size() == 0) || (flag == 2 && num == 0)) printf("NA\n");
}
}边栏推荐
- ML - 语音 - 传统语音模型
- 图论及概念
- Spark DF adds a column
- 分布式 | 实战:将业务从 MyCAT 平滑迁移到 dble
- Distributed principle - what is a distributed system
- The development summary of the function of fast playback of audio and video in any format on the web page.
- ML - natural language processing - Introduction to natural language processing
- Spark SQL UDF function
- Spark获取DataFrame中列的方式--col,$,column,apply
- 小波变换--dwt2 与wavedec2
猜你喜欢
随机推荐
C language function review (pass value and address [binary search], recursion [factorial, Hanoi Tower, etc.))
Spark AQE
JVM garbage collector details
Is it safe to open futures online? Which company has the lowest handling charge?
PageHelper does not take effect, and SQL does not automatically add limit
Object.prototype. Hasownproperty() and in
图论及概念
Week303 of leetcode
Idea eye care settings
redis淘汰策列
JVM-参数配置详解
ML - 语音 - 高级语音模型
Vscode plugin collection
Singleton mode 3-- singleton mode
Instance tunnel use
Application of C language array in Sanzi chess -- prototype of Queen n problem
Notes on inputview and inputaccessoryview of uitextfield
Word 样式模板复制到另一文档
Idea护眼色设置
Spark submission parameters -- use of files









