char和int的映射,使用name[maxn][20]数组,这个题目因为名字没有重复出现,直接映射就可以
(之前使用的是map映射,每次读入name先在map里找一下是否存在,不存在就加入,这道题目没必要用map)
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 4e4 + 10;
vector<int>course[2510];
char name[maxn][10];
int n, k, c;
bool comp(int a, int b)
{
return strcmp(name[a], name[b]) < 0;
}
int main()
{
scanf("%d%d", &n, &k);
for(int i=0;i<n;i++)
{
scanf("%s", name[i]);
scanf("%d", &c);
while (c--)
{
int x;
scanf("%d", &x);
course[x].push_back(i);
}
}
for (int i = 1; i <= k; i++)
{
sort(course[i].begin(), course[i].end(),comp);
printf("%d %d\n", i, course[i].size());
for (int j = 0; j < course[i].size(); j++)
printf("%s\n", name[course[i][j]]);
}
return 0;
}