和1039的思路类似,本题是将“按照学生分类的一组数据” 整理成 “按照课程分类的数据”。
如果能熟悉各种容器的用法,并组合使用。将使得思路清晰,代码简化。但应该明确,使用容器 是要小小的牺牲时间的,如:string比char * 费时,vector比普通数组费时。
此处不讲容器的使用,而只给出代码:
// 19.15 -- 19.30 21/25分
#include <iostream>
#include <string>
#include <map>
#include <set>
using namespace std;
int main()
{
int stunum, kenum; //学生个数,课程个数
int xuanks, kehao; //每个学生的选课数,相应的课程号码
cin >> stunum >> kenum;
string temp; //存名字
map<int, set<string>> data;
for (int i = 0; i < stunum; i++)
{
cin >> temp;
cin >> xuanks;
for (int j = 0; j < xuanks; j++)
{
cin >> kehao;
data[kehao].insert(temp);
}
}
for (int i = 1; i <= kenum; i++)
{
cout << i << ' ' << data[i].size() << endl;
for (auto j : data[i])
cout << j << endl;
}
return 0;
}