D-Small Sunny teacher series--Sunny back garden

Source: Internet
Author: User

D-Small sunny teacher series--Sunny back gardenTime Limit:10000/5000ms (java/others) Memory Limit: 128000/64000kb (java/others) Submit Statusproblem Description

Small sunny day very beautiful back garden, after retiring after retirement in the inside of all kinds of flowers, raise grass, so now small sunny plan for his back garden fenced.

A small sunny backyard can be seen as a m*n rectangle, but some of them planted trees, these places can not install fences, now on a small sunny day to the back garden floor plan told you, please help design a largest rectangular fence.

Input

A single set of data, the first line consists of two integers m,n (1<=m,n<=500), followed by M lines, each line containing n characters, only by ' X ' and '. ' (ASCII codes are 120 and 46, respectively).

Where ' x ' means there are trees in this square, '. ' That means the fence can be built.

Output

If you can surround a closed fence, output an integer that indicates the maximum perimeter the fence can hit.

Otherwise output impossible

Sample Input
4 5......x.x ...... 2 2.xx.2 5.....xxxx.
Sample Output
14impossibleimpossible
Hint

Example one can circle the entire picture, the perimeter is (4+3) =14

Example two and three because of the existence of trees, a closed fence cannot be built.

This is entitled Single File read/write, sample includes three files

Test instructions

Enter M,n to indicate that there is a map of size m*n, and then enter that map, '. ' The open space, can build railings, ' x ' means trees, can not be built railings, asked you the map can be surrounded by the largest rectangular railings need how many railings, (the surrounding rectangle does not include trees, can only be composed of railings), in doing this problem is mainly to find the largest rectangle, do not rule how to do, then the mob search it, From each point as the starting point (the upper left point of the rectangle), but search also to search for a level.

First, find the maximum reachable point to the right of the starting point (x, y), set the maximum length to I, and then look down from (x,y+i), the point that can be reached, the maximum length is set to J, and then from (x+j,y+i) ~ (x+j,y) to determine whether it is '. ' Open space, if so, then from (x+j,y) ~ (x, y) to determine whether it is '. ' The open space, if any, indicates the ability to form a rectangle.

Record the maximum length of the rectangle I and J, the maximum number of railings Sum=max ((i+j) *2,sum);

finally in determining whether sum is 0, for 0 output impossible, otherwise output sum;

(PS: In each acquisition of I and J can be judged (i+m-1) * * OR (I+J) * * is greater than sum, if the sum is smaller, there is no need to continue to judge. )

#include <iostream>#include<stdio.h>#include<string.h>#defineMax (A, b) a>b?a:busing namespacestd;Charmap[1010][1010];intlen_x,len_y;/*maximum length and width of the map*/intSum/*maximum number of log rails*/intRet_y (intXintY/*Gets the maximum length (x, y) to the right*/{    intJ;  for(j=1; j+y<=len_y;j++)    {if(map[x][j+y]=='x') Break;} returnJ-1;}intRet_x (intXintY/*Gets the maximum length (x, y) down*/{    intJ;  for(j=1; j+x<=len_x;j++)    {if(map[x+j][y]=='x') Break;} returnJ-1;}voidWork (intXinty) {    inti,j,k,l,ii,jj,kk,ll,sign1,sign2; //printf ("%d%d:\n", x, y);     for(I=ret_y (x, y); i>=1; i--)/*Gets the (x, y) maximum right distance, and then decrements the length to find*/    {        if(map[x][y+i]=='.'&& (i+len_x-1)*2>sum)/*judged for clearing and pruning*/        {             for(J=ret_x (x,y+i); j>=1; j--)/*gets (x,y+i) the maximum downward distance, and then decrements the length of the lookup*/            {                if(map[x+j][y+i]=='.'&& (I+J) *2>=sum)/*judged for clearing and pruning*/                {                      for(k=1, sign1=0; k<=i;k++)/*determine if the bottom of the rectangle is open space*/                     {                         if(map[j+x][y+i-k]=='.') sign1++; Else  Break; }                     if(sign1==i)/*The bottom of the rectangle meets the criteria*/                     {                         for(k=1, sign2=0; k<j;k++)/*determine if the left side of the rectangle is empty*/                        {                            if(map[j+x-k][y]=='.') sign2++; Else  Break; }                        if(sign2==j-1)/*conforms to the constituent rectangle condition*/                        {                            //printf ("\t%d%d\n", i,j);Sum=max (sum, (i+j) *2);/*gets the maximum value, in fact, each time gets is the maximum value*/                           //return;                        }                     }                }            }        }        Else  Break; }    return ;}intMain () {inti,j;  while(SCANF ("%d%d", &len_x,&len_y)! =EOF) {memset (Map,'x',sizeof(MAP));/*Set Fence*/         for(i=1; i<=len_x;i++) {scanf ("%s", map[i]+1); Map[i][len_y+1]='x';/*Set Fence*/        }         for(i=1, sum=0; i<=len_x;i++)        {             for(j=1; j<=len_y;j++)            {                if(map[i][j]=='.') {work (I,J); /*Search every point*/                }            }        }        if(sum) printf ("%d\n", sum); Elseprintf"impossible\n"); }    return 0;}/*4 4..........x.. x.x*/
View Code

D-Small Sunny teacher series--Sunny back garden

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.