洛谷P4147 玉蟾宫 单调栈/悬线法
正解:单调栈/悬线法
解题报告:
ummm这题我当初做的时候一点思路也没有只会暴力出奇迹:D(啊听说暴力好像能水过去呢,,,
然后当初是看的题解,然后学了下悬线法
然后就忘了:D
然后我现在看发现看不懂辽:D
#论写题解的好处:D
所以赶紧来写个题解QAQ
ummm悬线法这个玩意儿会单独写个学习笔记的到时候放链接QAQ所以这里不详解了
反正这题就相当于是个最大子矩阵的玩意儿?有点悬线法板子题的意思蛤?
那如果知道悬线法就可以直接过了,好了没了感觉没太多可说的QAQ
然而这题谢总是布置在单调栈专题的
所以
单调栈解法了解一下?
ummm单调栈就大概想下就出来了?感觉没有悬线法那么难理解(所以我悬线法还没研究出来,,,ummm,,,,
首先做个前缀和记录每列从上往下累计的F的个数
然后就变成每行做一次单调栈(就是最大子矩阵单调栈板子题了qwq
然后就没了?
感觉说得好简陋鸭
那我再,仔细说下QAQ
就以样例为例做个解释
R F F F F F 0 1 1 1 1 1
F F F F F F 1 2 2 2 2 2
R R R F F F 于是可以做成 0 0 0 3 3 3
F F F F F F 1 1 1 4 4 4
F F F F F F 2 2 2 5 5 5
然后对每行当做最大子矩阵那题做个单调栈,就欧克了qwq
所以复杂度似乎是O(nm)?显然是可以过的qwq
然后代码在这儿qwq
#include<bits/stdc++.h>
using namespace std;
#define rp(i,x,y) for(register int i=x;i<=y;++i)
+;
int ans,t,fil[N][N],stck[N],lth[N],n,m;
inline int read()
{
,y=;
') && ch!='-')ch=getchar();
,ch=getchar();
)+(x<<)+(ch^'),ch=getchar();
return y?x:-x;
}
inline char readch()
{
char ch=getchar();while(ch!='F' && ch!='R')ch=getchar();
return ch;
}
inline ;memset(lth,,,,sizeof(stck));}
inline void work(int x)
{
;fil[x][m+]=;
rp(i,,m+)
{
;
while(stck[tail]>fil[x][i])len+=lth[tail],ans=max(ans,len*stck[tail]),--tail;
stck[++tail]=fil[x][i];lth[tail]=len+;
}
}
int main()
{
int T=read();
while(T--)
{
n=read(),m=read();clr();
rp(i,,n)
rp(j,,m)
{
char ch=readch();
+fil[i-][j];;
}
rp(i,,n)work(i);
printf();
}
;
}
对了,,,我发现这题还有几个神奇巴拉的题解?比如并茶几?比如前缀和巴拉巴拉的?还挺有趣的嘿可能有时间会了解下然后写题解趴qwq
然后今天讲题的时候还分享了个O(n3)的前缀和
就是之前考过的那个入阵曲那题的方法,降维,over
有时间自己写下然后放代码
先放个hl的丑陋代码qwq
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
inline int qr(void ){
char c=getchar();
,q=;
||c>)
q=c==?-:q,c=getchar();
&&c<=)
x=(x<<)+(x<<)+(c^),c=getchar();
return q*x;
}
typedef long long ll;
;
#define RP(t,a,b) for(int t=(a),edd=(b);t<=edd;t++)
ll ans;
ll data[maxn][maxn];
ll k,b;
int n,m;
inline void fakedp(void){
RP(t0,,n)
RP(t1,t0,n){
k=;
b=;
RP(t,,m){
][t])==(t1-t0+))
k++,b=max(b,k);
else
k=;
}
b*=(t1-t0+);
ans=max(ans,b);
}
}
char qaq;
int main(){
n=qr();
m=qr();
RP(t,,n){
RP(i,,m){
qaq=getchar();
while(qaq!='R'&&qaq!='F')
qaq=getchar();
if(qaq=='R')
data[t][i]=+data[t-][i];
else
data[t][i]=+data[t-][i];
}
}
fakedp();
cout<<ans*;
}
丑陋代码
还有个是n2logn 的神仙方法?是lsy大佬之前港的,然而我之前找他要代码然后复制过来格式错了?然后我上ycg那题找他的记录感觉他是用的n2的?就很绝望QAQ先这样趴有时间再搞QAQ
洛谷P4147 玉蟾宫 单调栈/悬线法的更多相关文章
- [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)
[BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...
- 洛谷P4147 玉蟾宫(动规:最大子矩形问题/悬线法)
题目链接:传送门 题目大意: 求由F构成的最大子矩阵的面积.输出面积的三倍. 1 ≤ N,M ≤ 1000. 思路: 悬线法模板题. #include <bits/stdc++.h> us ...
- P4147 玉蟾宫--单调栈
P4147 玉蟾宫 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子 ...
- 洛谷 P4147 玉蟾宫 (最大子矩形问题)
这道题用到了悬线法,非常牛逼,可以看这个论文. https://blog.csdn.net/twtsa/article/details/8120269 #include<cstdio> # ...
- 洛谷 P1169 [ZJOI2007]棋盘制作 (悬线法)
和玉蟾宫很像,条件改成不相等就行了. 悬线法题目 洛谷 P1169 p4147 p2701 p1387 #include<cstdio> #include<algorithm& ...
- 【BZOJ-3039&1057】玉蟾宫&棋盘制作 悬线法
3039: 玉蟾宫 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 753 Solved: 444[Submit][Status][Discuss] D ...
- BZOJ_3039_玉蟾宫_(动态规划+悬线法)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3039 n*m的矩阵由R和F组成,求全是F的子矩阵的大小的三倍. 分析 悬线法: 浅谈用极大化思 ...
- 洛谷P4147 玉蟾宫 (单调栈)
要求我们去找一个最大矩形面积. 单调栈做法(和P1950 长方形那道题类似(一模一样)). 1 #include<bits/stdc++.h> 2 using namespace std; ...
- [洛谷P4147] 玉蟾宫
类型:单调栈 传送门:>Here< 题意:求一个$01$矩阵中最大子矩形(全是$1$)的面积 解题思路 单调栈的一个经典应用 考虑维护一个数组$p[i][j]$表示$(i,j)$往上最多有 ...
随机推荐
- Druid连接池基本配置及监控配置
1.配置Druid连接池,监控慢sql <!-- 数据源配置, 使用 Druid 数据库连接池 --> <bean name="dataSource" class ...
- linux 下查看cpu信息
linux 操作系统的位数查看 A. getconf LONG_BIT 如果是32表示是32位 B. file /sbin/init信息全面一些 root@kali:~/software# file ...
- es5.0 安装head插件
es5.0的安装和之前的版本有些区别,我的电脑用plugin install 没成功, 查了一下资料,说是可以用grunt进行安装,启动; 1,先安装grunt: grunt是一个很方便的构建工具,可 ...
- N76E003之SPI
串行外围总线 (SPI)N76E003系列提供支持高速串行通信的SPI模块.SPI 为微控制与外设 EEPROM, LCD 驱动, D/A 转换之间提供全双工.高速.同步传输的总线.可提供主机从机模式 ...
- 老树开新花:DLL劫持漏洞新玩法
本文原创作者:丝绸之路 <img src="http://image.3001.net/images/20150921/14428044502635.jpg!small" t ...
- .net环境下的缓存技术-转载!
摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1 概念 1.1 缓存能解决的问题 · 性 ...
- Linux 下如何安装 .bin 文件
拿到 .bin 文件,在文件所在目录下执行如下命令即可安装, ./your-file-name.bin 如果提示 “没有那个文件或目录” ,给它加上执行权限即可,执行如下命令, chmod +x ./ ...
- Python pyQt4/pyQt5 学习笔记2(状态栏、菜单栏和工具栏)
例子:状态栏.菜单栏和工具栏 import sys from PyQt4 import QtGui class Example(QtGui.QMainWindow): def __init__(sel ...
- Ajax技术(WEB无刷新提交数据)
(转自:http://www.jb51.net/article/291.htm) Ajax内部交流文档一.使用Ajax的主要原因 1.通过适当的Ajax应用达到更好的用户体验: 2.把以前的一些服务器 ...
- Python守护进程和脚本单例运行
Python 守护进程 守护进程简介 进程运行有时候需要脱离当前运行环境,尤其是Linux和Unix环境中需要脱离Terminal运行,这个时候就要用到守护进程.守护进程可以脱离当前环境要素来执行,这 ...