题目描述
分析:
题目给出每一个课选的学生的名字,要求输出每个学生选的所有课,对于学生名字和课程的对应可以采用map,但是使用map会超时,所以采用hash表的方式,而每个学生选的课则存放到一个vector中
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int getID(char name[]){
int id=0;
for(int i=0;i<3;i++){
id=id*26+(name[i]-'A');
}
id=id*10+(name[3]-'0');
return id;
}
const int maxn=26*26*26*10+1;
vector<int> course[maxn];
int main(){
char name[5];
int n,m;
scanf("%d %d",&n,&m);
int cou,num;
while(m--){
scanf("%d %d",&cou,&num);
while(num--){
scanf("%s",name);
int id=getID(name);
course[id].push_back(cou);
}
}
while(n--){
scanf("%s",name);
int id=getID(name);
sort(course[id].begin(),course[id].end());
printf("%s %d",name,course[id].size());
for(int j=0;j<course[id].size();j++){
printf(" %d",course[id][j]);
}
printf("\n");
}
return 0;
}