Ugly Windows UVA - 1419

问题

https://vjudge.net/problem/UVA-1419

分析

注意嵌套的情况:
5 5
AAAAA
ABBBA
AB.BA
ABBBA
AAAAA
0 0
B
参考:https://www.cnblogs.com/zjbztianya/archive/2013/04/08/3006581.html
最上层的框内只有点,没有字符

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long LL;
const int maxn=105;
char s[maxn][maxn];
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int m,n,flag[30];

inline bool inside(int x,int y){
    return x>=0 && x<n && y>=0 && y<m;
}

inline bool insideCh(int x,int y,int row,int col){
    for(int i=x+1;i<x+row;++i){
        for(int j=y+1;j<y+col;++j){
            if(s[i][j]!='.') return false;
        }
    }
    return true;
}

int main(void){
    while(scanf("%d%d",&n,&m)==2 && n){
        for(int i=0;i<n;++i) scanf("%s",s[i]);
        memset(flag,0,sizeof(flag));
        for(int i=0;i<n;++i){
            for(int j=0;j<m;++j){
                if(s[i][j]=='.') continue;
                int t=s[i][j]-'A',nx=i,ny=j,row=0,col=0;
                char c=s[i][j];
                if(flag[t]!=0) continue;
                for(int k=0;k<4;++k){
                    while(inside(nx+dx[k],ny+dy[k]) && s[nx+dx[k]][ny+dy[k]]==c){
                        nx+=dx[k];
                        ny+=dy[k];
                    }
                    if(k==1) {row=nx-i; col=ny-j;}
                }
                if(nx==i && ny==j && row>=2 && col>=2 && insideCh(i,j,row,col)) flag[t]=1;
                else flag[t]=-1;
            }
        }
        for(int i=0;i<26;++i) if(flag[i]==1) printf("%c",'A'+i);
        printf("\n");
    }
    return 0;
}
发布了180 篇原创文章 · 获赞 3 · 访问量 3468

猜你喜欢

转载自blog.csdn.net/zpf1998/article/details/104900357