C++程序細節優化總結

一、時間複雜度常數優化

(一)輸入、輸出優化

cin加速:

  1. 關閉標準輸入流的同步
    ios::sync_with_stdio(false);

     

  2. 解除cin與cout的綁定
    cin.tie(0);

     

利用getchar()&putchar()手寫輸入輸出函數:

  1. 讀入優化
  2. inline int read()
    {
    	int x=0,f=1;char c=getchar();
    	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    	while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
    	return x*f;
    }

    輸出優化

    inline void print(int x)
    {
        if(x<0)putchar('-'),x=-x;
        if(x>9)print(x/10);
        putchar(x%10+'0');
    }

     

 

(二)常用函數優化

計算絕對值  

inline int abs(int x)
{
	int y=x>>31;
	return (x+y)^y;
}

求最大值

inline int max(int x,int y)
{
	int m=(x-y)>>31;
	return (y&m)|(x&~m);
}

求最小值

inline int min(int x,int y)
{
	int m=(x-y)>>31;
	return (y&m|x&~m)^(x^y);
}

交換兩個數

inline void swap(int &x,int &y)
{
	x^=y,y^=x,x^=y;
}

算平均數

inline int ave(int x,int y)
{
	return (x&y)+((x^y)>>1);
}

 

(三)其他優化

多次使用同一個函數值時用一個變量儲存

string s;
int len=s.length();
	
vector<int>g[MAXN];
int l1=g[x].size();
	
int ml=X(d);

O2優化(競賽禁用)

#pragma GCC optimize(2)

底層優化

int f[5000000][2];
//better than f[2][5000000]

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章