专栏首页vblogPAT 1039 Course List for Student (25分) 使用map(string, vector(int))

PAT 1039 Course List for Student (25分) 使用map(string, vector(int))

题目

Zhejiang University has 40000 students and provides 2500 courses. Now given the student name lists of all the courses, you are supposed to output the registered course list for each student who comes for a query.

Input Specification: Each input file contains one test case. For each case, the first line contains 2 positive integers: N (≤40,000), the number of students who look for their course lists, and K (≤2,500), the total number of courses. Then the student name lists are given for the courses (numbered from 1 to K) in the following format: for each course i, first the course index i and the number of registered students N​i (≤200) are given in a line. Then in the next line, N​i student names are given. A student name consists of 3 capital English letters plus a one-digit number. Finally the last line contains the N names of students who come for a query. All the names and numbers in a line are separated by a space.

Output Specification: For each test case, print your results in N lines. Each line corresponds to one student, in the following format: first print the student's name, then the total number of registered courses of that student, and finally the indices of the courses in increasing order. The query results must be printed in the same order as input. All the data in a line must be separated by a space, with no extra space at the end of the line.

Sample Input:

11 5
4 7
BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1
1 4
ANN0 BOB5 JAY9 LOR6
2 7
ANN0 BOB5 FRA8 JAY9 JOE4 KAT3 LOR6
3 1
BOB5
5 9
AMY7 ANN0 BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1
ZOE1 ANN0 BOB5 JOE4 JAY9 FRA8 DON2 AMY7 KAT3 LOR6 NON9

Sample Output:

ZOE1 2 4 5
ANN0 3 1 2 5
BOB5 5 1 2 3 4 5
JOE4 1 2
JAY9 4 1 2 4 5
FRA8 3 2 4 5
DON2 2 4 5
AMY7 1 5
KAT3 3 2 4 5
LOR6 4 1 2 4 5
NON9 0

题目大意

K个课程,给出每个课程的编号,选课人数,这些人的名字 有N个学生来查询他们的选课列表,按输入顺序处理每个人的查询请求,输出他的姓名 选课数目 课程1编号 课程2编号 ...,要求课程编号输出顺序满足从小到大

思路分析

既然要得到每个学生的选课列表,而给出的学生姓名是字符串,要求输出的课程编号是整数,那就用一个 map<string, vector<int>>存储,其中,键是学生姓名,值是学生选课列表。

我们需要做的就是在读取输出过程中,转换输入(每个课程选课的有哪些人)转换成 学生以及对应的选课列表

这个很简单,就是“对号入座”。

比如对于输入中某一个课的情况,1号课,4个人选了,姓名分别如下

1 4
ANN0 BOB5 JAY9 LOR6

只需要这样简单处理

// 课号和选课人数
cin >> cno >> cnum;
// 选课的都是哪些人
while(cnum-- > 0) {
    // 选课人名字
    cin >> name;
    // 记录,这个人,选了这个课
    stu_cource[name].push_back(cno);
}

之后要查询某个学生的选课列表,只需要map[name]就能得到他的选课列表vector<int>,为了满足输出要求,对vector<int>进行一次sort()即可。

完成代码

#include<iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;

// 保存每个学生和他的选择列表
map<string, vector<int>> stu_cource;

int main() {
    // N个学生要查询,K个课
    int N, K;
    cin >> N >> K;
    // 每个课的编号,选课人数
    int cno, cnum;
    string name;
    while (K-- > 0) {
        // 课号和选课人数
        cin >> cno >> cnum;
        // 选课的都是哪些人
        while(cnum-- > 0) {
            // 选课人名字
            cin >> name;
            // 记录,这个人,选了这个课
            stu_cource[name].push_back(cno);
        }
    }
    // N个人查询
    while(N-- > 0) {
        cin >> name;
        // 得到他的选课列表
        vector<int> course = stu_cource[name];
        // 课号按顺序排
        sort(course.begin(), course.end());
        // 输出 姓名 几个课 课号1 课号2 ...
        cout << name << " " << course.size();
        for (int cno: course) 
            cout << " " << cno;
        cout << endl;
    }
    return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PAT1047 Student List for Course (25分)避免运行超时(内存溢出)

    Zhejiang University has 40,000 students and provides 2,500 courses. Now given th...

    vivi
  • PAT 1044 Shopping in Mars (25分) 二分法

    Shopping in Mars is quite a different experience. The Mars people pay by chained...

    vivi
  • PAT 1006 Sign In and Sign Out (25分) 字符串比较

    At the beginning of every day, the first person who signs in the computer room w...

    vivi
  • Why Swift? Generics(泛型), Collection(集合类型), POP(协议式编程), Memory Management(内存管理)

    写这篇文章主要是为了给组内要做的分享准备内容。这段时间几个项目都用到 Swift,在上次 GIAC 大会上就被问到为什么要用 Swift,正好这个主题可以聊聊 ...

    用户7451029
  • PyTorch Lightning:专门为机器学习研究者开发的PyTorch轻量 wrapper

    专门为机器学习研究者开发的PyTorch轻量包装器(wrapper)。缩放您的模型。写更少的模板代码。

    磐创AI
  • codeforces 1216D(数学)

    There were n types of swords in the theater basement which had been used during ...

    dejavu1zz
  • hdu--(1025)Constructing Roads In JGShining's Kingdom(dp/LIS+二分)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)...

    Gxjun
  • hdu 1025 Constructing Roads In JGShining's Kingdom

    JGShining's kingdom consists of 2n(n is no more than 500,000) small cities which...

    用户2965768
  • 分享一个Linux无法创建文件夹,但是目录权限却显示正常的问题和解决

    今天发现一个疑难杂症:发现批量发布一个新版本程序时,发现有一台没有成功。亲自登陆上去看了下,发现原来是发布帐号在某个目录下创建目录失败了! 人工 touch 试...

    张戈
  • Python编程的三种方式:面向过程、面向函数和面向对象!你会几个?

    点击链接加入群【python┮】:https://jq.qq.com/?_wv=1027&k=5xP1Cuy

    云飞

扫码关注云+社区

领取腾讯云代金券