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

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

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

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

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

题意:

  输入m,n,表示有一个大小为m*n的地图,然后输入那地图,'.'表示空地,可以建栏杆,'x'表示树木,不能够在建栏杆,问你该地图所能够围成的最大矩形栏杆需要多少个栏杆,(所围成的矩形不包括树木,只能由栏杆组成),在做这一题主要是寻找最大的矩形,没有规律怎么办,那就暴搜吧,从每一个点作为起始点(矩形的左上端点),不过搜也要搜得有水平。

  首先,找出该起始点(x,y)的右边最大能够到达的点,最大长度设为i,然后再从(x,y+i)向下找,所能够到达的点,最大长度设为j,然后再从(x+j,y+i)~(x+j,y)去判断是否都为'.'空地,如果是的话,再从(x+j,y)~(x,y)去判断是否为'.'空地,如果是的话说明能够构成一个矩形。

  记录该矩形的最大长度i和j,栏杆的最大数目sum=max((i+j)*2,sum);

  最后在判断sum是否为0,为0输出 impossible,否则输出sum;

(PS:在每次获取i和j的时候可以判断(i+m-1)*2或者(i+j)*2是否大于sum,如果比sum还小的话,就没有必要再进行接下去的判断。)

#include <iostream>
#include <stdio.h>
#include <string.h>
#define Max(a,b)a>b?a:b
using namespace std;
char Map[1010][1010];
int Len_X,Len_Y;    /*地图的最大长度和最大宽度*/
int sum;        /*记录栏杆的最大数量*/
int Ret_Y(int x,int y)/*获取(x,y)的右边的最大长度*/
{int j;for(j=1;j+y<=Len_Y;j++){if(Map[x][j+y]=='x')break;}return j-1;
}int Ret_X(int x,int y)/*获取(x,y)的向下的最大长度*/
{int j;for(j=1;j+x<=Len_X;j++){if(Map[x+j][y]=='x')break;}return j-1;
}void Work(int x,int y)
{int i,j,k,l,ii,jj,kk,ll,sign1,sign2;// printf("%d %d:\n",x,y);for(i=Ret_Y(x,y);i>=1;i--)  /*获取(x,y)最大右边距离,然后长度递减查找*/{if(Map[x][y+i]=='.'&&(i+Len_X-1)*2>sum)/*判断为空地和剪枝*/{for(j=Ret_X(x,y+i);j>=1;j--)    /*获取(x,y+i)最大向下距离,然后长度递减查找*/{if(Map[x+j][y+i]=='.'&&(i+j)*2>=sum)/*判断为空地和剪枝*/{for(k=1,sign1=0;k<=i;k++)  /*判断矩形下边是否都为空地*/{if(Map[j+x][y+i-k]=='.')sign1++;else break;}if(sign1==i)/*矩形下边符合条件*/{for(k=1,sign2=0;k<j;k++)   /*判断矩形左边是否都为空地*/{if(Map[j+x-k][y]=='.')sign2++;else break;}if(sign2==j-1)/*符合构成矩形条件*/{//printf("\t%d %d\n",i,j);sum=Max(sum,(i+j)*2);/*获取最大值,其实每一次获取的都是最大值*/// return;
                        }}}}}else break;}return ;
}int main()
{int i,j;while(scanf("%d%d",&Len_X,&Len_Y)!=EOF){memset(Map,'x',sizeof(Map));/*设置围墙*/for(i=1;i<=Len_X;i++){scanf(" %s",Map[i]+1);Map[i][Len_Y+1]='x';/*设置围墙*/}for(i=1,sum=0;i<=Len_X;i++){for(j=1;j<=Len_Y;j++){if(Map[i][j]=='.'){Work(i,j);  /*搜索每一个点*/}}}if(sum)printf("%d\n",sum);else printf("impossible\n");}return 0;
}
/*
4 4
....
....
..x.
.x.x*/

View Code

转载于:https://www.cnblogs.com/Wurq/p/4455159.html

