问题标题: 酷町堂:关于刷题的技巧

0
0
已解决
王文博
王文博
缔造者之神
缔造者之神

首先,继上一期的刷题的技巧网址: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!!!!


0
0
0
0
0
0
我要回答