字符串
-
哈希進制搞質數
-
KMP 數組別開太大,否則 \({\color{Gold}{TLE}}\)
-
沒有必要 \(strlen\) 的時候盡量別用
-
\(base\) 過大跑的慢
\(SPFA\)(2021/1/31)
-
return 0
別放循環里面 -
邊表是注意數據類型特別是
double
!!! -
循環里盡量不要設變量去代替邊表,類型會出錯
-
多用
scanf
少用cin
-
多組數據 邊表
head
別忘清零
二分
-
實數二分別
+1
-
有關
double
轉int
的錯誤
cout<<a<<endl;
printf("%.f\n",a);
int s=(int)a;
cout<<s;
三者是完全不同的,第一個是按照double
隨機小數位輸出,第二個是四舍五入輸出答案容易出錯,第三個是強制類型轉換,直接輸出整數部分,建議最好用這個,cao,又廢了我一下午2/17
差分約束(2021/2/1)
-
個人感覺跑最短路好些
-
>0
就為1,>=0
為0 -
跑 \(SPFA\) 時,判斷是否聯通盡量將邊界開大些 例如
1e8
, 最短路如果不連通會跑無數次inf
.
\(tarjan\)(強連通分量)
-
void
類型 \(tarjan\), 別定義錯了 -
一晚上的血教訓,不要用邊表了,用 \(vector\) 吧!!!!!!!!,TMD卡了四個題,全是 \(TLE\).
-
if(d[i] == 1) != if(d[i])
前者只有一, 后者不是零的都記錄,哎~又是一晚上----2/3
\(tarjan\) (橋和割點)
-
根節點要求孩子多於兩個才可,非不為就行!!!
if(child >= 2 && u == fa) cut[u] = 1;//child >= 2!!! 不是 != 0
-
根節點和非根節點的處理要注意
if(low[v] >= dfn[u] && u != fa) cut[u] = 1;// 保證不是根節點
if(fa == u) child++;// u == fa 才記錄孩子
DP
-
無輸出:循環節
j--
寫成j++
P1049 [NOIP2001 普及組] 裝箱問題 -
背包DP,\(n\) 和 \(m\) 不要搞反了
-
狀態有時並非需要精確表示,如果可以通過某種方式簡化位置,但卻可以在使用時正確表示位置的話,那么這種答案會更優,這也就是精簡式子
-
注/ 式子的化簡可以通過化簡來的得到,如這里的代換就是令 \(k\) 為 \(j-k\) 只要范圍不變,他們就是等價的,原因是便於式子的化簡!(式子的優美)
-
狀壓DP位運算錯誤
//cin
1<<3-1
(1<<3)-1
//cout
4
7
//so
//左移小於負號
KSM
x*=x%k
無法完成必須拆開x*=x; x%=k
,寫錯掛七個點
鄰接表
- 鄰接表開小居然是MLE??-->這個題
數組的大小
- 開的數據范圍不要太大--這個題
2.數據范圍不要開小了,f開小了
有關 \(memset\) 的賦值
1.memset(a,x,sizeof(a)
中賦值只取 \(x\) 的后四位,也就是說 0x7fffffff
賦值就是 ffff
,也就是 -1
,這樣你的費用流就更加優美了