PAT-1153(Decode Registration Card of PAT)+unordered_map的使用+vector的使用+sort條件排序的使用
阿新 • • 發佈:2020-09-21
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; }