HDU2203 親和串
阿新 • • 發佈:2017-10-08
urn ont 天都 != 進步 tdi lag spa true
是本來想今天寫下後綴數組,誰知明天要交高數作業,還有大物視頻,英語視頻blablabla。。。
趕啊。。。。然後忍不住寫了兩個kmp水題
hdu2203
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<memory.h>
using namespace std;
char a[200010],b[100010];
int Next[100010],L1,L2,ans;
bool flag;
void _next()
{
int i,k;
Next[1]=0;
for(i=1,k=0;i<=L2;i++){
while(k&&b[i]!=b[k+1])k=Next[k];//k不能為0不然一直循環
if(b[i]==b[k+1]) k++;
Next[i]=k;
}
}
void _kmp()
{
_next();
int i,k;
for(i=1,k=0;i<=L1;i++){
while(k&&a[i]!=b[k+1 ]) k=Next[k];
if(a[i]==b[k+1]) k++;
if(k==L2){
flag=true;
return ;
}
}
}
int main()
{
while(~scanf("%s",a+1)){
flag=false;
scanf("%s",b+1);
L1=strlen(a+1);
L2=strlen(b+1);
for(int i=1;i<=L1;i++) a[i+L1]=a[i];
if(L1<L2) printf("no\n");
else{
L1*=2;
_kmp();
if(flag) printf("yes\n");
else printf("no\n");
}
}
return 0;
}
每天都要進步
HDU2203 親和串