标签:
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2203
思路:
#include <bits/stdc++.h> #define PB push_back #define MP make_pair using namespace std; typedef long long LL; typedef pair<int,int> PII; #define PI acos((double)-1) #define E exp(double(1)) #define K 1000000+9 int nt[K]; string sa,sb; void kmp_next(void) { nt[0]=0; for(int i=1,j=0,len=sb.length();i<len;i++) { while(j&&sb[j]!=sb[i])j=nt[j-1]; if(sb[j]==sb[i])j++; nt[i]=j; } } int kmp(void) { kmp_next(); for(int i=0,j=0,lena=sa.length(),lenb=sb.length();i<lena;i++) { while(j&&sa[i]!=sb[j])j=nt[j-1]; if(sa[i]==sb[j])j++; if(j==lenb) return 1; } return 0; } int main(void) { while(cin>>sa>>sb) { sa+=sa; if(kmp()) printf("yes\n"); else printf("no\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/weeping/p/5734983.html