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

2021-09-12 18:28:01 字數 904 閱讀 5623

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 input

51 2 3 4 5

32 3 4

sample output

2 4這個典型的kmp演算法的應用,其實還存在乙個盲點 就是當出現一次後 第二次尋找從**找的問題。許多人都會認為是從第一次節點加上自身長度-1後開始。其實有些情況是不符合的 比如 4 4 4 4 4 4 4

當然 這個問題在這裡 這一組也是不符合的 1 3是一組 2 4也是一組

所以為了避免特殊情況我們直接從節點點開始;

#include#includeusing namespace std;

int a[10000001],b[10000001];

int next[1000001];

void getnext(int q)

}int kmp(int c,int d,int n)

else

j=next[j];

}if(j==d)

return i-d+1;

else

return -1;

}int main()

else

cout<<"-1"

}

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