CF838A Binary Blocks
题目描述
给定一张图片,可以用一个 $n$ 行 $m$ 列的二维网格来表示。图片中的每个像素点要么亮起,要么熄灭,分别用字符 "0" 或 "1" 表示。你希望对这张图片进行压缩。你想选择一个整数 $k>1$,将图片划分为 $k\times k$ 的小块。如果 $n$ 和 $m$ 不能被 $k$ 整除,则在图片的右边和底部用 0 填充,直到其可以被 $k$ 整除。每个小块内的所有像素值必须相同。当前的图片可能无法被直接压缩。请你求出,为了让图片能够对某个 $k$ 被压缩(即所有 $k\times k$ 块内像素相同,允许选择 $k$),在填充以后,至少需要翻转多少个像素点。具体过程为:首先选择 $k$,然后用 0 填充图片右侧和底部,然后你可以翻转像素点,使其能被 $k$ 压缩。最终图片必须能够被 $k$ 压缩。
输入格式
第一行输入包含两个整数 $n, m$,分别表示图片的行数和列数,$2 \leq n, m \leq 2500$。
接下来 $n$ 行,每行包含一个长度为 $m$ 的仅由 0 和 1 组成的字符串,表示图片的像素。
输出格式
输出一个整数,表示最少需要翻转多少个像素点,才能使图片对于某个 $k$ 可压缩。
说明/提示
我们首先选择 $k=2$。
图片经过填充后的样子如下:
```
001000
101100
110010
000000
```
我们可以将图片翻转成如下样子:
```
001100
001100
000000
000000
```
可以看出,这张图片对于 $k=2$ 是可以压缩的。
由 ChatGPT 5 翻译