小晴天老师系列——晴天的后花园

Time Limit: 10000/5000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)
 

Problem Description

小晴天非常漂亮的后花园,打算以后退休之后在里面种种花,养养草,所以现在小晴天打算为他的后花园围上栅栏。

小晴天的后花园可以看成是一个m*n的矩形,但是其中有一些地方种了树,这些地方都不能安装栅栏,现在小晴天把后花园的平面图告诉你了,请你帮忙设计一个最大的矩形栅栏。

Input

单组数据,第一行包括两个整数m,n(1<=m,n<=500),接下来m行,每行包括n个字符,仅由'x'和'.'组成(ASCII码分别是120与46).

其中‘x’表示这个方格有树木,‘.’表示这个点可以建造栅栏

Output

若可以围成一个闭合栅栏,输出一个整数,表示栅栏能打到的最大周长

否则输出impossible

Sample Input

4 5
.....
.x.x.
.....
.....
2 2
.x
x.
2 5
.....
xxxx.

Sample Output

14
impossible
impossible

Hint

样例一可以绕着整个图一圈,周长为2*(4+3)=14

样例二与三因为有树木的存在,不能建造一个闭合的栅栏。

本题为单文件读写,样例包括三个文件

思路:暴力的话就是选两个点,穷举任意的矩形。但是这样可能会超时,加些必要的剪枝可以过。

  穷举第一个点(x1,y1),第二个点(x2,y2)。第一个点任意摆放,第2个点必须从x1+1,y1+1开始穷举,这样可以减少一些不必要的计算。首先要得到从第一个点开始,y1列可以到达哪列,即中间不能有任何树木,同理,行也是这样。然后第二个点的y2先穷举,遇到一个树就break,这样又减少了计算。这样子就保证了3个边都是无障碍的,另外一个边就得靠计算了,可以先预处理。

 /*
* this code is made by xcw0754
* Problem: 1705
* Verdict: Accepted
* Submission Date: 2015-07-15 23:53:13
* Time: 28MS
* Memory: 4664KB
*/
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N=;
int m, n;
int g[N][N];
int row[N][N];
int col[N][N];
LL ans; void secon(int r,int c)
{
int up_m=r;
int up_n=c;
while( up_m<=m && !g[up_m][c]) up_m++;
while( up_n<=n && !g[r][up_n]) up_n++; for(int i=r+; i<up_m; i++)
{
for(int j=c+; j<up_n; j++)
{
if(g[i][j]) break; if( !(col[j][i]-col[j][r]) )
ans=max(ans, (LL)*(i-r)+*(j-c) );
}
} } int cal() //穷举:从小开始,遇到点就结束
{ for(int i=; i<m; i++)
{
for(int j=; j<n; j++)
{
if(g[i][j]) continue;
secon(i,j);
}
}
return ans;
} int main()
{
//freopen("e://input.txt","r",stdin);
char c;
scanf("%d%d",&m,&n);
for(int i=; i<=m; i++)
{
getchar();
for(int j=; j<=n; j++)
{
if(getchar()=='x') g[i][j]=;
row[i][j]=row[i][j-]+g[i][j]; //行先计算了
}
} for(int i=; i<=n; i++) //计算列的
for(int j=; j<=m; j++)
col[i][j]=col[i][j-]+g[j][i]; for(int i=; i<n+; i++) g[m+][i]=;
for(int i=; i<m+; i++) g[i][n+]=; if(!cal()) puts("impossible");
else printf("%lld\n",ans);
}

AC代码

acdream 小晴天老师系列——晴天的后花园 (暴力+剪枝)的更多相关文章

  1. D - 小晴天老师系列——晴天的后花园

    D - 小晴天老师系列——晴天的后花园 Time Limit: 10000/5000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Oth ...

  2. acdream 小晴天老师系列——苹果大丰收(DP)

    小晴天老师系列——苹果大丰收 Problem Description 小晴天的后花园有好多好多的苹果树,某天,苹果大丰收~小晴天总共摘了M个苹果,我们假设苹果之间是不可分辨的. 为了保存苹果,小晴天买 ...

  3. acdream 小晴天老师系列——竖式乘法(简单穷举)

    小晴天老师系列——竖式乘法 Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)   ...

  4. acdream 小晴天老师系列——我有一个数列! (ST算法)

    小晴天老师系列——我有一个数列! Time Limit: 20000/10000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)S ...

  5. F - 小晴天老师系列——苹果大丰收

    F - 小晴天老师系列——苹果大丰收 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Other ...

  6. C -小晴天老师系列——竖式乘法

    C - 小晴天老师系列——竖式乘法 Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others ...

  7. G - 小晴天老师系列——可恶的墨水瓶

    G - 小晴天老师系列——可恶的墨水瓶 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Othe ...

  8. E - 小晴天老师系列——我有一个数列!

    E - 小晴天老师系列——我有一个数列! Time Limit: 20000/10000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/O ...

  9. [ACdream]小晴天老师系列——竖式乘

    题目链接:http://acdream.info/contest?cid=1269#problem-C Problem Description 小晴天是ACdream团队中最牛的老师之一,他最擅长数学 ...

随机推荐

  1. C++ 容器及选用总结

    目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五 ...

  2. Unity3d + UGUI 的多分辨率适配

    原文地址:http://blog.csdn.net/dingkun520wy/article/details/49471789 1.Canvas的属性配置 2.Canvas Scaler的属性配置 3 ...

  3. 【BZOJ2152】聪聪可可

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...

  4. eclipse html插件的下载和安装

    需求:需要在eclipse里面编辑html和jsp,语法高亮和语法提示,自动补全等. 1.下载GEF(依赖包): http://www.eclipse.org/downloads/download.p ...

  5. xcode设置 - App内存暴增

    当你发现你的项目中什么没有写,只是启动App内存就飙升到50M甚至60M以上,那么请你接着往下看吧,本文对你绝对非常有用! 1. Enable zombie object: 为了方便我们调试程序,我们 ...

  6. poj 2728 Desert King (最小比例生成树)

    http://poj.org/problem?id=2728 Desert King Time Limit: 3000MS   Memory Limit: 65536K Total Submissio ...

  7. dtGrid插件集成到Angular环境实现表格化数据展现

    00没有抱怨的世界 周末效率好低,两天没更了,看看这看看那,装了个win10发现触摸板驱动不适配,然后找了好久都不行,23333. AngularJS用的时间很短,高级的用法有点吃不消了,$diges ...

  8. Maven 执行Javadoc时控制台输出乱码问题

    1.0  Maven 执行Javadoc时控制台输出乱码问题 问题描述 最近项目中使用maven-javadoc-plugin生成javadoc时,myEclipse控制台乱码. 插件配置 问题分析 ...

  9. 【斜率DP】BZOJ 1010:玩具装箱

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 7537  Solved: 2888[Submit][St ...

  10. The 7th Zhejiang Provincial Collegiate Programming Contest->Problem G:G - Wu Xing

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3328 至今未看懂题意,未编译直接提交,然后 A了.莫名AC总感觉怪怪的. ...