SP277 CTGAME - City Game 题解
前置知识
解法
令 \(f_{i,j}(1 \le i \le n,1 \le j \le m)\) 表示从 \((1,j)\) 到 \((i,j)\) 中以 \((i,j)\) 结尾的均为 F 的子串长度,即 \((i,j)\) 上面可延伸的最大距离(子矩形的长)。
用单调栈的第一维存储子矩形的长,第二维存储子矩形的宽。考虑依次枚举每一行和每一列,进行出入栈的操作。当枚举到 \((i,j)\) 的位置时,记录子矩形的宽 \(num\),有如下操作:
- 对于栈中原来的元素中大于当前的长 \(f_{i,j}\),要将其弹出栈,计数器 \(num\) 加 \(1\)。
- 子矩形的宽为弹出栈的元素个数。
- 其所形成的子矩形面积为 $num \times $ 栈中当前的元素。
- 将所得到的长 \(f_{i,j}\) 和宽 \(num\) 入栈。
代码
#include<bits/stdc++.h>
using namespace std;
int f[1001][1001];
int main()
{
int n,m,t,v,i,j,ans,num;
char pd;
cin>>t;
for(v=1;v<=t;v++)
{
ans=0;
cin>>n>>m;
memset(f,0,sizeof(f));
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cin>>pd;
if(pd=='F')
{
f[i][j]=f[i-1][j]+1;
}
}
}
for(i=1;i<=n;i++)
{
stack<pair<int,int>> s;
s.push(make_pair(f[i][1],1));
for(j=2;j<=m;j++)
{
num=0;
while(s.empty()==0&&s.top().first>=f[i][j])
{
num+=s.top().second;
ans=max(ans,num*s.top().first);
s.pop();
}
s.push(make_pair(f[i][j],num+1));
}
num=0;
while(s.empty()==0)
{
num+=s.top().second;
ans=max(ans,num*s.top().first);
s.pop();
}
}
cout<<ans*3<<endl;
}
return 0;
}
后记
多倍经验:P4147 | P5943 | UVA1330
SP277 CTGAME - City Game 题解的更多相关文章
- 题解 POJ1964/UVA1330/SP277 【City Game】
题目链接: https://www.luogu.org/problemnew/show/UVA1330 http://poj.org/problem?id=1964 https://www.luogu ...
- 算法与数据结构基础 - 贪心(Greedy)
贪心基础 贪心(Greedy)常用于解决最优问题,以期通过某种策略获得一系列局部最优解.从而求得整体最优解. 贪心从局部最优角度考虑,只适用于具备无后效性的问题,即某个状态以前的过程不影响以后的状态. ...
- upc组队赛5 Ground Defense【枚举】
Ground Defense 题目描述 You are a denizen of Linetopia, whose n major cities happen to be equally spaced ...
- 【sql】leetcode习题 (共 42 题)
[175]Combine Two Tables (2018年11月23日,开始集中review基础) Table: Person +-------------+---------+ | Column ...
- mysql学习 | LeetCode数据库简单查询练习
力扣:https://leetcode-cn.com/ 力扣网数据库练习:https://leetcode-cn.com/problemset/database/ 文章目录 175. 组合两个表 题解 ...
- bzoj3125: CITY 题解
3125: CITY Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 486 Solved: 213[Submit][Status][Discuss] ...
- 题解-CF1239D Catowice City
CF1239D Catowice City 有 \(n\) 个人和 \(n\) 只猫.有 \(m\) 对人猫友谊,即第 \(u_i\) 个人认识第 \(v_i\) 只猫,保证第 \(i\) 个人和第 ...
- ZOJ 3195 Design the city 题解
这个题目大意是: 有N个城市,编号为0~N-1,给定N-1条无向带权边,Q个询问,每个询问求三个城市连起来的最小权值. 多组数据 每组数据 1 < N < 50000 1 < Q ...
- 题解 CF821D 【Okabe and City】
其实,这道题不用long long也能AC. 题意是给你一个矩阵,有一些格子被点亮有一些没有,每一次只能在被点亮的格子上面走. 然后你每一次都可以选择点亮一行或一排(非永久),现在问你最少点多少次可以 ...
- codeforces CF475 ABC 题解
Bayan 2015 Contest Warm Up http://codeforces.com/contest/475 A - Bayan Bus B - Strongly Connected Ci ...
随机推荐
- poj 3246 简单线段树
线段树还真有点难写... #include <iostream> #include <cstdio> #include <cstring> #include < ...
- offline RL | ABM:从 offline dataset 的好 transition 提取 prior policy
ICLR 2020,6 6 6. 材料: 论文题目:Keep Doing What Worked: Behavior Modelling Priors for Offline Reinforcemen ...
- SV 数据类型-3
联合数组 在内存中分配的空间可以是不连续的 联合数组方法 数组的方法 数组使用推荐 结构体 枚举类型 字符串变量类型String 操作符
- 08-Shell计算命令
1.expr命令 expr (evaluate expressions 的缩写),译为"表达式求值".Shell expr 是一个功能强大,并且比较复杂的命令,它除了可以实现整数计 ...
- 30-组合可编程逻辑器件-PLD
组合可编程逻辑器件 1.PLD的结构 1.1 结构 1.2 表示方法 实心点表示连接,但是不可编程 ×点表示连接,但是可以编程 2.编程技术 2.1 熔丝工艺 每个输入线连接二极管和保险丝 2.2 电 ...
- 解决windows系统电脑内存占用过高,一开机就是60%70%80%90%?
1.问题 windows系统电脑内存占用过高,一开机就是60%70%80%90%? 2.解决方式 主要是虚拟内存一直没有及时释放导致的 先贴上B站视频链接:解决windows系统电脑内存占用过高 这里 ...
- 【TouchGFX】代码结构
生成代码与用户代码 代码结构图示如下 据上图显示代码结构分为三层 引擎 这是TouchGFX提供的标准类,作为生成类的基类 生成 这是touchgfx designer生成的类,作为用户类的基类,这部 ...
- WinSCP和xftp 从Windows 上传到linux服务器时出现中文乱码的解决方案
1. 日常工作中有需求从Windows的办公机器将文件上传到linux服务器上面进行使用 中文经常出现乱码, 需要处理一下. 这里面主要用到了两个工具 WinSCP还有xftp 两个的原理都是一样的 ...
- Ant Design Vue分页Pagination
<template> <div> <a-pagination show-quick-jumper v-model:current="current1" ...
- 手写promise实现自定义封装多个回调函数的执行
自定义封装多个回调函数的执行 <script src="./Promise.js"></script> let p = new Promise((resol ...