快快快!

news/2024/10/22 15:43:55/

21/3/8
今天做一道比较水的题,用手写快排竟然还TLE?!

气不过,又调用了STL的快排,依然TLE。。。我TM。。。

然后看了一下题解,结果发现了C++一个致命弱点,cin cout太慢了555 。。。

为什么呢,因为cin cout读写还要经过缓存区还有其他什么乱七八糟的原因反正就是很慢,比scanf printf还要慢(毕竟scanf和printf是要指定数据类型进行读写的,cin和cout自己判断数据类型可能有点累吧)

所以,今天不谈算法,就谈一下让程序变快的快读和快写!

快读代码比较简单,先上代码:

inline int read() {int s = 0, w = 1;//这里s存数据的绝对值,w存正负号char ch = getchar();//据说getchar比cin快了不止一丢丢while (ch < '0' || ch>'9') { if (ch == '-')w = -1; ch = getchar(); }while (ch >= '0' && ch <= '9') s = s * 10 + ch - '0';return s * w;
}

是不是很简单?如果想精益求精再快一点的话,可以把数值调用改成位运算,这样每次读入都会快一点,如果数据规模很大的话整体速度也会得到可观的提升:

inline int read() {int s = 0, w = 1;char ch = getchar();while (ch < '0' || ch>'9') { if (ch == '-')w = -1; ch = getchar(); }while (ch >= '0' && ch <= '9') s = s * (1 << 1) + s * (1 << 3) + ch - (1 << 4) - (1 << 5);//这里(1<<1)+(1<<3)是10,(1<<4)+(1<<5)是48,也是'0'的ASCII码return s * w;
}

至于函数名前面的inline,就是类似于宏定义的函数声明,可以比常规函数声明快一点。

还有快写,虽然没遇到过,但是还是搬运一下以备不时之需

inline void write(int x)
{char ch[20];int len=0;//ch里面存的是从低到高的数字的ASCLL码 len是数组长度 if(x<0)//如果x是负数,那么先输出负号,再把x变成正数 {putchar((1<<5)+(1<<3)+(1<<2)+1);//(1<<5)+(1<<3)+(1<<2)+1就是'-'的ASCLL码值 x=~x+1;//x=~x+1;就等同于x=-x;}do//用do while可以防止x=0的特殊情况 {ch[len++]=x%10+(1<<4)+(1<<5);//取出最低位存到ch数组里面 因为ch是字符数组,所以要加上0的ASCLL码 x/=10;//砍掉最低位 }while(x>0);//当x>0的时候每次把x的最低位取出 for(int i=len-1;i>=0;i--)//因为ch是从低到高存的x的绝对值,又因为要从高到低输出,所以倒着循环ch数组输出 putchar(ch[i]);//输出从高到低的每一位 return ;
} 

如代码,快写就是将一个整型快速输出,当然也可以吧int改成longlong,看题目具体需要吧

以上是算法性的东西,其实也可以采用关同步的方式加快cin,cout的速度(但没有快读快写快),只需要在main函数开头写一句std::ios::sync_with_stdio(false)就好了。但是关同步后读取某些数据类型可能会发生玄学错误,如果发现不对就不要用了。


http://www.ppmy.cn/news/469981.html

相关文章

kuaijie

新建项目&#xff1a;CtrlN 这个基本上所有的软件都通用 快速保存&#xff1a;CtrlS 这个也通用 关闭文件&#xff1a;CtrlW 同样通用 注释与取消注释为&#xff1a;Ctrl/ 多行注释先选中多行&#xff0c;单行注释只要把光标定位在该行即可 组织导入&#xff1a;CtrlShiftO 快速…

快应用介绍

文章目录 1. 什么是快应用2. 快应用基本概况3. 快应用的优势4. 快应用的场景5. 快应用开发之前你需要做什么?5.1 了解接入流程5.2 需要注意的点5.3 安装 NodeJS5.4 手机安装调试器5.5 安装 toolkit 6. 开发ing6.1 创建项目6.2 安装依赖6.3 编译项目6.3.1 手动编译项目6.3.2 手…

快应用

转载至&#xff1a;https://blog.csdn.net/yi_master/article/details/79884190 对原文进行了些修改 在Apk安装的时候&#xff0c;其中有一段是说当Apk是instant app的时候&#xff0c;是允许不弹出安装界面进行安装的&#xff0c;这个instant app我们将会另开一篇来进行说明&…

快应用简介

快应用是一种新的应用形态&#xff0c;以往的手机端应用主要有两种方式&#xff1a;网页、原生应用&#xff1b;网页无需安装&#xff0c;却体验不是很好&#xff1b;原生应用体验流畅&#xff0c;却需要从应用商店下载安装&#xff0c;难以一步直达用户&#xff1b;快应用的出…

Android 快应用

在Apk安装的时候&#xff0c;其中有一段是说当Apk是instant app的时候&#xff0c;是允许不弹出安装界面进行安装的&#xff0c;这个instant app我们将会另开一篇来进行说明&#xff0c;这里先说一下不安装apk的另一种方式&#xff0c;轻应用 快应用有点类似微信小程序&#xf…

简单认识Linux系统防火墙iptables

文章目录 一、iptables防火墙1.简介2.netfilter/iptables关系3.iptables的四表五链4.数据包过滤的匹配流程 二、iptables防火墙配置3.示例 三、规则的匹配1.通用匹配2.隐含匹配3.显式匹配 一、iptables防火墙 1.简介 Linux系统的防火墙: IP信息包过滤系统&#xff0c;它实际上…

一文读懂ISM频段

ISM&#xff08;工业、科学、医疗&#xff09;频段为国际电信联盟&#xff08;ITU&#xff09;《无线电规则》定义的指定无线电频段。这些频段是为电信之外的其他射频用途挪出的频段。因此&#xff0c; ISM频段虽然理论上可用于电信用途&#xff0c;但使用ISM频段的电信设备必须…

聊一聊mysql的MVCC

技术主题 在mysql世纪使用中&#xff0c;经常涉及到MVCC的概念&#xff08;Multi-Vsersion Concurrency Control&#xff09;&#xff0c;即多版本并发控制&#xff0c;一种并发控制方法&#xff0c;根本目的是主为了提升数据库的并发性能。 mvcc为什么产生 数据库最原生的锁…