HDU - 2203 KMP水题

循环移位的套路操作就是一份折开变两份

/*H E A D*/
void match(){
	int n=strlen(T+1);
	int m=strlen(P+1);
	int j=0;
	rep(i,1,n){
		if(flag)break;
		while(j>0&&(j==m||T[i]!=P[j+1])) j=nxt[j];
		if(T[i]==P[j+1]) j++;
		f[i]=j;
		if(f[i]==m){
			flag=1;
			break;
		}
	}
}
int main(){
	while(~s1(T)){
		s1(P);
		flag=0;
		int n=strlen(T+1);
		int m=strlen(P+1);
		rep(i,1,n) T[i+n]=T[i];T[n<<1|1]='\n';
		init();match();
		if(flag) printf("yes\n");
		else printf("no\n");
	}
	return 0;
}
posted @ 2018-02-09 01:52  Caturra  阅读(138)  评论(0)    收藏  举报