LA 3029 - City Game (简单扫描线)
题意:给一个m*n的矩阵, 其中一些格子是空地(F), 其他是障碍(R)。找一个全部由F
组成的面积最大的子矩阵, 输出其面积乘以3的结果。
思路:如果用枚举的方法,时间复杂度是O(m^2 n^2);
因为不但要枚举每一个点,而且矩阵的大小不知道,所以还要枚举长和宽。
可以通过枚举每一个点,求该点所能构成的最大矩形的边界。
分别用le[], rig[] 和 up[] 表示左边界,右边界和 上边界。
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <cstdio>
#include <vector>
#include <algorithm>
#define LL long long
using namespace std;
const int maxn = +; int mat[maxn][maxn], up[maxn][maxn], le[maxn][maxn], rig[maxn][maxn];
int main()
{
int t, ans;
int m, n, i, j, lo, ro;
scanf("%d", &t);
while(t--)
{
ans = ;
scanf("%d%d", &m, &n);
for(i = ; i < m; i++)
for(j = ; j < n; j++)
{
char ch = getchar();
while(ch!='F'&&ch!='R')
ch = getchar();
mat[i][j] = ch == 'F' ?:;
}
for(i = ; i < m; i++)
{
lo = -; ro = n;
for(j = ; j < n; j++) //顺着求上边界和左边界
if(mat[i][j] == ) { up[i][j] = le[i][j] = ; lo = j; }
else
{
up[i][j] = i == ?:up[i-][j] + ; //高度直接加
le[i][j] = i == ? lo+ : max(le[i-][j], lo+);//左边界需要当前行和上一行的限制
} for(j = n-; j >= ; j--) //从n-1求右边界
if(mat[i][j] == )
{
rig[i][j] = n; ro = j;
}
else
{
rig[i][j] = i == ? ro- : min(rig[i-][j], ro-);
ans = max(ans, up[i][j]*(rig[i][j]-le[i][j]+)); //求子矩阵的面积
}
}
printf("%d\n", ans*);
}
return ;
}
LA 3029 - City Game (简单扫描线)的更多相关文章
- LA 3029 City Game
LA 3029 求最大子矩阵问题,主要考虑枚举方法,直接枚举肯定是不行的,因为一个大矩阵的子矩阵个数是指数级的,因此应该考虑先进行枚举前的扫描工作. 使用left,right,up数组分别记录从i,j ...
- UVa LA 3029 City Game 状态拆分,最大子矩阵O(n2) 难度:2
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- LA 3029 Subsequence
LA 3029 A sequence of N positive integers (10 < N < 100 000), each of them less than or equal ...
- bzoj1645 / P2061 [USACO07OPEN]城市的地平线City Horizon(扫描线)
P2061 [USACO07OPEN]城市的地平线City Horizon 扫描线 扫描线简化版 流程(本题为例): 把一个矩形用两条线段(底端点的坐标,向上长度,添加$or$删除)表示,按横坐标排序 ...
- uvalive 3029 City Game
https://vjudge.net/problem/UVALive-3029 题意: 给出一个只含有F和R字母的矩阵,求出全部为F的面积最大的矩阵并且输出它的面积乘以3. 思路: 求面积最大的子矩阵 ...
- 【UVALive】3029 City Game(悬线法)
题目 传送门:QWQ 分析 以前见到过差不多的这题. xhk说是单调栈水题,但我又不会单调栈,于是当时就放下了. 这么久过去了我还是不会用单调栈做这题,用的是悬线法. 非常好写 代码 #include ...
- 【巧妙预处理系列】【UVA1330】City game
最大子矩阵(City Game, SEERC 2004, LA 3029) 给定一个m×n的矩阵,其中一些格子是空地(F),其他是障碍(R).找出一个全部由F组成的面积最大的子矩阵,输出其面积乘以3后 ...
- 洛谷 P2061 [USACO07OPEN]城市的地平线City Horizon
简化版的矩形面积并,不用线段树,不用离散化,代码意外的简单 扫描线,这里的基本思路就是把要求的图形竖着切几刀分成许多矩形,求面积并.(切法就是每出现一条与y轴平行的线段都切一刀) 对于每一个切出来的矩 ...
- SWT入门-常用组件的使用(转)
转自:http://www.cnblogs.com/kentyshang/archive/2007/08/16/858367.html swt的常用组件button ,text ,combo,list ...
随机推荐
- Quartz.net 的开源任务管理平台
Quartz.net 的开源任务管理平台 前面总结了很多,关于Quartz.net 的文章,介绍了如何使用Quartz.net.不清楚的朋友,可以看我之前的系列文章,http://www.cnblog ...
- Core身份认证
Core中实现一个基础的身份认证 注:本文提到的代码示例下载地址> How to achieve a basic authorization in ASP.NET Core 如何在ASP.NET ...
- windows 2012上配置好iis后出现不能访问的现象
新买的阿里云服务器,今天把环境弄了一下,安装iis之后不能访问网页 原因:没有安装asp.net 找到服务器管理器->(右上角)添加角色和功能->下一步下一步...找到应用程序 -> ...
- C#中类型分析中的常见问题 Type - 转
http://www.cnblogs.com/yuanyuan/archive/2012/08/16/2642281.html 写代码的时候经常需要分析已有类型的信息例如:分析现有类型自动生成类, 或 ...
- 用NPOI导出Excel
用NPOI导出Excel public void ProcessRequest(HttpContext context) { context.Response.ContentType = " ...
- 【设计模式六大原则2】里氏替换原则(Liskov Substitution Principle)
肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑.其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的. 定义1:如果对 ...
- Javascrip操作json方法
var str1 = '{ "name": "cxh", "sex": "man" }'; var data=eval( ...
- Android开发--使用真机进行USB调试程序
在android小程序的开发过程中,使用eclipse中的虚拟机进行程序开发速度较慢,用真机开发可以显著提高调试的速度. 这里我用的操作系统是win7专业版,手机型号HM1S: 进行USB调试的主要步 ...
- Ubuntu环境下Hadoop1.2.1, HBase0.94.25, nutch2.2.1各个配置文件一览
/×××××××××××××××××××××××××××××××××××××××××/ Author:xxx0624 HomePage:http://www.cnblogs.com/xxx0624/ ...
- 深入浅出Java并发包—CAS机制
在JDK1.5之前.Java主要靠synchronized这个关键字保证同步,已解决多线程下的线程不安全问题,但是这会导致锁的发生,会引发一些个性能问题. 锁主要存在一下问题 (1)在多线程竞争下,加 ...