◆程序笔记◆◇第三期◇ 读入优化
来源:互联网 发布:光伏数据采集器接法 编辑:程序博客网 时间:2024/06/05 16:39
Lucky_Glass的程序笔记
第三期-读入优化
C++给我们提供了各种各样的读入方法,常见的有 scanf (标准输入)和 cin (流输入)。但是有一些可怕的题——输入高达几万组(ヽ(゚Д゚)ノ),cin已经炸了,不过还可以用ios::sync_with_stdio(false)
——关闭流输入输出与标准输入输出的连接——来拯救一下。这样可以达到标准输入输出的速度,but….还有一些更可怕的题——输入数据超过了十万。就算scanf也会超时。
这样如何解决呢?就需要自己写一个读入优化。
一、何为读入优化
读入优化是指利用C++的cstdio库中的getchar()函数来优化整数(或实数)的读入速度。那么读入优化究竟是有多快?如下表:
根据此表,我们可以得出尽管读入了一千万个整数,但是时间还不达半秒(ヽ( ̄▽ ̄)ノ),是完全不需要担心超时的。
这里介绍一个计算程序运行时间的方法:用到了ctime里的clock()函数,它返回的是当前的时间。具体的方法是——在你想开始计时的位置,定义一个double的变量t1,初值为clock(),在计时完毕处也定义一个这样的变量t2,则 t2-t1就得到了运行时间,以毫秒为单位。
二、 读入优化函数
一般来说,我们习惯把读入优化函数定义为read()。它的返回类型按照读入类型转换。getchar() 是读入一个字符,速度非常快,那么我们就可以把读入数据抽象成一个字符串,则每次读入其中的一个字符,最后的结果的绝对值存在一个变量x中。由于我们只读入整数,数据中无法避免的会有一些间隔字符,在读入之前,我们用一个while循环读入这些字符,直到读入到数字。但是处理负数的话还需要在开头找到’-‘号,所以当读入到负号时,将标记变量f改为1。接下来就只读入数字,当数字读完时退出,每读入一个数字g,则把x改为 x*10+g,也就是将之前读入的数提前,再将个位补为读入的g。最后判断标记变量f,若为true,则返回 -1*x,否则直接返回x。注意读入的数据大小,避免溢出!
三、 看看代码吧!
//读入正整数优化int read(){ char ch;ch=getchar();int x=0; while(ch<'0' || ch>'9') ch=getchar(); while('0'<=ch && ch<='9') x=x*10+ch-'0',ch=getchar(); return x;}
The End
Thanks for reading!
-Lucky_Glass
- ◆程序笔记◆◇第三期◇ 读入优化
- ◆程序笔记◆◇第五期◇你好,NOIP
- ◆程序笔记◆◇第四期◇扩展欧几里得算法
- 读入优化
- 读入优化
- 读入优化
- 读入优化
- 读入优化
- 读入优化
- 读入优化
- 读入优化
- 读入优化
- 读入优化
- 读入优化
- 读入优化
- 读入优化
- 读入优化
- 读入优化
- java面试逻辑题
- WebUploader使用
- 编写shell脚本
- [LeetCode] 476.Number Complement
- unix 高级编程学习 --进程
- ◆程序笔记◆◇第三期◇ 读入优化
- fill (贪心)
- Leetcode:Maximal Square & Maximal Rectangle
- 记住企业与股票之间总是有差距的
- JDBC数据源(DataSource)的简单实现
- 关于const 修饰变量、引用、指针的说明
- Safe to store list::iterator for later use?
- HDU-4267-A Simple Problem with Integers-(树状数组)
- Redis安装和配置