题目描述
链接
给出选课人数和课程数目,然后再给出每个人的选课情况,请针对每门课程输出选课人数以及所有选该课的学生姓名,按照字典序
分析
- 输入的是:人名 课程id,输出的是 课程id 人名
- 实际要完成的是人名到课程id的映射
- 如何不用STL来做
name[人数][人名长度]
表示(i)号人的名字,course[课程id].push_back(i)
表示上id号课程的人的编号- 实现了名字到名字编号的映射,课程编号和名字编号的对应!!!关键是用人的编号!!代替这个人
#include<bits/stdc++.h>
using namespace std;
vector<int> course[2550];
char name[40020][10];
int n,k,c,id;
bool cmp(int x, int y){
return (strcmp(name[x], name[y]) < 0);
}
int main(){
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++){
scanf("%s%d",name[i],&c);
for(int j=0;j<c;j++){
scanf("%d",&id);
course[id].push_back(i);
}
}
for(int i=1;i<=k;i++){
printf("%d %d
",i,course[i].size());
sort(course[i].begin(), course[i].end(), cmp);
for(int j=0;j<course[i].size();j++){
printf("%s
",name[course[i][j]]);
}
}
}