原题:1039. Course List for Student (25)
解题思路:
一开始用map映射每个名字,最后一个样例死活段错误,最后只能老老实实写hash函数了,不知道最后一个样例出现了什么特殊情况。题还是很好想的。
代码如下:
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<map>
#include<vector>
using namespace std;
const int maxn = 26 * 26 * 26 * 10 + 5;
vector<int> course[maxn];
inline int ID(char s[])
{
return (s[0]-'A')*26*26*10 + (s[1] - 'A')*26*10 + (s[2] - 'A')*10 + (s[3] - '0');
}
int main()
{
int n, k;
while(scanf("%d%d", &n, &k) == 2)
{
for(int i = 0; i < maxn; i++) course[i].clear();
for(int i = 0; i < k; i++)
{
int c, num;
scanf("%d%d", &c, &num);
for(int j = 0; j < num; j++)
{
char s[5];
scanf("%s", s);
int id = ID(s);
course[id].push_back(c);
}
}
for(int i = 0; i < n; i++)
{
char nam[5];
scanf("%s", nam);
printf("%s", nam);
int id = ID(nam);
printf(" %d", course[id].size());
sort(course[id].begin(), course[id].end());
for(int j = 0; j < course[id].size(); j++)
printf(" %d", course[id][j]);
printf("\n");
}
}
return 0;
}