题目大意:
给出一系列课程,和选修这些课程的学生编号,最后给出要查询学生的编号,看他选修了哪些课程,输出每个查询学生选修课程的数量和课程编号按从小到大输出。
代码:
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int maxx = 26 * 26 * 26 * 10 + 1;
int hashName(const char *name)
{
return (name[0] - 'A') * 26 * 26 * 10 + (name[1] - 'A') * 26 * 10 + (name[2] - 'A') * 10 + (name[3] - '0');
}
vector<int> course[maxx];
int main()
{
int n, k, cid, sn, hname;
char name[5];
vector<int>::iterator ib, ie;
scanf("%d %d", &n, &k);
for (int i = 0; i < k; ++i)
{
scanf("%d %d", &cid, &sn);
for (int j = 0; j < sn; ++j)
{
scanf("%s", name);
hname = hashName(name);
course[hname].push_back(cid);
}
}
for (int i = 0; i < n; ++i)
{
scanf("%s", name);
hname = hashName(name);
printf("%s", name);
printf(" %d", course[hname].size());
sort(course[hname].begin(), course[hname].end());
for (ib = course[hname].begin();; ib !=course[hname].end(); ; ++ib)
{
printf(" %d", *ib);
}
printf("\n");
}
return 0;
}