Decode Registration Card of PAT

PAT-1153

  • 这里需要注意题目的规模,并不需要一开始就存储好所有的满足题意的信息
  • 这里必须使用unordered_map否则会超时
  • vector的使用需要注意,只有一开始赋予了容量才能读取。
  • 不需要使用set也可以
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<sstream>
#include<set>
#include<map>
#include<cmath>
#include<vector>
using namespace std;
const int maxn=10004;
int n,m;
struct Node{
string code;
char type;
int site;
string date;
int number;
int score;
Node(){
}
Node(string co,char ty,int si,string da,int nu,int sc):
code(co),type(ty),site(si),date(da),number(nu),score(sc){
}
bool operator<(const Node& node)const{
if(score==node.score){
return code<node.code;
}else return score>node.score;
}
int times;
};
struct NType3{
int site,times;
NType3(){
}
NType3(int a,int b):site(a),times(b){
}
bool operator<(const NType3& node2)const{
if(times==node2.times){
return site<node2.site;
}else return times>node2.times;
}
};
set<Node>type1[26];
map<int,int>sit;
map<int,int>totscore;
map<int,int>dat[1000006];
set<NType3>type3[1000006]; int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
string code;int score;
cin>>code>>score;
char level=code[0];
int site=stoi(code.substr(1,3));
string date=code.substr(4,6);
int number=stoi(code.substr(10));
// cout<<level<<" "<<site<<" "<<date<<" "<<number<<endl;
Node node=Node(code,level,site,date,number,score);
sit[site]++;
totscore[site]+=score;
type1[level-'A'].insert(node);
if(dat[stoi(date)][site]==0){
set<NType3>te;
te.insert(NType3(site,0));
type3[stoi(date)].insert(NType3(site,0));
}
dat[stoi(date)][site]++;
}
for(int i=0;i<m;i++){
int type;string s;
cin>>type>>s;
if(type==1){//level
set<Node> now=type1[s[0]-'A'];
set<Node>::iterator it;
int num=0;
for(it=now.begin();it!=now.end();it++){
Node no=*it;
cout<<no.code<<" "<<no.score<<endl;
num++;
}
if(num==0)
cout<<"NA"<<endl;
}else if(type==2){//site
int numsit=sit[stoi(s)];
if(numsit==0){
cout<<"NA"<<endl;
}else cout<<sit[stoi(s)]<<" "<<totscore[stoi(s)]<<endl;
}else{//date
set<NType3> now=type3[stoi(s)];
set<NType3> temp;
for(set<NType3>::iterator it=now.begin();it!=now.end();it++){
NType3 no=*it;
int site=no.site;
int times=dat[stoi(s)][site];
no.times=times;
temp.insert(no);
}
set<NType3>::iterator it;
int num=0;
for(it=temp.begin();it!=temp.end();it++){
NType3 no=*it;
cout<<no.site<<" "<<no.times<<endl;
num++;
}
if(num==0)
cout<<"NA"<<endl;
}
}
return 0;
}
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<sstream>
#include<set>
#include<map>
#include<cmath>
#include<vector>
#include<unordered_map>
using namespace std;
const int maxn=10004;
int n,m;
struct Node{
string code;
int value;
}; bool cmp(Node& node1,Node& node2){
if(node1.value==node2.value){
return node1.code<node2.code;
}else return node1.value>node2.value;
}
int main(){
cin>>n>>m;
vector<Node>v(n);//只有指定了容器大小才能使用下面输入语句
for(int i=0;i<n;i++){
string code;int score;
// cin>>code>>score;
// Node node;
// node.code=code;
// node.value=score;
// v.push_back(node);
cin>>v[i].code>>v[i].value;
}
for(int i=1;i<=m;i++){
int type;string s;
cin>>type>>s; printf("Case %d: %d %s\n",i,type,s.c_str());
// cout<<"Case "<<i<<": "<<type<<" "<<s<<endl;
if(type==1){
vector<Node>ve;
for(Node item:v){
if(item.code.substr(0,1)==s){
ve.push_back(item);
}
}
if(ve.size()==0)
printf("NA\n");
else{
sort(ve.begin(),ve.end(),cmp);
for(Node item:ve){
printf("%s %d\n",item.code.c_str(),item.value);
// cout<<item.code<<" "<<item.value<<endl;
}
}
}else if(type==2){
int num=0,tot=0;
for(Node item:v){
if(s==item.code.substr(1,3)){
num++;
tot+=item.value;
}
}
if(num==0)
printf("NA\n");
else {
printf("%d %d\n",num,tot);
// cout<<num<<" "<<tot<<endl;
}
}else if(type==3){
unordered_map<string,int>ma;
for(Node item:v){
if(s==item.code.substr(4,6)){
string site=item.code.substr(1,3);
ma[site]++;
}
}
if(ma.size()==0)
printf("NA\n");
else{
vector<Node>now;
for(auto item:ma){
now.push_back({item.first,item.second});
}
sort(now.begin(),now.end(),cmp);
for(Node item:now){
printf("%s %d\n",item.code.c_str(),item.value);
}
}
}
}
// cout<<"jhjj"<<endl;
return 0;
}

