POJ1964-City Game
给你N×M大的矩阵,里面分别有字符‘F'和’R',要找到一个最大的只有‘F'的矩阵,不能包含有’R‘。N,M<=1000。
一开始的思路是单调栈来求最大矩形面积,因为没看清题目不能包含’R'字符,所以算出每行的‘F'字符个数然后单调栈就WA了。。
然后想到要从左边开始,算出连续的‘F'字符个数,然后又WA了。
因为还有右边,所以右边开始的’F'字符也处理一下,也是WA。
接着想到这种情形:
R F F F R
R F F F R
这枚举F的开始结束的话都是不行的,那么因为就两种字符。然后我又上一步一样只是求出R连续的大小,然后统计
lf左边开始‘F'的连续个数然后单调栈
rf右边开始’F'的连续个数然后单调栈
lr左边开始‘R'的连续个数然后单调栈
rr右边开始’R'的连续个数然后单调栈。
那么答案我就觉得是max(lf,rf,n*m-max(lr,rr))
然后也WA,因为我想到一个反例:
R R R R R
R F F F R
R F F F R
R F F F R
R R R R R
仔细观察这个样例,发现其实之前的做法很麻烦,我们最后得出的矩形一定是有左边的(废话),但是这个左边不确定,只要确定了直接用单调栈就出来了。
所以想到可以枚举K列,每次从第K列开始算。代码如下:
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string>
#include <string.h>
#include <algorithm>
using namespace std; int n,m,arr[],stk[],w[];
char ma[][],ss[];
long long ans;
int main() {
int k;
scanf("%d",&k);
while(k--) {
long long lr,rr,lf,rf;
lr=rr=lf=rf=;
memset(stk,,sizeof stk);
ans=;
memset(w,,sizeof w);
scanf("%d%d",&n,&m);
for(int i=; i<=n; ++i) {
for(int j=; j<=m; ++j)
scanf("%s",ss),ma[i][j]=ss[]; }
for(int k=; k<=m; ++k) {
for(int i=; i<=n; ++i) {
int tmp=;
int j=k;
while(j<=m&&ma[i][j++]!='R')
++tmp;
/*
for(int j=1;j<=m;++j)
if(ma[i][j]=='F')
++tmp;
*/
arr[i]=tmp;
}
memset(stk,,sizeof stk);
memset(w,,sizeof w);
lf=;
arr[n+]=;
int p=;
for(int i=; i<=n+; ++i) {
if(arr[i]>stk[p])
stk[++p]=arr[i],w[p]=;
else {
int wid=;
while(stk[p]>arr[i]) {
wid+=w[p];
lf=max(lf,(long long)wid*stk[p]);
--p;
}
stk[++p]=arr[i];
w[p]=wid+;
}
}
ans=max(ans,lf);
}
printf("%lld\n",ans*);
}
return ;
}
POJ1964-City Game的更多相关文章
- [POJ1964]City Game (悬线法)
题意 其实就是BZOJ3039 不过没权限号(粗鄙之语) 同时也是洛谷4147 就是求最大子矩阵然后*3 思路 悬线法 有个博客讲的不错https://blog.csdn.net/u012288458 ...
- 题解 POJ1964/UVA1330/SP277 【City Game】
题目链接: https://www.luogu.org/problemnew/show/UVA1330 http://poj.org/problem?id=1964 https://www.luogu ...
- BZOJ 2001: [Hnoi2010]City 城市建设
2001: [Hnoi2010]City 城市建设 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1132 Solved: 555[Submit][ ...
- History lives on in this distinguished Polish city II 2017/1/5
原文 Some fresh air After your time underground,you can return to ground level or maybe even a little ...
- History lives on in this distinguished Polish city 2017/1/4
原文 History lives on in this distinguished Polish city Though it may be ancient. KraKow, Poland, is a ...
- #1094 : Lost in the City
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi gets lost in the city. He does not know where he is ...
- GeoIP Legacy City数据库安装说明
Here is a brief outline of the steps needed to install GeoIP Legacy City on Linux/Unix. The installa ...
- [POJ3277]City Horizon
[POJ3277]City Horizon 试题描述 Farmer John has taken his cows on a trip to the city! As the sun sets, th ...
- 2015年第8本(英文第7本):the city of ember 微光城市
书名:the City of Ember(中文名:微光城市) 作者:Jeanne DuPrau 单词数:6.2万 不重复单词数:未知 首万词不重复单词数:未知 蓝思值:未知 阅读时间:2015年4月2 ...
- 离散化+线段树 POJ 3277 City Horizon
POJ 3277 City Horizon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 18466 Accepted: 507 ...
随机推荐
- 基于Dapper写的一个sqlhelp适用于多版本数据库
ConnectionInit方法用于初始化数据库连接对象, 只需要修改databasetype参数即可进行适用各个版本的数据库, ExecuteNonQuery方法用于执行增.删.改操作,返回受影响的 ...
- springboot+dubbo修改扫描路径引起端口占用的问题
因为在多模块项目中引入了spring security,消费方(控制层)的工程有两个包,一个controller,一个config.引入之前消费方工程的application.properties中s ...
- command not found解决方案
如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,悍然提示:bash:command not found.那么 首先就要考虑root 的$PATH里是否已经包含了这些环境变量 ...
- 2018-2019-2 20165315 《网络对抗技术》Exp2+ 后门进阶
2018-2019-2 20165315 <网络对抗技术>Exp2+ 后门进阶 一.实验要求 以下三个课题三选一 1.其他专用后门工具研究(CROSSRAT ...) 2.恶意代码绑定技术 ...
- 分别用for、while和do-while循环语句以及递归方法计算n!,并输出算式
一.用for循环实现 实验过程: 实验结果: 二.用while循环实现 实验结果: 三.用do while循环实现 实验结果: 四.用递归算法实现 实验结果: 实验心得: 此次实验中必须熟悉for循环 ...
- pg_dump 数据处理
从数据库导出数据 -U 用户 -p 端口 -h 主机地址 -f 导出文件地址 -O 备份数据库结构和数据,不设置拥有者 -s 只导出数据库结构 最后是库名 (全部导出)pg_dump -U post ...
- 使用react-handsontable
新建一个项目 create-react-app myProject cd myProject npm install handsontable 或者 npm install handsontable- ...
- 在MyEclipse中使用spring-boot+mybatis+freemarker实现基本的增删改查
一.基本环境 二.创建实体类 1.User.java package bjredcross.rainbowplans.model; import bjredcross.rainbowplans.com ...
- CentOS 7 建立svn仓库 远程连接
首先安装svn (后补) mikdir /usr/local/svn_repertory # 创建svn大仓库用于存放所有项目代码 cd /usr/local/svn_repertory # 进 ...
- 将字符串向hdfs中写入,出现中文乱码!
jsonObject.toString():需要处理的json对象转成的字符串 "/testData/ExtractKWByOnce.txt":写入hdfs中的目标路径 try { ...