(失敗的Kmp)學密碼學一定得學程式(已解決)

2021-08-26 02:14:51 字數 1509 閱讀 6802

不知道為啥,最近根本就a不了題,也不知道哪錯了......orz~

time limit: 1000 ms memory limit: 65536 kib

submit

statistic

discuss

problem description

曾經,zyj同學非常喜歡密碼學。有一天,他發現了乙個很長很長的字串s1。他很好奇那代表著什麼,於是神奇的wl給了他另乙個字串s2。但是很不幸的是,wl忘記跟他說是什麼意思了。這個時候,zyj不得不求助與偉大的zp。zp笑了笑說,這個很神奇的,wl的意思是只要你找到她給你的字串在那個神奇的字串的位置,你就會有神奇的發現。zyj恍然大悟,原來如此,但是悲劇來了,他竟然不知道怎麼找。。。。是的,很囧是不是。所以這時候就需要化身為超級瑪麗亞的你現身了,告訴他吧。。。。。。

input

首先輸入乙個n。表示有n組測試資料。

每組測試資料有兩行。

第一行為字串s1,長度不大於1000000。

第二行為字串s2,長度不大於10000,並且長度不小於2。

output

輸出s2在s1的位置。如果有多個位置,只輸出第乙個位置。

如果找不到,就輸出「::>_<::「(不輸出雙引號)。

sample input

1

asdfgdf

df

sample output

3
這是ac的: 

#include#includechar str1[1000010], str2[1000010];

int next[1000010];

void get_next(char s)

if(s[i] == s[j])

else

}}int kmp(char str1, char str2)

else

else}}

if(j >= strlen(str2)) return i - strlen(str2) + 1;

else return -1;

}int main()

return 0;

}

這是我不知道錯在**的.....

wa:

#include#includechar s1[1000050], s2[10010];

int next[1000050];

void get_nex(char s)

if(s[i] == s[j])

else

}}void kmp(char s1,char s2)

else

}// printf("%s\n%s\n",s1,s2);

if(j >= len2)printf("%d\n",i - j + 1);

else printf("::>_<::\n");

}int main()

return 0;

}

學密碼學一定得學程式 (KMP)

曾經,zyj同學非常喜歡密碼學。有一天,他發現了乙個很長很長的字串s1。他很好奇那代表著什麼,於是神奇的wl給了他另乙個字串s2。但是很不幸的是,wl忘記跟他說是什麼意思了。這個時候,zyj不得不求助與偉大的zp。zp笑了笑說,這個很神奇的,wl的意思是只要你找到她給你的字串在那個神奇的字串的位置,...

學密碼學一定得學程式

time limit 1000ms memory limit 65536k 曾經,zyj同學非常喜歡密碼學。有一天,他發現了乙個很長很長的字串s1。他很好奇那代表著什麼,於是神奇的wl給了他另乙個字串s2。但是很不幸的是,wl忘記跟他說是什麼意思了。這個時候,zyj不得不求助與偉大的zp。zp笑了笑...

學密碼學一定得學程式

曾經,zyj同學非常喜歡密碼學。有一天,他發現了乙個很長很長的字串s1。他很好奇那代表著什麼,於是神奇的wl給了他另乙個字串s2。但是很不幸的是,wl忘記跟他說是什麼意思了。這個時候,zyj不得不求助與偉大的zp。zp笑了笑說,這個很神奇的,wl的意思是只要你找到她給你的字串在那個神奇的字串的位置,...