QOJ.ac

QOJ

時間限制: 1 s 記憶體限制: 256 MB 總分: 100

#3156. JOI 徽章

统计

JOI 委员会决定制作一面新的 JOI 旗,以支持前往台湾参加比赛的选手。

JOI 旗是一个由 $M$ 行 $N$ 列正方形组成的矩形,每个正方形中都写有一个字符,字符为 'J'、'O' 或 'I' 中的一个。

JOI 旗示例

JOI 委员会还定义了一个“JOI 纹章”。JOI 纹章是一个由 2 行 2 列正方形组成的矩形,每个正方形中也写有一个字符,字符为 'J'、'O' 或 'I' 中的一个。

JOI 纹章示例

JOI 旗中包含的 JOI 纹章数量,是指在 JOI 旗中,字符排列与 JOI 纹章完全一致(不进行旋转或翻转)的 2 行 2 列区域的个数。即使满足条件的 2 行 2 列区域之间存在重叠,也应分别计数。

JOI 委员会拥有一面旧的 JOI 旗和一张白纸。白纸的大小与构成 JOI 旗的一个正方形相同,可以在上面写下 'J'、'O' 或 'I' 中的任意一个字符。JOI 委员会决定通过以下任一操作来制作新的 JOI 旗:

  • 不对旧的 JOI 旗进行任何操作,直接将其作为新的 JOI 旗。此时不使用白纸。
  • 在白纸上写下一个字符,并将其覆盖在旧 JOI 旗的任意一个正方形上,从而改变旧 JOI 旗中的一个位置。将修改后的旗帜作为新的 JOI 旗。

JOI 委员会希望尽可能多地增加新 JOI 旗中包含的 JOI 纹章数量。你需要求出新 JOI 旗中包含的 JOI 纹章数量的最大值。

题目描述

给定旧 JOI 旗和 JOI 纹章的信息,编写一个程序来计算新 JOI 旗中包含的 JOI 纹章数量的最大值。

输入格式

从标准输入读取以下数据:

  • 第 1 行包含两个整数 $M$ 和 $N$,以空格分隔。这表示 JOI 旗是一个 $M$ 行 $N$ 列的矩形。
  • 接下来的 $M$ 行,每行包含一个长度为 $N$ 的字符串。每个字符为 'J'、'O' 或 'I'。其中第 $i$ 行($1 \le i \le M$)的第 $j$ 个字符($1 \le j \le N$)表示旧 JOI 旗中第 $i$ 行第 $j$ 列的字符。
  • 接下来的 2 行,每行包含一个长度为 2 的字符串。每个字符为 'J'、'O' 或 'I'。其中第 $i$ 行($1 \le i \le 2$)的第 $j$ 个字符($1 \le j \le 2$)表示 JOI 纹章中第 $i$ 行第 $j$ 列的字符。

输出格式

在标准输出中,输出一行,表示新 JOI 旗中包含的 JOI 纹章数量的最大值。

数据范围

所有输入数据满足以下条件:

  • $2 \le M \le 1000$
  • $2 \le N \le 1000$

子任务

子任务 1 [30 分]

满足以下条件: $M \le 50$ $N \le 50$

子任务 2 [70 分]

没有额外限制。

样例

输入 1

3 5
JOIJO
IJOOO
IIJIJ
JO
IJ

输出 1

3

说明 1

旧 JOI 旗和 JOI 纹章如题中所述。如果使用白纸将从上往下第 2 行、从左往右第 4 列的正方形改为 'J',则旗帜变为如下形状:

修改了 1 处位置的 JOI 旗示例

修改后的 JOI 旗中,有 3 处区域的配置与 JOI 纹章相同:

与 JOI 纹章配置相同的区域

由于不存在配置与 JOI 纹章相同的区域达到 4 处或以上的新的 JOI 旗,因此新 JOI 旗中包含的 JOI 纹章数量的最大值为 3。

输入 2

2 6
JOJOJO
OJOJOJ
OJ
JO

输出 2

2

说明 2

请注意,即使不使用白纸,也可能获得最大值。

输入 3

2 2
JI
IJ
JJ
JJ

输出 3

0

说明 3

对于此样例,在任何可能的新 JOI 旗中,都不包含任何 JOI 纹章。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.