坑點總結

若是以前對這些坑點多注意一下,也不至於省選的時候掛掉那麼多分數QAQ算法

考試策略

不要有"這題過了大樣例我穩了"的想法而後不仔細檢查某道題...(省選Day2T2的慘烈滾粗)
題面,輸入輸出格式,數據範圍都要反覆讀.重要條件可能在任何地方.(省選day1T3的"r<k")
開考以後先建好三道題的文件夾,讓本身對文件名有個印象.不要把題目裏出現屢次的單詞看成文件名.(2017.4.27校內考試,從文件夾名到.cpp的文件名到freopen裏全打錯了,炸掉100分)
多組數據的題,在不超時的狀況下儘可能把數組都清空.有的數組感受上不清空沒事,可是寫着寫着可能就出事了.(2017.4.27校內考試,某道大暴力的標記數組未清空,炸掉10分)數組

輸出格式

注意輸出的數字之間用空格隔開輸出在一行仍是回車隔開輸出多行.(bzoj 3473 字符串)
注意輸出的結果是否要乘上2的冪/階乘....(省選Day2T2的慘烈滾粗)函數

數據類型

凡是要取模的題,每步取模.每有一步減法,必須加上模數防止炸負數.
對於輸入是整數且範圍較大的計算幾何,使用long long避免炸精度.輸出的時候不要轉double,要printf("%lld.%lld\n",ans/2,(ans&1)5);
對於某些中間結果很是大但不會在答案中出現的題,能夠用long double計算中間答案最後用long long輸出(HEOI2017 期末考試)
若是某道題答案是非負的,同時寫法被卡內存致使開不了long long但答案可能炸int,能夠考慮使用unsigned int爭取更高分數.(某道奇怪的考試題,大力寫了一個非正解的狀壓DP,由於卡內存沒用long long只開了int,後來發現unsigned int 可過)
注意"0"在數據範圍裏的存在
不要"int a=b
1llc",須要int a=b1llc%mod....(雅禮集訓某題)
a
b和a1llb....(模擬賽某題)
大小級別1e9的數字進行運算時,加減操做多進行幾回也能夠炸int(bzoj2146 Construst 算周長的時候)優化

常數優化

若是程序運行過慢,應當想到不是常數問題,極可能漸進複雜度是錯的,須要檢查一遍代碼有無錯誤.(省選Day1T2的滾粗)
std::min(),std::max()比較慢,能夠用inline void gmin(int &a,int b){if(b<a)a=b;}這樣的函數取代.(Bestcoder的一道DP題,fst了)
fft把複數類的加減乘拆掉封裝會快
有的帶修改rmq能夠用樹狀數組代替線段樹(bzoj2248 挖油)指針

具體算法的易錯點

線段樹修改後必定要記得合併標記(省選Day1T2的滾粗)
點分治遞歸分治子樹的時候要從子樹重心開始分治而不是當前重心連向的子樹中的點
AC自動機上"某些節點禁止通過"時,可以從fail指針跳到這些節點的節點也應當禁止經過.(bzoj3530,不知道我當時怎麼過的...)
FFT的數值過大時(int)floor(a[i].x+0.5)會炸int,須要(long long)floor(a[i].x+0.5)code

相關文章
相關標籤/搜索