思路:这题主要是要控制时间。
1,存学生名以及所选的课程号
2,按姓名排序
3,遍历该数组,对于每个节点, 每个课程号作为hash key, value为学生名字,这样建立hash,
4,输出hash即可。
#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef struct{
char name[10];
vector<int> c;
}Node;
vector<Node>v(40010);
int num[2600];
vector<vector<int> > re(2600);
bool cmp(Node n1, Node n2)
{
return strcmp(n1.name, n2.name) <= 0;
}
int main()
{
int n, k, c, x;
scanf("%d%d", &n, &k);
for(int i=0; i<n; i++)
{
scanf("%s %d", v[i].name, &c);
for(int j=0;j<c;j++)
{
scanf("%d", &x);
num[x] ++ ;
v[i].c.push_back(x);
}
}
sort(v.begin(), v.begin()+n, cmp);
for(int i=0; i<n; i++)
{
for(int j=0; j<v[i].c.size(); j++)
{
re[v[i].c[j]].push_back(i);
}
}
for(int i=1; i<=k; i++)
{
printf("%d %d\n", i, num[i]);
if(num[i] == 0) continue;
for(int j=0;j<re[i].size();j++)
{
printf("%s\n", v[ re[i][j] ].name);
}
}
return 0;
}