Codeforcesラウンド#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、不可能6例

不可能:全P

ステップ0:すべてのA

ステップ1:最初の行、最後の行、最初の列、フルAと最後の

ステップ2:フルAの中央線、完全な中央列A、四隅Aと

ステップ3:上記の場合、最初の行、最後の行、最初の列を満たさない場合、最後のものはAを有しています

ステップ4:上記の状況がフルを満たしていません

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
const  int型 MAXN = 65 ;
チャーG [MAXN] [MAXN]。
INT R、C、行[MAXN]、COL [MAXN]。// COL行の行列
ボイド解く()
{ 
    memsetの(行、0はsizeof 行)。
    memset(COL、0はsizeof COL)。
    int型の合計= 0 ;
    以下のためにINT iが= 1 ; I <= R I ++ 
    { 
        ためINT J = 1 ; J <= C; jは++
        { 
            場合(G [I] [J] == ' A ')COL [I] ++、行[J] ++、合計++ 
        } 
    } 
    もし(合計== 0)のprintf(" MORTAL \ n " );
    それ以外の 場合(合計== R * C)のprintf(" 0 \ N " );
    そう であれば(行[ 1 ] == R ||行[C] == R || COL [ 1 ] == C || COL [R] == C)のprintf(" 1 \ n " );
     
    { 
        int型フラグ= 0 以下のためのint型 I =2、I <R、I ++)場合(COL [I] == C)フラグ= 1 以下のためにINT iが= 2、I <C; I ++)場合(行[I] == R)フラグ= 1 もし(フラグ== 1 || G [ 1 ] [ 1 ] == ' A ' || G [R] [ 1 ] == ' A ' || G [ 1 ]、[C] == ' A ' || G [R] [C] == ' A ')のprintf(" 2 \ n " );
        他の 場合(行[1 ]> 0 ||行[C]> 0 || COL [ 1 ]> 0 || COL [R]> 0)のprintf(" 3 \ n " );
        のprintf(" 4 \ N " ); 
    } 
} 
int型のmain()
{ 
    int型T。
    scanf関数(" %のD "、&T)。
    一方、(T-- 
    { 
        scanf関数(" %D%D "、&​​R&C)。
        以下のためのint型 I = 1; I <= R; I ++)のscanf(" %sの"、G [I] + 1 )。
        解決する(); 
    } 
    戻り 0 
}

おすすめ

転載: www.cnblogs.com/myrtle/p/12077870.html