演算法小本本

2021-10-19 23:06:45 字數 1618 閱讀 8522

目錄思想

提煉碎碎念

stlstringstream

kmp位操作

檔案操作

線段樹manacher演算法

圖類題目 模板

數學《20資料結構高分筆記》kmp筆記

模式串:abc

degabc

f    ,     f處與文字串不匹配時,f之前的字串中重合的字首與字尾分別指abc與abc

文字串:abcabcabc

abcf

模式串:abc

abcabc

f     ,

f處與文字串a不匹配時,說明之前的匹配作廢,此時樸素演算法是拿a與b重新比較,而kmp的策略是拿a與a比較,f之前的字串中有abc

abc與abc

abc, abc與abc  這兩對是重合的字首與字尾,前者稱為最先出現的重合。前者嘗試拿a與文字不匹配處比較,後者嘗試拿a與文字不匹配處比較。

模式串中,在第 i 處出現不匹配時,明智的做法是從之前最先出現字首和字尾重合子串的後一位與文字串不匹配處進行比較(最先保證不漏掉更早匹配到的情況,因為模式串不匹配時會一直向後移動)

next[j]表示模式串中第j個字元發生不匹配時,應從next[j]處的字元開始重新與文字串比較。

void getnext(string s, int next) 

else

j = next[j];

}}//優化版

void getnextval(string s, int nextval)

else

j = nextval[j];

}}

#includeint main() 

"in.txt"可改為"c:\\users\\administrator\\desktop\\abc.txt"表示windows下絕對位置

入門:

規範:陣列小標以1為起始,線段樹陣列tree[n],初始區間陣列s[n]

開4倍空間證明(n = 4 * n):

作預處理後字串恒為奇數的證明:

有向圖還是無向圖,注意初始化問題;

對二維陣列初始化fill(g[0], g[0]+maxv*maxv, inf);拓-> memset(a, 0, sizeof(int));是以位元組為單位初始化的;

pre記錄最短路徑中某點前驅的矩陣,由遞迴的需要,得初始化為自身;

快讀:

inline int read()

while(ch >= '0' && ch <= '9')

return x*f;

}

快寫:

//version 1

inline void write(int x)

while(x)

while(len>=0)

putchar(nums[--len]);

}//version 2

inline void write(long long x)

//version 3

void write(long long x)

考前總結小本本

學了兩年oi,記一下容易犯錯和忘記的地方 1.資料特別大或者特別小都可以考慮預處理。特別是多組資料,資料很多的情況 2.注意不要把兩個迴圈變數套一塊 很容易忘記 3.注意不要開錯變數的型別 4.區域性變數和全域性變數不要一起開,同時出現並同時使用肯定會錯 5.函式有返回1,但是不要忘記其他情況返回0...

拿個小本本記下來

最近全國各地因為疫情的原因都被無情的封印了 吃,喝,睡之餘,飽飽的補充睡眠之後,偶爾也拿起書本或者聽聽音訊 吳軍老師說,碎片化的學習,不是不可以,關鍵在於積累以後,是否能夠應用 如何應用?如果應用不了,那就寫下來,這便是以後的財產,有所感悟,便是積累 想到此,本來是做軟體專案交付的,平時無盡的加班,...

設計記錄江湖仇家的小本本

it江湖亂世紛爭,刀光劍影,各類語言混戰廝打成一片,程式猿的愛恨情仇,實難數盡。為了縷清各俠客的錯綜複雜的關係,匡扶江湖的正義,心繫祖國的安危,特設計出 江湖1.0版通訊錄。此通訊錄全程c語言編寫,相容一切,適合各大俠客使用。為了正義免費使用 以下 include include define na...