获取网站漏洞后下一步怎么做,织梦网站主页,景县网址建站,佛山网站建设十年乐云seo文章目录题目描述解析代码题目描述 解析
我的做法是二分答案#xff0c;暴力枚举子串#xff0c;对其他的字符串进行KMP。 复杂度logL*L2 没有一次AC#xff0c;因为忘记了字符串清零#xff01;#xff0c;否则它会和上次二分的字符串没被覆盖到的部分连在一起。 之前遇…
文章目录题目描述解析代码题目描述 解析
我的做法是二分答案暴力枚举子串对其他的字符串进行KMP。 复杂度logL*L2 没有一次AC因为忘记了字符串清零否则它会和上次二分的字符串没被覆盖到的部分连在一起。 之前遇到过类似的问题了没有引起重视需要注意一下
做完后看了下题解其实不用二分答案用最短串枚举起点对其他串进行KMP匹配记录最大的失配位置就可以了复杂度比我的做法少一个log
代码
还是带log的做法。。。
#includebits/stdc.h
using namespace std;
#define ll long long
typedef unsigned long long ull;
const int N 2504;
const int M1e75;
const int mod1e73;
int n,m;
int l0[6],l;
char ss[6][N],s[N];
int p[N];
void solve(){p[1]0;lstrlen(s1);for(int i1,j0;il;i){while(s[i1]!s[j1]j) jp[j];if(s[i1]s[j1]) j;p[i1]j;}
}
bool kmp(int k){for(int i0,j0;il0[k];i){while(ss[k][i1]!s[j1]j) jp[j];if(ss[k][i1]s[j1]) j;if(jl){return true;}}return false;
}
bool check(int k){//printf(check: %d\n,k);for(int i1;ik-1l0[1];i){//memset(s,0,sizeof(s));for(int j1;jk;j){s[j]ss[1][ij-1];}//printf( s%s\n,s1);solve();int flag1;for(int j2;jn;j){if(!kmp(j)){//printf(j%d not!\n,j);flag0;break;}}if(flag) return true;}return false;
}
int main(){scanf(%d,n);int st0,ed2000;for(int i1;in;i){scanf( %s,ss[i]1);l0[i]strlen(ss[i]1);edmin(ed,l0[i]);}while(sted){int mid(sted1)1;if(check(mid)) stmid;else edmid-1;}printf(%d,st);return 0;
}
/*
3
abdcdjjjds
ajjsnbadcd
cdjjsdcdda
*/