演讲

题目背景:

众所周知,\(\mathrm{Zdrcl}\)是一名天天\(\mathrm{AK}\)的高水平选手。

作为一民长者,为了向大家讲述自己\(\mathrm{AK}\)的经验,他决定在一个礼堂里为大家举办一场演讲。

这个礼堂拥有\(N\times M\)个位子,排成\(N\)行\(M\)列。每个位子都有一盏灯,一开始有的灯是亮的,有的灯是灭的。这个礼堂十分诡异,人们操作一次只能使某一行或某一列(某一行或某一列由操作者你自己来决定)的灯的明暗状态全都发生转变(显然,我们不一定可以把所有的灯都点亮)。

来听演讲的人只会坐在灯已经被点亮的位置, 所以可以听演讲的位置只会是一个只由灯是亮的的位子所组成的矩形(不然坐太乱,\(\mathrm{Zdrcl}\)会不高兴的) 。

\(\mathrm{Zdrcl}\)知道会有很多人来听演讲, 所以他希望找到一个经过若干操

作后的面积最大的只由灯是亮的的位子所组成的矩形。 这个任务当然由想\(\mathrm{AK}\)的你来完成啦!

输入输出格式

输入格式:

第一行两个正整数表示\(N,M\)。

接下来有\(N\)行,每行有\(M\)个字符(‘#’表示这个灯初始状态是亮的,‘.’表示这个灯初始状态是暗的)。

输出格式

一行一个整数表示你找到的矩形的面积。

数据范围

对于\(5\%\)的数据:\(N=2,M=2\)

对于\(15\%\)的数据:\(N\times M\le 8\)

对于\(30\%\)的数据:\(N,M\le 10\)

对于\(60\%\)的数据:\(N\le 1\le 10^2\)

对于\(80\%\)的数据:\(N\le 4\times 10^2\)

对于\(100\%\)的数据:\(N\le 2\times 10^3\)

输入文件比较大, 请使用比较快速的读入方法。

提示

这一题写起来不是很困难。


这一题确实不算难

主要就是“手玩手玩,再手玩”

如果我们的某一个矩形是答案矩形,那么它一定会满足什么呢?

假设现在我们已经做完了行操作得到了中间状态,那么中间状态如何指经过列操作得到答案矩形呢?

我们再探究探究如何只通过列操作得到中间状态呢?

手玩以后,我们发现,如果一个原始的01矩阵相邻行异或之后,每一行连续的0,1即是合法的选取

这里就转换成了一个取矩形的问题,可以使用单调栈进行优化


Code:

#include <cstdio>
#include <bitset>
using namespace std;
const int N=2010;
bitset <N> a[N],d[N];
int max(int x,int y){return x>y?x:y;}
int n,m,ans;char c;
int f[N][N],L[N],R[N],s[N],tot;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("\n");
for(int j=1;j<=m;j++)
{
scanf("%c",&c);
if(c=='#') d[i][j-1]=1;
}
}
for(int i=2;i<=n;i++)
a[i]=d[i]^d[i-1];
for(int i=1;i<=n;i++)
{
f[i][m]=1;
for(int j=m-1;j;j--)
{
if(a[i][j-1]==a[i][j])
f[i][j]=f[i][j+1]+1;
else
f[i][j]=1;
}
}
for(int i=1;i<=m;i++)
{
tot=0;
for(int j=2;j<=n;j++)
{
L[j]=1;
while(tot&&f[s[tot]][i]>=f[j][i]) L[j]+=L[s[tot--]];
s[++tot]=j;
}
tot=0;
for(int j=n;j>1;j--)
{
R[j]=1;
while(tot&&f[s[tot]][i]>=f[j][i]) R[j]+=R[s[tot--]];
s[++tot]=j;
}
for(int j=2;j<=n;j++)
ans=max(ans,f[j][i]*(R[j]+L[j]));
}
printf("%d\n",ans);
return 0;
}

2018.8.16

