• UVA 1419 Ugly Windows


    /*

      找出当前界面的 x,y 的左右坐标  枚举边界,并且判断界面内是否全为‘.’ 

    */

    #include<cstdio>

    #include<cstring>
    #include<algorithm>
    #define INF 1<<30
    using namespace std;
    char s[110][110];
    int aph[30],n,m,ln;




    int judge(int x)
    {
        int lx,ly,rx,ry;
        lx = ly = INF;
        rx = ry = -1;
        for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
        {
            if(s[i][j]==x+'A')
            {
                lx = min(lx,i);
                ly = min(ly,j);
                rx = max(rx,i);
                ry = max(ry,j);
            }
        }
        if(lx==INF||ly==INF||rx==-1||ry==-1||rx-lx<2||ry-ly<2)
        {
            return 0;
        }
        for(int i = lx; i <= rx; i++)
        if(s[i][ly]!=x+'A'||s[i][ry]!=x+'A')
        return 0;
        for(int i = ly; i <= ry; i++)
        if(s[lx][i]!=x+'A'||s[rx][i]!=x+'A')
        return 0;
        for(int i = lx+1; i < rx; i++)
        for(int j = ly+1; j < ry; j++)
        if(s[i][j]!='.')
        return 0;
        return 1;
    }
    int solve()
    {
        memset(aph,0,sizeof(aph));
        for(int i = 0; i < n; i++)
            for(int j = 0; j < m; j++)
                if(s[i][j]!='.')
                    aph[s[i][j]-'A']++;
        for(int i = 0; i < 26; i++)
        {
            if(!aph[i]) continue;
            if(judge(i))
            printf("%c",i+'A');
        }


    }


    int main()
    {
        while(scanf("%d%d",&n,&m)==2)
        {
            if(!n&&!m) break;
            for(int i = 0; i < n; i++)
                scanf("%s",&s[i]);
            solve();
            printf("\n");
        }
        return 0;
    }

  • 相关阅读:
    表字符集与存储过程字符集不一致导致的存储过程执行缓慢
    自动类型转换与强制类型转换
    集合中的对象与引用
    54. 螺旋矩阵
    [算法] 二分查找(C++)
    [MySQL优化] 需要创建索引和不要创建索引的情况
    [Spring Cloud] Nacos注册中心服务分组
    mysql导入大sql文件
    [Spring Security] 前后端分离项目中后端登录代码的简单示例
    URL中含特殊字符传参
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3014107.html
Copyright © 2020-2023  润新知