先说一个简单的题目(题目大意自己看去,反正中文):hihocoder上的:http://hihocoder.com/problemset/problem/1476 然后因为这个n和m的矩阵范围是1000,所以比较简单 然后我们说一下hihocoder上面的做法,首先,这题的做法是http://www.cnblogs.com/heimao5027/p/6738715.html的简化版本,因为颜色只有两种,所以和前面链接给的做法那样,用单调栈维护一下即可. //看看会不会爆int!数组会不会少了一维…
题意:对于一个n*m的方格,每个格子中都包含一种颜色,求出任意一个矩形包含不同颜色的期望. 思路: 啊啊啊啊啊,补了两天,总算A了这道题了,简直石乐志,前面的容斥还比较好写,后面的那个>13那个最开始思路错了,然后 竟然只有一组样例没有过???? 然后以为是哪里写挂爆long long了.后来想了好久,明明思路完全就是错的! 最开始想的 是直接找那个值的外围的就好了, 忽略了里面的,然后其实问题是转化成在01矩阵中找全1矩阵的个数,本来兴冲冲的写了一发, 发现和正方形DP不是一个东西.... 感…
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第52篇文章,我们一起来看LeetCode第84题,Largest Rectangle in Histogram(最大矩形面积). 这道题的官方难度是Hard,点赞3581,反对只有80,通过率在34.7%左右.从通过率上来看,难度其实还可以,并没有特别大,但是这道题的点赞比很高,说明题目的质量很好.实际上也的确如此,这题非常经典,我个人也非常推荐.建议大家有能力的都做一下本题,一定会很有收获. 题意 假设我们…
求01矩阵里有多少个不同的1矩阵 首先预处理出pre[i][j]表示i上面连续的1个数,对每行的高度进行单调栈处理 栈里的元素维护两个值:pre[i][j]和向前延伸最多能维护的位置pos 然后算贡献,从左往右扫时维护一个最靠右下面没有1的列的位置p, 元素在被弹出时判断其pos是否能包含p,如果能说明这个元素代表的矩阵是有贡献的 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<…
[题意] 给一个N×M的矩阵, K个地雷的坐标.求不含地雷的所有矩形的总数. T组数据. N M都是1e4,地雷数 K ≤ 20 Input 3 2 2 1 2 2 6 6 2 5 2 2 5 10000 10000 1 1 1 Output 5 257 2500499925000000 [分析] daola :这个题容斥搞一搞. 我 : ??? 合法矩形数肯定是很难算的.但是不合法的矩形数却很好算.所以就是用所有的矩形数减去不合法的矩形数就是答案. K是20的,所以可以用一个20位的整数枚举状…
题目链接 如图所示,在由N行M列个单位正方形组成的矩形中,有K个单位正方形是黑色的,其余单位正方形是白色的. 你能统计出一共有多少个不同的子矩形是完全由白色单位正方形组成的吗? ---------------------------------------------------------------------------------------------------- 思路: 完全白色矩形数目 = 总个数 - 包含黑块的矩形数目. 包含黑块的矩形数目 = 包含一个黑块 - 包含两个黑块…
题目是求次大子矩形,那么在求最大子矩形的时候维护M1,M2即可 转移M2时比较的过程要注意一下 #include<bits/stdc++.h> using namespace std; #define maxn 1005 char mp[maxn][maxn]; int n,m,f[maxn][maxn],M1,M2; int stk[maxn],top,w[maxn]; void calc(int i){ top=; f[i][m+]=; memset(w,,sizeof w); ;j<…
题目链接:http://poj.org/problem?id=2559 思路:单调栈 什么是单调栈? 单调栈,顾名思义,就是单调的栈,也就是占中存的东西永远是单调(也就是递增或递减)的 如何实现一个单调栈呢?过程很简单.假设栈中已有了若干单调递增的元素,此时我们又有了一个元素,如果这个元素比栈顶元素大,则直接入栈:反之,不断弹出当前元素,直到栈顶元素比之前小为止.(这里实现的是一个单调递增栈,递减栈和递增栈的过程一样) 为什么这道题可以用单调栈? 假设矩形的高度从左到右递增,那么答案是多少?显而…
[Agc081F/At2699] 给出一个拥有 \(H\times W\) 个格子的棋盘,每个格子的颜色为黑色或白色. Snuke 可以进行任意次下列操作: 选择棋盘中的一行或一列,将这一行或一列的颜色翻转(黑变成白,白变成黑) Snuke 想知道,在他进行操作后,棋盘中最大的全黑矩形最大能为多少. 考虑 \(2\times 2\) 方格,当且仅当偶数个黑时,可以做成全黑 大矩形能做成全黑,当且仅当所有 \(2\times 2\) 子格都是偶数个黑 然后就是一个很朴素的单调栈求最大矩形了 注意到…
How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3315    Accepted Submission(s): 937 Problem Description   Now you get a number N, and a M-integers set, you shoul…