【阶段1】【AcWing 159. 奶牛矩阵 】【Milking Grid】巧妙暴力+快乐KMP

这道题目要求求解一个R行C列奶牛矩阵的最小覆盖子矩阵面积。通过将问题转化为一维的KMP算法,并分别处理行和列的循环节,找到最小面积。文章介绍了如何将行和列转换为KMP问题,并通过暴力判断找出可行的循环节长度,最终确定最小覆盖子矩阵的面积。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题面】
每天早上,农夫约翰的奶牛们被挤奶的时候,都会站成一个R行C列的方阵。
现在在每个奶牛的身上标注表示其品种的大写字母,则所有奶牛共同构成了一个R行C列的字符矩阵。
现在给定由所有奶牛构成的矩阵,求它的最小覆盖子矩阵的面积是多少。
如果一个子矩阵无限复制扩张之后得到的矩阵能包含原来的矩阵,则称该子矩阵为覆盖子矩阵。

【输入格式】
第1行:输入两个用空格隔开的整数,R和C。
第2..R+1行:描绘由奶牛构成的R行C列的矩阵,每行C个字符,字符之间没有空格。

【输出格式】
输出最小覆盖子矩阵的面积。(每个字符的面积为1)

【数据范围】
1≤R≤10000,
1≤C≤75

【输入样例】
2 5
ABABA
ABABA

【输出样例】
2

【提示】
样例中给出的矩阵的最小覆盖子矩阵为AB,面积为2。

  • 这道题的难度在于,它是二维的。如果将它只是一维的,那我们很容易就看出来是个KMP题(求最小循环节)
  • 所以如何二维处理?我们可以分开,行和列各自处理,将行的结果*列的结果就是矩阵的大小
  • 如果要求列的结果,我们可以将整一行看成一个元素,将这些元素进行KMP(下面的例子中,第1、3、5行是一样的,可将它们等价为相同的元素1;第2、4行是一样但又不同于其他行的,可将它们等价为相同的元素2&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值