BZOJ3808 : Neerc2012 Labyrinth of the Minotaur
左上角和右下角不四连通等价于左下角和右上角八连通
枚举正方形的左上角,先二分出最大的边长,使得里面不含障碍物
然后再二分出最小的边长,使得两部分连通,用前缀和判断
这题WA了好久…一直对拍都没问题…于是去看原题,发现有SPJ…
然后改了个枚举姿势就过了…
#include<cstdio>
#define N 1510
int n,m,i,j,dx[8]={-1,-1,-1,0,0,1,1,1},dy[8]={-1,0,1,-1,1,-1,0,1},x[N*N],y[N*N],h,t,sum[3][N][N],ans,ansx,ansy,l,r,mid;
char s[N];
bool a[N][N],v[N][N];
inline int min(int&a,int b){if(a>b)a=b;}
inline int max(int&a,int b){if(a<b)a=b;}
inline int ask(int p,int x,int y,int k){
int x1=x-1,y1=y-1,x2=x+k-1,y2=y+k-1;
max(x1,0),max(y1,0),min(x2,n),min(y2,m);
return sum[p][x2][y2]-sum[p][x1][y2]-sum[p][x2][y1]+sum[p][x1][y1];
}
inline void add(int nx,int ny){
if(nx<1||nx>n||ny<1||ny>m||!a[nx][ny]||v[nx][ny])return;
v[nx][ny]=1,x[++t]=nx,y[t]=ny;
}
inline void bfs(int nx,int ny){for(h=1,t=0,add(nx,ny);h<=t;h++)for(j=0;j<8;j++)add(x[h]+dx[j],y[h]+dy[j]);}
int main(){
scanf("%d%d",&m,&n);gets(s);
for(i=1;i<=n;i++)for(gets(s+1),j=1;j<=m;j++)a[i][j]=s[j]=='#';
a[1][1]=a[n][m]=1;
for(i=1;i<=n;i++)for(j=1;j<=m;j++)sum[0][i][j]=sum[0][i-1][j]+sum[0][i][j-1]-sum[0][i-1][j-1]+a[i][j];
a[1][1]=a[n][m]=0;
for(i=1;i<=n;i++)bfs(i,1);
for(i=1;i<=m;i++)bfs(n,i);
for(i=1;i<=n;i++)for(j=1;j<=m;j++)sum[1][i][j]=sum[1][i-1][j]+sum[1][i][j-1]-sum[1][i-1][j-1]+v[i][j],v[i][j]=0;
for(i=1;i<=n;i++)bfs(i,m);
for(i=1;i<=m;i++)bfs(1,i);
for(i=1;i<=n;i++)for(j=1;j<=m;j++)sum[2][i][j]=sum[2][i-1][j]+sum[2][i][j-1]-sum[2][i-1][j-1]+v[i][j];
ans=N;
for(i=1;i<=n;i++)for(j=1;j<=m;j++){
l=1,r=n-i+1,min(r,m-j+1),min(r,ans-1),t=0;
while(l<=r){
mid=(l+r)>>1;
if(!ask(0,i,j,mid))l=(t=mid)+1;else r=mid-1;
}
l=1,r=t;
while(l<=r){
mid=(l+r)>>1;
if((ask(1,i-1,j-1,mid+2)||j==1||i+mid-1==n)&&(ask(2,i-1,j-1,mid+2)||i==1||j+mid-1==m))ans=mid,ansx=i,ansy=j,r=mid-1;else l=mid+1;
}
}
if(ans==N)puts("Impossible");else printf("%d %d %d",ans,ansy,ansx);
return 0;
}
BZOJ3808 : Neerc2012 Labyrinth of the Minotaur的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- NEERC2012
NEERC2012 A - Addictive Bubbles 题目描述:有一个\(n \times m\)的棋盘,还有不同颜色的棋子若干个,每次可以消去一个同种颜色的联通块,得到的分数为联通块中的棋 ...
- 2016.03.04,英语,《Vocabulary Builder》Unit 04
vor: 来自拉丁动词vorare,指to eat,-ivorous指吃某种食物的eater.carn肉,肉欲+vore吃→吃肉的:carnival狂欢节,谢肉节voracious a 狼吞虎咽的(v ...
- Codeforces Round #354 (Div. 2) D. Theseus and labyrinth bfs
D. Theseus and labyrinth 题目连接: http://www.codeforces.com/contest/676/problem/D Description Theseus h ...
- 【25.93%】【676D】Theseus and labyrinth
time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 2014百度之星资格赛 1004:Labyrinth(DP)
Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- ural 1145. Rope in the Labyrinth
1145. Rope in the Labyrinth Time limit: 0.5 secondMemory limit: 64 MB A labyrinth with rectangular f ...
- [POJ1383]Labyrinth
[POJ1383]Labyrinth 试题描述 The northern part of the Pyramid contains a very large and complicated labyr ...
- timus 1033 Labyrinth(BFS)
Labyrinth Time limit: 1.0 secondMemory limit: 64 MB Administration of the labyrinth has decided to s ...
随机推荐
- poj1753枚举
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33670 Accepted: 14713 Descr ...
- Linux CPU负载
昨天查看Nagios警报信息,发现其中一台服务器CPU负载过重,机器为CentOS系统.信息如下: 2011-2-15 (星期二) 17:50 WARNING - load average: 9.73 ...
- c# 继承,多态,new /overrid 区别, 引用父类的方法
好久没碰c#了,偶尔需要制作点小工具.为了一个灵活的架构设计,需要对继承/多态有比较深刻的理解. 不料忘得差不多了,好吧,再来回忆下.直接上代码了,如下: using System; using Sy ...
- 34.数组中2个只出现一次的数字[Find two numbers which appear once]
[题目] 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). [分析] 这是一道很新颖的关于位运算的面试题. ...
- mybatis的insert简单使用
- Oracle错误代码大全
Oracle错误代码大全——最新.最全的Oracle错误代码 对快速查找oracle数据库错误原因很有帮助 ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ...
- 安装chocolatey
C:\> @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.web ...
- Android 图标添加消息提醒
实现方法: 1. 在对应的布局放置TextView或者ImageView. 2. 用Canvas在原来Icon的bitmap基础上进行绘制 3. 利用开源项目ViewBadger进行添加,很方便,而且 ...
- 如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML
https://support.microsoft.com/zh-cn/kb/315968 如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML Email Prin ...
- Linux Top
http://www.it165.net/os/html/201402/7262.html