博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1505 City Game(算竞进阶习题)
阅读量:6764 次
发布时间:2019-06-26

本文共 2357 字,大约阅读时间需要 7 分钟。

写了1506顺便写下1505。。

还是求矩形面积,不过要预处理一下以每一个F为底的高度,然后想左右扩展到最大长度即为矩形的长。。

计算方法有点绕,令l[i]表示i的左边界,那么初始化l[i] = i.

假设我们在第n行

每次向左跳 判断 h[j]是否小于或等于h[l[j] - 1],换句话说就是当前左边界已经满足小于关系了,我们再往左看一个长度,看是否还是满足小于或等于的关系

如果满足 则有l[j] = l[l[j]-1],可以理解为当前左边界往左一位满足条件,我们看左边界往左一位的左边界再往左一个长度是否也满足条件(因为是单调的,所以边界的边界一定满足条件)

需要自己琢磨。。。右边界同理

#include 
#define INF 0x3f3f3f3fusing namespace std;typedef long long ll;inline int lowbit(int x){ return x & (-x); }inline int read(){ int X = 0, w = 0; char ch = 0; while(!isdigit(ch)) { w |= ch == '-'; ch = getchar(); } while(isdigit(ch)) X = (X << 3) + (X << 1) + (ch ^ 48), ch = getchar(); return w ? -X : X;}inline int gcd(int a, int b){ return a % b ? gcd(b, a % b) : b; }inline int lcm(int a, int b){ return a / gcd(a, b) * b; }template
inline T max(T x, T y, T z){ return max(max(x, y), z); }template
inline T min(T x, T y, T z){ return min(min(x, y), z); }template
inline A fpow(A x, B p, C yql){ A ans = 1; for(; p; p >>= 1, x = 1LL * x * x % yql)if(p & 1)ans = 1LL * x * ans % yql; return ans;}const int N = 200005;int h[1005][1005], l[N], r[N];char g[1005][1005];int main(){ int n, m, t; cin >> t; while(t --){ while(cin >> n >> m){ int ans = 0; memset(h, 0, sizeof h); memset(l, 0, sizeof l); memset(r, 0, sizeof r); for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++) cin >> g[i][j]; } for(int j = 1; j <= m; j++) h[1][j] = g[1][j] == 'F' ? 1 : 0; for(int i = 2; i <= n; i++){ for(int j = 1; j <= m; j++) h[i][j] = g[i][j] == 'R' ? 0 : h[i - 1][j] + 1; } for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++) l[j] = r[j] = j; for(int j = 2; j <= m; j++){ while(l[j] > 1 && h[i][j] <= h[i][l[j] - 1]) l[j] = l[l[j] - 1]; } for(int j = m - 1; j >= 1; j--){ while(r[j] < m && h[i][j] <= h[i][r[j] + 1]) r[j] = r[r[j] + 1]; } for(int j = 1; j <= m; j++){ ans = max(ans, (r[j] - l[j] + 1) * h[i][j]); } } printf("%d\n", 3 * ans); } } return 0;}

转载于:https://www.cnblogs.com/onionQAQ/p/10519874.html

你可能感兴趣的文章
SQLBulkCopy使用实例--读取Excel写入数据库/将 Excel 文件转成 DataTable
查看>>
企业分布式微服务云SpringCloud SpringBoot mybatis (五)路由网关(zuul)
查看>>
详解 MySQL 5.7 新的权限与安全问题
查看>>
大型网站技术架构(六)网站的伸缩性架构
查看>>
LA 3644 X-Plosives
查看>>
mysql8.0+修改用户密码
查看>>
android应用的响应性设计
查看>>
IOS设计模式浅析之单例模式(Singleton)
查看>>
Nosql数据库分类
查看>>
移动短信网关返回信息状态代码说明
查看>>
fis学习
查看>>
1250 Fibonacci数列
查看>>
数据访问的登陆界面
查看>>
自己写的小程序
查看>>
easyui combotree的使用
查看>>
第一讲:Asp.Net+Autofac+EF/ADO.NET Winform OA(1)-前言
查看>>
兼容不支持js的浏览器
查看>>
Django模板(Template)系统
查看>>
request jsonify
查看>>
(5)连续非周期信号的傅里叶变换(频谱) & 周期信号的傅里叶变换
查看>>