Ugly Windows (hdu 2487 模拟题 easy

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2487

注意中间不允许出现别的字母

还有长宽必须都>=3

#include<bits/stdc++.h>
using namespace std;
char mp[110][110];
int main()
{
    int i,k,j,n,m;
    while(scanf("%d%d",&n,&m),n||m)
    {
        getchar();
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
                scanf("%c",&mp[i][j]);
            }
            getchar();
        }
        string si="";
        for(k=0;k<26;k++)
        {
            int gs=0;//判断高是否>=3
            int f=1,x=0;//x判断是否出现过
            int m1=0,m2=0,ff=0;//m1 上边长 m2下边长,判断是否相等
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=m;j++)
                {
                    if(mp[i][j]-'A'==k)
                    {
                         gs++;
                         int sum=1;
                         x=1;
                         for(int o=j+1;o<=m;o++)
                         {
                             if(mp[i][o]-'A'==k)sum++;
                             if(sum<2&&(mp[i][o]-'A')!=k&&mp[i][o]!='.')f=0;//判断中间是否出现过别的字母,不允许出现
                         }
                         if(sum>2&&ff==0)m1=sum,ff=1;
                         else if(sum>2&&ff==1)m2=sum;//判断上下边长
                         if(m1!=m2&&m1<2&&m2<2)f=0;
                         break;
                    }
                }
            }
            if(f==1&&x==1&&gs>=3)si+=('A'+k);
        }
        cout<<si<<endl;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/ydw--/p/11354953.html