PAT A1047 Student List for Course [字符串映射]

题目描述

链接
给出选课人数和课程数目,然后再给出每个人的选课情况,请针对每门课程输出选课人数以及所有选该课的学生姓名,按照字典序

分析

  • 输入的是:人名 课程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]]);
        }
    }


}

原文地址:https://www.cnblogs.com/doragd/p/11317361.html