n<=80什么鬼,其实如果n<=10000000还是可以做的,卡卡常,O(wys)233。
存两个哈希数组就好了,枚举长度判断。
#include<bits/stdc++.h>
using namespace std;
int n,m,mx;
char s[105];
unsigned long long f[2][105],tmp,x,y;
int main()
{
freopen("in.txt","r",stdin);
scanf("%s\n",s+1);n=strlen(s+1);
for(int i=1;i<=n;i++)f[0][i]=f[0][i-1]*23+s[i];
scanf("%s\n",s+1);m=strlen(s+1);
for(int i=1;i<=m;i++)f[1][i]=f[1][i-1]*23+s[i];
tmp=1;
for(int i=1;i<=n;i++)
{
tmp*=23;
x=f[0][i];
if(i>m)break;
y=f[1][m]-f[1][m-i]*tmp;
if(x==y)mx=max(mx,i);
}
tmp=1;
for(int i=1;i<=m;i++)
{
tmp*=23;
x=f[1][i];
if(i>n)break;
y=f[0][n]-f[0][n-i]*tmp;
if(x==y)mx=max(mx,i);
}
cout<<mx;
return 0;
}