题目
题目的意思就是有n个课程,k个人,接下来k组数据分别表示,人的编号和这个人选了几门课,最后依次输出课程有谁选了。
思路
可以利用map和vector构造一个二维数组,课程名当做下标,输出每门课程选择的人,要将人的编号从小到大排,利用sort排序就可以。输出课程名后还要输出选择的总人数,直接输出该课程对应数组的尺寸即可。
map教程可参考http://t.csdnimg.cn/CKff5
vector教程可参考http://t.csdnimg.cn/AW54j
代码
#include <bits/stdc++.h>
using namespace std;
map<string,vector<int> >v;
int main()
{
int n,k,m,t;
string s;
cin>>n>>k;
for(int i=1;i<=k;i++)
{
cin>>m>>t;
getchar();
for(int j=1;j<=t;j++)
{
cin>>s;
v[s].push_back(m);//存储课程名对应的人的编号
}
}
for(int i=1;i<=n;i++)
{
cin>>s;
cout<<s<<" "<<v[s].size();
sort(v[s].begin(),v[s].end());//对人的编号进行从小到大排序
for(int j=0;j<v[s].size();j++)
{
cout<<" "<<v[s][j];
}
cout<<endl;
}
return 0;
}