#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<cstring>
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b)
{
return a < b;
}
int main()
{
int M, N;
scanf("%d %d", &M, &N);
map<string, vector<int>> studentsMap;
for (int i = 0; i < N; i++)
{
int corseindex, num;
scanf("%d %d", &corseindex, &num);
for (int j = 0; j < num; j++)
{
string name;
name.resize(7);
scanf("%s", &name[0]);
studentsMap[name].push_back(corseindex);
/*if (studentsMap.find(name) != studentsMap.end())
{
studentsMap[name].push_back(corseindex);
}
else {
studentsMap[name] = new vector<int>();
}*/
}
}
for (int i = 0; i < M; i++)
{
string name;
name.resize(7);
scanf("%s", &name[0]);
vector<int> mycorses = studentsMap[name];
sort(mycorses.begin(), mycorses.end(), cmp);
printf("%s %d", name.c_str(), mycorses.size());
for (int j = 0; j < mycorses.size(); j++)
{
printf(" %d", mycorses[j]);
}
printf("\n");
}
return 0;
}
散列
#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
int N, K;
const int maxn = 26*26*26*10+1;
vector<int> studentsCs[maxn];
int getID(char name[])
{
int id = 0;
for (int i = 0; i < 3; i++)
{
id *= 26;
id += name[i] - 'A';
}
id *= 10;
id += name[3] - '0';
return id;
}
int main()
{
scanf("%d %d", &N, &K);
for (int i = 0; i < K; i++)
{
int cid;
int num;
scanf("%d %d", &cid, &num);
for (int j = 0; j < num; j++)
{
char name[5];
scanf("%s", &name);
studentsCs[getID(name)].push_back(cid);
}
}
for (int i = 0; i < N; i++)
{
char name[5];
scanf("%s", name);
int id = getID(name);
sort(studentsCs[id].begin(), studentsCs[id].end());
if (i != 0)
printf("\n");
printf("%s %d", name, studentsCs[id].size());
for (int j = 0; j < studentsCs[id].size(); j++)
{
printf(" %d", studentsCs[id][j]);
}
}
return 0;
}