混和头文件实战——7-49 打印学生选课清单(25 分)

简介: 混和头文件实战——7-49 打印学生选课清单(25 分)这题有点容易超时,我试了很多方法,发现用map连接string和一个vector容器是比较好的办法,接下来就给大家介绍介绍~

题目描述:

假设全校有最多40000名学生和最多2500门课程。现给出每门课的选课学生名单,要求输出每个前来查询的学生的选课清单。

输入格式:

输入的第一行是两个正整数:N(≤40000),为前来查询课表的学生总数;K(≤2500),为总课程数。此后顺序给出课程1到K的选课学生名单。格式为:对每一门课,首先在一行中输出课程编号(简单起见,课程从1到K编号)和选课学生总数(之间用空格分隔),之后在第二行给出学生名单,相邻两个学生名字用1个空格分隔。学生姓名由3个大写英文字母+1位数字组成。选课信息之后,在一行内给出了N个前来查询课表的学生的名字,相邻两个学生名字用1个空格分隔。

输出格式:

对每位前来查询课表的学生,首先输出其名字,随后在同一行中输出一个正整数C,代表该生所选的课程门数,随后按递增顺序输出C个课程的编号。相邻数据用1个空格分隔,注意行末不能输出多余空格。

输入样例:

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

输出样例:

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

代码长度限制   16 KB

时间限制     400 ms

内存限制     64 MB

PS:这题有点容易超时,我试了很多方法,发现用map连接string和一个vector容器是比较好的办法,接下来就给大家介绍介绍~

思路分析:

1.创建一个map,连接学生的姓名(string)和一个vector<int>(逃课课程)

2.根据题目的要求来输入数据并且存储它们

3.对vector的数据进行排序!(这点很关键!)

如果没有排序就会:

网络异常,图片无法展示
|
没错,不要被 题目的示例 骗了

vector排序:

网络异常,图片无法展示
|

4.按照n个名字出现的顺序进行输出

代码如下:

#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
int main()
{
  map<string, vector<int>>mp;
  int n, k;
  cin >> n >> k;
  int x, y;
  string str;
  for (int i = 0; i < k; i++) {
    cin >> x >> y;
    for (int j = 0; j < y; j++) {
      cin >> str;
      mp[str].push_back(x);
    }
  }
  for (int i = 0; i < n; i++) {
    cin >> str;
    cout << str;
    cout << " " << mp[str].size();
    sort(mp[str].begin(), mp[str].end());
    for (int j = 0; j < mp[str].size(); j++) {
      cout << " " << mp[str][j];
    }
    cout << endl;
  }
}

提交结果:

网络异常,图片无法展示
|

PS:解题结束~

相关文章
|
2月前
|
存储 编译器 程序员
近4w字吐血整理!只要你认真看完【C++编程核心知识】分分钟吊打面试官(包含:内存、函数、引用、类与对象、文件操作)
近4w字吐血整理!只要你认真看完【C++编程核心知识】分分钟吊打面试官(包含:内存、函数、引用、类与对象、文件操作)
107 0
编号(太晚了,先发一题,可能以后题都单发了,方便分类整理)
编号(太晚了,先发一题,可能以后题都单发了,方便分类整理)
45 0
|
C语言 C++
C语言最终测评错题(个人记录用)
C语言最终测评错题(个人记录用)
69 0
|
数据安全/隐私保护 C语言
【C语言】制作“学生管理成绩系统”,内容包括【系统显示】【录入信息】【删除信息】【等级评定】【成绩排序】【成绩修改】【查找学生】涉及循环、结构体和数组等
学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢? 导言 学生菜单系统是基于前阶段的C语言学习,从实际出发,巩固C语言基础的练习,通过多种函数的不同运用,检验知识点的牢固可靠性。 系统设计概述 整个学生系统将会被分成几个内容,将大任务分为多个小任务,并将其合理连接起来,独立而又有联系,对逻辑能力有一定要求(没错,我是木头) 设计多个模块 开发团队信息(即首
【C语言】制作“学生管理成绩系统”,内容包括【系统显示】【录入信息】【删除信息】【等级评定】【成绩排序】【成绩修改】【查找学生】涉及循环、结构体和数组等
打印学生选课清单 (25 分)
打印学生选课清单 (25 分)
123 0
7-13 简单计算器 (25 分)
7-13 简单计算器 (25 分)
178 0
7-13 简单计算器 (25 分)
|
SQL 存储 Java
【JDBC实战】水果库存系统 [功能实现](接口实现类FruitDAOImpl的功能实现)万字长文
了解水果库存系统 [功能实现](接口实现类FruitDAOImpl的功能实现)。
140 0
【JDBC实战】水果库存系统 [功能实现](接口实现类FruitDAOImpl的功能实现)万字长文
C++混合头文件实战——7-24 树种统计(25 分)
随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类。请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比。
236 0
|
算法 C++
数据结构与算法题目集(中文) - 7-49 打印学生选课清单(25 分)
数据结构与算法题目集(中文) - 7-49 打印学生选课清单(25 分)
88 0
|
C语言 C++
【c++/c】C语言“小小计算器”扩展功能,文件的读取和写入【期末大作业】
学生成绩排序” 定义学生结构体数组,长度为10,依次输入这十个学生的学号、姓名、成绩,利用冒泡排序,对这10个学生排序,从小到大输出这10个学生的信息,然后输出10个学生的总成绩和平时成绩
167 1
【c++/c】C语言“小小计算器”扩展功能,文件的读取和写入【期末大作业】