給定一些短串,要求你在乙個長串中,將這些短串部分變為\(*\)第一行包括乙個整數\(n\),表示短串的數量.
接下來的\(n\)行,為\(n\)個短串.
最後一行,為你需要變化的長串.
一行,表示變化後的長串.
ps:長串會有中有各種字元,短串僅包含英文本元
inting
kitty
int is interesting! ~owo~
\(***\) is \(***\)erest\(***\)ing! ~owo~
上面的一些輸入輸出中為全形,實際上為半形.
這題做法有很多啊,可以雜湊,可以ac自動機,可以kmp.
這裡講一下kmp演算法.
做法為\(kmp+\)差分.
首先需要將長串中的字母全部轉為小寫(大寫).
\(isalpha\)吼啊
我們對每乙個短串求出其\(next\)陣列.再列舉這些串去和長串匹配.
但是一些位置會出問題.
比如
給定兩個短串為\(gre\)和\(eat\),長串為\(great\)因此引入了差分.則我們的長串要變成\(*****\)
如果匹配上之後,我們直接對其左端點和右端點\(+1\)差分。
最終列舉的話,直接判斷有無標記,如果有,則將當前位置變為\(*\)
然後直接輸出即可.
**
#include#include#include#define r register
using namespace std;
char sta[150008],stb[150008];
int pos[150008],k,n,len;
struct cod
str[55];
char st[55],c;
inline char ch(char s)
int main()
} getchar();
while(c!='\n')
for(r int i=1;i<=n;i++)
}} for(r int i=1;i<=len;i++) }
/*2gre
eatgreat britain
***** britain
*/
傳說中差分kmp
codeforces 471d 題意 你建造了一堵牆,這堵牆是由n個塔組成的,每個塔相互連線,且各自有乙個高度,你給你自己的牆起了乙個名字,叫大象。豬也建造了一堵牆。問你最多能從豬建的牆中找到幾個大象。你可以將你自己的牆中的塔向上提公升,或者下降,可以降到地下。解析 開始題意沒有理解。不是你對牆做任...
棧和堆之間的差(他轉身無數的文章)
一 預賽 該方案的記憶體分配 由c c 下面的編譯器的記憶體使用部分 1 堆疊區 stack 通過分配上發布自己主動編譯 存放函式的引數值。區域性變數的值等。其 操作方式相似於資料結構中的棧。2 堆區 heap 一般由程式猿分配釋放,若程式猿不釋放,程式結束時可能由os回 收 注意它與資料結構中的堆...