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

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

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

这题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. Coursera台大机器学习技法课程笔记04-Soft-Margin Support Vector Machine

    之前的SVM非常的hard,要求每个点都要被正确的划分,这就有可能overfit,为此引入了Soft SVM,即允许存在被错分的点,将犯的错放在目 标函数中进行优化,非常类似于正则化. 将Soft S ...

  2. .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(附插件安装教程2012-10-13更新) 完全破解+使用教程

    原文来自VAllen cnblogs 一.使用教程1.解压后,双击Reflector.exe,如果有选择默认版本的.Net Framework,根据需要选择即可.你选择的版本不同则出现的默认程序集也不 ...

  3. tcp粘包问题(封包)

    tcp粘包分析     http://blog.csdn.net/zhangxinrun/article/details/6721495 解决TCP网络传输“粘包”问题(经典)       http: ...

  4. C++文件输入输出

    #include <iostream> //有些系统里面可以省略此头文件 #include <fstream> #include <string> int main ...

  5. 【leetcode】Excel Sheet Column Number

    Excel Sheet Column Number Related to question Excel Sheet Column Title Given a column title as appea ...

  6. maven web项目build失败

    通过maven build发布web项目到tomcat时报如下异常: [INFO] ---------------------------------------------------------- ...

  7. 【USACO】namenum

    //开始傻×了 受题目形容的误导 一心想生成所有可能的 字符串组合 之后查找非常慢 //听了同学的 将5000个dict里的字符串 转换成char型数组(不能直接用int 会越界)直接用输入的数据对着 ...

  8. css3学习总结6--CSS3字体

    使用自己需要的字体 在新的 @font-face 规则中,您必须首先定义字体的名称(比如 myFirstFont),然后指向该字体文件. 如需为 HTML 元素使用字体,请通过 font-family ...

  9. 【读书笔记】读《JavaScript模式》 - 对象创建模式

    JavaScript是一种简洁明了的语言,其中并没有在其他语言中经常使用的一些特殊语法特征,比如命名空间(namespace).模块(module).包(package).私有属性(private p ...

  10. device unauthorized & ANDROID_ADB_SERVER_PORT 问题解决

    最近做安卓开发的时候,碰到了如下两个极品问题,刚开始晕头转向,仔细一研究终于解决了: FAQ1: C:\Users\xxx>adb shelladb: Env var ANDROID_ADB_S ...