0
点赞
收藏
分享

微信扫一扫

POJ - 2185 Milking Grid(KMP)

陈情雅雅 2022-02-04 阅读 25
算法c++

POJ - 2185 Milking Grid(KMP)

#include<stdio.h>
#include<string.h>

const int N = 10010, M = 80;
char str[N][M];
int ne[N],st[M];

int main()
{
	int n,m;scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%s",str[i]);
		for(int j=1;j<=m;j++)
		{
			int is_match=1;
			for(int k=j;k<m;k+=j)
			{
				for(int u=0;u<j&&k+u<m;u++)
					if(str[i][u]!=str[i][k+u])
					{
						is_match=0;
						break;
					}
				if(!is_match) break;
			}
			if(!is_match) st[j]=1;
		}
	}
	
	int width;
	for(int i=1;i<=m;i++)if(!st[i]){width=i;break;}
	for(int i=1;i<=n;i++) str[i][width]=0;
	for(int j=0,i=2;i<=n;i++)
	{
		while(j&&strcmp(str[j+1],str[i])) j=ne[j];
		if(!strcmp(str[j+1],str[i])) j++;
		ne[i]=j;
	}
	int height=n-ne[n];
	printf("%d\n",width*height);
	
	return 0;
}
举报

相关推荐

0 条评论