學習筆記 卡常技巧

2022-09-20 23:45:12 字數 1278 閱讀 8091

卡常的全名叫做卡 常 數

顧名思義,這是一種簡單有效的優化。

只可惜,它最多只能降低大約十幾毫秒的時間,

但筆者作為乙個相當的蒟蒻,

當然要為廣大 \(\operatorname\) 獻上乙份卡常計畫書啦!

c++中有乙個叫做register的東西,

它可以將變數存入暫存器中。

暫存器可以做到快速存入與取出

因此也能起到優化作用。

舉乙個栗子:

for(int i=1;i<=n;i++)

這是經典的for迴圈,

但由於i++有乙個 \(o(1)\) 級別的引用操作

所以,如果將i++改成++i,能起到微小的優化

不過,有總比沒有好

我們知道,

計算機位運算都是基於二進位制下的操作,

那麼,如果我們用一些簡單的位運算代替c++自帶的運算,

豈不美哉?

在這裡,筆者直接抓一把新鮮的栗子給各位康康 (懶得解釋:

將乙個整數i乘上2的正整數次冪(\(i\times 2^n\)),用i<

將乙個整數i除以2的正整數次冪(\(i\div 2^n\)),用i>>n

將乙個整數i2的正整數次冪取餘(\(i\mod 2^\)),用i&((1<

交換兩個整數xy,用x^=y^=x^=y(可以直接巨集定義);

將整數i正負號轉換,用i=~i+1i=(i^-1)+1

判斷整數 i 的奇偶性,用 i&1 (基於第三條)

7.i!=-1 優化成 ~i

使用時注意優先順序

玄學卡常技巧總結

近期總是被cin和cout搞tle,一時興起找了些卡常技巧 文末有參考說明 快讀 inline intread while c 0 c 9 return x f 一般不用輸出優化 inline void out int x putchar x 10 0 在宣告函式之前寫上inline修飾符,可以加快...

卡常筆記本

不是刻意搞的,只是把平時的經驗放上來。sqrt 的是我覺得比較有用的 話說沒用的好像被我刪了哈 它們之間差了4倍常數,所以慎用long long 開o 2o 2 o2 後前者略快於後者,不開o 2o 2 o2 慢到飛起,建議noipcsp乖乖手寫 2種寫法,被打了注釋的那種 常數差不多是另一種的2倍...

卡常技巧(部分只在GMOJ上適用)

化學中有乙個神奇的東西,它不溶於水,不溶於鹼,不溶於酸,不溶於有機物。它水火不侵,百毒不傷,無論是在噴燈上加熱,還是接通高壓電,亦或是通入氟氣,它都毫髮無損。人們聞知而色變,它叫 雜質。資訊學中也有乙個神奇的東西,它能使o n 2 o n 2 o n2 的程式輕鬆碾壓105 10 5 105的資料,...