poj 2185 Milking Grid

矩阵转置的题目。。每一行当做一个元素进行kmp。。 反正函数够用。。

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
const int maxn=10010;
char a[maxn][80];
char b[80][maxn];
int next1[maxn];
int next2[80];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        for(int j=0;j<m;j++)
        {
            b[j][i]=a[i][j];
        }
    }
    next1[0]=-1;
    int i=0;
    int j=next1[0];
    while(i<n)
    {
        if(j==-1||!strcmp(a[i],a[j]))
        {
            i++;
            j++;
            next1[i]=j;
        }
        else
        {
            j=next1[j];
        }
    }
    int ans1=n-next1[n];
    next2[0]=-1;
    i=0;
    j=next2[0];
    while(i<m)
    {
        if(j==-1||!strcmp(b[i],b[j]))
        {
            i++;
            j++;
            next2[i]=j;
        }
        else
        {
            j=next2[j];
        }
    }
    int ans2=m-next2[m];
    cout<<ans1*ans2<<endl;
    return 0;
}

你可能感兴趣的:(KMP,poj)