D - 小晴天老师系列——晴天的后花园相关推荐

  1. 小晴天老师系列——竖式乘法(暴力)

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

  2. 小晴天老师系列——可恶的墨水瓶(floodfill)

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

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

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

  4. ACDREAM 02G 小晴天老师系列——可恶的墨水瓶(暴力专场)

    ACDREAM 02G 小晴天老师系列--可恶的墨水瓶 Problem Description 小晴天老师正在备课,这时,可恶的墨水瓶突然自己打翻了!悲剧发生了!小晴天的备课稿都被墨水弄脏了.... ...

  5. 小布老师 LoadRunner系列培训视频

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! [V]  ...

  6. 跟小博老师一起学习MyBatis ——MyBatis搭建运行环境

    数据库 上回小傅老师与大伙聊了MyBatis是一款非常优秀的操作数据库的框架产品,所以大家先要安装好数据库,以便MyBatis能操作它.小傅老师用的是MYSQL数据库产品,当然你也可以使用MSSQL. ...

  7. 小博老师解析Java核心技术点 ——表单令牌(一)

    2019独角兽企业重金招聘Python工程师标准>>> [理论知识] 我们在网站开发的过程中,经常需要会使用到form表单,表单提供了丰富的客户端与服务器端交互的控件.但是在开发过程 ...

  8. 小甲鱼老师《带你学C带你飞》的后续课程补充

    小甲鱼老师的<带你学C带你飞>系列之前有预告,说有机器人电子制作的续集,但是这么久了还是没有等到,博主在这里根据自己的学习经历,推荐一些学习的资料,可以为小甲鱼老师填一下坑,读者可根据自己 ...

  9. 最全小布老师所有视频推荐--oracle视频资料库

    很不错的oracle视频资料,很全很多,而且讲得很不错 ,强烈推荐 ~~~ 最全小布老师所有视频推荐--oracle视频资料库 King作品:Oracle RAC系列培训 共七集 完 http://w ...

最新文章

  1. Android App的启动过程
  2. camera摄像原理之三:色温和自动白平衡【转】
  3. 二叉树中第二小的节点
  4. ASP.NET常用的26个优化性能方法
  5. 【solr5.5环境搭建】在tomcat8里面部署solr5.5
  6. canopy算法流程_Canopy聚类算法(经典,看图就明白)
  7. C++ strlen和size的等价性
  8. 网格成就Web 2.0存储时代的路易XIV?
  9. VS2008中OGRE1.7.4下配置Hydrax-v0.5.1插件
  10. javap命令生成native需要的签名
  11. 网络爬虫Heritrix源码分析(一) 包介绍
  12. (四) Session管理 --《springboot与shiro整合》
  13. 加入在线服务--在线多人共享屏幕
  14. 软考_2021年11月真题2__三点估算技术
  15. 【数据可视化】三款主流开源数据可视化工具对比:Superset、DataEase、MetaBase
  16. unity3d + lua + 斗地主 系列 (2) 创建扑克规则
  17. 证件类型与证件号码前端验证
  18. 2020-10-05 Python编程从入门到实践 第16章 下载数据 动手试一试 16-2 比较锡特卡和死亡谷的气温 习题练习
  19. 【山东事业单位】公共基础知识——重要国际经济组织
  20. seata xid是什么_微服务分布式事务解决方案-springboot整合分布式seata1.3.0

热门文章

  1. 企业价值观念形成的四个阶段
  2. IE9浏览器更像一个互联网舞台
  3. 《WCF技术内幕》翻译1:《WCF技术内幕》目录和作者简介
  4. SPI 的主模式和从模式
  5. vivado----fpga硬件调试 (六)----数据导出
  6. mysql 5.7临时表空间_深度解析MySQL 5.7之临时表空间
  7. 在VMware Workstation中安装Ubuntu设置网络连接
  8. 机器学习-Andrew Ng课程笔记
  9. [C]字符串排序之-冒泡法
  10. iOS bug 日志 -frame 和 bounds的区别