BZOJ3736 : [Pa2013]Karty
显然只需要考虑与障碍点相邻的格子,通过旋转坐标系,可以只考虑障碍点在格子上方的情况。
悬线法求出每个点往上的最长延伸距离$x$,以及往左往右的延伸距离$y$。
那么当$r\geq x$时,$c$至多为$y$。
特别地,当某个点下方也是障碍点的时候,$r$不能超过$x$。
维护出每个$r$对应的最大的$c$即可。
时间复杂度$O(nm)$。
#include<cstdio>
#include<algorithm>
const int N=2505;
int n,m,i,j,k,l[N],r[N],h[N],f[N],ans,pos;char a[N][N],b[N][N];
inline void up(int&a,int b){a>b?(a=b):0;}
void work(int n,int m,int rev){
int i,j,k,x,y;
for(i=1;i<=m;i++)l[i]=1,r[i]=m,h[i]=0,a[n+1][j]='_';
for(i=1;i<=n;i++){
for(j=k=1;j<=m;j++)if(a[i][j]=='X'){
h[j]++;
if(k>l[j])l[j]=k;
}else h[j]=0,l[j]=1,r[j]=m,k=j+1;
for(j=k=m;j;j--)if(a[i][j]=='X'){
up(r[j],k);
x=h[j],y=r[j]-l[j]+1;
if(rev){
up(f[y+1],x-1);
if(a[i+1][j]=='_')up(f[1],x);
}else{
up(f[x],y);
if(a[i+1][j]=='_')f[x+1]=0;
}
}else k=j-1;
}
}
int main(){
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)scanf("%s",a[i]+1),f[i]=m;
for(i=0;i<4;i++){
work(n,m,i&1);
for(j=1;j<=n;j++)for(k=1;k<=m;k++)b[k][n-j+1]=a[j][k];
std::swap(n,m);
for(j=1;j<=n;j++)for(k=1;k<=m;k++)a[j][k]=b[j][k];
}
for(i=1;i<=n;i++){
if(i>1)up(f[i],f[i-1]);
if(i*f[i]>ans)ans=i*f[i],pos=i;
}
return printf("%d %d",pos,ans/pos),0;
}
BZOJ3736 : [Pa2013]Karty的更多相关文章
- BZOJ 3736: [Pa2013]Karty
Description 一个0/1矩阵,求能覆盖所有 \(1\) ,同时不覆盖所有 \(0\) 的矩阵,使这个面积最大. Sol DP/悬线法. 首先,所求的矩阵一定可以覆盖所有贴边的悬线. 用悬线法 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【BZOJ3733】[Pa2013]Iloczyn (搜索)
[BZOJ3733][Pa2013]Iloczyn (搜索) 题面 BZOJ 题解 把约数筛出来之后,直接爆搜,再随便剪枝就过了. 最近一句话题解倾向比较严重 #include<iostream ...
- 【BZOJ3837】[Pa2013]Filary 随机化神题
[BZOJ3837][Pa2013]Filary Description 给定n个正整数,从中挑出k个数,满足:存在某一个m(m>=2),使得这k个数模m的余数相等. 求出k的最大值,并求出此时 ...
- 【BZOJ3837】[PA2013]Filary
[BZOJ3837][PA2013]Filary 题面 darkbzoj 题解 考虑到模数为\(2\)时答案至少为\(\frac n2\),这是我们答案的下界. 那么我们对于任意的一个数,它们答案集合 ...
- 【BZOJ】3737: [Pa2013]Euler
题意: 求满足\(phi(a)=n\)的\(a\)的个数.(\(n \le 10^{10}\)) 分析 这种题一开始就感觉是搜索= = 题解 首先容易得到 \[\phi(n) = \prod_{i} ...
- BZOJ3733 : [Pa2013]Iloczyn
首先将$n$的约数从小到大排序,设$dfs(x,y,z)$表示当前可以选第$x$个到第$m$个约数,还要选$y$个,之前选的乘积为$z$是否可能. 爆搜的时候,如果从$x$开始最小的$y$个相乘也超过 ...
- BZOJ3839 : [Pa2013]Działka
对于每个询问,首先可以通过扫描线+线段树求出四个方向的第一个点,询问范围等价于框住这些点的最小矩形. 对于一个点$i$,预处理出: $A[i][j]$:$i$往左下角按凸壳走到$j$时,凸壳上相邻两点 ...
- BZOJ3838 : [Pa2013]Raper
将选取的$A$看成左括号,$B$看成右括号,那么答案是一个合法的括号序列. 那么只要重复取出$k$对价值最小的左右括号,保证每时每刻都是一个合法的括号序列即可. 将$($看成$1$,$)$看成$-1$ ...
随机推荐
- 微信小程序--代码构成---JSON 配置
在上一章中,我们通过开发者工具快速创建了一个 QuickStart 项目.你可以留意到这个项目里边生成了不同类型的文件: .json 后缀的 JSON 配置文件 .wxml 后缀的 WXML 模板文件 ...
- HDU 1573 X问题(中国剩余定理标准解法)
X问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 天财商龙SQL查询ID登陆POS情况
SELECT * FROM [tcgem_client0001].[dbo].[TCB_POS] ' --查询ID登陆POS情况
- cmake方式使用vlfeat
目录 environment statement compile vlfeat with cmake compile example project with cmake 1. make sure c ...
- 【C++ Primer | 15】继承的构造函数
继承的构造函数 子类为完成基类初始化,在C++11之前,需要在初始化列表调用基类的构造函数,从而完成构造函数的传递.如果基类拥有多个构造函数,那么子类也需要实现多个与基类构造函数对应的构造函数. cl ...
- 解决Windows Server 2008R2通过计划任务定时执行bat文件,显示成功但实际未执行
前段时间在Windows Server 2008安装了一套基于MySQL数据库的软件,处于数据安全的考虑,希望每天能够自动进行数据库备份.我在别人脚本的基础上自己写了一个数据库备份的bat脚本,双击该 ...
- Go之viper配置
这个模块功能强大,读取配置,命令行,监听配置改变. 堪称多面手,在k8s,docker中,都多有应用. 这套应用,主要包括cobra,pflag,viper三件套. 了解得差不多啦...:) pack ...
- UE4 UPROPERTY UFUNCTION
http://blog.csdn.net/sinat_27456831/article/details/52800514
- angular 2+ 变化检测系列一(基础概念)
什么是变化检测? 变化检测的基本功能就是获取应用程序的内部状态(state),并且是将这种状态对用户界面保持可见.状态可以是javascript中的任何的数据结构,比如对象,数组,(数字,布尔,字符串 ...
- Thinkphp框架网站 nginx环境 访问页面access denied
今日不熟一个tiinkphp框架网站的时候,由于服务器环境是centos6.5+nginx1.8,已经运行php商城项目很正常, 本以为一切比较简单,直接新建了项目文件夹,xftp上传了程序,并配置n ...