题目

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;
}

PAT 1039 Course List for Student (25分) 使用map<string, vector<int>>的更多相关文章

  1. PAT 甲级 1039 Course List for Student (25 分)(字符串哈希,优先队列,没想到是哈希)*

    1039 Course List for Student (25 分)   Zhejiang University has 40000 students and provides 2500 cours ...

  2. 1039 Course List for Student (25分)

    Zhejiang University has 40000 students and provides 2500 courses. Now given the student name lists o ...

  3. 【PAT甲级】1039 Course List for Student (25 分)(vector嵌套于map,段错误原因未知)

    题意: 输入两个正整数N和K(N<=40000,K<=2500),分别为学生和课程的数量.接下来输入K门课的信息,先输入每门课的ID再输入有多少学生选了这门课,接下来输入学生们的ID.最后 ...

  4. PAT A1074 Reversing Linked List (25 分)——链表,vector,stl里的reverse

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...

  5. 1039. Course List for Student (25)

    题目链接:http://www.patest.cn/contests/pat-a-practise/1039 题目: 1039. Course List for Student (25) 时间限制 2 ...

  6. PAT乙级:1090危险品装箱(25分)

    PAT乙级:1090危险品装箱(25分) 题干 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清 ...

  7. PAT乙级:1070 结绳 (25分)

    PAT乙级:1070 结绳 (25分) 题干 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟 ...

  8. PAT 1039 Course List for Student[难]

    1039 Course List for Student (25 分) Zhejiang University has 40000 students and provides 2500 courses ...

  9. PAT 甲级 1083 List Grades (25 分)

    1083 List Grades (25 分) Given a list of N student records with name, ID and grade. You are supposed ...

随机推荐

  1. 使用vue实现购物车功能

    页面效果图: html代码: <div class="shop-car" id='car'> <div class="count-custom" ...

  2. Unity2D模拟控制位移

    using UnityEngine; using System.Collections; public class PlayerController : MonoBehaviour { public ...

  3. 【比较】粒子群算法PSO 和 遗传算法GA 的相同点和不同点

    目录 PSO和GA的相同点 PSO和GA不同点 粒子群算法(PSO)和遗传算法(GA)都是优化算法,都力图在自然特性的基础上模拟个体种群的适应性,它们都采用一定的变换规则通过搜索空间求解. PSO和G ...

  4. vue打包时semver.js版本报错

    如图,报错semver.js版本不正确,解决思路是在node_modules/semver.js内,忽略版本检查 ''' // if ANY of the sets match ALL of its ...

  5. 【python爬虫】scrapy入门5--xpath等后面接正则

    比如我们要调试某网页:https://g.widora.cn/ shell不依赖工程环境 scrapy shell https://g.widora.cn/ 类似页面F12,可用对象都列出来了,一般常 ...

  6. tp5插入百万条数据处理优化

    <?php namespace app\index\controller; use think\Controller; use think\Db; class Charu extends Con ...

  7. shiro简单的认证功能

    使用静态shiro.ini文件完成认证 创建项目到爆 <dependency> <groupId>org.apache.shiro</groupId> <ar ...

  8. Layui 解决动态图标不动的问题

    <i class="layui-icon layui-icon-face-smile" style="color: red; font-size: 100px;&q ...

  9. ThreadLocal原理分析

    本文结构 ThreadLocal简介 (简要说明ThreadLocal的作用) ThreadLocal实现原理(说明ThreadLocal的常用方法和原理) ThreadLocalMap的实现 (说明 ...

  10. 二、Spring装配Bean

    内容 声明bean 构造器注入和Setter方法注入 装配Bean 控制bean的创建和销毁 关键词 装配(wiring) 组件扫描(component scanning) 自动装配(AutoWiri ...