求助!kmp93 wa on #11
查看原帖
求助!kmp93 wa on #11
1011160
wangqianmo楼主2025/7/21 16:42

代码如下

#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;
}

求大佬帮助

2025/7/21 16:42
加载中...