sb 錯誤


  1. 數組開小。很容易 \(2 \times 10^5\)\(10^6\) 就開成 \(10^5\),或者各種變量的數據范圍混用,\(m \leq 5\times 10^5\),結果只開到了 \(n\) 的數據范圍 \(10^3\)。(upd. 2020.8.31),upd 2021.2.6 又犯了一次。
  2. 多測不清空。算法中要用到 \(a[n+1]\) 結果只手動清到了 \(n\)。(upd. 2020.8.10)當然有的時候多測是修改一部分值,如 CSP-S 2020 T4,遇到這種情況就要檢查每次詢問結束 \(a\) 數組是否還原到了詢問前的樣子(upd. 2020.11.8)upd 2021.2.16 又犯了一次
  3. 忽略了一些比較隱蔽的條件。例如 APIO2020 T1 一開始忽視了 \(\sum f(k)^2 \leq 4\times 10^5\) 這個條件,以為是給部分分用的,結果就一直在想 \(n \log n\) 級別的算法,浪費了很多時間,事實上這隱含着 \(f(k) \leq \sqrt{4\times 10^5}\) 的條件。(upd. 2020.8.15)
  4. 把題目中的 \(a\)\(b\)\(n\)\(m\) 的含義搞反了,或者沒看清讀入順序,明明是先 \(m\)\(n\),讀成了先 \(n\)\(m\)。(upd. 2020.10.6)
  5. 寫了個錯誤的程序對拍(upd. 2020.10.6)
  6. 碰到那種二維平面的題,“格子”與“格點”,以及坐標軸的方向搞錯了。(upd. 2020.10.14)
  7. 想出了一些復雜度較高卻又沒啥辦法優化的 dp 式子,然后就一直盯着它進行優化,可有時這種題偏偏不是 dp(upd. 2020.10.15)
  8. %lld 寫成了 %d(upd. 2020.10.19)
  9. 二分上界開小了(upd. 2020.10.19)
  10. 注意 0 沒有逆元,有的時候計數 dp 用到除法(除以另一個 dp 值)那基本上不太行的(upd. 2020.10.19)upd. 2021.7.6 其實是可以的,按照 SDOI 切樹游戲 的套路來搞即可
  11. 考試最開始沒有花時間把每道題都瀏覽一遍,導致有時候最后一題反而能拿些分的卻沒拿到。(upd. 2020.10.22)
  12. 沒有對拍,或者對拍浪費了很多時間,導致該拿的分沒拿到。最后與自己的預期相差甚遠。(upd. 2020.11.1)
  13. 手寫隊列、棧等時以及莫隊中,++ / -- 是前置還是后置要想清楚。(upd 2020.11.17)
  14. 多測的時候,有時候讀到一部分數據就可以確定答案了,但此時你不能直接 continue,要把全部數據讀完(upd. 2020.12.11)upd. 2021.10.21 差點又犯了一次,還好最后腦子比較清醒想了起來(
  15. 有的時候,值域 \(\leq 10^9\),而模數只有 \(998244353\),此時你就不能用直接加,大於 \(mod\) 就減去 \(mod\) 的方式取模(upd. 2021.1.12,這個是 csy 跟我講的)
  16. 有時候點標號從 \(0\) 開始,進而會習慣性的 \(+1\),即 int u,v,w;scanf("%d%d%d",&u,&v,&w);u++;v++;。結果把 u++;v++ 寫到了 scanf("%d%d%d",&u,&v,&w); 的前面。(upd. 2021.1.31)
  17. queuepop(upd. 2021.1.31),upd. 2021.2.18 又犯了一次,upd. 2021.6.28 梅開三度
  18. pw10,hash,pipe 在 linux 下是關鍵字,但在 windows 下測不出來,要格外注意(upd. 2021.1.31)
  19. 內外層循環變量名取重了。這種情況即使開 -Wall 也測不出來(upd. 2021.1.31)upd. 2021.4.7 開 -Wshadow 似乎可以測出來
  20. 莫隊記得先 pushpop,不然可能會出現一些奇怪的問題(upd. 2021.2.1)
  21. 有的時候數組有用的下標不會越界,但可能會用到越界的下標,即使這些越界的下標沒有用也要記得把數組開大,否則會出現一些奇怪的問題。(upd. 2021.2.1)(upd on 2021.10.22,有時侯比較明顯的下標越界編譯器會提示出來,譬如如果你循環到 2e5 數組只開了 1e5+5 它就會顯示 iteration 100005u invokes undefined behavior)
  22. 讀入中的變量名可能跟循環中的變量名重復(譬如 \(k,d\) 等)(upd. 2021.2.2)注:2021.2.6 又犯了一次該錯誤,線段樹遞歸時的 \(k\) 與讀入的 \(k\) 重復了。upd. 2021.4.7 開 -Wshadow 似乎可以測出來
  23. 要特別注意運算過程中爆 int 的情況,譬如如果 \(a\) 為 long long 型變量,\(b,c\) 為 int 型變量,那么如果你寫 a*(b*c) 那么程序會先計算 b*c 的值,就有爆 int 的風險。(upd. 2021.2.3)
  24. 遇到與網格有關的題的時候,要特別注意是四連通還是八連通(upd. 2021.2.4)
  25. 冰茶姬忘了初始化(tips:如果實在忘記可以寫 int find(int x){return (!f[x])?x:find(f[x]);})(upd. 2021.2.6)
  26. 可撤銷冰茶姬千萬不能路徑壓縮(upd. 2021.2.6)upd. 2021.10.22 打線段樹分治模板時又犯了一次(
  27. static 關鍵字修飾的變量與全局變量的唯一區別就是 static 關鍵字修飾的變量不能在局部域之外的地方被調用,否則會 CE。故如果你用 static 修飾的變量當作臨時備份那么它在接下來幾輪的遞歸中也會被修改,進而會導致 WA。(upd. 2021.2.7)
  28. 可撤銷冰茶姬按秩合並的“秩”是深度,而不是樹的大小,按大小來合並的叫“啟發式合並”(upd. 2021.2.7)
  29. 有時候做計數題的時候要我們對 \(p\) 取模,有時候我們會特判掉一些情況(比如說 \(2\)),但你不能直接 puts("2");,要 printf("%d\n",2%p);經常 有時候會有毒瘤出題人專門卡這個。(upd. 2021.2.15)
  30. 三個 <998244353 的數加起來會爆 int(upd. 2021.2.16)
  31. (其實是 30 的擴展),有的時候計數題會寫 ans=(ans-sum+MOD)%MOD;,然后你發現自己式子推錯了,不是減而是加,此時你不能只習慣性地把減號改成加號,而應當把后面的 +MOD 去掉,因為三個 <998244353 的數加起來會爆 int(upd. 2021.2.16)upd. 2021.10.21 又犯了一次
  32. 把模數看錯,1e9+7 看成 998244353(upd. 2021.2.16)upd. 2021.5.1 又犯了一次
  33. 當把一個數組賦上 -INF 時,以前習慣寫 memset(dp,128,sizeof(dp));,但實際上這樣是不明智的,因為 0x8080808080808080 大約是 \(-9\times 10^{18}\),兩個 0x8080808080808080 加起來會爆 ll。所以最好寫 memset(dp,192,sizeof(dp));,這樣兩個加起來不會爆。同樣道理最好也不要寫 memset(dp,127,sizeof(dp)); 而改寫 memset(dp,63,sizeof(dp));(upd. 2021.2.18)
  34. 當你忘記運算符的優先級時最好多加幾個括號,這樣不會吃虧(upd. 2021.2.19)
  35. 敲 SA 的時候,數組長度有的時候不是 \(n\)(長度變量名為 \(m,k\) 或其它的),但總習慣性地敲成 \(n\)(upd. 2021.2.22)
  36. 變量類型一定要注意,不要出現 int 開成 double 的情況,否則可能會讓你調到懷疑人生(upd. 2021.3.13)
  37. set 上定義的 "<" 一定要是嚴格偏序關系,也就是必須滿足傳遞性,必須不滿足自反性,否則可能會出問題。(upd. 2021.3.13)sort 里的 cmp 函數也是如此(upd. 2021.8.16)
  38. \(x\) 超過 int 范圍時,調用 builtin_popcount 會出問題,需調用 builtin_popcountll(upd. 2021.3.15)
  39. 對於結構體中含數組的,一定要記得手寫構造函數清空數組,否則會出現奇怪的問題(upd. 2021.3.26)
  40. 對於字符串長度,比如說讀入長度為 \(3\) 的字符串,數組長度千萬不能只開到 \(3\),一定至少開到 \(4\),因為程序讀入字符串后會自動在后一個位置填上 \0,如果只開到 \(3\) 會導致數組越界(upd. 2021.3.26)
  41. (其實也不能叫 mistake?)在 C++11 下交換兩個 STL 是 \(\mathcal O(1)\),不開 C++11 下交換兩個 STL 是 \(\mathcal O(\max(\text{STL 大小}))\) 的,這一點需注意(upd. 2021.3.27)
  42. 在寫網絡流的時候,一定要算好網絡流的邊數和點數的規模,不要隨隨便便地就將 MAXVMAXE 設為一個“感覺比較大”的值,比方說 2e5,這樣有可能會 RE(upd. 2021.3.31)
  43. 注意浮點數誤差,碰到 double 的比較運算時,最好不要直接用 != == < > 什么的,寫個 EPS 比較大小(upd. 2021.4.1)
  44. 帶修莫隊時間軸那一維指針,記得先更新貢獻再移動指針(upd. 2021.4.1)
  45. IDFT 完后數組中的元素不要忘除以 \(n\)(upd. 2021.4.2)
  46. 在進行多項式 EXP 時一定要保證常數項為 0,否則會出現奇怪的問題(upd. 2021.4.2)
  47. 寫矩陣乘法的時候一定要注意乘法的順序(upd. 2021.4.5)
  48. 一定一定要看清楚部分分的數據范圍,subtask 判斷是否在數據范圍內時不要判錯(聯合省選 2021 D2T3,upd. 2021.4.11)
  49. data 在 C++17 上是關鍵字,在 OJ 上提交時需注意(upd. 2021.4.23)
  50. 如果模數是 \(2\times 10^9\) 級別的,要注意加法溢出的可能性!!!!!(upd. 2021.4.24)
  51. 求 SCC 彈棧時一定要把對應節點的 vis 設為 \(0\)!!!111(upd. 2021.4.30)
  52. 在二分 check 的過程中忘了清空(upd. 2021.5.8)
  53. 注意 set 的迭代器失效問題,具體可見這里(upd. on 2021.5.13)(upd. on 2021.6.30)
  54. 對於那些瀕臨爆溢出的數,比方說 \(2000\)\(10^6\) 級別的數相加(\(2\times 10^9\)),也要注意爆 ll 的可能性(upd. 2021.6.25,vp edu 89)
  55. 注意運算符優先級!(upd. 2021.6.30)
  56. 寫 wqs 二分時注意斜率有可能為負,因此二分下界不能想當然地設為 \(0\)(upd. 2021.7.13)
  57. 注意 int 型變量不要錯誤地開成 bool(u1s1 感覺 int 嚴格強於 bool?)(upd. 2021.7.29)
  58. HDU 上 long double 不要 printf(其實大概不算 mistake,大概算 HDU 的 feature)(upd. 2021.8.10)
  59. 離散化不能只 sort,記得 unique,也要記得要在 unique 后的數組中 lower_bound(upd. 2021.8.11)
  60. 對於一個 int 型變量 \(x\),如果我們設了一個 int 型的標記變量 flgflg=1 當且僅當所有 \(x\)\(\ne 0\),那么如果你寫 flg&=(x) 就涼透了,要寫 flg&=(x!=0)(upd. 2021.8.11)
  61. 有時候我們會用 \(0\) 表示空,但如果數的值域就包含 \(0\) 就不能用 \(0\) 了,得用 \(-1\),如果還包含 \(-1\) 就得用 \(\infty\)(upd. 2021.8.13)
  62. !!! 如果比賽不開 C++11,提交前記得檢查是否有 C++98 禁止的東西,點名 vector<vector<int>>for(int x:g[u])[&](int x,int y){return dfn[x]<dfn[y];}!!!!!(upd. 2021.8.22)
  63. (大概也不能算 mistake)倍增把小的那一維放在前面會快不少(upd. 2021.9.29)
  64. LCT 一定要記得 pushdown 啊!!!!!!!(upd. 2021.10.11)
  65. unordered_map 空間常數很大,對於部分空間限制較小的題,使用 unordered_map 有可能會導致 MLE(upd. 2021.10.22)
  66. STL 的 size() 返回的是 unsigned,如果你那一個 signed 減去一個 unsigned 結果可能會溢出,這點需特別注意(upd. 2021.11.5)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM