debug

採雷重點

  1. size()的返回值不能做運算 (x) l.size()-r.size()
  2. 如果要做位元運算把(1<<40)放入long long裡,要把1改成1LL,因為只有數字的話型別為int
  3. 如果要把int運算完後的值放到long long裡要轉型=> ans=(long long)a*b
  4. runtime error!=TLE,可能為陣列越界,除0,非法記憶體存取,stack overflow
  5. 寫這樣比較快 變數名稱.lower_bound(要找的value);
  6. 有些資料結構要用multiset 必免重覆元素被覆蓋掉
  7. 初始化mi要用INT_MAX or LLONG_MAX,1e9有可能不夠大
  8. 能不用初始化就不用memset,避免TLE,或改為在讀測資的時候順便初始化
  9. 位元運算的優先程度很低,所以只要有關位元運算都要括號
  10. 特殊資料結構(set,pq)有時不一定比vector+sort好
  11. 陣列用到超過邊界的格子不會提示,要自己注意邊界
  12. 如果陣列要開3*10^6話就不要define int long long,不然會開不下
  13. STL存取元素的數量都有上限,超過會爆,盡量用陣列取代
  14. 如果整數型態是long long的話要改成printf("%lld")
  15. 浮點數沒有顯示出來的位數不代表是0,盡量不要直接賦值上去,改為賦值算式上去
  16. 有多組測資時要記得初始化!!
  17. 狀態轉移初始化時,不合法的狀態要設為inf
  18. 能不用map去做映射就不要用,用一般陣列計數就好,否則有可能會TLE
  19. 線段樹寫if(Lb <= l && r <= Rb) return seg[node]; 比 if((l == Lb && r == Rb) || l==r) return seg[node]; 快
  20. 在函式中交換值時,要記得用&取本尊
  21. 陣列最大值要注意!!!很重要!!!有可能會TLE
  22. 線段樹在query中的回傳值,要注意狀態,要跟built的狀態一樣,相乘就要記得是相乘
  23. 元素相乘取餘數不可蓋前綴和,如果元素相乘沒有取餘數可以蓋前綴和,區間[l,r]=pre[r]/pre[l-1]
  24. 二分搜時要注意右界大小,有可能(l+r)時溢位,或太小沒搜到答案
  25. 函數pow會回傳浮點數,如果後面有運算式都會變成浮點數運算,輸出時要注意型態,免得cout顯示科學記號而WA
  26. vector int mp[MAXN],盡量開在globle,否則可能會seg fault
  27. 變數沒用到的就不要宣告,免得mid打成m卻不知道錯哪
  28. 次方不能取模
  29. define ing long long時,1要寫1LL
  30. 數值相減時要注意大減小才會是絕對值
  31. 拓譜排序時,node放進去queue的條件為if(- -task[now]==0),注意"==0"
  32. dp top-down時初始化要為-1,避免TLE
  33. priority_queue TLE時可以改用單調對列(deque)優化
  34. struct的空間比較大,MLE時可以考慮把裡面的元素拆出來各自宣告
  35. 線段樹要開到SIZE*4才夠用
  36. 負數區間取mid要用l+(r-l)/2
  37. 李超線段樹動態開點查詢時如果是NULL要返回-INF
  38. 計數的變數不能取模
  39. 宣告太大的陣列會耗太多時間,可能導致TLE
  40. 當題目有取餘數時,要記得先+mod再%mod,避免出現負數
  41. long long 位運算要記得用1ll
  42. 變數有可能減到負數的情況下,不能使用while(variable),會TLE
  43. 巢狀迴圈遍歷的變數不能一樣,否則會衝突
  44. C的FIFO讀檔有坑,結尾可能有兩個字元