洛谷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)$往上最多有 ...
随机推荐
- IIS中采用ISAPI-Rewrite防盗链
本规则支持白名单排除式防盗链,搜索引擎友好(不屏蔽),被盗链后的错误提示转向,支持各种文件类型,经作者亲验真的能用,第一时间在itmop.com原创发表,请继续往下阅读. 近来小站遇到了盗链问题,至使 ...
- js for循环与for in循环的区别
for循环可一遍历数组,而for in循环可以遍历数组和对象 使用for in循环会将Array当成对象遍历,而Array的存取速度明显比Object要快.所以使用for循环遍历数组比for in循环 ...
- gcc/g++基本命令简介
gcc & g++现在是gnu中最主要和最流行的c & c++编译器 .g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c.这时候命令换做gcc即可.其实是无关紧要的.其 ...
- iOS - Action Extension
上一篇<iOS开发 之 Share Extension>介绍了分享扩展的开发与使用,本篇主要还是讲述在系统分享菜单中最底下一栏的功能扩展:Action Extension,该扩展跟Shar ...
- 关于丢失或者损坏/etc/fstab文件后的一些探讨
1.模仿,假设不小心删除了/etc/fstab文件:大家都知道,Linux系统启动的时候会读取该文件来挂载分区,如果缺失该文件,系统一般不能正常启动. 2.采用reboot命令或者alt+ctrl+d ...
- WP8.1学习系列(第十一章)——中心控件Hub开发指南
在本文中 先决条件 什么是中心控件? 添加中心控件 将分区添加到中心 添加交互式分区头用于导航 将展示磁贴添加到中心 使用窄应用中的垂直中心 借助中心使用语义式缩放视图 摘要和后续步骤 重要的 API ...
- 【大数据系列】HDFS文件权限和安全模式、安装
HDFS文件权限 1.与linux文件权限类型 r:read w:write x:execute权限x对于文件忽略,对于文件夹表示是否允许访问其内容 2.如果linux系统用户sanglp使用hado ...
- 【java工具】AES CBC加密
一.定义 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先 ...
- UINavigationItem 设置UIBarButtonItem
转:http://hi.baidu.com/ivan_xu/item/237bb1ad77eff9b028ce9d7c 有A.B两个ViewController,假如A push B: UINavig ...
- mysql select缓存使用详解
mysql Query Cache 默认为打开.从某种程度可以提高查询的效果,但是未必是最优的解决方案,如果有的大量的修改和查询时,由于修改造成的cache失效,会给服务器造成很大的开销,可以通过qu ...