数据量大的时候用string会使最后一个测试点超时。
#include<cstdio>
#include<iostream>
#include<vector>
#include <algorithm>
#include<cstring>
using namespace std;
const int maxn=40010;
const int maxc=2510;
vector<string>a[2500];
char name[maxn][5];
vector<int>course[maxc];
bool cmp1(int a,int b)
{
return strcmp(name[a],name[b])<0;
}
int main()
{
int n,k;
cin>>n>>k;
for (int i=0;i<n;i++)
{
int num;
scanf("%s %d",name[i],&num);
for (int j=0;j<num;j++)
{
int temp;
scanf("%d",&temp);
course[temp].push_back(i);
}
}
for (int i=1;i<=k;i++)
{
printf("%d %d\n",i,course[i].size());
sort(course[i].begin(),course[i].end(),cmp1);
for (int j=0;j<course[i].size();j++)
{
printf("%s\n",name[course[i][j]]);
}
}
}