洛谷 P3400 仓鼠窝
题目描述
萌萌哒的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,表示这个格子被破坏;反之代表这个格子是完好无损的。
输出格式:
仅一个正整数,表示未被破坏的子矩阵的个数。
输入输出样例
3 4 1 1 1 1 1 0 1 1 1 1 0 1
26
说明
本题时限2s,内存限制256M,因新评测机速度较为接近NOIP评测机速度,请注意常数问题带来的影响。
No n= m= 备注
1 2 2 无
2 3 3 无
3 5 5 无
4 10 10 无
5 2000 2000 所有格子均未被破坏
6 3000 3000 所有格子均未被破坏
7 2500 3000 有且仅有一个格子被破坏
8 3000 2500 有且仅有一个格子被破坏
9 200 200 无
10 500 500 无
11 500 500 无
12 500 500 无
13 1000 1000 无
14 1000 1000 无
15 1000 1500 无
16 2500 2500 无
17 2500 3000 无
18 3000 2500 无
19 3000 3000 无
20 3000 3000 无
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
数论+单调栈+pair~
和上一道差不多,但是读入的时候要特别注意~正常读入也可以,但是不是优化一下比较好?getchar真是神奇啊……
然后,洛谷玄学评测机,第一次WA,把数组改大就A了……无言以对……
具体解释见http://blog.csdn.net/senyelicone/article/details/52735436 ~
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define ll long longint n,m,tot[3001],num,s[3001][3001];
ll ans,cnt;
pair<int,int> sta[3001];int read()
{int t=0;char ss=getchar();while(ss<'0' || ss>'9') ss=getchar();while(ss>='0' && ss<='9'){t=t*10+ss-'0';ss=getchar();}return t;
}int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) s[i][j]=read();for(int i=1;i<=n;i++){pair<int,int> tmp;num=cnt=0;for(int j=1;j<=m;j++){if(s[i][j]==0){num=cnt=0;tot[j]=0;continue;}tmp.first=++tot[j];tmp.second=1;while(num && sta[num].first>=tmp.first){tmp.second+=sta[num].second;cnt-=sta[num].first*sta[num].second;num--;}sta[++num]=tmp;cnt+=tmp.first*tmp.second;ans+=cnt;} }printf("%lld\n",ans);return 0;
}
洛谷 P3400 仓鼠窝相关推荐
- 洛谷P3400 仓鼠窝(单调栈)
P3400 仓鼠窝 题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子 ...
- 单调栈求全1(或全0)子矩阵的个数 洛谷P5300与或和 P3400仓鼠窝
爆零好爽,被中学生虐好爽,还好我毕业得早 求全1(或全0)子矩阵的个数,看了题解有好几种思路,我学了三种,但有两种不是很理解,而且也没另外那个跑得快,所以简单讲述一一下我会的那种来自Caro23333 ...
- 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)
洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...
- 【洛谷P3400】仓鼠窝
题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子矩阵!(实际上就是有 ...
- 洛谷10月月赛Round.1| P3400 仓鼠窝[单调栈]
题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子矩阵!(实际上就是有 ...
- 洛谷 P3398 仓鼠找 sugar
仓鼠找 sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为 1 1 1~ n n n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室( a a ...
- 洛谷 3398 仓鼠找sugar 【模板】判断树上两链有交
[题解] 题意就是判断树上两条链是否有交.口诀是"判有交,此链有彼祖".即其中一条链的端点的Lca在另一条链上. 我们设两条链的端点的Lca中深度较大的为L2,对L2与另一条链的两 ...
- [LUOGU]P3400 仓鼠窝
传送门 首先分析问题,我们要求出所有的子矩形,不妨考虑以每一点为右下角的子矩形的个数,加起来正好就是总的子矩形数了. 然后考虑每一个点为左下角时的方案数,我们考虑每在它左上的点是否可以作为矩形的左上角 ...
- P3400 仓鼠窝 (单调栈 dp
添加链接描述 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=3e3+9; l ...
最新文章
- rhel6Inode详解
- Mybatis-Plus 支持分库分表了?-官方神器发布!
- MySQL入门,了解下、
- ie-css3.htc参数无效,ie-css3.htc怎么用?
- C#窗体间的数据传值(转)
- android应用开发(16)---AndroidManifest.xml
- jsp中动态include与静态include的区别
- ArrayList的初始化常用方式,扩容,和应用(去重)
- (转)中国著名黑客你知道多少?
- uigetfile使用方法
- html如何制作斜线表头表格,2种方法教你怎样在WPS excel中绘制表格斜线表头
- 百度收录提交工具-免费主动提交百度快速收录软件
- vscode环境搭建:配置prettier
- Nginx if语句配置多重判断
- 信息系统项目管理师2019年上半年上午试题解析(四)
- 基于MATLAB APP Designer 和 Python 的音视频剪辑
- 站上风口,文心一言任重道远
- 电脑文件怎么显示后缀名
- go拼接字符串不如php,golang 字符串拼接性能的对比分析
- python进行机器学习(四)之模型验证与参数选择