All-one Matrices

题意

对于一个n,m的01矩阵,问有多少个极大矩阵。

分析

对于悬线法来说,其过程就是枚举极大矩阵的过程,那如何计数呢?对于一个点来说,若其左右边界包含了上一个点的悬线后的连续边界,那么该点悬线出来的矩阵就被上一行的已经枚举过的矩阵所覆盖了,反之则没有覆盖cnt++,对于一行中左右同属于一个极大矩阵如何去重呢?只需要纪录一下这一行中,上一个枚举的极大矩阵的左右边界,和当前的对于一下即可。对于当前点高度为1的时候,需要进行特判去重,逻辑类似。

#include<bits/stdc++.h>
#define pb push_back
#define F first
#define S second
#define pii pair<int,int>
#define mkp make_pair
const int maxn=3000+5;
using namespace std;
int Left[maxn][maxn],Right[maxn][maxn],up[maxn][maxn];
char s[maxn][maxn];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%s",s[i]+1);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(s[i][j]=='1'){
Left[i][j]=Left[i][j-1]==0?j:Left[i][j-1];
up[i][j]=up[i-1][j]+1;
}
}
for(int j=m;j>=1;j--){
if(s[i][j]=='1'){
Right[i][j]=Right[i][j+1]==0?j:Right[i][j+1];
}
}
}
/* for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
{
printf("%d ",Left[i][j]);
}
puts("");
}
puts("");
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
{
printf("%d ",Right[i][j]);
}
puts("");
}
*/ int l_right=-1,l_left=-1;
int cnt=0;
for(int i=1;i<=n;i++){
l_right=-1,l_left=-1;
int l_right1=-1,l_left1=-1;
for(int j=1;j<=m;j++){
if(up[i][j]==1&&(Right[i][j]!=l_right1||Left[i][j]!=l_left1)){
//cout<<i<<" "<<j<<endl;
cnt++;
l_right1=Right[i][j];l_left1=Left[i][j];
}
else if(up[i][j]>1){
int tmpr=min(Right[i][j],Right[i-1][j]);
int tmpl=max(Left[i][j],Left[i-1][j]);
if((tmpl!=l_left||tmpr!=l_right)&&(tmpr!=Right[i-1][j]||tmpl!=Left[i-1][j])){
//cout<<i<<" "<<j<<endl;
cnt++;
l_right=tmpr;l_left=tmpl;
}
Right[i][j]=min(Right[i][j],Right[i-1][j]);
Left[i][j]=max(Left[i][j],Left[i-1][j]);
}
}
}
printf("%d\n",cnt); return 0;
}

2019牛客多校第八场A All-one Matrices 悬线法,单调栈待补的更多相关文章

  1. 2019牛客多校第八场 F题 Flowers 计算几何+线段树

    2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...

  2. 2020牛客多校第八场K题

    __int128(例题:2020牛客多校第八场K题) 题意: 有n道菜,第i道菜的利润为\(a_i\),且有\(b_i\)盘.你要按照下列要求给顾客上菜. 1.每位顾客至少有一道菜 2.给顾客上菜时, ...

  3. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  4. 2019牛客多校第四场 A meeting

    链接:https://ac.nowcoder.com/acm/contest/884/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10485 ...

  5. Distance(2019年牛客多校第八场D题+CDQ+树状数组)

    题目链接 传送门 思路 这个题在\(BZOJ\)上有个二维平面的版本(\(BZOJ2716\)天使玩偶),不过是权限题因此就不附带链接了,我也只是在算法进阶指南上看到过,那个题的写法是\(CDQ\), ...

  6. Explorer(2019年牛客多校第八场E题+线段树+可撤销并查集)

    题目链接 传送门 题意 给你一张无向图,每条边\(u_i,v_i\)的权值范围为\([L_i,R_i]\),要经过这条边的条件是你的容量要在\([L_i,R_i]\),现在问你你有多少种容量使得你可以 ...

  7. 暴力三维树状数组求曼哈顿距离求最值——牛客多校第八场D

    涉及的知识点挺多,但是大多是套路 1.求曼哈顿距离的最值一般对所有情况进行讨论 2.三维树状数组用来求前缀最大值 /* 有一个三维坐标系(x,y,z),取值范围为[1,n],[1,m],[1,h],有 ...

  8. 2019牛客多校(第一场)F-Random Point in Triangle

    #include <bits/stdc++.h> using namespace std; typedef long long ll; struct Point{ ll x, y; Poi ...

  9. 2019牛客多校第三场 F.Planting Trees

    题目链接 题目链接 题解 题面上面很明显的提示了需要严格\(O(n^3)\)的算法. 先考虑一个过不了的做法,枚举右下角的\((x,y)\),然后二分矩形面积,枚举其中一边,则复杂度是\(O(n^3 ...

随机推荐

  1. ASP.NET Core MVC 网站学习笔记

    ASP.NET Core MVC 网站学习笔记 魏刘宏 2020 年 2 月 17 日 最近因为” 新冠” 疫情在家办公,学习了 ASP.NET Core MVC 网站的一些知识,记录如下. 一.新建 ...

  2. Win10好用的快捷键

    Win10好用的快捷键 Win键,Tab键,空格键,上下左右方向键,Enter键,Shift+Tab键 Win键--Tab键--上下左右方向键--Enter确定或者---空格键(确定的意思),Ente ...

  3. 利用ARP欺骗进行MITM(中间人攻击)

    ARP欺骗主要骑着信息收集得作用,比如可以利用欺骗获取对方流量,从流量分析你认为重要得信息 0X01  了解ARP Arp协议 ARP(Address Resolution Protocol,地址解析 ...

  4. 简单IOC容器实现

    前言 本文是为了学习Spring IOC容器的执行过程而写,不能完全代表Spring IOC容器,只是简单实现了容器的依赖注入和控制反转功能,无法用于生产,只能说对理解Spring容器能够起到一定的作 ...

  5. linux | 一次网卡故障处理

    问题 在centos7系统中,设置ifcfg-eth*文件时,总会纠结NAME和DEVICE到底写哪个或哪个真实生效.这里实例演示下 这是网卡ifcfg-eth4配置文件.没写DEVICE,用的NAM ...

  6. [TJOI2014] 匹配

    注:此题无序,也无嵬 正文 我们这题求得事实上是一个最大费用最大流,最后的对每条边进行枚举,额然后,如果最大费用小了,就计入答案.. 算是,比较水吧 还有,一开始WA了两次是因为,dis应初始化为负无 ...

  7. P1967 货车运输【LCA】【生成树】

    题目描述 A 国有 nn 座城市,编号从 11 到 nn,城市之间有 mm 条双向道路.每一条道路对车辆都有重量限制,简称限重. 现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的 ...

  8. Asp.net core 3.1+EF Core2.2.6+Oracle.EntityFrameworkCore2.1.19连接Oracle数据库

    Asp.net Core 3.1+EF Core2.2.6+Oracle.EntityFrameworkCore2.1.19连接Oracle数据库 1.前言 本次主要采用Asp.net core3.1 ...

  9. 如何使用vscode-代码编辑器工具

    vscode-代码编辑器的全称是“visual studio code”,主要是一个运行于 Mac OS X.Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器 ...

  10. JUnit套件测试(共通类测试)

    @RunWith(Suite.class)@Suite.SuiteClasses({ TestClass1.class, TestClass2.class })public class SuiteTe ...