数据较大时的输入输出

先来看问题

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

输入格式:

输入的第一行是两个正整数:N(≤40000),为全校学生总数;K(≤2500),为总课程数。此后N行,每行包括一个学生姓名(3个大写英文字母+1位数字)、一个正整数C(≤20)代表该生所选的课程门数、随后是C个课程编号。简单起见,课程从1到K编号。

输出格式:

顺序输出课程1到K的选课学生名单。格式为:对每一门课,首先在一行中输出课程编号和选课学生总数(之间用空格分隔),之后在第二行按字典序输出学生名单,每个学生名字占一行。

输入样例:

10 5
ZOE1 2 4 5
ANN0 3 5 2 1
BOB5 5 3 4 2 1 5
JOE4 1 2
JAY9 4 1 2 5 4
FRA8 3 4 2 5
DON2 2 4 5
AMY7 1 5
KAT3 3 5 4 2
LOR6 4 2 4 1 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

代码长度限制

16 KB

时间限制

1000 ms

内存限制

64 MB

我们只需要设置一个vector<vector<string>> course(k);表示k门课程,当输入学生选课名单时对应的课程上加一个名字,随后输出所有课程对应的名字就行。所以我就写了下面的代码,但是交上去有个点没过。

#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
int main()
{int n, k;cin >> n >> k;string name;int i, j, m;vector<vector<string>> course(k);while (n--){cin >> name >> m;while (m--){cin >> i;course[i - 1].emplace_back(name);}}for (i = 0; i < k; i++){sort(course[i].begin(), course[i].end());cout << i + 1 << " " << course[i].size() << endl;for (j = 0; j < course[i].size(); j++){cout << course[i][j] << endl;}}
}

为什么会这样呢?我查了资料发现,简单来讲就是,c++的cin和cout函数输入输出的时候会把输入输出的数据先放到一个地方,然后再输入输出,而c语言的scanf和printf是直接输入输出,所以cin和cout不如后者。当输入输出数据量很大的时候,cin,cout就会慢好多,要提高cin,cout的效率,就得再使用cin,cout之前加上 ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);这三句话,这样就能将“把数据先放到一个地方”的步骤给去掉,效率大大提高。要注意的是,加上这三句话后,不能cout<<endl;应该用'\n',要不然速度还是会慢好多。看我改进后的结果。

#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n, k;cin >> n >> k;string name;int i, j, m;vector<vector<string>> course(k);while (n--){cin >> name >> m;while (m--){cin >> i;course[i - 1].emplace_back(name);}}for (i = 0; i < k; i++){sort(course[i].begin(), course[i].end());cout << i + 1 << " " << course[i].size() << "\n";for (j = 0; j < course[i].size(); j++){cout << course[i][j] << "\n";}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/177088.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习-搜索技术:从技术发展到应用实战的全面指南

在本文中&#xff0c;我们全面探讨了人工智能中搜索技术的发展&#xff0c;从基础算法如DFS和BFS&#xff0c;到高级搜索技术如CSP和优化问题的解决方案&#xff0c;进而探索了机器学习与搜索的融合&#xff0c;最后展望了未来的趋势和挑战&#xff0c;提供了对AI搜索技术深刻的…

印刷企业使用数字工厂管理系统前后有什么变化

随着科技的飞速发展&#xff0c;数字工厂管理系统已经逐渐渗透到印刷企业的各个环节。本文将通过分析印刷企业在使用数字工厂管理系统前后的变化&#xff0c;探讨这一技术如何为印刷行业带来革新。 一、使用前的状况 在使用数字工厂管理系统之前&#xff0c;印刷企业的生产方式…

Qt控件按钮大全

​ 按钮 在 Qt 里,最常用使用的控件就是按钮了,有了按钮,我们就可以点击,从而响应事件,达到人机交互的效果。不管是嵌入式或者 PC 端,界面交互,少不了按钮。Qt 按钮部件是一种常用的部件之一,Qt 内置了六种按钮部件如下: (1) QPushButton:下压按钮 (2) QToolBu…

Python小白之PyCharm仍然显示“No module named ‘xlwings‘”

Python小白之“没有名称为xlwings‘的模块”-CSDN博客文章浏览阅读8次。cmd 打开命令行&#xff0c;输入python出现>>>的提示格&#xff0c;输入import xlwings 回车&#xff0c;正常报错&#xff1a;No module named xlwings。输入python 回车后&#xff0c;再输入im…

git服务器搭建

P1 kube-node2服务器 互联网已经存在的大型git服务器【版本控制服务器】 https://github.com【国外网站,速度慢】 https://about. gitlub.com/【国外网站,速度慢】 https://gitee.com【国内阿里的git网站,可以注册使用】 环境准备&#xff0c;使用之前的kube-node2主机&…

美妆商城系统 SpringBoot + Vue 【毕业设计 资料 + 源码】

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 一、前言 使用技术栈 SpringBoot Vue My…

云贝教育 |【喜报】云贝学员轻松拿下腾讯云 TDSQL-TCP(PG版)证书 最新课程介绍

亲们&#xff0c;11月18日-数据库交付运维高级工程师-腾讯云TDSQL(PostgreSQL版)-TCP&#xff01;上课了&#xff01;&#xff01; 云贝学员刚刚出炉的(postgresql)版TCP证书 课程试听 点击链接即可转跳试听课 【云贝教育】腾讯云TDSQL(PG版)交付运维高级工程师TCP认证https…

灰度图处理方法

做深度学习项目图像处理的时候常常涉及到灰度图处理&#xff0c;这里对自己处理灰度图的方式做一个记录&#xff0c;后续有更新的话会在此更新 一&#xff0c;多维数组可视化 将多维数组可视化为灰度图 img_gray Image.fromarray(img, modeL) # 实现array到image的转换,m…

不能错过的2个方法,轻松学会如何备份系统!

​天有不测风云&#xff0c;电脑也有旦夕祸福&#xff0c;谁也不能预料到未来会发生什么意外状况&#xff0c;为了防止系统故障而导致的数据丢失和系统崩溃状况&#xff0c;学会定期备份系统是很重要的。 那么我们该如何备份系统呢&#xff1f;方法其实还是有很多种…

使用VC++设计程序:对于一幅256级灰度图像,求其一元熵值、二维熵值

数字图像处理–实验二B图像的一维熵与二维熵算法 本文主要是对图像进行一维熵以及二维熵的计算&#xff0c;下面附有实现的代码 文章目录 数字图像处理--实验二B图像的一维熵与二维熵算法一、 实验内容二、 一维熵1. 一维熵的定义2. 一维熵的C代码实现 三、 二维熵1. 二维熵的定…

【Android】画面卡顿优化列表流畅度五之下拉刷新上拉加载更多组件RefreshLayout修改

之前也写过类似组件的介绍&#xff1a; 地址&#xff1a;下拉刷新&上拉加载更多组件SmartRefreshLayout 本来打算用这个替换的&#xff0c;但在进行仔细研究发现不太合适。功能都很好&#xff0c;但嵌入不了当前的工程体系里。原因就是那啥体制懂的都懂。这样的组件需要改…

VUE组件的生命周期

每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置好数据侦听&#xff0c;编译模板&#xff0c;挂载实例到 DOM&#xff0c;以及在数据改变时更新 DOM。在此过程中&#xff0c;它也会运行被称为生命周期钩子的函数&#xff0c;让开发者有机会在特定阶…