左上角和右下角不四连通等价于左下角和右上角八连通

枚举正方形的左上角,先二分出最大的边长,使得里面不含障碍物

然后再二分出最小的边长,使得两部分连通,用前缀和判断

这题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的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. NEERC2012

    NEERC2012 A - Addictive Bubbles 题目描述:有一个\(n \times m\)的棋盘,还有不同颜色的棋子若干个,每次可以消去一个同种颜色的联通块,得到的分数为联通块中的棋 ...

  3. 2016.03.04,英语,《Vocabulary Builder》Unit 04

    vor: 来自拉丁动词vorare,指to eat,-ivorous指吃某种食物的eater.carn肉,肉欲+vore吃→吃肉的:carnival狂欢节,谢肉节voracious a 狼吞虎咽的(v ...

  4. 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 ...

  5. 【25.93%】【676D】Theseus and labyrinth

    time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  6. 2014百度之星资格赛 1004:Labyrinth(DP)

    Labyrinth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  7. ural 1145. Rope in the Labyrinth

    1145. Rope in the Labyrinth Time limit: 0.5 secondMemory limit: 64 MB A labyrinth with rectangular f ...

  8. [POJ1383]Labyrinth

    [POJ1383]Labyrinth 试题描述 The northern part of the Pyramid contains a very large and complicated labyr ...

  9. timus 1033 Labyrinth(BFS)

    Labyrinth Time limit: 1.0 secondMemory limit: 64 MB Administration of the labyrinth has decided to s ...

随机推荐

  1. [BZOJ1101][POI2007]Zap

    [BZOJ1101][POI2007]Zap 试题描述 FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd ...

  2. Linux 命令行生成随机密码的十种方法

    Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它.例如,你可以通过数十种方法来生成随机密码.本文将介绍生成随机密码的十种方法.这些方法均收集于Command-Line ...

  3. 找不到提交和更新按钮,subversion不见了,无法更新和上传代码

    1.查看settings/plugins/下有没有subversion 插件,如果有,确保勾上. 2.VCS->Enable Version Control Integration...

  4. 用Python操纵MySQL

    本例用Python操纵MySQL,从指定文件读取数据,并对数据进行处理,处理之后批量插入MySQL. 贴上代码: # -*- coding: gbk -*- import re import MySQ ...

  5. 【Hadoop】史上最全 Hadoop 生态 全景图

  6. MVC NonAction属性

    3.1. NonAction属性 若将NonAction属性应用在Controller中的Action方法上,即使该Action方法是公共方法,也会告知ActionInvoker不要选取这个Actio ...

  7. 【转】Velocity 语法

    一.基本语法 1."#"用来标识Velocity的脚本语句,包括#set.#if .#else.#end.#foreach.#end.#iinclude.#parse.#macro ...

  8. webdriver+python 对三大浏览器的支持

    1.在IE浏览器上运行测试脚本,首先需要下载IEDriverServer.exe(http://code.google.com/p/selenium/downloads/list,根据浏览器的版本下载 ...

  9. codeforces B. Jeff and Periods 解题报告

    题目链接:http://codeforces.com/problemset/problem/352/B 题目意思:给出一个长度为n的序列   a1, a2, ..., an(序号i,1 <= i ...

  10. JavaScript、Jquery选择题

    尚学堂Java EE软件工程师认证考试 试题库-选择题     一.    选择题(包括单选和双选) 1.B 在JavaScript中,以下变量命名非法的是(   )(选择一项) A. numb_1 ...