玄学代码求解
玄学代码不知道怎么过的,为啥要
for(int j = ne[cnt] ; j ; j = ne[j])????
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1000010;
char s[N],temp[N];
int ne[N],ne1[N];
void substr(int cnt)
{
for(int i = 1; i <= cnt; i ++) temp[i] = s[i];
for(int i = 2,j = 0; i <= cnt; i ++)
{
while(j && temp[i] != temp[j + 1]) j = ne1[j];
if(temp[i] == temp[j + 1]) j ++;
ne1[i] = j;
}
}
int main()
{
cin >> s + 1;
int cnt = strlen(s + 1),x = 0;
for(int i = 2,j = 0; s[i]; i ++)
{
while(j && s[i] != s[j + 1]) j = ne[j];
if(s[i] == s[j + 1]) j ++;
ne[i] = j;
}
bool flag = false;
for(int j = ne[cnt]; j ; j = ne[j])
{
substr(j);
for(int i = 2,k = 0; i <= cnt - 1; i ++)
{
while(k && s[i] != temp[k + 1]) k = ne1[k];
if(s[i] == temp[k + 1]) k ++;
if(k == j)
{
flag = true;
break;
}
}
if(flag == true) {x = j;break;}
}
if(!flag) puts("Just a legend");
else
for(int i = 1; i <= x;i ++) printf("%c",s[i]);
}
查看7道真题和解析