当前位置: 代码迷 >> 综合 >> 【习题·字符串】Milking Grid(区间KMP)
  详细解决方案

【习题·字符串】Milking Grid(区间KMP)

热度:68   发布时间:2023-12-17 11:31:35.0

题目描述

每天早晨FARMER JOHN的奶牛都会在挤奶时排成矩形,R行(1<=R<=10,000),C列(1<=C<=75)。我们知道,FARMER JOHN是奶牛专家,他打算写一本关于喂养奶牛的书。他发现,当奶牛按照不同的血统标记以后,整个大矩形就像由很多相同的小矩形拼起来的一样。

请帮助FJ找到面积最小的小矩形,使它能拼出整个大矩形。小矩形的尺寸不一定要整除大矩形的,但是小矩形的排列一定要非常整齐,不允许出现错位之类的情况,即你可以用若干个小矩形拼出一个包含大矩形的矩形。

比如,对于下面的矩形:

ABABA

BABAB

最小的面积应该是4,而不是2。

题解

这道题的主要思路就是,分别求出行和列的公共最小循环节,即每一行(或列)有一个相同的值使得存在大小为这个值的循环节,且使得这个值最小;然后只要两个值相乘即可。

我们可以分别求出行的所有循环节长度,然后数组统计一下即可。

显然,最小循环节 = n ? n e x t [ i ] =n-next[i] =n?next[i];次小循环节 = n ? n e x t [ n e x t [ i ] ] =n-next[next[i]] =n?next[next[i

  相关解决方案