棋盘制作 BZOJ 1057
棋盘制作
【问题描述】
国际象棋是世界上最古老的博弈游戏之一,和中国的围棋、象棋以及日本的将棋同享盛名。据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳。而我们的主人公小Q,正是国际象棋的狂热爱好者。作为一个顶尖高手,他已不满足于普通的棋盘与规则,于是他跟他的好朋友小W决定将棋盘扩大以适应他们的新规则。小Q找到了一张由N*M个正方形的格子组成的矩形纸片,每个格子被涂有黑白两种颜色之一。小Q想在这种纸中裁减一部分作为新棋盘,当然,他希望这个棋盘尽可能的大。不过小Q还没有决定是找一个正方形的棋盘还是一个矩形的棋盘(当然,不管哪种,棋盘必须都黑白相间,即相邻的格子不同色),所以他希望可以找到最大的正方形棋盘面积和最大的矩形棋盘面积,从而决定哪个更好一些。于是小Q找到了即将参加全国信息学竞赛的你,你能帮助他么?
【输入格式】
第一行包含两个整数N和M,分别表示矩形纸片的长和宽。接下来的N行包含一个N * M的01矩阵,表示这张矩形纸片的颜色(0表示白色,1表示黑色)。
【输出格式】
【样例输入】
3 3
1 0 1
0 1 0
1 0 0
【样例输出】
4
6
【数据范围】
N, M ≤ 2000
题解:
首先算出点能向上扩展的最大高度,即为height
枚举每个点,求出在保证当前点向上扩展的高度时能向左向右扩展的最大长度,即为left与right
那么正方形的边长就是left与right中的较大值与height的较小值
长方形的面积就是left和right中的较大值与height的乘积
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
int n, m, ansz, ansc, a[][], high[][], l[], r[], s[];
inline int Max(int x, int y)
{
return (x > y) ? x : y;
}
inline int Min(int x, int y)
{
return (x < y) ? x : y;
}
int main()
{
scanf("%d%d", &n, &m);
getchar();
for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j)
{
a[i][j] = getchar() - '';
if(a[i][j] != a[i - ][j])
high[i][j] = high[i - ][j] + ;
else high[i][j] = ;
getchar();
}
for(int i = ; i <= n; ++i)
{
for(int j = ; j <= m; ++j) l[j] = r[j] = j;
for(int j = ; j <= m; ++j)
while(l[j] > && high[i][l[j] - ] >= high[i][j] && a[i][l[j]] != a[i][l[j] - ])
l[j] = l[l[j] - ];
for(int j = m - ; j >= ; --j)
while(r[j] < m && high[i][r[j] + ] >= high[i][j] && a[i][r[j]] != a[i][r[j] + ])
r[j] = r[r[j] + ];
for(int j = ; j <= m; ++j)
{
ansz = Max(ansz, Min(r[j] - l[j] + , high[i][j]));
ansc = Max(ansc, (r[j] - l[j] + ) * high[i][j]);
}
}
printf("%d\n%d", ansz * ansz, ansc);
}
棋盘制作 BZOJ 1057的更多相关文章
- 1057: [ZJOI2007]棋盘制作 - BZOJ
Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴 ...
- bzoj 1057: [ZJOI2007]棋盘制作 单调栈
题目链接 1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 1019[Submit] ...
- BZOJ 1057: [ZJOI2007]棋盘制作( dp + 悬线法 )
对于第一问, 简单的dp. f(i, j)表示以(i, j)为左上角的最大正方形, f(i, j) = min( f(i + 1, j), f(i, j + 1), f(i + 1, j + 1)) ...
- 【BZOJ 1057】 1057: [ZJOI2007]棋盘制作
1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的 ...
- BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp
1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑 ...
- 悬线法 || BZOJ 1057: [ZJOI2007]棋盘制作 || Luogu P1169 [ZJOI2007]棋盘制作
题面:P1169 [ZJOI2007]棋盘制作 题解: 基本是悬线法板子,只是建图判断时有一点点不同. 代码: #include<cstdio> #include<cstring&g ...
- BZOJ 1057:[ZJOI2007]棋盘制作(最大01子矩阵+奇偶性)
[ZJOI2007]棋盘制作 时间限制: 20 Sec 内存限制: 162 MB[题目描述]国际象棋是世界上最古老的博 ...
- 【BZOJ-3039&1057】玉蟾宫&棋盘制作 悬线法
3039: 玉蟾宫 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 753 Solved: 444[Submit][Status][Discuss] D ...
- 1057: [ZJOI2007]棋盘制作
1057: [ZJOI2007]棋盘制作 https://www.lydsy.com/JudgeOnline/problem.php?id=1057 分析: 首先对于(i+j)&1的位置0-& ...
随机推荐
- Python学习日志9月14日
今天早晨又没有专心致志的学习,我感觉我可能是累了,需要减轻学习的程度来调整一下咯.这几天装电脑弄的昏天暗地的,身体有点吃不消了.时间真是神奇的魔法,这半个月来,每隔几天都有想要改变策略的想法.今天早晨 ...
- 数据库_4_SQL介绍
SQL SQL:Structured Query Language,结构化查询语言(数据已查询为主:99%是在进行查询操作) what型语言,而非how型的语言. SQL分为三个部分: DDL: ...
- Java中的线程--多线程面试题
到这里,基本上线程的并发中的知识点都是学到了,到了最后,还有三道面试题,从面试题中学习更加的加深一下,多线程中的知识点,如何在实际的问题中来解决多线程的问题,可以更好的从实际出发 一.面试题1 面试题 ...
- AOP日志组件 多次获取post参数
AOP日志组件 多次获取post参数 需求:新增接口日志组件.通过拦截器对接口URL进行拦截处理,然后将接口post请求的参数与结果,写入日志表. 问题:POST方法的参数是存储在request.ge ...
- shell脚本,awk 匹配的做修改后打印,不匹配的打印。
文件file内容如下a 1a 2b 3b 4 b 5c 6c 7 要求:第一列匹配b时,如果第二列大于3,那么将第二列加上1后打印,其余的原封不动打印.结果如下: a 1a 2b 3b 5 b 6c ...
- cookies,sessionStorage和localStorage的相同点和不同点?
相同点:都存储在客户端. 不同点: 1.存储大小: cookies数据大小不能超过4k sessionStorage和localStorage虽然也有存储大小的限制,但比cookies大得多,可以达到 ...
- [九省联考2018] IIIDX 线段树+贪心
题目: 给出 k 和 n 个数,构造一个序列使得 d[i]>=d[i/k] ,并且字典序最大. 分析: 听说,当年省选的时候,这道题挡住了大批的高手,看上去十分简单,实际上那道弯段时间内是转不过 ...
- syslog命令
更多请关注 Linux命令大全 syslog 介绍 syslog是Linux系统默认的日志守护进程.默认的syslog配置文件是/etc/syslog.conf文件.程序,守护进程和内核提供了访问系统 ...
- python--内置函数03
一 . 正则表达式 匹配字符串 元字符 . 除了换行 \w 数字, 字母, 下划线 \d 数字 \s 空白符 \n \t \b 单词的边界 \W 非xxx \D \S [ ] 字符组 or的关系 [^ ...
- 创建虚拟机、安装centos系统,xshell连接虚拟机
创建虚拟机 文件--->新建虚拟机--->自定义最高级 选择虚拟机兼容性: workstation12.0:限制少,而且兼容的多 稍后安装操作系统 选择Linux系统 可选择centos7 ...