利用getchar()函数加速读入。
Q:读入优化是什么?
A :更加快速地读入一些较大的数字。
Q:scanf不是已经够快了吗?
A:Naive,scanf还是不!够!快!
Q:那怎么办呢?
A:我们需要大杀器——读入优化!
 
读入优化非常充分地运用了getchar()函数的特性——快,把数字当成字符读入,处理起来就比较快了。读入的数据达到10^5规模以上时,cin和scanf就会开始显现劣势,但读入优化函数仍能非常快速地读入。
其实读入优化有好多版本。我这个是夏令营gty哥哥版本的读入优化。从网上找到的读入优化基本上都是与这个大同小异。
       

 inline int read(){
int num = ;
char c;
bool flag = false;
while ((c = getchar()) == ' ' || c == '\n' || c == '\r');
if (c == '-')
flag = true;
else
num = c - '';
while (isdigit(c = getchar()))
num = num * + c - '';
return (flag ? - : ) * num;
}

这个isdigit函数存在于cctype头文件下,如果输入的是一个数字,则它返回true。

还有一个版本的读入优化是不用这个isdigit函数的,它直接用if进行判定,这样也是可以的,读者不妨一试。

这两个函数里都使用了关键字inline。它代表这是一个“内联函数”。把一个函数声明为内联函数可以提高函数的执行效率,它省去了函数调用的额外开销。
但是我们不能因为此特性而去大幅使用内联函数。在有些时候,内联函数不仅不会提高效率,反而会严重影响效率。这多半是因为函数内代码比较多,导致内存使用较多(内联函数以内存使用较多为代价)。
flag用来判断负数,很好理解。
 
每次输入一个数字都把它转化一下,把之前的数乘10,相当于都往上移了一位,那么就给新进来的这一位提供了空间。
最后返回这个转化的数即可。
 
今天已经太晚了。。我有时间的话会自己搞一次cin,scnaf和读优的性能测试,用数据说话才更有说服力嘛。。。
 

OI黑科技:读入优化的更多相关文章

  1. 【黑科技】读写优化 orz bdd

    转自 bdd :http://www.cnblogs.com/kevince/p/3924688.html 读入优化: inline int read() { char ch; bool flag = ...

  2. ACM: FZU 2105 Digits Count - 位运算的线段树【黑科技福利】

     FZU 2105  Digits Count Time Limit:10000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  3. localStorage的黑科技-js和css缓存机制

    一.发现黑科技的起因  今天在微信公众号看到一篇技术博文,想用印象笔记收藏,所以发送了文章链接到pc上.然后习惯性地打开控制台,看看源码,想了解下最近微信用了什么新技术.  呵呵,以下勾起了我侦探的欲 ...

  4. 基于Twitter的Snowflake算法实现分布式高效有序ID生产黑科技(无懈可击)

    参考美团文档:https://tech.meituan.com/2017/04/21/mt-leaf.html Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万 ...

  5. 【转载】史上最全:TensorFlow 好玩的技术、应用和你不知道的黑科技

    [导读]TensorFlow 在 2015 年年底一出现就受到了极大的关注,经过一年多的发展,已经成为了在机器学习.深度学习项目中最受欢迎的框架之一.自发布以来,TensorFlow 不断在完善并增加 ...

  6. 黑科技抢先尝(续2) - Windows terminal中Powershell Tab的极简美化指南

    目录 安装python 安装git 安装powerline字体 主题定制 安装oh-my-posh 查看策略组的执行权限 使用choco 安装终端模拟器 - ConEmu 优化 PowerShell ...

  7. MTSC2019-腾讯WeTest独家揭秘移动游戏测试和质量保障 QA 黑科技

    WeTest 导读 TesterHome 联合腾讯 WeTest 出品 MTSC2019 重磅游戏测试 Topic ,首次公开揭秘腾讯亿级用户游戏背后的质量保障 QA 黑科技. 2019 年,中国游戏 ...

  8. Java黑科技之源:JVMTI完全解读

    Java生态中有一些非常规的技术,它们能达到一些特别的效果.这些技术的实现原理不去深究的话一般并不是广为人知.这种技术通常被称为黑科技.而这些黑科技中的绝大部分底层都是通过JVMTI实现的. 形象地说 ...

  9. 黑科技——树剖两次dfs转一次dfs!

    黑科技--树剖两次\(dfs\)转一次\(dfs\)! 重所周知,树链剖分通常是要\(dfs​\)两次的,就像这样: int Fa[N],dep[N],Sz[N],son[N]; void dfs1( ...

随机推荐

  1. Ping pong(树状数组求序列中比某个位置上的数小的数字个数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2492 Ping pong Time Limit: 2000/1000 MS (Java/Others) ...

  2. codeforces A. Orchestra B. Island Puzzle

    A. Orchestra time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  3. 【原创】最新的"答题热"中,前端的一点小工作

    一.前言 据王思聪引爆全民HQ也3个星期了,总结下最新做的一个有关"答题热"的工具.并借由这个工具的开发,分析当下HybridApp中H5的一些技术. 在百万英雄等节目刚出来的时候 ...

  4. Entity Framework Core 懒加载

    众所周知在EF 6 及以前的版本中,是支持懒加载(Lazy Loading)的,可惜在EF Core 并不支持,必须使用Include方法来支持导航属性的数据加载.不过现在EF Core的开发团队打算 ...

  5. 根据父节点parentid查询节点信息

    ---恢复内容开始--- SELECT * from  tb3 where pid in(select id from tb1 where parentId ='ce2a98d7a04c4bf6a38 ...

  6. typedef和define具体的详细区别

    1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错.例如: #define PI 3.141 ...

  7. 基于Echarts4.0实现旭日图

    昨天Echarts4.0正式发布,随着4.0而来的是一系列的更新,挑几个主要的简单说明: 1.展示方面通过增量渲染技术(4.0+)ECharts 能够展现千万级的数据量 2.针对移动端优化,移动端小屏 ...

  8. [国嵌笔记][014][Mini2440安装Linux]

    引导安装步骤 相关介绍: 开发板软件构成:Bootloader.嵌入式操作系统.嵌入式文件系统 JTAG接口常用于对flash等器件进行编程,常见的JTAG下载线有并口和USB接口两种 硬件连接: 1 ...

  9. Sqoop介绍

    Sqoop介绍 http://sqoop.apache.org http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html   1.什么是Sqoop? ...

  10. OKMX6Q libx264交叉编译

    最开始使用的是最新版x264-snapshot-20171119-2245 配置使用: ./configure --host=arm-linux --cross-prefix=arm-linux- - ...