题目链接:点击打开链接
知识点笔记:
字符串hash映射要掌握,题目给的字符串格式是三个大写字母加一个数字,所以是26*26*26*10-1.
AC代码:
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int M=26*26*26*10+1;
vector<int> hashTable[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(){
int n,k;
char name[5];
scanf("%d%d",&n,&k);
for(int i=0;i<k;i++){
int course,num;
scanf("%d%d",&course,&num);
for(int j=0;j<num;j++){
scanf("%s",name);
int id = getID(name);
hashTable[id].push_back(course);
}
}
for(int i=0;i<n;i++){
scanf("%s",name);
int id = getID(name);
sort(hashTable[id].begin(),hashTable[id].end());
printf("%s %d",name,hashTable[id].size());
for(int j=0;j<hashTable[id].size();j++){
printf(" %d",hashTable[id][j]);
}
printf("\n");
}
return 0;
}