一、時間複雜度常數優化
(一)輸入、輸出優化
cin加速:
- 關閉標準輸入流的同步
ios::sync_with_stdio(false);
- 解除cin與cout的綁定
cin.tie(0);
利用getchar()&putchar()手寫輸入輸出函數:
- 讀入優化
-
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]