当前位置: 首页 > news >正文

BZOJ 3039: 玉蟾宫

3039: 玉蟾宫

Description

 

有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。
这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda。
现在freda要在这里卖萌。。。它要找一块矩形土地,要求这片土地都标着'F'并且面积最大。
但是rainbow和freda的OI水平都弱爆了,找不出这块土地,而蓝兔也想看freda卖萌(她显然是不会编程的……),所以它们决定,如果你找到的土地面积为S,它们每人给你S两银子。

 


Input

 

第一行两个整数N,M,表示矩形土地有N行M列。
接下来N行,每行M个用空格隔开的字符'F'或'R',描述了矩形土地。

 

Output

输出一个整数,表示你能得到多少银子,即(3*最大'F'矩形土地面积)的值。

Sample Input

5 6
R F F F F F
F F F F F F
R R R F F F
F F F F F F
F F F F F F

Sample Output

45

——我是愉快的分隔符——
这道题很明显一下子想到一个N^2M的算法,发现超时【BZOJ的题目呀…阿喂!
然后发现数据具有单调性,使用单调队列优化寻找最大矩形,NM时间复杂度,ACCEPT!
下面是代码:
#include<cstdio>
using namespace std;
int map[1010][1010];
int num[1010],len[1010];
int n,m;
char x[1];
int ans;
inline int remax(int a,int b){
	return a>b?a:b;
}
int main(){
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++){
		for (int j=1;j<=m;j++){
			scanf("%s",&x);
			if (x[0]=='F') map[i][j]=map[i-1][j]+1;
		}
	}
	int maxs=0;
	int length=0;
	int top=0;
	for (int i=1;i<=n;i++){
		top=0;
		num[top]=len[top]=0;
		for (int j=1;j<=m;j++){
			if (map[i][j]>=num[top]){
				top++;
				num[top]=map[i][j];
				len[top]=1;
			}else{
				length=0;
				while(top&&map[i][j]<num[top]){
					length+=len[top];
					maxs=remax(maxs,length*num[top]);
					--top;
				}
				top++;
				num[top]=map[i][j];
				len[top]=length+1;
			}
		}
		length=0;
		for (int j=top;j>=1;j--){
			length+=len[j];
			maxs=remax(maxs,length*num[j]);
		}
	}
	int ans=maxs*3;
	printf("%d\n",ans);
	return 0;
} 


 

转载于:https://www.cnblogs.com/WNJXYK/p/4063968.html

相关文章:

  • JSP学习笔记(一)
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 继承中代码执行顺序
  • 遍历日志文件并打印
  • Spartan6系列之器件引脚功能详述
  • 菠萝大象--sping
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 深入jQuery Mobile
  • java B2B2C源码电子商务平台 -kafka架构介绍
  • 程序员10大职业生存技巧(转载)
  • 如何打造一流的查询引擎,构建优秀的数据仓库?
  • gzip原理小透明 | Web高能短文系列
  • 安卓学习-界面-ui-AdapterViewFlipper和StackView
  • Android之父下的作品Essential Phone停产,接下来呢?
  • Android 控件背景颜色处理
  • CentOS6 编译安装 redis-3.2.3
  • CSS3 变换
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Flannel解读
  • IDEA 插件开发入门教程
  • SpriteKit 技巧之添加背景图片
  • Vue.js源码(2):初探List Rendering
  • 安装python包到指定虚拟环境
  • 半理解系列--Promise的进化史
  • 对JS继承的一点思考
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 如何利用MongoDB打造TOP榜小程序
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • #Linux(权限管理)
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (06)Hive——正则表达式
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (8)STL算法之替换
  • (zhuan) 一些RL的文献(及笔记)
  • (编译到47%失败)to be deleted
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (论文阅读11/100)Fast R-CNN
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .NET运行机制
  • .project文件
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法