HDU 2203 KMP

来源:互联网 发布:淘宝越墙vans是正品吗 编辑:程序博客网 时间:2024/06/05 07:14

2014/9/11


 水平不够写毛博客。


// 失败者用失败诉说真实,成功者用成功掩饰事实。//阳光刺痛双眸// #include<stdio.h>#include<string.h>#include<cmath> #include<algorithm>#include<iostream>#include<queue>#include<stack>#include<map>#include<climits>#include<vector>using namespace std;typedef long long ll;  #define f(x,y,i) for(int i = x;i < y; i++)#define ff(x,y,i) for(int i = x;i  <= y; i++)#define F(x,y,i) for(int i = x; i >= y; i--)#define FF(x,y,i) for(int i = x; i > y; i++)#define lson pos<<1,l,mid#define rson pos<<1|1,mid+1,r#define Min(x,y) x<y?x:y#define Max(x,y) x>y?x:y#define sc(n) scanf("%d",&n)#define pr(n) printf("%d\n",n)#define met(n,m) memset(n, m, sizeof(n)) const int N=100500;int n, m , len;char s[N];char s1[N<<1];int next[N];void Next(){int p = 0;for(int i  = 2; i <= m; ++i){while(p > 0&&s[p+1] != s[i]){p = next[p];}if(s[p+1] == s[i]){p++;}next[i] = p;}}int Kmp(){
       <pre name="code" class="html">       Next();
int p = 0;for(int i =1;i <= n; ++i){while(p > 0&&s[p+1] != s1[i]){p = next[p];}if(s[p+1] == s1[i]){p++;}if(p == m)return 1;}return 0;}int main(){    while(~scanf("%s",s1+1))    {     scanf("%s",s+1);     len = strlen(s1+1);     n = len;      m = strlen(s+1);for(int i =1 ;i <= len; i++){s1[++n] = s1[i];}if(Kmp())printf("yes\n");else printf("no\n");            }            return 0;}


0 0