PAT 1047 Student List for Course (25分)

这道题和上道题就是把学生课程的存储查询,正反来一遍。

上一道题被警示要将名字用数字编号表示,不能用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;
}

 

posted @ 2020-08-11 20:49  uy9ko  阅读(76)  评论(0)    收藏  举报