用string导致最后一个点超时
#include<cstdio>
#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
int n, k;
vector<string> arr[3000];
/*int getid(char a[]){
int id = 0;
for(int i=0; i<3; i++)
id += id *26 + a[i] - 'A';
id += id*10 + a[i] - '0';
return id;
}*/
int main(){
scanf("%d%d",&n,&k);
for(int i=0; i<n; i++){
string a;
int m, v;
cin >> a >> m;
for(int j=0; j<m; j++){
scanf("%d",&v);
arr[v].push_back(a);
}
}
for(int i=1; i<=k; i++){
printf("%d %d\n",i,arr[i].size());
sort(arr[i].begin(),arr[i].end());
for(int j=0; j<arr[i].size(); j++)
cout << arr[i][j] << endl;
}
return 0;
}
↓没有大佬们那么精巧的思路,,,
#include<cstdio>
#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
int n, k;
char name[40010][5];
vector<int> arr[3000];
bool cmp(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++){
char a[5];
int m, v;
scanf("%s %d",&name[i], &m);
for(int j=0; j<m; j++){
scanf("%d",&v);
arr[v].push_back(i);
}
}
for(int i=1; i<=k; i++){
printf("%d %d\n",i,arr[i].size());
sort(arr[i].begin(),arr[i].end(),cmp);
for(int j=0; j<arr[i].size(); j++)
printf("%s\n",name[arr[i][j]]);
}
return 0;
}
很难过,,,