首先把矩阵转化一下,把横纵坐标和为偶数点的值取反,这样就转化成求最大的'0'或'1'矩阵。

这道题每个数字是在格子内的,不能在边界包含障碍点。

求最大的0矩阵时,把1作为障碍点。求1同理。

然后求最接近的就可以用树状数组求解啦~

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int N=,Inf=(int)1e9;
int n,m,a1,a2;
int a[N][N],l[N][N],r[N][N],last[N][N],cl[N][N],cr[N][N]; int minn(int x,int y){return x<y ? x:y;}
int maxx(int x,int y){return x>y ? x:y;} void add(int x,int y,int d)
{
for(int i=y;i<=m;i+=(i&(-i))) cl[x][i]=maxx(cl[x][i],d);
for(int i=y;i>=;i-=(i&(-i))) cr[x][i]=minn(cr[x][i],d);
} int get(int x,int y,int tmp)
{
if(tmp==)
{
int ans=;
for(int i=y-;i>=;i-=(i&(-i))) ans=maxx(ans,cl[x][i]);
if(ans==) return ;
else return ans+;
}
else
{
int ans=Inf;
for(int i=y+;i<=m;i+=(i&(-i))) ans=minn(ans,cr[x][i]);
if(ans>=Inf) return m;
else return ans-;
}
} void solve(int tmp)
{
memset(cl,,sizeof(cl));
memset(cr,,sizeof(cr));
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(a[i][j]==tmp) add(i,j,j);
}
memset(l[],,sizeof(l[]));
memset(r[],,sizeof(r[]));
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(a[i][j]==tmp) continue;
if(a[i-][j]==tmp)
{
l[i][j]=get(i,j,);//debug
r[i][j]=get(i,j,);//debug
last[i][j]=i-;
}
else
{
l[i][j]=maxx(l[i-][j],get(i,j,));
r[i][j]=minn(r[i-][j],get(i,j,));
last[i][j]=last[i-][j];
}
int xx=r[i][j]-l[i][j]+;
int yy=i-last[i][j];
a1=maxx(a1,minn(xx,yy)*minn(xx,yy));
a2=maxx(a2,xx*yy);
}
}
} int main()
{
freopen("a.in","r",stdin);
scanf("%d%d",&n,&m);
a1=;a2=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&a[i][j]);
if((i+j)%==) a[i][j]^=;
}
solve();
solve();
printf("%d\n%d\n",a1,a2);
return ;
}

【LuoguP1169 bzoj1057】[ZJOI2007]棋盘制作的更多相关文章

  1. BZOJ1057 [ZJOI2007]棋盘制作(极大化思想)

    1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 1848  Solved: 936 [Submit][Sta ...

  2. BZOJ1057 [ZJOI2007]棋盘制作 【最大同色矩形】

    1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 3248  Solved: 1636 [Submit][St ...

  3. BZOJ1057[ZJOI2007]棋盘制作 [单调栈]

    题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我们的 ...

  4. BZOJ1057 [ZJOI2007]棋盘制作

    Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应 ...

  5. 洛谷 P1169||bzoj1057 [ZJOI2007]棋盘制作

    洛谷P1169 bzoj1057 这个题目跟最大全0子矩阵是类似的.正方形的话,只要把任意极大子正方形(”极大“定义见后面的”论文“)当成把某个极大子矩形去掉一块变成正方形即可,容易解决. 解法1:看 ...

  6. 【单调栈 动态规划】bzoj1057: [ZJOI2007]棋盘制作

    好像还有个名字叫做“极大化”? Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的黑白相间的 ...

  7. bzoj1057: [ZJOI2007]棋盘制作 [dp][单调栈]

    Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应 ...

  8. bzoj1057: [ZJOI2007]棋盘制作--最大子矩阵

    既然要求最大01子矩阵,那么把应该为0的位置上的数取反,这样就变成求最大子矩阵 最大子矩阵可以用单调栈 #include<stdio.h> #include<string.h> ...

  9. 2018.10.19 bzoj1057: [ZJOI2007]棋盘制作(悬线法)

    传送门 悬线法板题. 如果只求最大矩形面积那么跟玉蟾宫是一道题. 现在要求最大正方形面积. 所以每次更新最大矩形面积时用矩形宽的平方更新一下正方形答案就行了. 代码: #include<bits ...

  10. bzoj1057: [ZJOI2007]棋盘制作(悬线法)

    题目要求纵横坐标和奇偶性不同的点取值不同,于是我们把纵横坐标和奇偶性为1的点和0的点分别取反,就变成经典的最大全1子矩阵问题了,用悬线法解决. #include<iostream> #in ...

随机推荐

  1. Sphinx与coreseek

    Sphinx : 高性能SQL全文检索引擎 分类 编程技术 Sphinx是一款基于SQL的高性能全文检索引擎,Sphinx的性能在众多全文检索引擎中也是数一数二的,利用Sphinx,我们可以完成比数据 ...

  2. Anytime项目开发记录4

    做事情列表,我在程序中命名为“正在做”. 这是一个Fragment,应用的主页面,由一个MainActivity加上DoingListFragment和PersonFragment组成.PersonF ...

  3. Android Google Maps 监听地图缩放

    接上篇.http://www.cnblogs.com/maomishen/p/3556297.html 由于公司项目要求,需要对google map监听地图的缩放(zoom)来进行一些操作. 但是在网 ...

  4. cut 与 awk

    cut和awk都能分割显示需要的内容 但在需要以空格为分隔符的情况下: # free -m|grep Mem Mem: cut是以单一空格为分隔符的: # free -m|grep Mem|cut - ...

  5. LCA(最近公共祖先)——离线 Tarjan 算法

    tarjan算法的步骤是(当dfs到节点u时):1 在并查集中建立仅有u的集合,设置该集合的祖先为u1 对u的每个孩子v:   1.1 tarjan之   1.2 合并v到父节点u的集合,确保集合的祖 ...

  6. shell 中的expect 用法

    expect一般用于实现用脚本来自动远程登录,对远程机器执行相关操作 测试机上的expect目录一般在/usr/bin/expect路径 下面是从网上查询的用法总结: 1. expect中的判断语句: ...

  7. antDesign DatePicker 禁用日期

    const disabledDate = (current) => { return current < moment().subtract(29, 'days') || current ...

  8. asp.net文件上传进度条研究

    文章:asp.net 文件上传进度条实现代码

  9. linux基本操作2

    将当前用户目录下的文件清单输出到文件list1.txt(当前用户目录下)中ls -l > list1.txt 利用管道命令将根(/)下所有修改日期在4月16日的文件清单输出到list2.txt( ...

  10. 关于word文档中目录的switch

    有很多的switch,下面这篇文章介绍的比较详细,可以参考:http://word.mvps.org/FAQs/Formatting/TOCSwitches.htm