hdu 5024 枚举

来源:互联网 发布:易语言php网络验证 编辑:程序博客网 时间:2024/05/16 01:30

暴力枚举拐角即可..

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define MAX 107using namespace std;int mp[MAX][MAX];int n,ans;struct Change{    int x1 , y1 , x2 , y2;}c[MAX];void init ( ){    c[1].x1 = -1 , c[1].y1 =  0;    c[1].x2 =  0 , c[1].y2 =  1;    c[2].x1 = -1 , c[2].y1 =  1;    c[2].x2 =  1 , c[2].y2 =  1;    c[3].x1 =  0 , c[3].y1 =  1;    c[3].x2 =  1 , c[3].y2 =  0;    c[4].x1 =  1 , c[4].y1 =  1;    c[4].x2 =  1 , c[4].y2 = -1;    c[5].x1 =  1 , c[5].y1 =  0;    c[5].x2 =  0 , c[5].y2 = -1;    c[6].x1 =  1 , c[6].y1 = -1;    c[6].x2 = -1 , c[6].y2 = -1;    c[7].x1 =  0 , c[7].y1 = -1;    c[7].x2 = -1 , c[7].y2 =  0;    c[8].x1 = -1 , c[8].y1 = -1;    c[8].x2 = -1 , c[8].y2 =  1;  }void out ( ){    for ( int i = 1 ; i <= n ; i++ )    {        for ( int j = 1 ; j <= n ; j++ )            cout << mp[i][j] << " ";        cout << endl;    }}int main ( ){    init ( );    char ch;    while ( ~scanf ( "%d" , &n ) , n )    {        ans = 0;        memset ( mp , 0 , sizeof ( mp ) );        for ( int i = 1 ; i <= n ; i++ )        {            getchar();            for ( int j = 1 ; j <= n ; j++ )            {                ch = getchar();                if ( ch == '.' ) mp[i][j] = 1;            }        }       // out ( );        for ( int i = 1 ; i <= n ; i++ )            for ( int j = 1 ; j <= n ; j++ )                if ( mp[i][j] )                    for ( int k = 1 ; k <= 8 ; k++ )                    {                       // cout << "YES" << endl;                       /* cout << c[k].x1 << " "                             << c[k].y1 << " "                             << c[k].x2 << " "                             << c[k].y2 << endl;*/                        int cnt = 1;                        for ( int t = 1 ;;t++ )                        {                            /*cout << i+c[k].x1 *t << " "                                 << j+c[k].y1 *t << endl;*/                            if ( !mp[i+c[k].x1*t][j+c[k].y1*t] )                            {                                cnt += (t-1);                                break;                            }                        }                        for ( int t = 1 ;; t++ )                        {                          /*  cout << i + c[k].x2*t << " "                                 << j + c[k].y2*t << endl;*/                            if ( !mp[i+c[k].x2*t][j+c[k].y2*t] )                            {                                cnt += (t-1);                                break;                            }                        }                       // cout << "Okay" << endl;                        ans = max ( cnt , ans );                    }        printf ( "%d\n" , ans );    }   }


0 0
原创粉丝点击