Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
46183 wsad 【模拟赛3】无限复制 ZBN 是 MJ ? C++ 解答错误 80 274 MS 388 KB 922 2022-02-28 12:58:31

Tests(8/10):


#include<bits/stdc++.h> using namespace std; const int M=1000010; int k,Next[M]; //长度从k开始 char s[M],t[M]; bool T[30]; void GetNext(int n){ Next[1]=0; for(int i=2,j=0;i<=n;++i) { for(;j>0 && t[i]!=t[j+1];j=Next[j]); if(t[i]==t[j+1]) ++j; Next[i]=j; } return ; } bool KMP(int m,int n){ int r=m,a=n-n%m; //a为完整串 for(int i=m+1,j=0;i<=a;++i) { for(;j>0 && s[i]!=t[j+1];j=Next[j]); if(s[i]==t[j+1]) ++j; if(j==m) { if( (i-j)!=r ) return 0; r=i; } } for(int i=a+1,j=1;i<=n;++j,++i) if(s[i]!=t[j]) return 0; return 1; } int main(){ int l; cin>>l; getchar(); for(int i=1;i<=l;++i) { cin>>s[i]; if(!T[s[i]-'a']) k=i,T[s[i]-'a']=1; } for(int i=1;i<=k;++i) t[i]=s[i]; for(int i=k;i<=l;++i) { GetNext(i),t[i]=s[i]; if(KMP(i,l)) { cout<<i<<'\n'; return 0; } } return 0; }


测评信息: