SDUT 2463 学密码学一定得学程序
学密码学一定得学程序
Time Limit: 1000 ms Memory Limit: 65536 KiB
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
提示:此题看题意是让我们来找模式串在主串中的位置,所以我们可以两种方法:一种KMP,一种strstr,所以主要是KMP能弄明白,模板题,给的数据也很水。
代码实现如下(g++):
#include <stdio.h> #include <iostream> #include <string.h> #include <stdlib.h> #include <algorithm> #include <iostream> using namespace std; char a[1000010]; char b[10010]; int main() { int n; scanf("%d",&n); getchar(); while(n--) { gets(a); gets(b); char *ch=strstr(a,b); if(ch==NULL) cout<<"::>_<::"<<endl; else { int t=ch-a+1; cout<<t<<endl; } } return 0; } /*************************************************** Result: Accepted Take time: 16ms Take Memory: 1176KB ****************************************************/