需要注意的点是本题的数组的最大值,以及相应的转化后的值。
#include<cstdio>
#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;
const int m=26*26*26*10+1;
vector<int> SelectCourse[m];
int getid(char name[])
{
int n=0;
for (int i=0;i<3;i++)
{
n=n*26+(name[i]-'A');
}
n=n*10+(name[3]-'0');
return n;
}
int main()
{
char name[5];
int n,k;
cin>>n>>k;
for (int i=0;i<k;i++)
{
int course,num;
cin>>course>>num;
for (int j=0;j<num;j++)
{
scanf("%s",name);
int id=getid(name);
SelectCourse[id].push_back(course);
}
}
for (int i=0;i<n;i++)
{
scanf("%s",name);
int id=getid(name);
sort(SelectCourse[id].begin(),SelectCourse[id].end());
printf("%s %d",name,SelectCourse[id].size());
for (int j=0;j<SelectCourse[id].size();j++)
{
printf(" ");
printf("%d",SelectCourse[id][j]);
}
printf("\n");
}
}