[ZJOI2007]棋盘制作

文章目录

    • [ZJOI2007]棋盘制作
    • 题意:
    • 题解:
      • 单调栈
        • 代码:
      • 悬线法

[ZJOI2007]棋盘制作

题意:

选取最大的01相邻的正方形和矩形,输出面积

题解:

单调栈

在这里插入图片描述
如图:
左图为题目给的样例,我们要找01相邻最大的正方形
在这里插入图片描述
就是图中绿色部分
矩形就是如图在这里插入图片描述
01相邻不好找,我们可以转换下思路,仔细看看正方形和矩形的两个图,0和1相邻说明0和1同行但列差1,同列但行差1,所以我们可以通过坐标奇偶性取反
奇数行偶数列取反,偶数行奇数列取反
这样就会得到:
第一个图的右图:
在这里插入图片描述
这样我们就将01问题转换成求最大的全1正方形和矩阵问题
最大正方形的边长其实就是最大矩阵的最小边

代码:

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <ctime>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
const int inf = (1<<30);
const int MAXN = 2011;
int n,m,ans,ans2;
int a[MAXN][MAXN];
int ri[MAXN][MAXN];//可以往右延伸多少
int st[MAXN],top,up[MAXN];inline int getint()
{int w=0,q=0; char c=getchar();while((c<'0' || c>'9') && c!='-') c=getchar(); if(c=='-') q=1,c=getchar();while (c>='0' && c<='9') w=w*10+c-'0', c=getchar(); return q ? -w : w;
}
inline void getR(){  for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) if(a[i][j]) ri[i][j]=ri[i-1][j]+1; else ri[i][j]=0; ri[i][m+1]=-1;}
}
inline void getA(){for(int i=1;i<=n;i++){top=0;//每一行清空栈 for(int j=1;j<=m+1;j++){if(top==0||ri[i][j]>=ri[i][st[top]]){st[++top]=j;}else {	int id; while(top!=0&&ri[i][j]<ri[i][st[top]]){id=st[top];top--;int w=min(j-id,ri[i][id]);ans=max(ans,w*w);ans2=max(ans2,(j-id)*ri[i][id]);}st[++top]=id;//将最后一次出栈的栈顶元素延申并入栈ri[i][id]=ri[i][j]; }}}}
void printA(){for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cout<<a[i][j]<<" "; }cout<<endl;}cout<<endl;
}
inline void work(){n=getint(); m=getint();for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)a[i][j]=getint();for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(((i&1)==(j&1) && a[i][j])||((i&1)!=(j&1) && !a[i][j])) a[i][j]=1;else a[i][j]=0;//printA();getR();getA(); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[i][j]=!a[i][j];//printA();getR(); getA(); printf("%d\n%d",ans,ans2);
}int main()
{//freopen("P1169_1.in","r",stdin);work();return 0;
}

悬线法

学会再更新


9.9 刚学会,重新更新
悬线法理解
在这里插入图片描述

矩形其实是由一个线左右移动而形成,而我们要做的就是枚举这样的线,并通过题目限制来左右滑动生成矩阵,并保留最大矩阵即可
复杂度O ( n ∗ m )

