题目:Password
思路:
来自mjy0724——
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000000
int n;
char a[maxn+5];
int nxt[maxn+5];
int vis[maxn+5];
int main() {
scanf("%s",a);
n=strlen(a);
nxt[0]=-1;
for(int i=0; i<n; i++) {
int j=nxt[i];
while(a[j]!=a[i]&&j>=0) {
j=nxt[j];
}
nxt[i+1]=j+1;
}
int ans=0;
bool flg=false;
int x=nxt[n];
if(!x) goto End;
vis[x]=1;
while(x) {
vis[x]=1;
x=nxt[x];
}
for(int i=2; i<n; i++) {
if(vis[nxt[i]]&&nxt[i]>ans) {
ans=nxt[i];
flg=true;
}
}
if(flg) {
for(int i=0;i<ans;i++) printf("%c",a[i]);
return 0;
}
End: printf("Just a legend");
return 0;
}