题目链接:https://www.patest.cn/contests/pat-a-practise/1039
题目大意:给出每门课选课的学生,查询每个学生所选的所有课
解题思路:
- 学生的学号使用数字来存储,便于处理
代码如下:
#include <algorithm>
#include <vector>
#include <cstdio>
using namespace std;
int getstno(char name[]){
//该函数将学生姓名转化为整数
int stno=0;
for(int i=0;i<3;i++) {
stno=stno*26+(name[i]-'A');
}
stno=stno*10+(name[3]-'0');
return stno;
}
const int MAX=26*26*26*10+10;
vector<int> stcourse[MAX];//存储每个学生的课程信息
int main(int argc, char const *argv[])
{
int n,k;
scanf("%d%d",&n,&k);
//课程编号和选该门课的人数,学生名字
int cno,ccnt;
char name[5];
for(int i=0;i<k;i++){
//输入课程号,和选课人数
scanf("%d%d",&cno,&ccnt);
//输入选该门课的每个人
for(int j=0;j<ccnt;j++){
scanf("%s",&name);
stcourse[getstno(name)].push_back(cno);
}
}
//开始查找
for(int i=0;i<n;i++){
//要查找的名字
scanf("%s",&name);
//要查找的学生的所有选课
vector<int> tmp=stcourse[getstno(name)];
//排序
sort(tmp.begin(),tmp.end());
printf("%s %lu",name,tmp.size());
for(int j=0;j<tmp.size();j++){
printf(" %d",tmp[j]);
}
printf("\n");
}
return 0;
}