cf1281 D. Beingawesomeism

链接

点击跳转

题解

如果全是 A A ,答案为 0 0 ,否则:

如果某条边线都是 A A ,答案为 1 1 ,否则:

如果某个角落是 A A 或者某行全是 A A 或者某列全是 A A ,答案为 2 2 ,否则:

只要边线上有 A A ,答案是 3 3 ,否则:

只要有 A A ,答案是 4 4 ,否则无解

代码

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define iinf 0x3f3f3f3f
#define linf (1ll<<60)
#define eps 1e-8
#define maxn 1000010
#define maxe 1000010
#define cl(x) memset(x,0,sizeof(x))
#define rep(_,__) for(_=1;_<=(__);_++)
#define em(x) emplace(x)
#define emb(x) emplace_back(x)
#define emf(x) emplace_front(x)
#define fi first
#define se second
#define de(x) cerr<<#x<<" = "<<x<<endl
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
ll read(ll x=0)
{
    ll c, f(1);
    for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;
    for(;isdigit(c);c=getchar())x=x*10+c-0x30;
    return f*x;
}
char s[100][100];
ll r, c;
pair<ll,ll> q(ll r1, ll c1, ll r2, ll c2)
{
    ll i, j, a(0), p(0);
    for(i=r1;i<=r2;i++)for(j=c1;j<=c2;j++)
        if(s[i][j]=='A')a++;
        else p++;
    return pll(a,p);
}
int main()
{
    ll T=read(), i, j;
    while(T--)
    {
        ll r=read(), c=read();
        rep(i,r)scanf("%s",s[i]+1);
        if(q(1,1,r,c) == pll(r*c,0))    //全A
        {
            printf("0\n");
        }
        else if( q(1,1,1,c)==pll(c,0) or q(r,1,r,c)==pll(c,0) or q(1,1,r,1)==pll(r,0) or q(1,c,r,c)==pll(r,0))
                printf("1\n");
        else
        {
            bool ok = false;
            if(s[1][1]=='A' or s[1][c]=='A' or s[r][1]=='A' or s[r][c]=='A')ok=true;    //四个角落
            for(i=1;i<=r;i++)if(q(i,1,i,c)==pll(c,0))ok=true;
            for(j=1;j<=c;j++)if(q(1,j,r,j)==pll(r,0))ok=true;   //某条中间的线全A
            if(ok)
            {
                printf("2\n");
            }
            else
            {
                //边线上有A
                if( q(1,1,1,c)!=pll(0,c) or q(r,1,r,c)!=pll(0,c) or q(1,1,r,1)!=pll(0,r) or q(1,c,r,c)!=pll(0,r))
                    printf("3\n");
                else
                {
                    if( q(1,1,r,c) != pll(0,r*c) )
                        printf("4\n");
                    else
                    {
                        printf("MORTAL\n");
                    }
                }
            }
        }
    }
    return 0;
}
发布了863 篇原创文章 · 获赞 72 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/FSAHFGSADHSAKNDAS/article/details/103789209
今日推荐