安徽师大附中%你赛day4T2 演讲解题报告的更多相关文章

  1. 安徽师大附中%你赛day3T1 怜香惜玉 解题报告

    怜香惜玉 题意: 已知 \(f(x)=\frac{2 \times \sum_{(i,x)=1}^x i}{φ(x)}\) 先给定数据组数\(t\)和\(k\) 每组数据给出\(n\),求\(\sum ...

  2. 安徽师大附中%你赛day2T3 巧克力 解题报告

    巧克力 题目描述 小\(T\)有\(N\)块巧克力, 每块巧克力上都有一句话(由小写英文字母组成,不含标点) .现在每块巧克力都断成了若干截,更糟糕的是,有一些碎片丢失了 ,但是剩下的碎片之间的顺序是 ...

  3. 安徽师大附中%你赛day4T1 金字塔 解题报告

    金字塔 题目背景: \(Zdrcl\)带着妹子们来到了胡夫金字塔周边旅游, 发现这里正在进行一个有关金字塔的游戏 题目描述: 游戏规则如下: 1. 这里的金字塔是一个 \(N\) 阶的二维金字塔. 2 ...

  4. 安徽师大附中%你赛day9 T2 富 解题报告

    富 题目背景 出于某些原因, 苟先生在追杀富先生. 题目描述 富先生所在的地方是一个\(n\times m\)的网格,苟先生排出了他的狼狗大军,共有\(k\)条狗,第\(i\)条狗所在的位置为\((x ...

  5. 安徽师大附中%你赛day9 T3 贵 解题报告

    贵 问题描述 苟先生的狼狗大军没有追上富先生, 所以他把它们都解雇了, 决定去雇佣一些更好的狗, 不过狗可是很贵的.苟先生有 \(w\) 元钱, 有 \(n\) 条狗可以雇佣, 第 \(i\) 条狗有 ...

  6. 安徽师大附中%你赛day7 T2 乘积 解题报告

    乘积 题目背景 \(\mathrm{Smart}\) 最近在潜心研究数学, 他发现了一类很有趣的数字, 叫做无平方因子数. 也就是这一类数字不能够被任意一个质数的平方整除, 比如\(6\).\(7\) ...

  7. 安徽师大附中%你赛day6 T3 Hamsters [POI2010]CHO-Hamsters 解题报告

    [POI2010]CHO-Hamsters 题意: 给出n个互不包含的字符串,要求你求出一个最短的字符串S,使得这n个字符串在S中总共至少出现m次,问S最短是多少? 范围: \(1 \le n \le ...

  8. 安徽师大附中%你赛day5 T3 树上行走 解题报告

    树上行走 题目背景 \(\mathrm{Smart}\) 的脑洞非常大, 经常幻想出一些奇怪的东西. 题目描述 某一天,\(\mathrm{Smart}\) 幻想出了一棵没有边际的二叉树,脑补着在那棵 ...

  9. 模拟赛T2 交换 解题报告

    模拟赛T2 交换 解题报告 题目大意: 给定一个序列和若干个区间,每次从区间中选择两个数修改使字典序最小. \(n,m\) 同阶 \(10^6\) 2.1 算法 1 按照题意模拟,枚举交换位置并比较. ...

随机推荐

  1. 洛谷 P3952

    题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...

  2. python mac下安装虚拟环境

    Mac 下 Flask 框架 workon命令找不到 ---- 最终解决方案(详解具体实现操作过程中遇到的坑) Mac 下 Flask 的 全网最详细搭建 1.安装virtualenv和virtual ...

  3. MetInfo最新网站漏洞如何修复以及网站安全防护

    metinfo漏洞于2018年10月20号被爆出存在sql注入漏洞,可以直接拿到网站管理员的权限,网站漏洞影响范围较广,包括目前最新的metinfo版本都会受到该漏洞的攻击,该metinfo漏洞产生的 ...

  4. JAVA 基础编程练习题

    1 [程序 1 不死神兔] 题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?程序分析: 兔子的规 ...

  5. Spyder在windows下常用快捷键

    块注释/反块注释:Ctrl+4/5 行注释/反行注释:Ctrl+1 代码提示:Tab 复制一行:Ctrl+Alt+↓/↑ 删除一行:Ctrl+D 运行:F5 全屏:F11 撤销:Ctrl+Z 反撤销: ...

  6. python2.7练习小例子(二十七)

        27):题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同.      #!/usr/bin/python # -*- coding: UTF-8 -* ...

  7. RedHat安装Oracle后中文乱码

    radhat7.1 Oracle11gr2 安装Oracle时忘记设置字符集,导致安装后中文乱码,中文变成"???????????" 分析原因是Oracle服务器端和客户端的字符集 ...

  8. html5判断设备的动作

    相应的事件 deviceorientation事件提供设备的物理方向信息,表示为一系列本地坐标系的旋角. devicemotion事件提供设备的加速信息,表示为定义在设备上的坐标系中的卡尔迪坐标.其还 ...

  9. vue路由文档笔记

    引入router this.$router 和 router 使用起来完全一样.我们使用 this.$router 的原因是我们并不想在每个独立需要封装路由的组件中都导入路由 可以在任何组件内通过 t ...

  10. (原创)像极了爱情的详解排序二叉树,一秒get

    排序二叉树(建立.查找.删除) 二叉树我们已经非常熟悉了,但是除了寻常的储存数据.遍历结构,我们还能用二叉树做什么呢? 我们都知道不同的遍历方式会对相同的树中产生不同的序列结果,排序二叉树就是利用二叉 ...