Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >P4147「玉蟾宫」

P4147「玉蟾宫」

作者头像
hotarugali
发布于 2022-03-01 13:41:53
发布于 2022-03-01 13:41:53
26700
代码可运行
举报
运行总次数:0
代码可运行

1. 题目

题目链接:P4147「玉蟾宫」

题目背景

有一天,小猫 rainbow 和 freda 来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。

题目描述

这片土地被分成N×M个格子,每个格子里写着 R 或者 FR 代表这块土地被赐予了 rainbow,F 代表这块土地被赐予了 freda。

现在 freda 要在这里卖萌。。。它要找一块矩形土地,要求这片土地都标着 F 并且面积最大。

但是 rainbow 和 freda 的 OI 水平都弱爆了,找不出这块土地,而蓝兔也想看 freda 卖萌(她显然是不会编程的……),所以它们决定,如果你找到的土地面积为 S,它们每人给你 S 两银子。

输入格式

第一行两个整数NM,表示矩形土地有 NM 列。

接下来 N 行,每行 M 个用空格隔开的字符 FR,描述了矩形土地。

输出格式

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

输入输出样例

输入 #1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
输出 #1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
45

说明/提示

对于 的数据,

对于的数据,

2. 题解

分析

典型求最大子矩阵和问题,即求一个 阵中的子矩阵元素和的最大值。这可以用单调栈解决。对于每一行的每一列元素,往上计算连续的 F 的个数,即得到以每一行为基准的一个条形统计图,每个列对应一个条形矩形,矩形的宽为 111 ,高即为该元素往上计算连续的 F 的个数,这就是典型的计算矩形统计图的最大内矩形面积的问题,用 的单调栈完美解决。由于有 行,每一行都构造出一个矩形统计图,故总复杂度为

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
#define ll int
#define MAXN 1005
using namespace std;

// 矩形统计图
struct RC {
    ll i;
    ll v;
    RC():i(0), v(0) {}
    RC(ll _i, ll _v): i(_i), v(_v) {}
};


// 计算最大子矩阵面积
ll maxRectangle(ll *A, ll n) {
    ll ans = 0;
    ll depth = 0;
    RC stack[MAXN];
    stack[depth] = RC(-1,-1);
    for(ll i = 0; i < n; ++i) {
        RC t(i,A[i]);
        ll sdepth = depth;
        while(depth && stack[depth].v >= A[i]) {
            ans = max(ans, (stack[sdepth].i-stack[depth-1].i)*stack[depth].v);
            --depth;  
        }
        stack[++depth] = t;
    }
    ll sdepth = depth;
    while(depth) {
        ans = max(ans, (stack[sdepth].i-stack[depth-1].i)*stack[depth].v);
        --depth; 
    }
    return ans;
}

