分析
建立一个哈希表,将所有的姓名所报的课程用一个优先队列(小根堆)进行存储,之后每询问一个姓名就输出这个姓名下的队列所有元素。
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int n,m,num,cnt;
priority_queue<string,vector<int>,greater<int>> q; //优先队列
map<string,priority_queue<string,vector<int>,greater<int>> > mp;
int main()
{
scanf("%d%d",&n,&m);
char name[5];
for(int i=1;i<=m;i++)
{
scanf("%d%d",&num,&cnt);
for(int j=0;j<cnt;j++)
{
scanf("%s",name);
mp[name].push(num); //将课程加入到所报人的哈希表中
}
}
while(n--)
{
scanf("%s",name);
printf("%s %d",name,mp[name].size());
q=mp[name]; //用一个中间变量q进行输出
while(q.size())
{
printf(" %d",q.top());
q.pop();
}
puts("");
}
return 0;
}