小技巧-读优与写优

读优与写优

读优与写优是面对输入或者输出数据规模比较巨大的时候,cin和cout会TLE,即使是scanf和printf也会浪费大量时间,这时我们就可以使用读优与写优

一个小小的冷知识

cin和cout之所以慢,是因为它有很多的保险设置,浪费了时间,所以只要加入这段代码

1 std::ios::sync_with_stdio(false); 

这样就可以取消cin和cout的保险装置

正经的读优与写优

原理

用cin和cout或者scanf和printf读写单个数字时,速度会比getchar和putchar读写单个字符慢很多,考虑到比起读写的时间,运算的时间几乎可以忽略不计,那么我们可以使用getchar和putchar按数位输入输出,加快读写速度

读入优化

基本原理

使用一个while过滤掉所有非数字的字符,并且判断正负,再用一个while把数字*10并读入下一位。这样我们需要一个字符变量来读入,需要两个整数变量来存储符号和数字的绝对值

代码

 1 inline int qread()
 2 {
 3     char ch = getchar();
 4     int f = 1, x = 0;//f符号x绝对值
 5     while(!(ch >= ‘0‘ && ch <= ‘9‘))
 6     {
 7         if(ch == ‘-‘) f = -1;//判断符号
 8         ch = getchar();
 9     }
10     while(ch >= ‘0‘ && ch <= ‘9‘)
11     {
12         x *= 10;
13         x += (ch & 15);//&15相当于-‘0‘,也就是字符转换成数字
14         ch = getchar();
15     }
16     return f * x;
17 }

这就是常用的读优了。然而如果你比较懒,可以使用<cctype>库里面的isdigit(char)函数来判断一个字符是否是数字,但是可能对于低版本的编译器会出现一些玄学bug,所以还是推荐手动判断在‘0‘和‘9‘之间,这样,想读入一个int a,就可以这样

1 a = read();

如果你的整数时long long不是int,那么把读优函数类型和函数里面的int全部换成long long,就OK了。读优是一个很常用的操作,可以解决很多由于数据量大而TLE的问题。

输出优化

其实写入优化远不如读入优化常用,因为很多人懒得写。。。再说很多题是读入一堆,输出只有每行一个数。。。

一些改变

如果像读入优化一样按位输出,你会发现所有数字反了过来。如果写一个栈来存数,反而弄巧成拙了,那么可以用递归来实现

代码实现

我对面那台电脑上的大佬随手用递归写了一个写优函数

1 void print(int n)
2 {
3     if(n==0) return;
4     print(n/10);
5     putchar(n%10+‘0‘);
6 }

我一看,实属巧妙,它会把这个数字按照正确的顺序从左往右输出。然而,当数字为0的时候,它会什么也输出不出来,如果是负数会炸掉,所以我给它加工了一下

 1 inline void print(int n)
 2 {
 3     if(n==0) return;
 4     print(n/10);
 5     putchar(n%10+‘0‘);
 6 }
 7 inline void qwrite(int n)
 8 {
 9     if(n==0)
10     {
11         putchar(‘0‘);
12         return;
13     }
14     if(n<1)
15     {
16         putchar(‘-‘);
17         n*=-1;
18     }
19     print(n);
20 }

这样,需要输出一个整数a时,就可以这样实现了

1 qwrite(a);

 重点!重点!重点!小数千万不要使用读写优化!这个读写优化只能用于整数!

原文地址:https://www.cnblogs.com/Juruo1103/p/10011237.html

时间: 2024-10-12 09:02:05

小技巧-读优与写优的相关文章

10个编程小技巧,教你写出高质量代码!

你会写代码吗你会写高质量代码吗你知道怎么写高质量代码吗不要一上来就开始写代码想清楚,再动手今天,分享10个写代码的小技巧教你写出高质量代码↓↓↓ 1.重构思维模式 不要一上来就开始写代码,要掌握尽量多的重构方法,重构思维方式,掌握重构并不一定是要对原来代码的重构,而是让自己在操作之前就想好该怎么去进行. 2.搞清需求再动手 看到需求之后,肯定多多少少会有一些问题,或是理解上的错误,或是功能实现上的问题,这时,必须要交流清楚,否则,后续将会有更多问题. 3.文档也要写 可能不少人觉得文档没人看,写

