PAT A1047 Student List for Course

1039题的变种,简单很多;

值得注意的是给出的样例代码,这里面维护的名字序列是索引,通过对名字序列的字典序对索引进行排序,从而可以在不打乱名字数组的情况下对输出的名字按照字典序排序,这是值得学习的一个点;

样例代码如下所示:

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
using std::vector;
const int maxn=40010;
const int maxc=2510;
char name[maxn][5];
vector<int>course[maxc];
bool cmp(int a,int b){
    return strcmp(name[a],name[b])<0;
}
int main(){
    int n,k,c,courseID;
    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",&courseID);
            course[courseID].push_back(i);
        }
    }
    for(int i=1;i<=k;i++){
        printf("%d %d\n",i,course[i].size());
        sort(course[i].begin(),course[i].end(),cmp);
        for(int j=0;j<course[i].size();j++){
            printf("%s\n",name[course[i][j]]);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/InNoVaion_yu/article/details/86727190