【题目描述】

日本信息学奥赛委员会为了应援将要去台湾参加 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。

暴力跑一遍求原本的答案,再替换后计算\(\Delta 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('0'>k||k>'9');
while('0'<=k&&k<='9')t=(t<<3)+(t<<1)+(k^'0'),k=getchar();
return ty?-t:t;
}
# define fre(k) freopen(k".in","r",stdin);freopen(k".out","w",stdout)
int x[1005][1005],n,m,t,ans[1005][1005];
int Get(int i,int j){return x[i][j]<<6|x[i][j+1]<<4|x[i+1][j]<<2|x[i+1][j+1];}
int main()
{
n=read,m=read;
for(int i=0;i++^n;)
for(int j=0,k;j++^m;x[i][j]=k^'J'?k^'O'?1:2:3)
do k=getchar();while(k^'J' and k^'O' and k^'I');
for(int i=0;i++^2;)
for(int j=0,k;j++^2;t=t<<2|(k^'J'?k^'O'?1:2:3))
do k=getchar();while(k^'J' and k^'O' and k^'I');
int tans=0;
for(int i=0;++i^n;)
for(int j=0;++j^m;)
if(Get(i,j)==t)
++tans,++ans[i][j],++ans[i+1][j],++ans[i][j+1],++ans[i+1][j+1];
int ad=0;
for(int i=0;i++^n;)
for(int j=0,l;j++^m;x[i][j]=l)
for(l=x[i][j],x[i][j]=0;++x[i][j]^4;)
{
int fu=0;
for(int o=i-1;o<=i;++o)
for(int p=j-1;p<=j;++p)
if(o&&p and o^n and p^m)
fu+=Get(o,p)==t;
ad=max(ad,ad+fu-ans[i][j]);
}
printf("%d",tans+ad);
return 0;
}

JOI徽章的更多相关文章

  1. JOI2013-2019

    代码自己去LOJ看 JOI2013 彩灯 把序列划分成若干极长交替列,那么最优的方案一定是将一个极长交替列翻转使得连续的三个极长交替列合成一个.计算相邻三个极长交替列长度的最大值即可. 搭乘IOI火车 ...

  2. 「CSP-S模拟赛」2019第四场

    「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...

  3. Bootstrap <基础二十一>徽章(Badges)

    Bootstrap 徽章(Badges).徽章与标签相似,主要的区别在于徽章的边角更加圆滑. 徽章(Badges)主要用于突出显示新的或未读的项.如需使用徽章,只需要把 <span class= ...

  4. 使用joi来验证数据模型

    我们用nodejs实现一些功能时,往往需要对用户输入的数据进行验证.然而,验证是一件麻烦的事情,很有可能你需要验证数据类型,长度,特定规则等等,在前端做表单验证时,我们常用的做法是使用正则,正则表达式 ...

  5. Bootstrap 路径分页标签和徽章组件

    一.路径组件 路径组件也叫做面包屑导航. //面包屑导航 <ol class="breadcrumb"> <li><a href="#&qu ...

  6. BootStrap入门教程 (三) :可重用组件(按钮,导航,标签,徽章,排版,缩略图,提醒,进度条,杂项)

    上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整的前 ...

  7. 造一个Badge Service(徽章)的轮子

    什么是Badge Service 细心的读者朋友一定在很多Github的Repo,npm的package页面看到过诸如 的徽章.这些徽章是干什么用的? 大家看到上文中我引用的Badge的左侧,是Dow ...

  8. [Hapi.js] Request Validation with Joi

    hapi supports request validation out of the box using the joi module. Request path parameters, paylo ...

  9. Bootstrap入门(十八)组件12:徽章与巨幕

    Bootstrap入门(十八)组件12:徽章与巨幕 1.徽章 2.巨幕 1.徽章 给链接.导航等元素嵌套 <span class="badge"> 元素,可以很醒目的展 ...

随机推荐

  1. Windows Server - Tomcat服务器下载、安装、配置环境变量教程

      版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_40881680/articl ...

  2. ES6 函数的拓展(四)

    一.参数带默认值函数1.在函数形参可以赋予函数默认值[即实参严格匹配undefined时,在函数内部使用形参时调用它的默认值]2.函数name属性 [返回函数名称,无名的函数返回空字符串]3.函数le ...

  3. Semaphore的简介及应用场景

    Semaphore是一个计数信号量,常用于限制可以访问某些资源(物理或逻辑的)线程数目. 常用函数: 信号量的构造函数 非公平: public Semaphore(int permits);//per ...

  4. 1047--Remove All Adjacent Duplicates In String

    public class RemoveAllAdjacentDuplicatesInString { /* 解法一:栈 */ public String removeDuplicates(String ...

  5. 使用Qemu运行Ubuntu文件系统 —— 搭建SVE学习环境(2)

    开发环境 PC:ubuntu18.04 Qemu:4.1 Kernel:Linux-5.2 概述 由于要学习ARM的SVE技术,但是目前还没有支持SVE指令的板子,所以只能用Qemu来模拟,但是发现Q ...

  6. 重新编译kubeadm,修改默认证书时间

    参考 kubeadm alpha certs renew Kubeadm1.14 证书调整 kubeadm 部署的 kubernetes 集群,默认的证书有效时间是1年,需要每年手工更新. 1. 重新 ...

  7. 【JavaScript】案例一:使用JS完成注册页面表单校验——事件(onsubmit&onfocus&onblur)

    (一)初版:事件(onsubmit) 步骤分析: 第一步:确定事件(onsubmit)并为其绑定一个函数 第二步:书写这个函数(获取用户输入的数据<获取数据时需要在指定位置定义一个 id> ...

  8. 为 Jupyter Notebook指定虚拟环境的 Python 解释器

    说明:本机系统为 win10 64 位, base 是集成于 Anaconda3 的 64 位的python,以下是创建虚拟环境 py366-32,安装 3.6.6 版的 32 为python,把 3 ...

  9. 实现Mac主机上的Docker容器中的图形界面显示(运行GUI应用)

    我有一个需求: 一方面,我需要在 Docker 容器环境下运行应用(因为有些环境在 Mac 下很难安装配置,并且希望环境干净隔离). 另一方面,容器中的应用又需要进行图形界面的显示. 由于 Docke ...

  10. CSP复习与模板

    P3366 [模板]最小生成树 Kruskal 算法因为只与边相关,则适合求稀疏图的最小生成树.而 Prim 算法因为只与顶点有关,所以适合求稠密图的最小生成树. Prim 是以更新过的节点的连边找最 ...