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

2021-08-20 03:25:07 字數 1185 閱讀 5582

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

5 1 2 3 4 5

3 2 3 4

sample output

2 4

hint

source

windream

#include 

#include

#include

int p[1000001],t[1000001],next[1000001];

void makenext(int t,int n,int

next)

if(t[q]==t[k])

next[q]=k;

}}void kmp(int p,int

m,int t,int n,int

next)

if(p[q]==t[k])

if(k==n)

else

}}//關鍵是這個地方啊,我的天,沒看清題目,題目說唯一的l和r,也就是說光出現不行,還得只能是乙個,這就要跑完這個序列,看出現了幾次,並且在出現第一次的時候就把序號給他記錄下來,方便到後面判斷的時候,如果只是出現了一次,那就輸出,但這時候下標已經變了,所以要記錄下來,當次數超過一次的時候就直接輸出-1,並且退出,這兩種情況的flag都是1,因為不管出現了幾次都是出現了

if(cn==1)

if(flag==0)

}int main()

scanf("%d",&n);

for(i=0; i"%d",&t[i]);

}kmp(p,m,t,n,next);

return

0;}

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