题目描述

萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦。

仓鼠窝是一个由n*m个格子组成的行数为n、列数为m的矩阵。小仓鼠现在想要知道,这个矩阵中有多少个子矩阵!(实际上就是有多少个子长方形嘛。)比如说有一个2*3的矩阵,那么1*1的子矩阵有6个,1*2的子矩阵有4个,1*3的子矩阵有2个,2*1的子矩阵有3个,2*2的子矩阵有2个,2*3的子矩阵有1个,所以子矩阵共有6+4+2+3+2+1=18个。

可是仓鼠窝中有的格子被破坏了。现在小仓鼠想要知道,有多少个内部不含被破坏的格子的子矩阵!

输入输出格式

输入格式:

第一行两个正整数n和m,分别表示仓鼠窝的行数n、列数m。

接下来n行,每行m个数,每个数代表对应的格子,非0即1。若为0,表示这个格子被破坏;反之代表这个格子是完好无损的。

输出格式:

仅一个正整数,表示未被破坏的子矩阵的个数。

分析

代码

注意要开long long和常数优化。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int,int> pa;
const int maxn=3000+5;
inline void read(int &x){x=0; char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
}
int n,m,top; ll cnt,ans;
int A[maxn][maxn],pre[maxn][maxn],H[maxn];
pa sta[maxn];
int main(){read(n);read(m);for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) read(A[i][j]);for(int i=1;i<=n;++i){cnt=0;top=0; pa tmp;for(int j=1;j<=m;++j){if(!A[i][j]){H[j]=0; cnt=0;top=0;continue;}tmp.fi=++H[j]; tmp.se=1;while(top&&sta[top].fi>=tmp.fi){tmp.se=tmp.se+sta[top].se;cnt-=1ll*sta[top].fi*sta[top].se;top--;}sta[++top]=tmp;cnt+=1ll*tmp.fi*tmp.se;ans+=cnt;}}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/huihao/p/7738017.html

【洛谷P3400】仓鼠窝相关推荐

  1. 洛谷P3400 仓鼠窝(单调栈)

    P3400 仓鼠窝 题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子 ...

  2. 洛谷 P3400 仓鼠窝

    题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子矩阵!(实际上就是有 ...

  3. 单调栈求全1(或全0)子矩阵的个数 洛谷P5300与或和 P3400仓鼠窝

    爆零好爽,被中学生虐好爽,还好我毕业得早 求全1(或全0)子矩阵的个数,看了题解有好几种思路,我学了三种,但有两种不是很理解,而且也没另外那个跑得快,所以简单讲述一一下我会的那种来自Caro23333 ...

  4. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  5. 洛谷10月月赛Round.1| P3400 仓鼠窝[单调栈]

    题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子矩阵!(实际上就是有 ...

  6. 洛谷 P3398 仓鼠找 sugar

    仓鼠找 sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为 1 1 1~ n n n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室( a a ...

  7. 洛谷 3398 仓鼠找sugar 【模板】判断树上两链有交

    [题解] 题意就是判断树上两条链是否有交.口诀是"判有交,此链有彼祖".即其中一条链的端点的Lca在另一条链上. 我们设两条链的端点的Lca中深度较大的为L2,对L2与另一条链的两 ...

  8. [LUOGU]P3400 仓鼠窝

    传送门 首先分析问题,我们要求出所有的子矩形,不妨考虑以每一点为右下角的子矩形的个数,加起来正好就是总的子矩形数了. 然后考虑每一个点为左下角时的方案数,我们考虑每在它左上的点是否可以作为矩形的左上角 ...

  9. P3400 仓鼠窝 (单调栈 dp

    添加链接描述 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=3e3+9; l ...

最新文章

  1. 验证证书有效期_笔试查分前,教资考试4个有效期你到底弄清楚了没?逾期不补!...
  2. LeetCode Largest Divisible Subset(动态规划)
  3. 模式识别之基础---使用纹理滤波器分割图像
  4. quartus 修改 时钟_FPGAQuartusII时钟约束.doc
  5. 支撑性服务 自动化能力
  6. PHP仿金蝶云ERP进销存V8网络多仓版源码
  7. Docker的常用操作
  8. cisco6509 2811 配置备份
  9. 标准C程序设计七---72
  10. Salesforce Ventures为云初创公司Vlocity注资5000万美元
  11. 冒泡排序java代码
  12. 一本指南为各种各样的秃头发型
  13. 4133:垃圾炸弹 百练noi Java枚举
  14. 美团点评_给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度。
  15. emoji表情的处理和保存
  16. 【时光纪念】愿有岁月可回头
  17. 大数据开发和大数据分析的区别?
  18. 制作pve引导盘---U盘安装Proxmox VE(一)
  19. int型的取值范围是?
  20. Go 语言中 = 和 := 有什么区别

热门文章

  1. 遥感影像变化检测数据集
  2. 干货!用神经网络来表达隐式场景流
  3. 论文发表查重率要小于多少?
  4. 【xiame.com】win 7系统命令的运用 助你完成批处理
  5. 爬虫进阶:反反爬虫技术--2 使用可变IP
  6. 鸿蒙电脑操作系统最新消息,今日大事件:鸿蒙操作系统6月2日见苹果 WWDC 将于 6 月 8 日举行...
  7. 学习-输入正整数m,判断m是否是素数
  8. 阿里云负载均衡 SLB CLB 虚拟服务器组配置
  9. e智团队实验室项目-第一周-神经网络的学习
  10. 1.Docker进阶:存储驱动overlay2