P14209 [ROI 2016 Day2] 视频监控管理

题目背景

**译自 [ROI 2016](http://neerc.ifmo.ru/school/archive/2015-2016.html) Day2 T1.** ***[Управление видеонаблюдением](http://neerc.ifmo.ru/school/archive/2015-2016/ru-olymp-roi-2016-day2.pdf)***

题目描述

一家安保公司接到合同,负责守卫两栋建筑。每栋建筑中都安装了多台视频监控摄像机。 安保室的一面墙上安装了一块矩形监控屏墙,由 $n$ 行组成,每行有 $m$ 个视频监视器。每个监视器显示的是来自两栋建筑之一的某个摄像头的画面。安保室配备了一个创新型控制面板,上面有四个按钮:“左移”、“右移”、“上移”和“下移”。 按下“左移”按钮时,每个监视器上的画面会移动到其左侧相邻的监视器上;而每行中最左侧监视器上的画面会移动到该行最右侧的监视器上。 类似地,“右移”、“上移”和“下移”按钮的功能如下: - “右移”:每个监视器上的画面移动到其右侧相邻的监视器上;每行最右侧监视器上的画面会移动到该行最左侧的监视器上。 - “上移”:每个监视器上的画面移动到其上方的监视器上;最上方一行的监视器画面会移动到最下方一行的监视器上。 - “下移”:每个监视器上的画面移动到其下方的监视器上;最下方一行的监视器画面会移动到最上方一行的监视器上。 若某个 $2 \times 2$ 的监视器方块中的四个画面全部来自同一栋建筑,则称这个方块是**便于观察的**。通过控制面板上的按钮移动画面,便于观察的方块数量可能会发生变化。同一个监视器可以同时属于多个便于观察的方块。 请你编写一个程序,计算通过操作控制面板所能获得的**便于观察的方块数量的最大值**。

输入格式

第一行包含两个整数 $n$ 和 $m$,分别表示监视器的行数和每行的监视器数量。 接下来的 $n$ 行描述从上到下的每一行监视器的情况。每一行包含 $m$ 个字符,描述该行从左到右的监视器来源: - 字符 `'1'` 表示该监视器显示的是第一栋建筑的画面; - 字符 `'2'` 表示该监视器显示的是第二栋建筑的画面。

输出格式

输出一个整数——通过移动监视器画面可以获得的**最大便于观察的方块数量**。

说明/提示

### 样例解释 在第一个样例中,按下“右移”按钮后,左侧会形成一个由 `'1'` 组成的便于观察的方块,而右侧会形成一个由 `'2'` 组成的便于观察的方块。 在第二个样例中,初始状态下屏幕上已经存在两个便于观察的方块。 在第三个样例中,例如通过依次按下“右移”和“下移”按钮,可以得到三个由 `'1'` 组成的便于观察的方块。 ### 数据范围 | 子任务编号 | 分值 | $n, m$ | 必须通过的子任务 | |:-----------:|:----:|:------:|:----------------:| | 1 | 37 | $2 \le n, m \le 50$ | | | 2 | 28 | $2 \le n, m \le 300$ | 1 | | 3 | 35 | $2 \le n, m \le 1000$ | 1–2 | 翻译由 ChatGPT-5 完成