#include<iostream>
#include<vector>
#include<algorithm>
#include<unordered_map>
using namespace std;
struct stu{
string stuid;
int score;
};
struct site{
string siteid;
int cnt;
};
bool cmp1(struct stu &a,struct stu &b){
return a.score!=b.score?a.score>b.score:a.stuid<b.stuid;
}
bool cmp2(struct site &a,struct site &b){
return a.cnt!=b.cnt?a.cnt>b.cnt:a.siteid<b.siteid;
}
int main(){
int n,m;
cin>>n>>m;
vector<stu> v(n);
for(int i=0;i<n;i++)
cin>>v[i].stuid>>v[i].score;
int type;
for(int i=0;i<m;i++){
cin>>type;
if(type==1){
string level;
cin>>level;
printf("Case %d: 1 %s\n",i+1,level.c_str());
vector<stu> ans;
for(int j=0;j<n;j++)
if(v[j].stuid[0]==level[0]) ans.push_back(v[j]); //注意level[0]
sort(ans.begin(),ans.end(),cmp1);
for(int j=0;j<ans.size();j++)
printf("%s %d\n",ans[j].stuid.c_str(),ans[j].score); //用printf,避免超时
if(ans.size()==0) cout<<"NA"<<endl;
}else if(type==2){
string site;
cin>>site;
printf("Case %d: 2 %s\n",i+1,site.c_str());
int cnt=0,fullscore=0;
for(int j=0;j<n;j++){
if(v[j].stuid.substr(1,3)==site){
cnt++;
fullscore+=v[j].score;
}
}
if(cnt==0) printf("NA\n");
else printf("%d %d\n",cnt,fullscore);
}else{
string date;
cin>>date;
printf("Case %d: 3 %s\n",i+1,date.c_str());
unordered_map<string,int> mp; //unordered_map,避免超时
for(int j=0;j<n;j++)
if(v[j].stuid.substr(4,6)==date) mp[v[j].stuid.substr(1,3)]++;
vector<site> ans;
for(auto it=mp.begin();it!=mp.end();it++)
ans.push_back(site{it->first,it->second});
sort(ans.begin(),ans.end(),cmp2);
for(int j=0;j<ans.size();j++)
printf("%s %d\n",ans[j].siteid.c_str(),ans[j].cnt);
if(ans.size()==0) cout<<"NA"<<endl;
}
}
return 0;
}
PAT乙级-1095 解码PAT准考证 (25 分)
最新推荐文章于 2024-10-09 22:28:58 发布