国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

學密碼學一定得學程序

2019-11-10 18:46:37
字體:
來源:轉載
供稿:網友

PRoblem Description

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

首先輸入一個n。表示有n組測試數據。

每組測試數據有兩行。

第一行為字符串S1,長度不大于1000000。

第二行為字符串S2,長度不大于10000,并且長度不小于2。 Output

輸出S2在S1的位置。如果有多個位置,只輸出第一個位置。

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

1ASDFGDFDF

Example Output

3

Hint

Author ZP

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <bits/stdc++.h> #define N 1010000 int i2, j2; void getnext(char *str, int *next, int slen) { int i=0, j; next[0]=-1;//存儲對稱與當前字符對稱的子串的末尾所在位置 while(i++<slen) { j=next[i-1];//取出前一字符所在位置的對稱信息 while(str[i]!=str[j+1]&&j>=0)//如果這個字符與前一字符對應對稱子串的末尾的下一字符不相同, 循環尋找 { j=next[j]; } if(str[i]==str[j+1])next[i]=j+1;//如果匹配 } } int kmp(char *str, int slen, char *ptr , int plen, int *next) { int i=-1, j=0; while(j<slen&&i<plen-1)//next存儲的為比較點前面的信息 { if(str[j]==ptr[i+1]) { i++; j++; } else { if(i==-1) { j++; } else { i=next[i];//進行該步驟后i仍然為比較點前面的信息 } } } if(i==plen-1)return j-i; else return -1; } int main() { char str[ N ] = {0}; char ptr[ 11000 ] = {0}; int next[ 11000 ]; int slen, plen; int t; scanf("%d", &t); getchar(); while( t-- ) { scanf( "%s%s", str, ptr); slen=strlen(str); plen=strlen(ptr); getnext(ptr, next, plen); int kk=kmp(str, slen, ptr, plen, next); if(kk!=-1)printf("%d/n", kk); else printf("::>_<::/n"); } return 0; }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 和静县| 垣曲县| 天津市| 隆昌县| 西青区| 梓潼县| 武功县| 五原县| 辽阳市| 长沙县| 法库县| 成都市| 浏阳市| 奎屯市| 疏附县| 镇平县| 固原市| 贡嘎县| 滨州市| 清水河县| 内丘县| 雷州市| 清河县| 西华县| 安国市| 改则县| 阿克| 南阳市| 河池市| 砚山县| 宁强县| 华池县| 石渠县| 金堂县| 龙泉市| 巴青县| 新巴尔虎右旗| 华宁县| 巩留县| 嘉善县| 正阳县|