缔造者之神
首先,继上一期的刷题的技巧网址:https://wenda.codingtang.com/questions/14775/
在上一期,我们提到了超长的火车头和黑科技cin,cout加速。
但是这些有可能是不行的,如下图:
代码如下:
#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
long long n,t;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);//火车头+黑科技
}
我该加的全部都加上了,但是仍然超时1000毫秒,这就说明了一个大问题:当这些都不可以的时候怎么办呢?
在此之前,我们先讲一下火车头的原理
火车头是编译选项,所以在考试时不能使用!!!!!!(所以做考试题时建议不要加上)
再讲一下黑科技
C++语言为什么可以使用C语言的scanf和printf呢?因为C++把C语言的东西兼容了进来。
如果东西多了,速度就会降低,所以这个黑科技的目的就是脱离C语言,纯的C++(自然有副作用,后面会提到)
例如输入1亿个数字,scanf和printf(在C++语言中)只用了40秒左右(文件操作可以测),但是cin和cout却用了将近200秒!!!!
(注:cin几乎等于cout(效率),scanf几乎等于printf(效率))
cin需要和std同步,这里详细讲一下:
<<的作用是存入缓存之中,再输出,这样的目的是为了std::cout和std::printf不会混掉。
(如果不加using namespace std;这句话,C++的输出就是std::cout和std::printf的)
存入缓存,麻烦度+1;
黑科技就是防止这种情况出现的(用了之后就不要再用printf和scanf了,已经兼容不了了)
加了黑科技后,cin的效率到了55秒,还是有差距的,所以最好用scanf和printf!!!!!!!!!
就用scanf和printf!!!!!!!!!!!!!!!!!!(讲了一堆废话,重点就在这里)
以上为使用scanf和printf的AC图片
用scanf和printf记得把黑科技去掉,否则就永远输出0!!!!