TLE了?试试卡常吧

在写程序中,我们经常遇到TLE的情况,许多人苦思之后也找不到正确解法,此时,我们就需要引入一种新的方法:卡常:

  • 读入优化:(快读)
#include<cstdio>(前置库)
int(long long) read(){
int (long long) x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch=='-') f=-f;//负数判断
ch=getchar()
}
while(ch>='0'&&ch<='9') {
x=x*10+ch-'0';//累加和
ch=getchar();
}
return x*f;
}
  • 输出优化(这道题没什么用)
void write(int x) {
if(x<0) {
putchar('-');
x=-x;
}//负数判断
if(x>9)
write(x/10);//先循环再输出
putchar(x%10+'0');

循环展开:

void Init(int *d, int n){
    for(int i = 0; i < n; i++)
        d[i] = 0;
}


void Init(int *d, int n){
    int il   
    for(int i = 0; i < n; i+= 4){    //每次迭代处理4个元素
        d[i] = 0;
        d[i + 1] = 0;
        d[i + 2] = 0;
        d[i + 3] = 0;
    }
    for(; i < n; i++)//将剩余未处理的元素再依次初始化
        d[i] = 0;
}
  • 函数优化:
    在代码前加上\(inline\) $ or$ $ signed $能加快代码速度
  • 变量优化:
    在循环\(or\)局部变量前加入\(register\) 能加快代码速度
  • \(O2\) \(or\) \(O3\) 优化:
    在代码前加入#pragma GCC optimize(3) 可以加快速度(\(NOIP\)赛事不允许)
  • 硬核优化(转载自CSDN,本蒟蒻不会)
#pragma GCC optimize(3)
#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")
posted @ 2019-04-26 16:18  zeroqq  阅读(202)  评论(0编辑  收藏  举报
Live2D