【考试技巧】输入输出优化
来源:互联网 发布:沧州管家婆软件总代理 编辑:程序博客网 时间:2024/05/18 22:41
§缘
不知大家有没有这种体验,做一道题目,即便自己用了很有可能过的算法(如O(nlogn)、O(n^2)),但是不知是什么原因(当然很可能是代码丑)而超时或耗时较长(什么800ms之类),把代码丑这一因素完全摒除(把代码写精简,不啰嗦做无用的事),然后还是不能取得高分,那么我们就要看看是不是输入输出过大了。以下就是一个例子:
时间超限(代码丑&没有输入输出优化)94%
因为cin、cout可以说是慢到极点(需要判断不同数据结构用不同方式输入输出),而scanf和printf又需要兼容各种%d、%lf、%lld(%I64d)、%x、%o、%f、%s、%c、%g各种奇奇怪怪的输入输出模式,当然也会耗些时啦(我的理解是这样)。所以我们就需要一种更加迅捷、精巧、无脑的输入输出方式,于是就有了接下来的内容。
§思
可是我们知道了scanf和cin的坏处,却不知道怎么去解决依然不行。什么东西可以快过scanf呢?其实,我们只要用心观察过scanf读入的写法就可以知道——相比整数,字符好像优先级更高。因为同样是数组,字符数组不用加&取值符就可以输出(当然可能还是我的臆想)。所以我们可以很容易的发现,getchar()和putchar()其实是很快很快的!于是乎,读入就可以向getchar()学习,写出一个极速无脑的getint(),而输出则有putint()。
§寻
好吧,那么我们就可以使用最为原始的方法,像一个三岁小孩一样去读入每一个数字了。具体实现输入就不用说了,可以自己很容易的完成。想起了2016年的NOIP普及组初赛……
那么我们看这个试题,就知道读入优化怎么写了(什么?你不知道被抠掉的空是什么?)还是得放上代码:
int getint(){int p=0;bool f=0;char c=getchar();while((c<'0'||c>'9')&&c!='-')c=getchar();if(c=='-'){f=1;c=getchar();}while(c>='0'&&c<='9'){p=p*10+(c-'0');c=getchar();}if(f)p=-p;return p;}
输出优化就没有多大必要,可以使用递归输出,如果一个数小于10,直接输出,否则先输出十位及以上部分,然后输出个位。如果是负数,先输出‘-’,再当成正数输出即可。代码也是有的:
void putint(int p){if(p<0)putchar('-'),p=-p;if(p>9)putint(p/10);putchar(p%10+'0');}
至此,我们已经知道了输入优化和输出优化了,当然如果你用了这个还是超时,请把你的代码写好看一点(或是摒弃你的算法,换一个高效的),不然你还是只能看到:
第1次提交:时间超限(代码丑)99%
第2次提交:时间超限(代码丑)99%
第3次提交:时间超限(代码丑)99%
第4次提交:时间超限(代码丑)99%
。。。
第N次提交:时间超限(代码丑)99%
- 【考试技巧】输入输出优化
- 【黑科技】C++输入输出优化技巧
- 【编程技巧】——输入输出优化
- 【黑科技】C++输入输出优化技巧
- PMP考试输入输出
- 输入输出优化
- 考试技巧
- 考试技巧
- 【总结】输入输出技巧
- ACM_java输入输出优化
- 输入输出优化代码
- c语言输入输出优化
- 输入输出优化模板
- 输入输出优化(来自LG)
- 数字输入输出优化
- NOIP输入输出优化
- c++ 输入输出优化
- BEC考试技巧
- 简单解析的几种方式:
- 跟着中国最权威研究机构,学习制造业转型新思路
- tomcat多开、建立虚拟目录和虚拟站点
- IDEA第三章----idea常用配置
- 使用spring实现资源国际化
- 【考试技巧】输入输出优化
- 中小企业网站建设必须要说的那些事儿
- HTTPS 客户端验证 服务端证书流程
- 中企动力2017年产品专家晋级大赛
- 嵌入式个人收藏
- 图的邻接矩阵存储下的广度优先遍历
- OVER(PARTITION BY)函数介绍
- html5的canvas绘制迷宫地图
- PHP跨域 解决跨域