首页 > 其他 > 详细

一些OI常用小技巧啊

时间:2020-10-02 22:45:59      阅读:39      评论:0      收藏:0      [点我收藏+]

1.卡常

\[---总有人以为自己比编译器聪明 \;\;\;by\;\;bezel \]

我们可能确实没有编译器聪明,但是,为了防止CCF的老人机出现什么问题,卡一卡常还是有必要的。

如果实在被逼无奈,你什么

\[register, inline, fread \]

都能往上写

inline void qaq(int x)
{
      //````````
      for(register int i = 1; i <= x; i++)
            //`````
}

2.快读

这部分其实也可以算到卡常里,但是这个其实更常用。

就比如,我曾经用\(register\)和快读把一个1.5s的程序硬生生卡到了947ms,然后就多过了一个点。。。

技术分享图片

技术分享图片

或者可以把一个程序卡掉700+ms

技术分享图片

主要思想就是,用\(getchar\)\(putchar\)快速读入替代\(cin,cout\)甚至\(scanf\)\(printf\)

当然,快读里也可以卡常。

#define ll long long
#define li inline

li void read(ll &x)
{
	char s = getchar();
	x = 0;
	ll f = 1;
	while(s < ‘0‘ || s > ‘9‘){if(s == ‘-‘)f = -1; s = getchar();}
	while(s >= ‘0‘ && s <= ‘9‘){x = (x << 3) + (x << 1) + (s ^ 48); s = getchar();}
	x *= f;
}

对于语句

x = (x << 3) + (x << 1) + (s ^ 48);

等价于

x = x * 10 + s - ‘0‘;

只是位运算比四则运算快,所以就小卡一下。

这里也直接把输出优化的代码给出

#define ll long long
#define li inline

li void print(ll x)
{
	if(x < 0){putchar(‘-‘); x = -x;}
	if(x > 9)
		print(x / 10);
	putchar(x % 10 + 48);
}

持续更新中!

一些OI常用小技巧啊

原文:https://www.cnblogs.com/Starry---sky/p/13762614.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!