码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj 3620 暴力KMP

时间:2018-09-14 13:54:28      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:style   暴力   name   ret   amp   col   i++   bzoj   clu   

十分暴力的KMP,枚举左端点,在向右侧推进的同时,取较小的la保证条件,n方暴力

#include<bits/stdc++.h> 
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define inf 0x3fffffff
using namespace std;
const int N=20000;
char s[N];int l,k,nxt[N],la[N],ans;
int main(){
    freopen("3620.in","r",stdin);
    freopen("3620.out","w",stdout);
    scanf("%s",s+1);l=strlen(s+1);scanf("%d",&k);ans=0;
    rep(i,1,l){
        nxt[i]=i-1,la[i]=inf;
        rep(ii,i,l-1){
            int j=nxt[ii];while(j>=i&&s[ii+1]!=s[j+1])j=nxt[j];
            if(s[ii+1]==s[j+1]) ++j;nxt[ii+1]=j;
           
            if(nxt[ii+1]-i+1<k)la[ii+1]=inf;else{
                la[ii+1]=min(la[nxt[ii+1]],nxt[ii+1]);
                if(la[ii+1]-i+1<=(ii+1-i)>>1) ++ans;}
        }
    }
    printf("%d",ans); return 0;
}

 

bzoj 3620 暴力KMP

标签:style   暴力   name   ret   amp   col   i++   bzoj   clu   

原文地址:https://www.cnblogs.com/asdic/p/9645957.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!