學習筆記

2019.1.25:

1.慎用getchar和scanf("%c"),這兩個都會讀回車和空格,用cin或者scanf("%s")會更好html

2.處理環形問題,將數組開大一倍,令a[i+n]=a[i],就能實現循環的問題。c++

3.計算只包含加法,減法和乘法的整數表達式除以正整數n的餘數,能夠在每步計算後對n取餘,結果不變。[由該結論可得出已知n%m==x,可得(n10+k)%m==(x10+k)%m]算法

2019.1.28

1.memset各種型的極大極小值數組

2.多組數據的狀況下強烈建議用vector存圖緩存

2019.2.4

1.當一道題順着題意很差作時,咱們能夠考慮正難則反的思路。函數

2.枚舉題每每須要經過分析問題來簡化問題,從而縮小枚舉的範圍,優化枚舉的時間複雜度。優化

3.二分的標誌一般是最大值最小獲最小值最大,但判斷是否真的要用二分應判斷題目時是否知足某個單調的性質。在較高難度的題目中有時須要二分結合其餘算法來解題。htm

2019.2.7

1.求樹的直徑的方法:
(1)Bfs(以任意一個點爲起點找一條最長路,再以最長路的終點爲起點再找一條最長路,該路徑即爲樹的直徑) 【只適用於無負權的圖】blog

(2)樹形DP。【適用於帶負權的圖】遞歸

2019.2.8

1.Dijkstra時間複雜度O(n^2)/O(mlogn)

2019.2.15
  1. 在沒有用到遞歸的函數中,咱們固然能夠在函數內建立隊列或棧,但在tarjan縮點的算法中,棧必須開在外面,容易出錯(P3627 [APIO2009]搶掠計劃)
2019.2.17
  1. 不仔細讀題你會死的很慘的
2019.2.21
  1. 最好不要在aray數組裏再開數組,可能會Re
2019.3.10
  1. 注意去掉輸出的中間結果
  2. 作題時最好手動模擬過一遍樣例,防止誤解題意,排除掉錯誤的算法
  3. 01揹包中防止重複更新的兩種方法,一種是倒序枚舉,另外一種是開一個輔助數組緩存更新後的值
2019.4.27
  1. 二項式定理:(a+b)^n=a^n+[C(n,1)]a^(n-1)*b+C(n,2)a^(n-2)b^2+……+C(n-1,n)ab^(n-1)+b^n
  2. 通項T(k+1)=C(n,k)a^(n-k)*b^k
  3. 式中,C(n,i)表示從n個元素中任取i個的組合數=n!/(n-i)!i!
  4. 係數也可表示爲楊輝三角
2019.7.11

01黑白染色中,全部的棋盤必定屬於如下兩種類型:

  1. 黑格的行和列奇偶性相同,白格不一樣
  2. 白格的行和列奇偶性相同,黑格不一樣

高階數學筆記

  1. c++浮點數靠近0取整,如-1.5取整得-1
  2. 當1<=d<=n時,n/d不一樣的取值不超過2*sqrt(n)
  3. 當1<=d<=n時,n/d的和爲嚴格nlogn,常數極小,能夠跑過5e6的數據
  4. 不超過n的質數個數約等於n/ln(n)

推論:

  1. n附近的質數密度約爲1/ln(n)
  2. 第n個質數約爲n*ln(n)
  3. 若一個數有奇數個約數,則他是徹底平方數

2019.7.16
  1. 線段樹的懶標記,你固然是知道的,若只需維護區間和,常規操做就能夠了,若是還要求最值的話,就要另行考慮了

    若懶標記是加減法,只需加減max/min標記
    如果取反,則max=-min,min=-max
    總之在維護懶標記的同時也要正確的維護其餘全部標
    記,一個都不能漏,並且要具體狀況具體考慮

2019.9.17
  1. static變量不能以type x=……的方式賦初值
2019.11.14

1.vector resize不能用來屢次賦值!!切記!!!正確的寫法是先clear再resize

相關文章
相關標籤/搜索