Codeforces Round #607 (Div. 2) D——Beingawesomeism 构造

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e2+1;
char a[maxn][maxn];
int r[maxn],c[maxn];//r是行,c是列
int T;
void solve()
{
    int n,m,flag,flag1,flag2,left,right,up,down;
    flag2=0;
    flag1=0;
    left=0;
    right=0;
    up=0;
    down=0;
    flag=0;
    memset(r,0,sizeof(r));
    memset(c,0,sizeof(c));
    cin>>n>>m;
    for(int i=1; i<=n; ++i)
    {
        cin>>a[i]+1;
        for(int j=1; j<=m; ++j)
        {
            r[i]+=(a[i][j]=='A');
            c[j]+=(a[i][j]=='A');
            if(i==1)
                up+=(a[i][j]=='A');
            if(i==n)
                down+=(a[i][j]=='A');
            if(j==1)
                left+=(a[i][j]=='A');
            if(j==m)
                right+=(a[i][j]=='A');
            if(a[i][j]=='A')
                flag=1;
            if(a[i][j]=='P')
                flag1=1;
        }
    }
    if(!flag1)
    {
        cout<<"0"<<endl;
        return ;
    }
    if(!flag)
    {
        cout<<"MORTAL"<<endl;
        return ;
    }
    if(left==n||right==n||up==m||down==m)
    {
        cout<<"1"<<endl;
        return  ;
    }
    for(int i=1; i<=n; ++i)
    {
        if(r[i]==m)
        {
            flag2=1;
            break;
        }
    }
    for(int i=1; i<=m; ++i)
    {
        if(c[i]==n)
        {
            flag2=1;
            break;
        }
    }
    if(a[1][1]=='A'||a[1][m]=='A'||a[n][1]=='A'||a[n][m]=='A'||flag2)
    {
        cout<<"2"<<endl;
        return ;
    }
    if(left>0||right>0||up>0||down>0)
    {
        cout<<"3"<<endl;
        return  ;
    }
    cout<<"4"<<endl;
}
int main()
{
    cin>>T;
    while(T--)
        solve();
}

 

posted @ 2020-07-02 10:01  晴屿  阅读(126)  评论(0)    收藏  举报