錯貼本


字符串

  1. 哈希進制搞質數

  2. KMP 數組別開太大,否則 \({\color{Gold}{TLE}}\)

  3. 沒有必要 \(strlen\) 的時候盡量別用

  4. \(base\) 過大跑的慢

\(SPFA\)(2021/1/31)

  1. return 0 別放循環里面

  2. 邊表是注意數據類型特別是 double!!!

  3. 循環里盡量不要設變量去代替邊表,類型會出錯

  4. 多用scanf 少用cin

  5. 多組數據 邊表 head 別忘清零

二分

  1. 實數二分別 +1

  2. 有關 doubleint 的錯誤

  cout<<a<<endl;
  printf("%.f\n",a);
  int s=(int)a;
  cout<<s;

三者是完全不同的,第一個是按照double隨機小數位輸出,第二個是四舍五入輸出答案容易出錯,第三個是強制類型轉換,直接輸出整數部分,建議最好用這個,cao,又廢了我一下午2/17

差分約束(2021/2/1)

  1. 個人感覺跑最短路好些

  2. >0 就為1, >=0 為0

  3. \(SPFA\) 時,判斷是否聯通盡量將邊界開大些 例如 1e8, 最短路如果不連通會跑無數次 inf.

\(tarjan\)(強連通分量)

  1. void 類型 \(tarjan\), 別定義錯了

  2. 一晚上的血教訓,不要用邊表了,用 \(vector\) 吧!!!!!!!!,TMD卡了四個題,全是 \(TLE\).


  3. if(d[i] == 1) != if(d[i]) 前者只有一, 后者不是零的都記錄,哎~又是一晚上----2/3

\(tarjan\) (橋和割點)

  1. 根節點要求孩子多於兩個才可,非不為就行!!! if(child >= 2 && u == fa) cut[u] = 1;//child >= 2!!! 不是 != 0

  2. 根節點和非根節點的處理要注意

if(low[v] >= dfn[u] && u != fa) cut[u] = 1;// 保證不是根節點 
      if(fa == u) child++;// u == fa 才記錄孩子 

DP

  1. 無輸出:循環節 j-- 寫成 j++ P1049 [NOIP2001 普及組] 裝箱問題

  2. 背包DP,\(n\)\(m\) 不要搞反了

  3. 狀態有時並非需要精確表示,如果可以通過某種方式簡化位置,但卻可以在使用時正確表示位置的話,那么這種答案會更優,這也就是精簡式子

  4. 注/ 式子的化簡可以通過化簡來的得到,如這里的代換就是令 \(k\)\(j-k\) 只要范圍不變,他們就是等價的,原因是便於式子的化簡!(式子的優美)

  5. 狀壓DP位運算錯誤

//cin
1<<3-1
(1<<3)-1
//cout
4
7
//so
//左移小於負號

KSM

  1. x*=x%k 無法完成必須拆開 x*=x; x%=k,寫錯掛七個點

鄰接表

  1. 鄰接表開小居然是MLE??-->這個題

數組的大小

  1. 開的數據范圍不要太大--這個題

2.數據范圍不要開小了,f開小了

有關 \(memset\) 的賦值

1.memset(a,x,sizeof(a) 中賦值只取 \(x\) 的后四位,也就是說 0x7fffffff 賦值就是 ffff,也就是 -1,這樣你的費用流就更加優美了

專場錯誤

  1. 圖論專場


免責聲明!

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



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