PAT-1153(Decode Registration Card of PAT)+unordered_map的使用+vector的使用+sort条件排序的使用
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条件排序的使用的更多相关文章
- PAT甲 1095 解码PAT准考证/1153 Decode Registration Card of PAT(优化技巧)
1095 解码PAT准考证/1153 Decode Registration Card of PAT(25 分) PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级:A 代表甲级: ...
- 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 ...
- 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 ...
- 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 ...
- 1153 Decode Registration Card of PAT
A registration card number of PAT consists of 4 parts: the 1st letter represents the test level, nam ...
- 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 ...
- PAT_A1153#Decode Registration Card of PAT
Source: PAT A1153 Decode Registration Card of PAT (25 分) Description: A registration card number of ...
- 1093. Count PAT’s (25)-统计字符串中PAT出现的个数
如题,统计PAT出现的个数,注意PAT不一定要相邻,看题目给的例子就知道了. num1代表目前为止P出现的个数,num12代表目前为止PA出现的个数,num123代表目前为止PAT出现的个数. 遇到P ...
- PAT 乙级 1040.有几个PAT C++/Java
题目来源 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位( ...
随机推荐
- B. Queue
During the lunch break all n Berland State University students lined up in the food court. However, ...
- Best Reward && Girls' research
After an uphill battle, General Li won a great victory. Now the head of state decide to reward him w ...
- CodeForces - 916C 思维
题意:给你n,m,表示n个顶点和m条边,让你构造一个图. 要求 1.1->n最短路为素数 2.最小生成树边权和为prime 3.没有重边 4.边大小[1,1e9]. (题目给定m>n-1) ...
- WPF 之命令(七)
一.前言 事件的作用是发布和传播一些消息,消息送达接收者,事件的使命也就完成了,至于消息响应者如何处理发送来的消息并不做规定,每个接收者可以使用自己的行为来响应事件.即事件不具有约束力. 命令 ...
- Ubuntu第一次使用注意点
第一次装完Ubuntu登录,打开命令行,登录的不是root权限,切换root不成功: 这个问题产生的原因是由于Ubuntu系统默认是没有激活root用户的,需要我们手工进行操作,在命令行界面下,或者在 ...
- Win10 Nodejs搭建http-server注意点
下载安装,并用命令行查看版本:如果提示输入命令找不到等,可能是没有安装成功,或者是环境变量引起的: 如果在提示安装不成功可能是win10权限问题,最好使用管理员模式运行cmd,再用cmd命令打开安装文 ...
- sass文件编译(.scss->.css),使用ruby环境,在windows10,koala工具,Error: Invalid GBK character "\xE5"
1 注意事项: 问题描述: 请确保 Encoding.default_external = Encoding.find('utf-8') 是uft-8 编码! sass文件编译时候使用ruby环境,在 ...
- React render twice bug
React render twice bug React bug constructor render twice bug update render twice bug StrictMode htt ...
- 前端使用 js 如何实现大文件上传
前端使用 js 如何实现大文件上传 大文件上传 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- npm-run-all
npm-run-all npm scripts https://www.npmjs.com/package/npm-run-all A CLI tool to run multiple npm-scr ...