方法:利用map,vector容器数据分类后,作排序。
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
int N,K;
map<int,vector<int> > coursetostu;
int change(char str[]){
int sum=0;
for(int i=0;i<3;i++)
sum=26*sum+(str[i]-'A');
return 10*sum+(str[3]-'0');
}
int main(){
scanf("%d%d",&N,&K);
char name[10];
for(int i=1;i<=N;i++){
scanf("%s",name);
int id=change(name),tnum,courseid;
scanf("%d",&tnum);
for(int j=0;j<tnum;j++){
scanf("%d",&courseid);
coursetostu[courseid].push_back(id);
}
}
for(int i=1;i<=K;i++){
printf("%d %d\n",i,coursetostu[i].size());
sort(coursetostu[i].begin(),coursetostu[i].end());
for(int j=0;j<coursetostu[i].size();j++){
int x=coursetostu[i][j];
printf("%c%c%c%c\n",(x/(26*26*10))+'A',(x%(26*26*10)/260)+'A',(x%(26*10)/10)+'A',(x%10)+'0');
}
}
return 0;
}