读入输出优化 黑科技 快过freadfwite
大家都很强, 可与之共勉 。
可能还是比不上mmap
但是使用了iostream底层的streambuf,效果极快。
namespace In {
# define In_Len 2000000static std :: streambuf *fb ( std :: cin.rdbuf ( ) ) ;static char buf [In_Len], *ss ( 0 ), *tt ( 0 ) ;
# define pick( ) ( (ss == tt) ? ( tt = buf + fb -> sgetn ( ss = buf, In_Len ), ((ss == tt) ? -1 : *(ss ++)) ) :*(ss ++) )inline char getc ( ) { register char c; while ( isspace ( c = pick ( ) ) ) ; return c ; }inline int read ( ) {register int x, c ;bool opt ( 1 ) ;while ( isspace ( c = pick ( ) ) && ( c ^ -1 ) ) ;if ( c == 45 ) c = pick ( ), opt = 0 ;for ( x = -48 + c ; isdigit ( c = pick ( ) ) ; ( x *= 10 ) += c - 48 ) ;return opt ? x : -x ;}
# undef pick
# undef In_Len
}namespace Out {
# define Out_Len 2000000std :: streambuf *fb ( std :: cout.rdbuf ( ) ) ;char buf [Out_Len], *ss ( buf ), *tt ( buf + Out_Len ) ;
# define echo( c ) ( (ss == tt) ? ( fb -> sputn ( ss = buf, Out_Len ), *ss ++ = c ) : ( *ss ++ = c ) )inline void putc ( char c ) { echo ( c ) ; }inline void print ( register int x ) {static int st [30], tp ( 0 ) ;if ( ! x ) { echo ( 48 ) ; return ; }if ( x < 0 ) { echo ( 45 ) ; x = -x ; }while ( x ) st [++ tp] = x % 10 | 48, x /= 10 ;while ( tp ) { echo ( st [tp] ) ; -- tp ; }}inline void flush ( ) { fb -> sputn ( buf, ss - buf ) ; }# undef echo
# undef Out_Len
}
Update 2017.12.26
更新一个短一点的,In先调用init,Out结束调用flush(当然可以写成class的析构函数……)
namespace In {
# define In_Len 2000000static std :: streambuf* fb ( std :: cin.rdbuf ( ) ) ;static char buf [In_Len], *ss ( 0 ) ;void init ( ) { fb -> sgetn ( ss = buf, In_Len ) ; }inline int read ( ) {register int x ;bool opt ( 1 ) ;while ( isspace ( *ss ) ) ++ ss ;if ( *ss == 45 ) { ++ ss ; opt = 0 ; }for ( x = -48 + *ss ; isdigit ( * ++ ss ) ; ( x *= 10 ) += *ss - 48 ) ; ++ ss ;return opt ? x : -x ;}
# undef In_Len
}namespace Out {
# define Out_Len 2000000static std :: streambuf* fb ( std :: cout.rdbuf ( ) ) ;static char buf [Out_Len], *ss ( buf ) ;inline void print ( register int x ) {static int T [30], tp ( 0 ) ;if ( ! x ) { *ss ++ = 48 ; *ss ++ = 10 ; return ; }if ( x < 0 ) { *ss ++ = 45 ; x = -x ; }while ( x ) T [++ tp] = x % 10 | 48, x /= 10 ;while ( tp ) *ss ++ = T [tp --] ;*ss ++ = 10 ;}inline void flush ( ) { fb -> sputn ( buf, ss - buf ) ; }# undef Out_Len
}
读入输出优化 黑科技 快过freadfwite相关推荐
- C++中的读入输出优化及清新脱俗的宏命令
C和C++有了#define,从此它就变了模样 宏命令就是#define,#if,#error之类的 本文主要介绍宏命令和相关的骚操作 读入输出优化 inline int read() {int an ...
- 快读快写:读入输出优化
引入 初学OIOIOI的时候,只用的cin/coutcin/coutcin/cout,后来教练说,cincincin很慢,有的数组光读入就超时了--balabalabalabalabalabala,所 ...
- Android 编译速度优化黑科技 - RocketX
一.背景描述 二.效果展示 三.思路问题分析与模块搭建 四.问题解决与实现 五.一天一个小惊喜 六.下一步展望 一.背景描述 在项目体量越来越大的情况下,编译速度也随着增长,有时候一个修改需要等待长达 ...
- 腾讯成本优化黑科技:整机CPU利用率最高提升至90%
腾讯TLinux团队提出了一套全新的混部方案,在不影响在线业务的前提下,对整机CPU利用率提升效果非常明显,在有的业务场景下,整机CPU利用率甚至能提升至90%. 一.前言 腾讯运营着海量的服务器 ...
- “本地资源检测” 上手指南,玩转最前沿的优化黑科技!
UWA本地资源检测是对游戏.VR等项目工程的资源.代码和设置等进行自动检测的服务,是项目研发持续集成.持续交付流程中的重要一环,旨在为游戏研发制定资源与代码规范,帮助研发团队快速发现和解决项目中的性能 ...
- 滴滴 App 质量优化黑科技,都做了什么
点击上方"开发者技术前线",选择"星标" 每天 14.00 在看 | 真爱 作者: 承香墨影 | 来源:公众号 承香墨影 一. 序 当 App 达到一定体量的时 ...
- ACM入门之【读入、输出优化】
本文主要是基于oiwiki的做的总结,未来也会做一系列的相关文章.如果想继续看的话可以关注专栏. 做这个专栏的目的是因为自己最近开始系统的再打一下基础.于是想写一个专栏便于喜爱ACM的初学者入门. 目 ...
- 检测图片篡改困难?快来试试这款黑科技
一.前言 之前看到过一个新闻:上海一对硕士夫妻PS篡改结婚证.离婚证,竟真的骗保成功了: 当时看到这个新闻时我是惊讶又有点惶恐的,惊讶于真有这么胆子大的人,惶恐于最近我们刚好有需要去做一些证件图片是否 ...
- 从原生到黑科技:闲鱼 Flutter 图片优化经历了什么?
简介:阿里妹导读:图片加载是 APP 最常见也最基本的功能,也是影响用户体验的因素之一.在看似简单的图片加载背后却隐藏着很多技术难题.本文介绍闲鱼技术团队在 Flutter 图片优化上所做的尝试,分享 ...
最新文章
- js 获取input type=file 文件,并且上传
- Docker(七):Docker build 、Docker Dockerfile 详解
- leetcode 450. 删除二叉搜索树中的节点 c语言实现
- Apache shutdown unexpectedly启动错误解决方法
- 股票的科创板,新三板,创业板到底哪个能让你赚钱
- 计算机文字录入培训大纲,《计算机文字录入》课程教学大纲
- C#DateTime的用法
- 推荐十五款APP原型设计工具
- CentOS 7 搭建邮件服务器搭建(postfix+dovecot)
- iOS设备的越狱方法
- zheng-环境搭建及系统部署文档
- debian10 buster 在thinkpad T470P 上安装指纹驱动 138a:0097 Validity Sensors
- 幼麟棋牌技术分享系列:H5棋牌游戏加载速度优化
- linux安装gfortran出现错误,Fortran gfortran linux中出现“Segmentation Fault(core dumped)”错误...
- Vue 源码之 mixin 原理
- vs2008简体中文正式版下载
- 未来低功耗计算机,一种低功耗计算机主板
- Windows下Postgresql数据库的下载与配置
- eclipse功能template(模板)学习。e.g : 快速在代码中插入时间戳
- a session ended very soon after starting. check that the command in profile default is correct