• Codeforces Round #607 (Div. 2) D Beingawesomeism


    题目链接:https://codeforces.com/contest/1281/problem/D

    题意:可以选择1*X和X*1的格子(X为任意值),向任意方向复制任意步,如下图,选择PPAP向上两步,将APPP和PAAA都变成了PPAP。

    问将全图变成A需要多少步。

    思路:显然只有0,1,2,3,4,impossible六种情况

    impossible:全P

    0步:全A

    1步:第一行、最后一行、第一列、最后一列有全A

    2步:中间行有全A、中间列有全A、四角有A

    3步:不满足上述情况下,第一行、最后一行、第一列、最后一列有A

    4步:上述情况全不满足

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=65;
    char g[maxn][maxn];
    int r,c,row[maxn],col[maxn];//col行 row列
    void solve()
    {
        memset(row,0,sizeof row);
        memset(col,0,sizeof col);
        int sum=0;
        for(int i=1;i<=r;i++)
        {
            for(int j=1;j<=c;j++)
            {
                if(g[i][j]=='A')col[i]++,row[j]++,sum++; 
            }
        }
        if(sum==0)printf("MORTAL
    ");
        else if(sum==r*c)printf("0
    ");
        else if(row[1]==r||row[c]==r||col[1]==c||col[r]==c)printf("1
    ");
        else 
        {
            int flag=0;
            for(int i=2;i<r;i++)if(col[i]==c)flag=1;
            for(int i=2;i<c;i++)if(row[i]==r)flag=1;
            if(flag==1||g[1][1]=='A'||g[r][1]=='A'||g[1][c]=='A'||g[r][c]=='A')printf("2
    ");
            else if(row[1]>0||row[c]>0||col[1]>0||col[r]>0)printf("3
    ");
            else printf("4
    ");
        }
    }
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&r,&c);
            for(int i=1;i<=r;i++)scanf("%s",g[i]+1);
            solve();
        }
        return 0;
    } 
  • 相关阅读:
    基于51单片机的独立按键和矩阵按键用法
    基于51单片机,蜂鸣器和led每秒1滴1亮的程序
    基于51单片机,3秒1亮的程序
    n个灯,隔m个依次点亮的具体情况方法
    单片机的定时器
    有关芯片的认识
    MATLAB变量
    二组玩法介绍
    tkinter的GUI界面
    magento 物流问题
  • 原文地址:https://www.cnblogs.com/myrtle/p/12077870.html
Copyright © 2020-2023  润新知