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