十分暴力的KMP,枚举左端点,在向右侧推进的同时,取较小的la保证条件,n方暴力
#include#define rep(i,j,k) for(int i=j;i<=k;i++)#define inf 0x3fffffffusing 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 >1) ++ans;} } } printf("%d",ans); return 0;}