眾所周知,c++裡是自帶讀入的(這不廢話嗎)
例如:
inta; cin>>a;
這樣的讀入理解簡單,適合初學者,但是非常慢。
再例如:
inta; scanf("%d
",&a);
這樣的讀入就比較快了,也較好理解,在題目不卡時間的情況下可以通過大部分題。
——但是,還不夠快。
有一些毒瘤題目是非常卡時間的,稍微慢一點就過不去,因此,快讀應運而生:
inline intread()
while(ch>='
0'&&ch<='9'
)
return x*f;
}
原理其實也不難,我們知道,單個讀入字元要比讀入數字快得多(別問我,我也不知道為什麼)
因此我們可以以字元的形式讀入,然後自己計算出數字
重點是第十行:x=(x<<1)+(x<<3)+(ch^48);
" << x" 操作為二進位制操作,原理是將原二進位制數向左平移 x 位,右邊原位置以 0 補齊
例如:原二進位制數 10001 經過 << 2 後,變為 1000100
其效果: x << 1 == x * 2;
x << 2 == x * 2 * 2;
x << 3 == x * 2 * 2 * 2;
………………
所以 (x<<1)+(x<<3) 可視為 x * 10;
後面的 (ch^48) 效果為 ch - = '0';
getchar() 為讀入單個字元(包括空格 ,換行符)
當然,快讀也有不適用的時候,例如讀入中包含大量無用空格
11112233
3211
52
這時就識趣的別用快讀了吧!
快速讀入(快讀)
在一些題目中,需要輸入很多的資料,而時間卻還限制著,這是我們就需要考慮提高輸入效率。scanf的輸入效率要高於cin,一般來說cin不能過的用scanf也許就能過,但總有情況需要更高的輸入效率,而getchar的輸入效率又高於scanf,於是就用這個方法輸入資料。如下 include using n...
C 快讀快寫詳解
define usefasterread 1 define rg register define inl inline define debug printf qwq n define debugd x printf var s is lld x,ll x define debugf x print...
快速讀入詳解
當你在資訊學競賽 oi 中進入了提高組時,你可能會被卡常!程式被卡常數,一般指程式雖然漸進複雜度可以接受,但是由於實現 演算法本身的時間常數因子較大,使得無法在oi icpc等演算法競賽規定的時限內執行結束。常數被稱為計算機演算法競賽之中最神奇的一類數字,主要特點集中於令人捉摸不透,有時候會讓水平很...