指標優化並沒有什麼卵用,反而增大了**的不可讀性。
除了本來的迴圈順序優化定址,在預處理單位複數根時,可以連續儲存,以增快定址速度,細節見**。
**給出的是fft,ntt是一樣的。
#include#define fo(i, x, y) for(int i = x, b = y; i <= b; i ++)
#define ff(i, x, y) for(int i = x, b = y; i < b; i ++)
#define fd(i, x, y) for(int i = x, b = y; i >= b; i --)
#define ll long long
#define db double
#define pp printf
#define hh pp("\n")
using namespace std;
struct p
};p operator + (p a, p b)
p operator - (p a, p b)
p operator * (p a, p b)
const db pi = acos(-1);
const int nm = 1 << 21;
int r[nm]; p a[nm], b[nm], w[nm];
void dft(p *a, int n, int f) p b;
for(int i = 1; i < n; i *= 2) for(int j = 0; j < n; j += 2 * i)
ff(k, 0, i) b = w[i + k] * a[i + j + k], a[i + j + k] = a[j + k] - b, a[j + k] = a[j + k] + b;
if(f == -1)
}void fft(p *a, p *b, int n)
int main()
BZOJ4259 殘缺的字串(FFT 卡常)
題面 題意 兩個串a和b,有萬用字元,問a在b中出現了幾次。好題 除了卡常以外 將萬用字元設為0 列舉開頭x 設f x m 1 i 0a i b x i a i b x i 2 f x i 0m 1a i b x i a i b x i 2若f x 為0,則a在b x 處出現了一次 f又恰好為乙個卷...
卡常筆記本
不是刻意搞的,只是把平時的經驗放上來。sqrt 的是我覺得比較有用的 話說沒用的好像被我刪了哈 它們之間差了4倍常數,所以慎用long long 開o 2o 2 o2 後前者略快於後者,不開o 2o 2 o2 慢到飛起,建議noipcsp乖乖手寫 2種寫法,被打了注釋的那種 常數差不多是另一種的2倍...
玄學卡常技巧總結
近期總是被cin和cout搞tle,一時興起找了些卡常技巧 文末有參考說明 快讀 inline intread while c 0 c 9 return x f 一般不用輸出優化 inline void out int x putchar x 10 0 在宣告函式之前寫上inline修飾符,可以加快...