#include<bits/stdc++.h>
using namespace std;
const int MAXN=2501;
char name1[40001][5];
struct course{
vector<int> name;
int id;
}course[MAXN];
bool cmp(int a,int b){
return strcmp(name1[a],name1[b])<0;
}
int main()
{
//freopen("in.txt","r",stdin);
int n,k;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++){
cin>>name1[i];
int t;
scanf("%d",&t);
for(int j=0;j<t;j++){
int temp;
scanf("%d",&temp);
course[temp].id=temp;course[temp].name.push_back(i);
}
}
for(int i=1;i<=k;i++){
cout<<i<<' '<<course[i].name.size()<<endl;
sort(course[i].name.begin(),course[i].name.end(),cmp);
for(auto it=course[i].name.begin();it!=course[i].name.end();it++){
printf("%s\n",name1[*it]);
}
}
return 0;
}
如果用string的话会超时,因为string的copy时间以及排序比较时间都要比char数组的相应操作更耗时
下面是ne个超时的例子
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2501;
struct course{
set<string> name;
int id;
}course[MAXN];
int main()
{
freopen("in.txt","r",stdin);
int n,k;//cin>>n>>k;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++){
string name1;cin>>name1;
int t;//cin>>t;
scanf("%d",&t);
for(int j=0;j<t;j++){
int temp;//cin>>temp;
scanf("%d",&temp);
course[temp].id=temp;course[temp].name.insert(name1);
}
}
for(int i=1;i<=k;i++){
cout<<i<<' '<<course[i].name.size()<<endl;
for(auto it=course[i].name.begin();it!=course[i].name.end();it++){
//cout<<*it<<endl;
printf("%s\n",(*it).c_str());
}
}
return 0;
}