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 ...
随机推荐
- .net session 使用误区
1. this.Session["username"] = null HttpSessionState 内部使用 NameObjectCollection 类型的集合对象来存储用 ...
- Java8 之stream
总概述:Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操 ...
- CSRF 和 XSS 的区别
XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任 XSS: 跨站脚本攻击 原名为Cross Site Scriptin,为避免和网页层级样式表概念混淆, 另名为XSS ...
- jdk1.7/1.8 HashMap、ConcurrentHashMap详解
摘要: 本文主要参考网上Blog(详见Reference)总结ConcurrentHashMap的各方面知识,方便复习 转自:https://my.oschina.net/hosee/blog/675 ...
- Axis通过方法获取webService请求报文
MessageContext messageContext = _call.getMessageContext(); Message reqMsg = messageContext.getReques ...
- 【CSS】面试知识整理
手写clearfix .clearfix:after { content: ''; display: table; clear: both; } .clearfix { *zoom:; } flex布 ...
- 010 Editor 8.0.1 之 逆向分析及注册机编写
前言一.工具及软件介绍二.逆向分析2.1.找到提示错误注册弹窗2.2.分析跳转处代码2.3.=2D 函数分析2.3.1.获取注册码处分析2.3.2.3处分支分析2.3.2.1.9C情况2.3.2.2. ...
- xx星空面试题
一面 1.什么是多态 实现原理? 2.什么是重载?class加载原理? 3.常用设计模式,简单介绍 4.看过哪些java的书?android的书? 5.动态注册静态注册 优缺点?静态注册函数如何被调用 ...
- github上用golang写的项目
1.moby/moby docker的新马甲 2.kubernetes/kubernetes 分布式容器管理 3.grafana/grafana 一个可视化面板,有漂亮的仪表盘,多种数据来源,适合做系 ...
- Bar 柱状图
1.生成基本图形 向上向下分别生成12个数据,X为 0 到 11 的整数 ,Y是相应的均匀分布的随机数据. 使用的函数是plt.bar,参数为X和Y: import matplotlib.pyplot ...