2018 nowcoder 多校第二场 K题 carpet

题意

找一个最小权值和 二维循环周期。

题解:

一般这种题,都先扔掉最优化的条件,思考如何求解,然后在考虑最优化。

那么如何求解二维循环周期(注意不是循环节)呢?显然对于每一行KMP一下就可以找到每一行的循环周期,对于一个size=p行*q列的周期,意味着column[i] = column[i+q],更具体的说就是 对于每一行r 都有s[r][i] = s[r][i+q] 。这意味着q是每一行的循环周期。那么思路就显然了。我们需要找到所有的n行公共的循环周期,所有m列公共的循环周期。然后进行任意的组合,就可以得到所有循环周期。

如何最优化:考虑任意一个非最小的循环周期(设为p*q):P*Q,有(P>=p&&Q>=q&&!(P==p&&Q==q)).我们知道p*q一定是P*Q的子矩形。。。因为分别可以用P*Q和p*q两种size生成整个矩阵,两个生成矩阵相等。。。所以是显然的。所以既然是子矩阵。。那么肯定选最小的那种阿。。问题变成了权值矩阵固定p*q大小子矩阵的最大值最小问题。

这个就不用二分了吧。。明明可以线性的。。用单调队列单独扫每一行,对于每一个位置(i,j)计算出

maxVal[i][j]=maxk=jj+q1a[i][k]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值