优化

· · 个人记录

咳咳,在洛谷,必不可少的是——卡常技巧

然后,作为洛谷的萌新懒癌晚期患者,对于某些TLE的题目,总会来一些优化

eg1:手动吸氧

#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast","-funroll-loops","-fdelete-null-pointer-checks")
#pragma GCC target("ssse3","sse3","sse2","sse","avx2","avx")

我也不知道为什么这样写,我只知道很有用

然后,就是registerinline(regiter其实没啥用)

eg2:

inline int qwq(puts("qwq"));
for(register int i=1;i<=n;++i) cnt++;
就比
int qwq(puts("qwq"));
for(int i=1;i<=n;++i) cnt++;
快

eg3:

std::cin$<$scanf$<快读<手打$cin std::cout$<$printf$<快输<手打$cout

直接给代码(不给std::cin,std::cout,scanf,printf的)

//快读:
inline int read()
{
    register int x=0,f=1;register char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    return x*f;
}
//快输
inline void output(int x) {if(x/10) output(x/10);putchar(x%10+'0');}
//手打cin
struct istream{
    char buf[23333333],*s;
    inline istream(){
        buf[fread(s=buf,1,23333330,stdin)]='\n';
        fclose(stdin);
    }
    inline istream&operator>>(int&d){
        d=0;
        for(;!isdigit(*s);++s);
        while(isdigit(*s))
        d=(d<<3)+(d<<1)+(*s++^'0');
        return*this;
    }
}cin;
//手打cout
struct ostream{
    char buf[8000005],*s;
    inline ostream(){s=buf;}
    inline ostream&operator<<(int d){
        if(!d){
            *s++='0';
        }else{
            static int w;
            for(w=1;w<=d;w*=10);
            for(;w/=10;d%=w)*s++=d/w^'0';
        }
        return*this;
    }
    inline ostream&operator<<(const char&c){*s++=c;return*this;}
    inline void flush(){
        fwrite(buf,1,s-buf,stdout);
        s=buf;
    }
    inline~ostream(){flush();}
}cout;

其原理:(效率)putchar(getchar)>puts(putchar)>printf(scanf)>cout(cin)

我谔谔

告一段落吧