hdu 2487 Ugly Windows 模拟

#include <cstdio>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
char map[110][110];
int n,m;
#define inf 100000
struct node
{
    int x,y;
};
vector <node> nn;
int main()
{
    while(1)
    {
        int i,j,k;
        scanf("%d%d",&n,&m);
        if(n==0) break;
        getchar();
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
                scanf("%c",&map[i][j]);
            getchar();
        }
        for(k=0;k<26;k++)
        {
            nn.clear();
            int maxx=0,maxy=0,minx=inf,miny=inf;
            char x='A'+k;
            int flag=1;
            for(i=1;i<=n;i++)
                for(j=1;j<=m;j++)
                    if(map[i][j]==x)
                    {
                        node tmp;
                        tmp.x=i;
                        tmp.y=j;
                        nn.push_back(tmp);
                    }
            for(i=0;i<nn.size();i++)
            {
                if(nn[i].x>maxx) maxx=nn[i].x;
                if(nn[i].x<minx) minx=nn[i].x;
                if(nn[i].y>maxy) maxy=nn[i].y;
                if(nn[i].y<miny) miny=nn[i].y;
            }
            if(maxx<minx+2) continue;//printf("aaa");
            if(maxy<miny+2) continue;
            if(nn.size()!=(maxx-minx+maxy-miny)*2) flag=0;
            for(i=minx+1;i<maxx;i++)
                for(j=miny+1;j<maxy;j++)
                    if(isupper(map[i][j]))
                    {
                        flag=0;
                        break;
                    }
            if(flag) printf("%c",x);
        }
        printf("\n");
    }
    return 0;
}

 

posted @ 2014-07-12 14:14  贝尔摩德  阅读(168)  评论(0编辑  收藏  举报