PAT-1153(Decode Registration Card of PAT)+unordered_map的使用+vector的使用+sort条件排序的使用的更多相关文章

  1. PAT甲 1095 解码PAT准考证/1153 Decode Registration Card of PAT(优化技巧)

    1095 解码PAT准考证/1153 Decode Registration Card of PAT(25 分) PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级:A 代表甲级: ...

  2. PAT Advanced 1153 Decode Registration Card of PAT (25 分)

    A registration card number of PAT consists of 4 parts: the 1st letter represents the test level, nam ...

  3. PAT甲级——1153.Decode Registration Card of PAT(25分)

    A registration card number of PAT consists of 4 parts: the 1st letter represents the test level, nam ...

  4. 1153 Decode Registration Card of PAT (25 分)

    A registration card number of PAT consists of 4 parts: the 1st letter represents the test level, nam ...

  5. 1153 Decode Registration Card of PAT

    A registration card number of PAT consists of 4 parts: the 1st letter represents the test level, nam ...

  6. PAT A1153 Decode Registration Card of PAT (25 分)——多种情况排序

    A registration card number of PAT consists of 4 parts: the 1st letter represents the test level, nam ...

  7. PAT_A1153#Decode Registration Card of PAT

    Source: PAT A1153 Decode Registration Card of PAT (25 分) Description: A registration card number of ...

  8. 1093. Count PAT’s (25)-统计字符串中PAT出现的个数

    如题,统计PAT出现的个数,注意PAT不一定要相邻,看题目给的例子就知道了. num1代表目前为止P出现的个数,num12代表目前为止PA出现的个数,num123代表目前为止PAT出现的个数. 遇到P ...

  9. PAT 乙级 1040.有几个PAT C++/Java

    题目来源 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位( ...

随机推荐

  1. Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2) A. Prison Break

    题意:有一张\(n\)x\(m\)的图,图中每个点都关押着罪犯,在坐标\((r,c)\)处有一个出口,每名罪犯每秒可以可以像上下最有移动一个单位或者不动,问所有罪犯能够逃离监狱的最少时间. 题解:直接 ...

  2. Codeforces Round #683 (Div. 2, by Meet IT) D. Catching Cheaters (DP)

    题意:给你两个字符串,每次取它们的子串C和D,然后求LCS,得到的贡献为\(4*LCS(C,D)-|C|-|D|\),求最大贡献. 题解:首先应该了解\(O(n^2)\)的LCS的dp写法,然后在此基 ...

  3. 二进制安装kubernetes(二) kube-apiserver组件安装

    根据架构图,我们的apiserver部署在hdss7-21和hdss7-22上: 首先在hdss7-200上申请证书并拷贝到21和22上: 创建证书文件: # cd /opt/certs # vi c ...

  4. WSL (Windows Subsystem for Linux) 的 VSLAM (Visual Simultaneous Localization and Mapping) 道路

    WSL 的 VSLAM 道路 以 Windows Subsystem for Linux 闯入 Visual Simultaneous Localization and Mapping 世界的艰难道路 ...

  5. springboot demo(一)快速开始

    快速入门 maven构建项目 1.访问http://start.spring.io/ 2.选择构建工具Maven Project.Spring Boot版本2.26以及一些工程基本信息,点击" ...

  6. 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题

    题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...

  7. Chrome DevTools & performance & keywords

    Chrome DevTools & performance & keywords performance / 优化性能 https://developers.google.com/we ...

  8. Vue 3.x & v-model

    Vue 3.x & v-model https://v3.vuejs.org/guide/migration/v-model.html#overview BREAKING: When used ...

  9. github & personal access token

    github & personal access token OAuth https://github.com/xgqfrms/webtrc-in-action/issues/1#issuec ...

  10. D3 tree map

    D3 tree map D3 矩形树图 https://www.zhihu.com/question/55529379 https://zhuanlan.zhihu.com/p/57873460 ht ...