資料結構實驗之串三: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個小...