震惊!x*10
比(x<<3)+(x<<1)
快近500ms!!
CF的编译器是什么鬼,神tm有毒吧???
这是一个悲伤的故事——
今天上午辛辛苦苦肝了这题,结果T了。。。
什么玩意儿啊,我明明和标算一模一样的两个log啊,神tm怎么就T了。。
以为是线段树写丑了,然后我就不停卡常,1h后终于过了test 18,然后T在了test 24。。
还看了别人的代码,为什么vector和struct和cin在cf上跑那么快啊。。然而我本机开不开O2都跑得和它一样快啊。。
然后我就开始手动O2,还是过不了,不抱希望地又粘了一个fread,然后它竟然过了。。过了。。过了。。。足足快了将近500ms。。1e5的数据量,fread和getchar差500ms??
意识到好像有点不太对劲,于是我又试了下scanf,和fread只差了30ms。。CF的getchar到底是得有多慢啊。。怎么会比scanf还慢。。
然后我又试了一下,发现并不是getchar的问题,把(x<<3)+(x<<1)
改成x*10
之后,它的速度就又变成了我们熟悉的那个比scanf快,比fread慢的普通读优。。这两个不是等价的吗,要快也应该是(x<<3)+(x<<1)
快啊。。
我自闭了。。真的。。。
然后我又重新试了一下(x<<3)+(x<<1)
,莫名变成了一样的。。
我真傻,真的,我单知道我把getchar改成fread就快了500ms,我忘了我还加了O3和Ofast。。
原来我寻寻觅觅,全是因为我的愚蠢。
全剧终。