題目大意
有N個學生,K門課。給出選擇每門課的學生姓名。並在之後給出N個學生的姓名,要求按照順序給出每個學生的選課情況。
注意
姓名和學生編號之間的映射,需要用字符串hash。用map和string會導致超時。而且姓名的最後一個數字可能會重複,所以不是按照最後一個數字簡單的進行映射。
另外,就是建立vector數組存儲每個學生的選課情況。
代碼
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
const int M=26*26*26*10+1;
vector<int> ans[M];
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;
}
int main(void){
int n,k;
while(scanf("%d%d",&n,&k)!=EOF){
for(int i=1;i<=k;i++){
int course,ni;
scanf("%d%d",&course,&ni);
for(int j=1;j<=ni;j++){
char name[4];
int id;
scanf("%s",name);
id = getID(name);
ans[id].push_back(course);
}
}
for(int i=0;i<n;i++){
char name[4];
scanf("%s",name);
int id=getID(name);
sort(ans[id].begin(),ans[id].end());
printf("%s %d",name,(int)ans[id].size());
for(int j=0;j<ans[id].size();j++){
printf(" %d",ans[id][j]);
}
printf("\n");
}
}
}