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 Ni (≤200) are given in a line. Then in the next line, Ni 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>>的更多相关文章
- PAT 甲级 1039 Course List for Student (25 分)(字符串哈希,优先队列,没想到是哈希)*
1039 Course List for Student (25 分) Zhejiang University has 40000 students and provides 2500 cours ...
- 1039 Course List for Student (25分)
Zhejiang University has 40000 students and provides 2500 courses. Now given the student name lists o ...
- 【PAT甲级】1039 Course List for Student (25 分)(vector嵌套于map,段错误原因未知)
题意: 输入两个正整数N和K(N<=40000,K<=2500),分别为学生和课程的数量.接下来输入K门课的信息,先输入每门课的ID再输入有多少学生选了这门课,接下来输入学生们的ID.最后 ...
- 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 ...
- 1039. Course List for Student (25)
题目链接:http://www.patest.cn/contests/pat-a-practise/1039 题目: 1039. Course List for Student (25) 时间限制 2 ...
- PAT乙级:1090危险品装箱(25分)
PAT乙级:1090危险品装箱(25分) 题干 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清 ...
- PAT乙级:1070 结绳 (25分)
PAT乙级:1070 结绳 (25分) 题干 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟 ...
- PAT 1039 Course List for Student[难]
1039 Course List for Student (25 分) Zhejiang University has 40000 students and provides 2500 courses ...
- PAT 甲级 1083 List Grades (25 分)
1083 List Grades (25 分) Given a list of N student records with name, ID and grade. You are supposed ...
随机推荐
- sourcetree 拉取 一直让输入密码
以下方法都没用 在控制台中 git gc git prune git config --global credential.helper store git pull 输入账号密码 git pull ...
- Poj 3013基础最短路
Description Christmas is coming to KCM city. Suby the loyal civilian in KCM city is preparing a big ...
- BZOJ1078 斜堆
http://hzwer.com/5790.html 代码 http://www.cppblog.com/MatoNo1/archive/2013/03/03/192131.html //原理讲解 ...
- python爬虫需要掌握哪些知识点
1.熟练掌握Python语言 2.熟练掌握JS/HTML/CSS,了解HTTP协议. 3.熟练使用chrome 4.爬虫框架 推荐几个大神的教学干货,大家共同进步! https://zhuanlan. ...
- vue仿移动端输入框
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Java-第15章图形用户界面设计例题
Example15_1.java JFrame常用方法 import javax.swing.*; import static javax.swing.JFrame.*; public class E ...
- Java-建立一个AnalysisResult类,对成绩进行分析
import java.io.*; import java.util.*; public class AnalysisResult { public static void main(String[] ...
- ThreadLocal原理分析
本文结构 ThreadLocal简介 (简要说明ThreadLocal的作用) ThreadLocal实现原理(说明ThreadLocal的常用方法和原理) ThreadLocalMap的实现 (说明 ...
- Istio Polit-agent & Envoy 启动流程
开篇 通过上一篇 Istio Sidecar注入原理 文章可以发现,在应用提交到kubernate部署时已经同时注入了Sidecar应用. 细心的话应该还可以发现,除了注入了istio-proxy应用 ...
- Python 每日一练(4)
引言 今天继续是python每日一练的几个专题,主要涵盖简单的敏感词识别以及图片爬虫 敏感词识别 这个敏感词的识别写的感觉比较简单,总的概括之后感觉功能可以简略成if filter_words in ...