int main()
{
    ll n, m;
    ll a[MAXN][MAXN], b[MAXN][MAXN];
    scanf("%d%d", &n, &m);
    for(ll i = 0; i < n; ++i) {
        for(ll j = 0; j < m; ++j) {
            char str[2];
            scanf("%s", str);
            if(str[0] == 'R') {
                a[i][j] = 0;
            } else {
                a[i][j] = 1;
            }
        }
    }
    for(ll j = 0; j < m; ++j)  b[0][j] = a[0][j];
    for(ll i = 1; i < n; ++i) {
        for(ll j = 0; j < m; ++j) {
            if(a[i][j]) {
                b[i][j] = b[i-1][j] + 1;
            } else {
                b[i][j] = 0;
            }
        }
    }
    ll ans = 0;
    for(ll i = 0; i < n; ++i) {
        ans = max(ans, maxRectangle(b[i], m));
    }
    printf("%d\n", 3*ans);
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【题解】玉蟾宫
有一天,小猫 rainbow 和 freda 来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。
fishhh
2022/08/31
2710
【题解】玉蟾宫
3039: 玉蟾宫
3039: 玉蟾宫 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 512  Solved: 311 [Submit][Status] Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。 这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda。 现在freda要在这里卖萌。。。它要找一块矩形
HansBug
2018/04/10
5830
2491 玉蟾宫
2491 玉蟾宫 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description   有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。   这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda。   现在freda要在这里卖萌。。。它要找一块矩形土地,要求这片土地都标着'F'并且面积最大。
attack
2018/04/12
6850
P1169「棋盘制作」
国际象棋是世界上最古老的博弈游戏之一,和中国的围棋、象棋以及日本的将棋同享盛名。据说国际象棋起源于易经的思想,棋盘是一个 大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳。
hotarugali
2022/03/01
6280
P1169「棋盘制作」
单调栈
单调栈是一种用来解决首递增序列问题的数据结构,其满足从栈顶元素到栈底元素单调的性质。单调栈还可以用来解决求矩形统计图中最大内矩形面积的问题,进一步可以用来求最小矩阵和问题。
hotarugali
2022/03/01
9820
单调栈
POJ3250「Bad Hair Day」
Some of Farmer John’s cows ( ) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ wants to count the number of other cows that can see the top of other cows’ heads.
hotarugali
2022/03/01
3440
《算法竞赛进阶指南》0x18 总结与练习
这一天,刚刚起床的达达画了一排括号序列,其中包含小括号 ( )、中括号 [ ] 和大括号 { },总长度为
一只野生彩色铅笔
2022/10/31
9630
《算法竞赛进阶指南》0x18 总结与练习
POJ 1964&HDU 1505&HOJ 1644 City Game(最大0,1子矩阵和总结)
最大01子矩阵和,就是一个矩阵的元素不是0就是1,然后求最大的子矩阵,子矩阵里的元素都是相同的。 这个题目,三个oj有不同的要求,hoj的要求是5s,poj是3秒,hdu是1秒。不同的要求就对应不同的难度,不同的逼格。 先看最low的, HOJ 1664 5秒钟的时间,够长了。我很容易想到可以最大子矩阵和来求解,二者本来就很像,关于最大子矩阵和这个博客里有介绍 最大子矩阵和 这里我们可以把F变成1,把R变成负无穷大,这样求解最大子矩阵和就可以得到答案 #inc
ShenduCC
2018/04/26
8490
POJ 1964&HDU 1505&HOJ 1644 City Game(最大0,1子矩阵和总结)
悬线法处理最大子矩阵问题
可用于求解给定矩阵中满足某条件的极大矩阵(最大子矩阵)。设矩阵为N×M ,算法复杂度为O(N×M) 。
fishhh
2022/08/31
5010
51Nod 1051 最大子矩阵和
1051 最大子矩阵和 基准时间限制:2 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个M*N的矩阵,找到此矩阵的一个子矩阵,并且这个子矩阵的元素的和是最大的,输出这个最大的值。 例如:3*3的矩阵: -1 3 -1 2 -1 3 -3 1 2 和最大的子矩阵是: 3 -1 -1 3 1 2 Input 第1行:M和N,中间用空格隔开(2 <= M,N <= 500)。 第2 - N + 1行:矩阵中的元素,每行M个数,中间用空格隔开。(-10^9 <= M[i] <= 10^9)
attack
2018/04/11
7480
单调栈总结_进栈和出栈的算法思想
单调栈是一种特殊的栈,特殊之处在于栈内的元素都保持一个单调性。 假设下图是一个栈内元素的排列情况(单调递增的栈):
全栈程序员站长
2022/11/09
3370
单调栈总结_进栈和出栈的算法思想
论Dota中影魔的攻击力(二维数点问题)
影魔是Dota中极为受欢迎的英雄. 所以我们很有必要讨论一下影魔的攻击力. 题目来自 AHOI2019 影魔
ACM算法日常
2020/05/18
6400
线段树相关问题 (引用 PKU POJ题目) 整理
如果(a < b – 1){分别计算a、b的次数和线段树[a + 1, b – 1)的次数,取大(小)的一项};
owent
2018/08/01
1K0
Codeforces 的题目真的值得算法竞赛选手训练吗?
个串,有两种操作,一种是给某个串加一个字符,另一种是求存不存在一个串是查询串的子串。强制在线。
ACM算法日常
2021/11/10
9530
leetcode周赛224
难度顺序: 。 代码分为头文件和Solution主体部分,头文件在文末。 A.可以形成最大正方形的矩形数目 「提示:」 1 <= rectangles.length <= 1000 rectangles[i].length == 2 1 <= li, wi <= 10^9 li != wi 「思路:」遍历一遍记录最大值和最大值的个数即可。 时间复杂度: . class Solution { public: int countGoodRectangles(vector<vector<int>>&
ACM算法日常
2021/01/28
4270
河南理工大学新生挑战赛
B.The flower 题意:意思就是给一个字符串,然后从字符串中得到子串,并且子串满足情况 1.出现次数大于2,; 2.子串的长度等于k; 找到有多少个这样的串然后按照字典序打印出来
杨鹏伟
2020/09/11
3910
东南亚的 ICPC ,真的比国内的简单吗?
不少同学们总是会感叹说国内无论什么比赛都是内卷严重,那东南亚的 ICPC 比赛真的会比国内的容易吗?
ACM算法日常
2021/11/10
7460
洛谷P3246 [HNOI2016]序列(离线 差分 树状数组)
也就是我们需要解决这么一个问题:两个操作, 矩形加矩形求和,而且前者都在后者的前面执行
attack
2019/03/11
5580
牛客网2018年全国多校算法寒假训练营练习比赛(第二场)
A-吐泡泡 链接:https://www.nowcoder.com/acm/contest/74/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o"。两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。(是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。) 例如:ooOOoo
Zoctopus
2018/06/04
1.2K0
AcWing 1413. 矩形牛棚(每日一题)
约翰购买了一大块土地,这个土地可以看作是一个 R 行(编号 1∼R)C 列(编号 1∼C)的方格矩阵。
摆烂小白敲代码
2024/09/23
840
AcWing 1413. 矩形牛棚(每日一题)
相关推荐
【题解】玉蟾宫
更多 >
LV.1
这个人很懒,什么都没有留下~
加入讨论
的问答专区 >
1高级后端开发工程师擅长3个领域
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    本文部分代码块支持一键运行,欢迎体验
    本文部分代码块支持一键运行,欢迎体验