这道题和上道题就是把学生课程的存储查询,正反来一遍。
上一道题被警示要将名字用数字编号表示,不能用string等,那么就乖乖遵循,写vector。
这道题要注意的点是要给学生编号,并存在一个字符数组中。这样的好处首先是vector里存编号,排序的时候极大地节省了时间,其次是通过字符数组可以直接查询结果输出名字。
#include <iostream> #include <algorithm> #include <vector> #include <cstring> using namespace std; char name[40010][5]; bool cmp (int a,int b){ return strcmp(name[a],name[b])<0; } vector<int> v[2510]; int main(){ int n,k; cin>>n>>k; int num,course; for(int i=0;i<n;i++){ scanf("%s%d",name[i],&num); for(int j=0;j<num;j++){ scanf("%d",&course); v[course].push_back(i); } } for(int i=1;i<k+1;i++){ sort(v[i].begin(),v[i].end(),cmp); printf("%d %d\n",i,v[i].size()); for(int j=0;j<v[i].size();j++){ printf("%s\n",name[v[i][j]]); } } return 0; }
PAT 1047 Student List for Course (25分)
原文:https://www.cnblogs.com/szh-blog/p/13482652.html