milking grid

#include<iostream>
#include<cstring>
char a[10010][85],za[85][10010];
int R[10010],C[10010];
using std::cin;
using std::cout;
using std::endl;
int r,c;

void fR( ){//横行直接整行求next
R[0]=-1;
int j=-1,i=0;
while(i<r){
if(j==-1||!strcmp(a[i], a[j])){
i++;j++;
R[i]=j;
}
else j=R[j];
}
}

void fC( ){
C[0]=-1;
int j=-1,i=0;
while(i<c){
if(j==-1||!strcmp(za[i], za[j])){
i++;j++;
C[i]=j;
}
else j=C[j];
}
}
int main(){
cin>>r>>c;
for(int i=0;i<r;i++)
scanf("%s",a[i]);
fR();
for(int i=0;i<r;i++)//矩阵翻转
for(int j=0;j<c;j++)
za[j][i]=a[i][j];
fC();//继续整行求next
cout<<(r-R[r])*(c-C[c])<<endl;
return 0;
}

posted @ 2018-04-11 22:06  杂旸  阅读(105)  评论(0编辑  收藏  举报