题目链接:https://ac.nowcoder.com/acm/contest/888/A

题意:给n×m的01矩阵,求出其中全为1的矩阵个数(不被其它全1矩阵包括)。

思路:和第二场多校的次大子矩阵类似。二维降一维,遍历行,以第i行为矩阵的底,通过单调栈得到矩阵向左向右能够扩展的范围 l[j]和r[j],然后关键在去重。有两种重复,第一种是同一行中的矩阵,可以用二维矩阵vis[l[j]][r[j]]标记此范围的矩阵已被记录。对于列的重复,是因为此时的矩阵能在下一行得到行扩展,所以预处理得到下一行的‘1’个数的前缀和num[j],通过判断num[r[j]-1]-num[l[j]]==r[j]-l[j]-1来判断是否能扩展到下一行,能的话当前不记录。

AC代码:

#include<cstdio>
#include<algorithm>
using namespace std; const int maxn=;
int n,m,ans;
int a[maxn][maxn],stk1[maxn],stk2[maxn];
int l[maxn],r[maxn],num[maxn],vis[maxn][maxn];
char c[maxn][maxn]; int main(){
scanf("%d%d",&n,&m);
for(register int i=;i<=n;++i){
a[i][]=a[i][m+]=-;
scanf("%s",c[i]+);
for(register int j=;j<=m;++j){
register int tmp=c[i][j]-'';
if(tmp) a[i][j]=a[i-][j]+;
}
}
stk1[]=,stk2[]=m+;
for(register int i=;i<=n;++i){
register int p1=,p2=;
for(register int j=;j<=m;++j){
while(a[i][stk1[p1-]]>=a[i][j]) --p1;
l[j]=stk1[p1-];
stk1[p1++]=j;
}
for(register int j=m;j>=;--j){
while(a[i][stk2[p2-]]>=a[i][j]) --p2;
r[j]=stk2[p2-];
stk2[p2++]=j;
}
for(int j=;j<=m;++j)
num[j]=num[j-]+(c[i+][j]=='');
for(register int j=;j<=m;++j){
if(!a[i][j]) continue;
if(vis[l[j]+][r[j]-]==i) continue;
if(num[r[j]-]-num[l[j]]==r[j]-l[j]-) continue;
++ans;
vis[l[j]+][r[j]-]=i;
}
}
printf("%d\n",ans);
return ;
}

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. Base64编解码是什么?

    ㈠Base64是什么? ⑴Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. ⑵Base64编码是从二进制到字符的过程, ...

  2. 小米 oj 硬币比赛(思维+动态规划)

     硬币比赛 序号:#47难度:困难时间限制:1000ms内存限制:10M 描述 有 n 个不同价值的硬币排成一条线.有 A 与 B 两个玩家,指定由 A 开始轮流(A 先手,然后 B,然后再 A..) ...

  3. 修改Ubuntu国内镜像

    打开软件和更新:如下图 选择一个自己喜欢的镜像. 然后执行  sudo apt-get update    更新源. 结束 1.原文件备份 sudo cp /etc/apt/sources.list ...

  4. 2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic(Kruskal思想)

    2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic 题意:有一张图,第i个点被占领需要ai个兵,而每个兵传送至该 ...

  5. Go语言学习之介绍与环境搭建

    Go语言第一课 一.Go语言介绍 1.什么是Go语言? Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pik ...

  6. Docker-----关于dockerfile

    docker build参数说明 --no-cache :创建镜像的过程不使用缓存: --force-rm :设置镜像过程中删除中间容器: --network=host:容器会使用宿主机的网络,容器与 ...

  7. flutter webview_flutter 设置cookies

    WebViewController _controller; onWebViewCreated: (WebViewController wvc) { _controller = wvc; } onPa ...

  8. 一百一十二:CMS系统之前台用户模型

    安装shortuuid用于前台用户的主键:pip install shortuuid 创建模型 from datetime import datetimeimport enumfrom werkzeu ...

  9. 一百零四:CMS系统之修改邮箱界面

    在base.css中加一个全局的css控制宽度 .form-container{ width: 300px;} 视图 class ResetEmailView(views.MethodView): d ...

  10. ES 可视化工具

    1.ElasticSearch Head 用途:展示ES(集群)数据信息 视图:https://mobz.github.io/elasticsearch-head/ 下载:https://github ...