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;
}

浙公网安备 33010602011771号