>传送门<

题意:给你一个01矩阵,求出所有不可扩大的全为1的矩阵的个数

思路:比赛的时候想到了用单调栈,但是也只是想到了,并不知道怎么用,其实和之前求二维01矩阵中全为1的矩阵最大面积非常相像。

像到什么地步呢!!你想一个不能扩大的矩阵,也即是说不能向左右扩展,也不能向上扩展,那我们就用单调栈维护每一行中每个点能向上扩展的最大高度h。

目前到这里都和二位01矩阵求最大面积的解法一模一样!!接下来我们只需要判断这个矩阵能不能向下扩展就行了,对吧。这里我们就用数组记录一下,如果能向下扩展就记为1,不能就记为0,最后判断,这个矩阵向左右扩展的最大区间宽度是否大与向下扩展的宽度,如果大与的话就不能向下扩展。

最后还有一个问题,不知道有没有发现,假如我在同一行两次查找到的矩阵是同一矩阵,那怎么办?

这个时候就涉及到去重的问题了,仔细观察一下,会发现同一高度的h值在出栈计算得到的矩形是一样的(因为高度相同的肯定能互相扩展),所以高度相同的只用计算一次就好了。我们比较一下弹出的元素和栈顶元素的h值,如果相同就代表高度相同就不能取。

Code

#include <bits/stdc++.h>
using namespace std;
const int maxn = 3005; int n, m, t, ans;
int a[maxn][maxn];
int st[maxn], h[maxn], dn[maxn];
char c[maxn];
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
scanf("%s", c+1);
for (int j = 1; j <= m; j++) a[i][j] = c[j]-'0';
}
for (int i = 1; i <= n; i++) {
int t = 0; //t表示栈顶
for (int j = 1; j <= m + 1; j++) {
h[j] = a[i][j] ? h[j] + 1 : 0; //向上能扩展的最大高度
dn[j] = dn[j - 1] + a[i + 1][j]; //是某能向下扩展的前缀和
while (h[j]<h[st[t]]) {
int width = j-1-st[t-1], num = dn[j-1]-dn[st[t-1]]; //width表示能向左右扩展的最大宽度,num表示其中共有几个能够向下扩展
ans += (num<width&&h[st[t-1]]<h[st[t]]); //判断是否满足条件并去重
t--;
}
st[++t] = j;
}
}
printf("%d\n", ans);
return 0;
}

2019牛客暑期多校训练营(第八场)A-All-one Matrices(单调栈+思维)的更多相关文章

  1. 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...

  2. 2019牛客暑期多校训练营(第一场) - A - Equivalent Prefixes - 单调栈

    A - Equivalent Prefixes - 单调栈 题意:给定两个n个元素的数组a,b,它们的前p个元素构成的数组是"等价"的,求p的最大值."等价"的 ...

  3. 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)

    题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才 ...

  4. 2019牛客暑期多校训练营(第一场) B Integration (数学)

    链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...

  5. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

  6. 2019牛客暑期多校训练营(第二场)F.Partition problem

    链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...

  7. 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...

  8. [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem

    链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  9. 2019牛客暑期多校训练营(第一场)-A (单调栈)

    题目链接:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意 ...

  10. 2019牛客暑期多校训练营(第一场)A - Equivalent Prefixes(单调栈)

    题意 给定两个$n$个元素的数组$a,b$,它们的前$p$个元素构成的数组是"等价"的,求$p$的最大值."等价"的意思是在其任意一个子区间内的最小值相同. $ ...

随机推荐

  1. label_form

    表单: action "URL" 如果为空,则本form接收 指定接收方 disabled 指定该标签是否可用 method "net" "http& ...

  2. pthread 读写锁

    pthread 读写锁 (Read Write Lock, rwlock) 把对共享资源的访问者分为读者和写者,读者仅仅对共享资源进行读访问,写者仅仅对共享资源进行写操作. 如果使用互斥量 mutex ...

  3. Java内存模型与线程(一)

    Java内存模型与线程 TPS:衡量一个服务性能的标准,每秒事务处理的总数,表示一秒内服务端平均能够响应的总数,TPS又和并发能力密切相关. 在聊JMM(Java内存模型)之前,先说一下Java为什么 ...

  4. upload-labs 1-21关通关记录

    0x01: 检查源代码,发现JS前端验证,关闭JS即可连接,或者手动添加.php,或者上传1.jpg,再抓包修改为php 0X02: if (($_FILES['upload_file']['type ...

  5. 【ASM】从asm中复制文件到本地,或者从本地到asm中方法

    工作中,有时需要把文件从ASM中复制到文件系统中或者反过来,做一些维护操作,本文介绍了4种复制文件的的方法: ASMCMD中的cp命令(11g) dbms_file_transfer包 rman的co ...

  6. 删除开发账号的ACCESS KEY

    大家都知道,当申请一个开发账号来开发程序的时候需要一个ACCESS key,这个key我们可以通过系统管理员在OSS上注册, 也可以通过一些软件来计算,比如zapgui.EXE,但是当用软件注册完,不 ...

  7. FI_F4_ZTERM付款条件代码

    这个函数可以弹出一个选择帮助,返回一个付款条件代码 CALL FUNCTION 'FI_F4_ZTERM' EXPORTING I_KOART = 'K' " K为供应商,D为客户 * I_ ...

  8. 微信小程序腾讯地图SDK使用方法

    一.本篇文章主要知识点有以下几种: 1.授权当前位置 2.map组件的使用 3.腾讯地图逆地址解析 4.坐标系的转化 二.效果如下: 三.WXML代码 <map id="map&quo ...

  9. 使用Azure Runbook 发送消息到Azure Storage Queue

    客户需要定时发送信息到Azure Storage Queue,所以尝试使用Azure Runbook实现这个需求. 首先新增一个Azure Automation Account的资源. 因为要使用Az ...

  10. Mybatis【15】-- Mybatis一对一多表关联查询

    注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-11-one2one,需要自取,需要配置maven ...