uvalive 3029 City Game】的更多相关文章

https://vjudge.net/problem/UVALive-3029 题意: 给出一个只含有F和R字母的矩阵,求出全部为F的面积最大的矩阵并且输出它的面积乘以3. 思路: 求面积最大的子矩阵,可以用扫描线.参考训练指南(orz,虽然并不知道为什么用扫描线). 对于每一个格子包含F,我们可以把它向上拉成一条悬线,直到上面的格子为R,然后观察这条悬线可以扫到左边与右边的最大距离,那么我们所求的面积就是所有的悬线中 悬线的长度乘以(右边界 - 左边界 + 1)的最大值. 然后,需要计算悬线的…
题目 传送门:QWQ 分析 以前见到过差不多的这题. xhk说是单调栈水题,但我又不会单调栈,于是当时就放下了. 这么久过去了我还是不会用单调栈做这题,用的是悬线法. 非常好写 代码 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ; int up[maxn][maxn], left[maxn][maxn], right[maxn][maxn], A[maxn]…
题意:多组数据(国外题好像都这样),每次n*m矩形,F表示空地,R表示障碍 求最大子矩阵(悬线法模板) 把每个格子向上延伸的空格看做一条悬线 以le[i][j],re[i][j],up[i][j]分别记录该悬线向左,向右的运动极限以及向上的延伸长度 ans=max(ans,(up[i][j]*(re[i][j]-le[i][j]+1))); #include<cstdio> #include<iostream> #include<cstring> #include<…
City Park 题目连接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=122283#problem/F Description Porto is blessed with a beautiful city park. The park, in the western section of the city, borders the Atlantic Ocean. It has great lawns, small forest…
City Park Problem's Link: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=129725 Mean: 在网格中给你一些矩形,求最大连通块的面积. analyse: 由于题目保证了矩形不会相交,所以不用扫描线也可做. 先把所有的线段分为横向和纵向,然后排序,依次判断是否相邻,相邻就用并查集合并,最后再用并查集统计一下面积,取最大值即可. Time complexity: O(N) Source code…
LA 3029 求最大子矩阵问题,主要考虑枚举方法,直接枚举肯定是不行的,因为一个大矩阵的子矩阵个数是指数级的,因此应该考虑先进行枚举前的扫描工作. 使用left,right,up数组分别记录从i,j位置可以向左,右,上扩展的最大距离,那么最终只需要枚举每一个方块即可使用(right-left)*up #include <iostream> #include <cstring> #define M(a) memset(a,0,sizeof(a)) using namespace s…
题目链接 题意:给一个m*n的矩阵, 其中一些格子是空地(F), 其他是障碍(R).找一个全部由F 组成的面积最大的子矩阵, 输出其面积乘以3的结果. 思路:如果用枚举的方法,时间复杂度是O(m^2 n^2); 因为不但要枚举每一个点,而且矩阵的大小不知道,所以还要枚举长和宽. 可以通过枚举每一个点,求该点所能构成的最大矩形的边界. 分别用le[], rig[] 和 up[] 表示左边界,右边界和 上边界. #include <iostream> #include <cstring>…
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1030 题意 矩阵,有障碍和普通地面两种子元素,求普通地面连成的子矩阵面积最大值 * 3 思路 如刘书 对于子矩阵长方形来说,其底边上必然有一点,该点向上可以延伸的距离就是子矩阵的长,枚举这一点,设为(i,j).(i,j)不是障碍是普通地面. 令up[i][j]为其向上能…
题意:给定m*n的矩阵,有的是空地有的是墙,找出一个面积最大的子矩阵. 析:如果暴力,一定会超时的.我们可以使用扫描线,up[i][j] 表示从(i, j)向上可以到达的最高高度,left[i][j]表示(i, j) 的左边界,right[i][j]右边界. 这三个可以用递推来实现.从向下扫描,每次更新最大值. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #i…
题意:给定一个 n*m 的矩阵,表示有多少条道路与它相连,其中有一个-1,表示未知,道路只能横着和竖着,求-1处的值. 析:根据题意可知,一个点,与其他周围的四个点都可能相连的,也就是说肯定有共用道路的,所以,我们只要算四个点的数就好,然后依次推一下,就得到答案, 也就是说这里面的点可以分为两部分,一部分加起来减去另一部分,就是答案. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <c…