代码如下
#include<bits/stdc++.h>
using namespace std;
char s[10001][101];
int kmp[20002],cnt1[20002],cnt2[20002];
int main()
{
int r,c;
cin>>r>>c;
for(int i=1;i<=r;i++)
{
for(int j=1;j<=c;j++) cin>>s[i][j];
}
for(int i=1;i<=r;i++)
{
int k=0;
for(int j=2;j<=c;j++)
{
while(k>0&&s[i][j]!=s[i][k+1]) k=kmp[k];
if(s[i][j]==s[i][k+1]) k++;
kmp[j]=k;
}
int len=c-kmp[c];
for(int j=1;j*len<=c;j++) cnt1[j*len]++;
memset(kmp,0,sizeof(kmp));
}
for(int i=1;i<=c;i++)
{
int k=0;
for(int j=2;j<=r;j++)
{
while(k>0&&s[j][i]!=s[k+1][i]) k=kmp[k];
if(s[j][i]==s[k+1][i]) k++;
kmp[j]=k;
}
int len=r-kmp[r];
for(int j=1;j*len<=r;j++) cnt2[j*len]++;
memset(kmp,0,sizeof(kmp));
}
int x=c,y=r;
for(int i=1;i<=c;i++)
{
if(cnt1[i]==r)
{
x=i;
break;
}
}
for(int i=1;i<=r;i++)
{
if(cnt2[i]==c)
{
y=i;
break;
}
}
cout<<y*x;
return 0;
}
求大佬帮助