#include<cstdio>
#define N 2005
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
using namespace std;
int up[N][N],left[N][N],right[N][N],ansa,ansb,a[N][N],m,n;
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){up[i][j]=1;left[i][j]=j;right[i][j]=j;scanf("%d",&a[i][j]);// up 初值,读入,left/right 最初值}for(int i=1;i<=n;i++)for(int j=2;j<=m;j++)if(a[i][j]^a[i][j-1])//如果点i j与点i j-1不相等,即一个为0一个为1 left[i][j]=left[i][j-1];//左边界可以共享 for(int i=1;i<=n;i++)for(int j=m;j>1;j--)if(a[i][j]^a[i][j-1])right[i][j-1]=right[i][j];//left/right初值,即(i,j)点向左/右的最大宽度//之上均为左右不同            for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(i>1&&a[i][j]^a[i-1][j])//上下点不同 {up[i][j]=up[i-1][j]+1;//更新高度 left[i][j]=max(left[i][j],left[i-1][j]);right[i][j]=min(right[i][j],right[i-1][j]);} int a=right[i][j]-left[i][j]+1;int b=min(a,up[i][j]);ansa=max(ansa,b*b);//求正方形 ansb=max(ansb,a*up[i][j]);//求长方形 }printf("%d\n%d",ansa,ansb);
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net core实践系列之SSO-同域实现

前言SSO的系列还是以.Net Core作为实践例子与大家分享&#xff0c;SSO在Web方面复杂度分同域与跨域。本篇先分享同域的设计与实现&#xff0c;跨域将在下篇与大家分享。如有需要调试demo的&#xff0c;可把SSO项目部署为域名http://sso.cg.com/&#xff0c;Web1项目部署为http:…

【悬线法】学习总结

【悬线法】学习总结 主要用于求满足某条件的最大矩阵 定义&#xff1a; 一条竖线&#xff0c;竖线的上端点位于矩阵的上边界或是一个障碍点&#xff0c;然后对这条悬线进行左右移动&#xff0c;直到移至障碍点或者是矩阵边界&#xff0c;进行确定这条悬线所在的极大矩阵。 底…

开源硬件论坛,燃烧你的创造力

写在大会前开源融合&#xff1a;比特与原子开源硬件延伸着开源软件的理念&#xff0c;包括硬件设计文件及基于此文件的产品都使用具有开源性质的许可协议&#xff0c;自由使用分享。虽然&#xff0c;从仅开放硬件所配套软件到对硬件本身设计也进行开放的过程&#xff0c;曾经一…

牛客练习赛 55

A - 等火车 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<vector> #include<cstdio> #inclu…

单调栈讲解

以前一直有接触&#xff0c;但是一直没单独进行分析处理 单调栈&#xff1a;维护其中元素单调性的栈 也就是从栈底到栈顶都是有序的 维护&#xff1a;如果入栈的元素满足单调性&#xff0c;直接入栈&#xff1b;如果不满足&#xff0c;就让栈顶元素出栈&#xff0c;直到能让入栈…

【深圳(活动)】70多场干货分享!价值899元的2018中国开源年会门票等你认领

开源发展20年&#xff0c;.NET Core开源 4年时间&#xff0c;.NET开源实现Mono也有18年的时间&#xff0c;特别近年国内.NET Core社区的蓬勃发展&#xff0c;.NET Core中国社区作为中国开源社区的重要参与者&#xff0c;获得官方的优惠票. 活动主办方开源社&#xff0c;为.NET …

2019-2020 ICPC Asia Hong Kong Regional Contest 补题(部分)

codeforces原题链接 大佬题解 B - Binary Tree 每个人每次一定拿走奇数&#xff08;2k−12^k-12k−1&#xff09;个节点&#xff0c;如果先手必胜不难发现两人轮流拿最终一定拿奇数次&#xff08;每次奇数个节点&#xff09;说明一共有奇数个节点&#xff0c;如果先手必败说明…

广州 office365的开发者训练营交流活动简报

2018年10月13日&#xff0c;在 微软广州办公室&#xff08;广州市天河区太古汇1座28层微软广州办公室&#xff09; 成功举办了office365的开发者训练营&#xff0c;本活动在微软官网的地址&#xff1a; https://www.microsoft.com/china/events/detail_1707。这次活动得到微软O…

数据结构题

来源&#xff1a;牛客网&#xff1a; 题目描述 题目背景 把一张纸对折100次就和珠穆朗玛峰一样高了哦 ——syh 题目描述 注:本系列题不按难度排序哦 输入描述: 第一行一个n,m 接下来一行n个数表示a[i] 接下来m行&#xff0c;每行l,r,l1,r1,x&#xff0c;表示求get(l,r,x)…

YbtOJ#832-鸽子饲养【凸包,Floyd】

正题 题目链接:https://www.ybtoj.com.cn/contest/116/problem/3 题目大意 给出两个大小分别为n,mn,mn,m的点集A,BA,BA,B。 求出BBB的一个最小子集使得该子集的凸包包含了所有点集AAA中的点。 无解输出−1-1−1 2≤n≤105,3≤m≤5002\leq n\leq 10^5,3\leq m\leq 5002≤n≤…

声明式RESTful客户端在asp.net core中的应用

1 声明式RESTful客户端声明式服务调用的客户端&#xff0c;常见有安卓的Retrofit、SpringCloud的Feign等&#xff0c;.net有Refit和WebApiClient&#xff0c;这些客户端都是以java或.net某个语言来声明接口&#xff0c;描述如何请求RESTful api。1.1 WebApiClientWebApiClient由…

常见形式 Web API 的简单分类总结

一、请求--响应API请求--响应类的API的典型做法是&#xff0c;通过基于HTTP的Web服务器暴露一个/套接口。API定义一些端点&#xff0c;客户端发送数据的请求到这些端点&#xff0c;Web服务器处理这些请求&#xff0c;然后返回响应。响应的格式通常是JSON或XML。在这种类型的Web…

Graph Coloring I

来源&#xff1a;牛客网&#xff1a; 题目描述 修修在黑板上画了一些无向连通图&#xff0c;他发现他可以将这些图的结点用两种颜色染色&#xff0c;满足相邻点不同色。 澜澜不服气&#xff0c;在黑板上画了一个三个点的完全图。修修跟澜澜说&#xff0c;这个图我能找到一个简…

Visual Studio 2017 15.9预览版3支持ARM64 for UWP

微软针对Visual Studio 2017 15.9的更新工作还在继续。在15.9的第三个预览版中&#xff0c;微软宣布支持ARM64平台上的UWP应用程序&#xff0c;并扩展了TypeScript开发人员可以使用的功能。和通常的情况一样&#xff0c;该版本还包含了大量的修复程序。UWP应用现在可以把ARM64平…

[ZJOI2007]矩阵游戏

来源&#xff1a;牛客网&#xff1a; 题目描述 小Q是一个非常聪明的孩子&#xff0c;除了国际象棋&#xff0c;他还很喜欢玩一个电脑益智游戏——矩阵游戏。矩阵游戏在一个N *N黑白方阵进行&#xff08;如同国际象棋一般&#xff0c;只是颜色是随意的&#xff09;。 每次可以对…

如何通过本地化事件正确实现微服务内部强一致性,事件总线跨微服务间最终一致性...

目录设计重点流程图伪代码2.1. PublishEvent2.2. SubscribeEvent2.3. Publisher2.4. Subscriber微服务 强一致性3.1 Publisher3.2 Subscriber事件总线 - 跨服务 最终一致性4.1 Publisher & Subscriber 都开启了本地事务&#xff0c;保证了强一致性4.2 问题场景一&#xff1…

干货!请码住——点此领取免费开源框架

何谓框架框架&#xff08;Framework&#xff09;是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交互的方法; 框架是可被应用开发者定制的应用骨架。拥有一套企业级开发框架有哪些好处&#xff1f;对于一个软件公司或者互联网公司来说&#xff0c;开发…

在 ASP.NET Core 中集成 Skywalking APM

前言大家好&#xff0c;今天给大家介绍一下如何在 ASP.NET Core 项目中集成 Skywalking&#xff0c;Skywalking 是 Apache 基金会下面的一个开源 APM 项目&#xff0c;有些同学可能会 APM 是干什么用的还不是太了解&#xff0c;那么下面我就简单的来说一下。APM 全称是 &#x…

.NET运行时中的监测和可观测性

今年5月份的时候研究分布式追踪的问题知道了的拦截方式比较零散&#xff0c; 刚好8月份的时候看到这篇文章&#xff0c;这个文章总结的比较完整。存档了很久&#xff0c;趁今天有空翻译给大家。原文地址&#xff0c;校验&#xff1a;张蘅水.NET是一个托管运行时&#xff0c;这意…