5分钟掌握JavaScript小技巧

1. 删除数组尾部元素 一个简单的用来清空或则删除数组尾部元素的简单方法就是改变数组的length属性值. const arr = [11, 22, 33, 44, 55, 66]; // truncanting arr.length = 3; console.log(arr); //= [11, 22, 33] // clearing arr.length = 0; console.log(arr); //= [] console.log(arr[2]); //= undefined 2.使用

代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧

代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧 最近接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问,就是应该如何制作UI界面.iOS应用是非常重视用户体验的,可以说绝大多数的应用成功与否与交互设计以及UI是否漂亮易用有着非常大的关系.而随着iOS开发发展至今,可以说在UI制作上大家逐渐分化为了三种主要流派:使用代码手写UI及布局:使用单个xib文件组织viewController或者view:使用StoryBoard来通过

mysql写Shell小技巧

今天终于在表哥的帮助下解决了文件导入/出这个问题了.(很菜逼的一个问题),然后将最近看到的文章都自己测试了下,顺便奉上记录.1.Mysql数据库支持union的时候写文件小技巧: 采用常规的union写入,可以看到前面的字段占位数肯定也会被写入,替换成null也是一样的结果,这个对于写shell没啥大碍,但是如果用来写bat,mof,vbs等文件就会出问题了,那么怎么去掉这个只写入我们需要的内容呢?采用hex编码就好了. 将我们要写入的内容使用hex编码在分段写在每个字段位上,这样就可以只写入我

CSS 黑魔法小技巧,让你少写不必要的JS,代码更优雅

首页 登录注册 CSS 黑魔法小技巧,让你少写不必要的JS,代码更优雅 阅读 8113 收藏 927 2017-09-26 原文链接:github.com 腾讯云容器服务CSS,立即免费体验容器集群吧!cloud.tencent.com 之前不久,由于自己平时涉猎还算广泛,总结了一篇博客:这些JavaScript编程黑科技,装逼指南,高逼格代码,让你惊叹不已,没想到受到了大家的欢迎,有人希望能博主还能整理个 CSS 的一些黑魔法小技巧,无奈我 CSS 一直很渣,没什么干货,最近写了一个 Chro

10个小技巧助您写出高性能的ASP.NET Core代码

今天这篇文章我们来聊一聊如何提升并优化ASP.NET Core应用程序的性能,本文的大部分内容来自翻译,当然中间穿插着自己的理解,希望对大家有所帮助!话不多说开始今天的主题吧! 我们都知道性能是公共网站取得成功的关键因素之一.如果一个网站的响应时间超过3秒,那么用户通常不会再此光顾(此网站).谷歌,Bing,百度以及其他搜索引擎也更倾向于推荐优化后的,移动友好的以及响应速度更快的网站. 作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/10507984.

xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧

最近接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问,就是应该如何制作UI界面.iOS应用是非常重视用户体验的,可以说绝大多数的应用成功与否与交互设计以及UI是否漂亮易用有着非常大的关系.而随着iOS开发发展至今,可以说在UI制作上大家逐渐分化为了三种主要流派:使用代码手写UI及布局:使用单个xib文件组织viewController或者view:使用StoryBoard来通过单个或很少的几个(关于这点稍后会进行展开)文件构建全部UI.应该使用哪种方式来制作UI已经是iOS开发中

性能优化小技巧

https://developer.android.com/training/articles/perf-tips.html 这篇文章主要讲述了一些小优化,但是如果把这些小优化都结合起来的话则会提高一个app的整体性能.不过这也不代表对于性能它们会有质的改变.首当其冲是选择正确的算法和数据结构,不过它不在本篇文章的讨论范围内.你应该将本篇文章讨论的小技巧融入到编码习惯中以提示通用编码效率. 编写有效率的代码,有两个基本的原则: 不要做太多不需要你做的事 不要使用你可以不用的内存 当对一个app进

PHP开发者该知道的5个Composer小技巧

Composer 是新一代的PHP依赖管理工具.本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方便. 1. 仅更新单个库 只想更新某个特定的库,不想更新它的所有依赖,很简单 composer update foo/bar 此外,这个技巧还可以用来解决“警告信息问题”.你一定见过这样的警告信息: Warning: The lock file is not up to date with the latest changes in composer.json, you may