前言

传送门

正文


参考题解

#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
/* 输入每门课程选修的学生列表,输出待查询学生选修的所有课程(升序排序) */

int main(){
	int n,k,ci,ni;
	string name; 
	map<string,vector<int>> mp;
	scanf("%d%d",&n,&k);
	for(int i=0;i<k;i++){
		scanf("%d%d",&ci,&ni);
		for(int j=0;j<ni;j++){
			cin>>name;
			mp[name].push_back(ci);
		}
	}
	
	vector<int> *course=NULL; 
	for(int i=0;i<n;i++){
		cin>>name;
		//这里注意是传引用,需用指针来接收,否则最后一个测试点会超时 
		course=&mp[name];
		sort(course->begin(),course->end());
		int len=course->size();
		printf("%s %d",name.c_str(),len);
		for(auto it=course->begin();it!=course->end();it++)
		printf(" %d",*it);
		printf("\n");
	}
	return 0;
}