資料結構實驗之串三 KMP應用

2021-09-03 09:58:27 字數 1202 閱讀 8073

資料結構實驗之串三:kmp應用

time limit: 1000 ms memory limit: 65536 kib

problem description

有n個小朋友,每個小朋友手裡有一些糖塊,現在這些小朋友排成一排,編號是由1到n。現在給出m個數,能不能唯一的確定一對值l和r(l <= r),使得這m個數剛好是第l個小朋友到第r個小朋友手裡的糖塊數?

input

首先輸入乙個整數n,代表有n個小朋友。下一行輸入n個數,分別代表每個小朋友手裡糖的數量。

之後再輸入乙個整數m,代表下面有m個數。下一行輸入這m個數。

output

如果能唯一的確定一對l,r的值,那麼輸出這兩個值,否則輸出-1

sample input5

1 2 3 4 5

32 3 4

sample output

2 4眾所周知kmp是看毛片的縮寫,我們今天來看看毛片的應用。

#include#includeusing namespace std;

int nex[11111111], s1[1111111], s2[11111111]; //我怕定義next會與編譯器有重名衝突。

int flag = 0; //這個flag是判斷是不是就能匹配一次。

int mi, ma; //mi表示第幾個數開始正確匹配,ma表示匹配到第幾個數。

void shu(int s2, int len) //求next陣列的;

else j = nex[j];

}}void ju(int s1, int s2, int n, int m) //這個函式是判斷是否匹配的

else j = nex[j];

if(j >= m) //這個表示匹配成功!!要做的就是讓記錄匹配次數的加一,也就是

我們看到s1第一次匹配到aaa之後,s1的前3個aaa匹配成功後,再從s1

} 的第二個a開始在匹配。

int main()

我也剛接觸毛片,我覺得相對判斷是否匹配成功,求next陣列更難理解,我是看著**,自己找個例子,在紙上一步一步寫,弄個兩遍就有感覺了;

做夢都在敲**

資料結構實驗之串三 KMP應用

time limit 1000ms memory limit 65536k 有疑問?點這裡 有n個小朋友,每個小朋友手裡有一些糖塊,現在這些小朋友排成一排,編號是由1到n。現在給出m個數,能不能唯一的確定一對值l和r l r 使得這m個數剛好是第l個小朋友到第r個小朋友手裡的糖塊數?首先輸入乙個整數...

資料結構實驗之串三 KMP應用

time limit 1000ms memory limit 65536k 有n個小朋友,每個小朋友手裡有一些糖塊,現在這些小朋友排成一排,編號是由1到n。現在給出m個數,能不能唯一的確定一對值l和r l r 使得這m個數剛好是第l個小朋友到第r個小朋友手裡的糖塊數?首先輸入乙個整數n,代表有n個小...

資料結構實驗之串三 KMP應用

time limit 1000ms memory limit 65536k 有n個小朋友,每個小朋友手裡有一些糖塊,現在這些小朋友排成一排,編號是由1到n。現在給出m個數,能不能唯一的確定一對值l和r l r 使得這m個數剛好是第l個小朋友到第r個小朋友手裡的糖塊數?首先輸入乙個整數n,代表有n個小...