题目
pata1039
题目思路
建立一名字与数字对应的散列函数,对于每一个名字采取一vector变量记录其所选课程即可。
参考代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int hasht(char c[]);
vector <int> s[26*26*26*10];
int cou[2500];
int main()
{
char c[5];
int n=0,m=0,id=0,t=0;
cin>>n>>m;
char name[n][5];
for(int i=0;i<m;i++)
{
scanf("%d %d",&id,&t);
for(int j=0;j<t;j++)
{
scanf("%s",c);
s[hasht(c)].push_back(id);
}
}
for(int i=0;i<n;i++)
scanf("%s",name[i]);
for(int i=0;i<n;i++)
{
t=hasht(name[i]);
printf("%s",name[i]);
printf(" %d",s[t].size());
for(int j=0;j<s[t].size();j++)
{
cou[j]=s[t][j];
}
sort(cou,cou+s[t].size());
for(int j=0;j<s[t].size();j++)
{
printf(" %d",cou[j]);
}
if(i<n-1)
printf("\n");
}
return 0;
}
int hasht(char c[])
{
int a=0;
for(int i=0;i<3;i++)
a=c[i]-'A'+a*26;
a=a*10+c[3]-'0';
return a;
}