测试点1、4错误的话 检查你输出是不是3位或者6位 //printf("Case %d: %d %06d\n",i+1,zl,data);
#include <bits/stdc++.h>
using namespace std;
const int INF=100000000;
const int maxn=1111111;
struct st{
string all;
char rank; //级别
int room; //考场日
int data; //日期
string stuNo; //考生号
int score; //分数
}stu[11111];
struct third{ //指令3专用结构体
int room; //考场号
int sum; //个数
third(int r,int s):room(r),sum(s){}
};
bool cmp(st s1,st s2){
if(s1.score!=s2.score){
return s1.score>s2.score;
}else return s1.all<s2.all;
}
bool cmp2(third m1,third m2){
if(m1.sum!=m2.sum){
return m1.sum>m2.sum;
}else return m1.room<m2.room;
}
int a[1000];
int num[1000];
int main() {
int i,n,m;
scanf("%d%d",&n,&m);
string s;
int score;
vector<st> v1,v2,v3; //分别存顶级,甲级,乙级
for(i=0;i<n;i++){
cin>>s>>score;
stu[i].all=s;
stu[i].rank=s[0];
stu[i].room=stoi(s.substr(1,3));
stu[i].data=stoi(s.substr(4,6));
stu[i].stuNo=s.substr(10,3);
stu[i].score=score;
if(stu[i].rank=='T'){
v1.push_back(stu[i]);
}else if(stu[i].rank=='A'){
v2.push_back(stu[i]);
}else if(stu[i].rank=='B'){
v3.push_back(stu[i]);
}
a[stu[i].room]+=stu[i].score; //使用数组a和数组num,直接存入指令2所需要的数据
num[stu[i].room]++;
}
sort(v1.begin(),v1.end(),cmp);
sort(v2.begin(),v2.end(),cmp);
sort(v3.begin(),v3.end(),cmp);
int zl,room,j;
char rank;
int data;
for(i=0;i<m;i++){
scanf("%d",&zl);
if(zl==1){
cin>>rank;
printf("Case %d: %d %c\n",i+1,zl,rank);
if(rank=='T'){
if(v1.empty()){printf("NA\n");continue;}
for(j=0;j<v1.size();j++){
printf("%s %d\n",v1[j].all.c_str(),v1[j].score);
}
}else if(rank=='A'){
if(v2.empty()){
printf("NA\n");continue;
}
for(j=0;j<v2.size();j++){
printf("%s %d\n",v2[j].all.c_str(),v2[j].score);
}
}else if(rank=='B'){
if(v3.empty()){printf("NA\n");continue;}
for(j=0;j<v3.size();j++){
printf("%s %d\n",v3[j].all.c_str(),v3[j].score);
}
}
}else if(zl==2){
scanf("%d",&room);
printf("Case %d: %d %03d\n",i+1,zl,room);
if(num[room]==0){printf("NA\n");continue;}
printf("%d %d\n",num[room],a[room]);
}else if(zl==3){
map<int,int> mp;
vector<third> vm;
scanf("%d",&data);
printf("Case %d: %d %06d\n",i+1,zl,data);
int flag=1;
for(j=0;j<n;j++){
if(stu[j].data==data){
flag=0;
mp[stu[j].room]++;
}
}
if(flag) {printf("NA\n");continue;}
for(auto i:mp)
vm.push_back(third(i.first,i.second));
sort(vm.begin(),vm.end(),cmp2);
for(j=0;j<vm.size();j++){
printf("%d %d\n",vm[j].room,vm[j].sum);
}
}
}
return 0;
}