zoukankan      html  css  js  c++  java
  • 究极卡常神技

    2021 01 26 机房发生了第一次卡常世界大战

    故写文总结

    快速取模

    return x-x/p*p
    

    fread+write

    char buf[1<<22],Out[1<<22],*p1=buf,*p2=buf;
    ll p3=-1,FF=0;
    #define getchar() (p1==p2)&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
    inline void flush(){fwrite(Out,1,p3+1,stdout),p3=-1;}
    inline void Check(){if (p3>(1<<21)) flush();}
    inline void Putchar(char a){Out[++p3]=a;Check();}
    inline ll read(){
    	register ll sum=0,FF=0;
    	char c=getchar();
    	while(!isdigit(c))FF|=(c=='-'),c=getchar();
    	while(isdigit(c)) sum=(sum<<1)+(sum<<3)+(c^48),c=getchar();
    	return FF?-sum:sum;
    }
    inline void writ(register ll x){
    	if(x<0){
    		x=-x;
    		putchar('-');
    	}
    	if(x>9) writ(x/10);
    	Putchar(x%10+'0');
    }
    ···
    ···
    ···代码
    输出·······
    flush();
    

    要点,快速取模,快速getchar,把buf开大有时也能降常

    inline

    函数(非递归)不要忘记加inline
    

    register

    在定义变量前写上register,用于把变量放到CPU寄存器中,适用于一些使用频繁的变量(比如循环变量)
    有时候不要定义全局变量,在主函数内用register,并且在函数中可以尽量用register
    

    static

    可以降常,具体性质,注意事项不明,慎用
    

    ++i

    在for中,不要i++,要++i
    

    ^

    !=可以用^替代,<=、<等有时也可以
    

    -'0'

    使用^48代替
    

    初始化优化

    int n=1//一般做法
    int n(1)//优化做法
    

    绝对值优化

    int abs(int n){
    return (n ^ (n >> 31)) - (n >> 31);
    /* n>>31 取得n的符号,若n为正数,n>>31等于0,若n为负数,n>>31等于-1
    若n为正数 n^0=0,数不变,若n为负数有n^-1 需要计算n和-1的补码,然后进行异或运算,
    结果n变号并且为n的绝对值减1,再减去-1就是绝对值 */
    }
    

    max,min优化

    int max(int a,int b){
        return b & ((a-b) >> 31) | a & (~(a-b) >> 31);
        /*如果a>=b,(a-b)>>31为0,否则为-1*/
    }
    int min(int a,int b){
        return a & ((a-b) >> 31) | b & (~(a-b) >> 31);
        /*如果a>=b,(a-b)>>31为0,否则为-1*/
    }
    

    判断是否2的n次幂

    boolean isFactorialofTwo(int n){
        return n > 0 ? (n & (n - 1)) == 0 : false;
        /*如果是2的幂,n一定是100... n-1就是1111....
           所以做与运算结果为0*/
    }
    
  • 相关阅读:
    POJ3928 Pingpong(统计比 K 小的个数 + 树状数组)
    C++ Primer Plus读书笔记
    HDU1698Just a Hook(线段树 + 区间修改 + 求和)
    POJ3468A Simple Problem with Integers(区间加数求和 + 线段树)
    POJ2528Mayor's posters(离散化 + 线段树)
    约瑟夫环
    编写一个JavaWeb项目
    四则运算在线答题系统
    JAVA项目中的常用的异常处理情况
    第八周动手动脑
  • 原文地址:https://www.cnblogs.com/caijiLYC/p/14332607.html
Copyright © 2011-2022 走看看