Note
Code:
#include<bits/stdc++.h>
using namespace std;
char lev;
int n,m,sc,ty,te;
unordered_map<char,int> lti;
unordered_map<int,int> cnt,total,dti;
struct node{
string id;
char level;
int site,date,testee,score;
}stu[10010];
struct ttt{
int site,count;
ttt(){}
ttt(int s,int c){
site=s,count=c;
}
};
bool cmp(node a,node b){
if(a.level!=b.level) return a.level<b.level;
if(a.score!=b.score) return a.score>b.score;
else return a.id<b.id;
}
bool cmp1(ttt a,ttt b){
if(a.count!=b.count) return a.count>b.count;
else return a.site<b.site;
}
vector<ttt> vc[10010];
int main(){
#ifndef ONLINE_JUDGE
freopen("data.txt","r",stdin);
#endif
string id;
int index=1,j,size;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>id>>sc;
stu[i].id=id;
stu[i].level=id[0];
stu[i].site=stoi(id.substr(1,3));
stu[i].date=stoi(id.substr(4,6));
stu[i].testee=stoi(id.substr(10));
stu[i].score=sc;
cnt[stu[i].site]++;
total[stu[i].site]+=sc;
if(dti[stu[i].date]==0){
dti[stu[i].date]=index;
vc[index].push_back(ttt(stu[i].site,1));
index++;
}
else{
size=vc[dti[stu[i].date]].size();
j=0;
for(;j<size;j++){
if(stu[i].site==vc[dti[stu[i].date]][j].site){
vc[dti[stu[i].date]][j].count++;
break;
}
}
if(j==size)
vc[dti[stu[i].date]].push_back(ttt(stu[i].site,1));
}
}
for(int i=1;i<index;i++){
if(!vc[i].empty()){
sort(vc[i].begin(),vc[i].end(),cmp1);
}
}
sort(stu+1,stu+n+1,cmp);
char last=stu[1].level;
lti[last]=1;
for(int i=2;i<=n;i++){
if(stu[i].level!=last){
last=stu[i].level;
lti[last]=i;
}
}
for(int i=1;i<=m;i++){
cin>>ty;
printf("Case %d: %d ",i,ty);
if(ty==1){
cin>>lev;
printf("%c\n",lev);
if(lti[lev]==0){
printf("NA\n");
continue;
}
for(int k=lti[lev];;k++){
if(stu[k].level!=lev) break;
printf("%s %d\n",stu[k].id.c_str(),stu[k].score);
}
}
else if(ty==2){
cin>>te;
printf("%03d\n",te);
if(cnt[te]==0&&total[te]==0) printf("NA\n");
else printf("%d %d\n",cnt[te],total[te]);
}
else{
cin>>te;
printf("%06d\n",te);
if(vc[dti[te]].empty()) printf("NA\n");
else{
for(int k=0;k<vc[dti[te]].size();k++)
printf("%03d %d\n",vc[dti[te]][k].site,vc[dti[te]][k].count);
}
}
}
return 0;
}