JOI徽章

这篇博客探讨了如何在日本信息学奥赛旗帜上通过有限的操作,最大化JOI徽章的数量。给定旧旗帜和JOI徽章的布局,计算新旗帜中JOI徽章的最大可能个数,并提供了输入输出格式及样例解。
摘要由CSDN通过智能技术生成

【题目描述】
日本信息学奥赛委员会为了应援将要去台湾参加 IOI 的选手们,打算制作一面新的 JOI 旗帜 。JOI
旗帜为由 M 行 N 列的 M*N 个正方形组 成的图形,每个正方形里写有 J,O,I 中任一字母。

日本信息学奥赛委员会还决定制作 JOI 徽章 。JOI 徽章为由 2 行 2 列的 4 个
正方形组成的图形,每个正方形里写有 J,O,I 中任一字母。

JOI 旗帜中所含 JOI 徽章的个数的意思是,JOI 旗帜中的与 JOI 徽章相同(不允许翻转或旋转)的 22 区域的个数。
现在日本信息学奥赛委员会拥有一张旧的 JOI 旗帜和一张白纸。这张白纸的大小和一个构成 JOI 旗的正方形的大小相同。可以在这张白纸上写上 J,O,I 中任一字母。日本信息学奥赛委员会将进行以下任意一种操作来制作新的 JOI 旗帜。
1.不进行任何操作,直接把旧的旗帜当新的用。不使用白纸。
2.在白纸上写下一个字母,将白纸覆盖在旧的 JOI 旗帜的任意一个正方形上(也就是变更旧的 JOI 旗帜的一个正方形的字母)。
日本信息学奥赛委员会想让新的 JOI 旗帜所含的 JOI 徽章的数量尽可能多。请求出新的 JOI 旗帜所含的 JOI 徽章的个数的最大值。
【输入格式】
第一行为两个以空格分开的整数 M、N 。表示旧的 JOI 旗帜是由 M 行 N 列的 M
N 个正方形组成的图形。
接下来的 M 行,每行为含有 N 个字符的字符串。每个字符为 J,O,I 中的一个。这 M 行中的第 i 行中从左数第 j 个字符表示旧的 JOI 旗帜上的第 i 行第 j 列的正方形中所写的字符。
接下来的 2 行,每行为含有 2 个字符的字符串。每个字符为 J,O,I 中的一个。这 2 行中的第 i 行中从左数第 j 个字符表示 JOI 徽章上的第 i 行第 j 列的正方形中所写的字符。
【输出格式】
输出一行一个整数:表示新的 JOI 旗帜所含的 JOI 徽章的个数的最大值。
【样例1】
input
3 5
JOIJO
IJOOO
IIJIJ
JO
IJ
output
3

【数据规模与约定】
对于 30% 的数据, 1≤M≤50,1≤N≤50 。
对于 100% 的数据, 1≤M≤1000,1≤N≤1000。

暴力跑一遍求原本的答案,再替换后计算 Δ a n s \Delta ans Δans

#include<cstdio>
#include<algorithm>
using namespace std;
# define Type template<typename T>
# define read read1<int>()
Type inline T read1()
{
   
	T t=0;
	bool ty=0;
	char k;
	do k=getchar(),(k=='-')&&(ty=1);while(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值