地址:https://pintia.cn/problem-sets/994805342720868352/problems/994805447855292416
用string和cin会超时,所以只能用char和scanf;
然后用哈希的方法来存储,把每个名字哈希成一个唯一的数;
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int inf = 0x3f3f3f3f;
#define mp make_pair
#define pb push_back
#define fi first
#define se second
const int MAX = (26 * 26 * 26 * 10 + 1);
vector<int>ve[MAX];
int zhuan(char name[])
{
int ans = 0;
for(int i = 0;i < 3;++i){
ans = ans * 26 + name[i] - 'A';
}
ans = ans * 10 + name[3] - '0';
return ans;
}
int main()
{
int n,k;
scanf("%d %d",&n,&k);
for(int i = 0;i < k;++i){
int x,m;
scanf("%d %d",&x,&m);
for(int j = 0;j < m;++j){
char s[8];
scanf("%s",s);
//printf("%s\n",s);
int y = zhuan(s);
ve[y].pb(x);
}
}
for(int i = 0;i < n;++i){
char s[8];
scanf("%s",s);
int y = zhuan(s);
sort(ve[y].begin(),ve[y].end());
printf("%s %d",s,ve[y].size());
for(int j = 0;j < ve[y].size();++j){
printf(" %d",ve[y][j]);
}
printf("\n");
}
return 0;
}