D.給餌チキン(建設)

タイトル効果:N * Mの行列にニワトリkは、各チキンライス必要数は、薄い最小値によって占め

 

溶液:構造、米のCNT数の合計を設定する、すなわちすべての鶏又は職業CNT / K米、又はCNT / K + 1番目の米占め、CNT / K分割することができます。ヘビは、マトリックスの側に走りました。

注:鶏の現在の数がkの達した場合、ある鶏の現在の数を決定するために、その後、配置が完了すると、もはや成長することはできません鶏の数、およびグリッドの残りの部分でなければなりません。「」

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
CONST  INT N = 1E2 + 7 チャーARR [N] [N]。
チャーマーク[N] [N]。
文字列 S = " 1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 " ボイド解く(){
     int型N、M、K。
    scanf関数(" %D%D%D "、&​​N、&M、およびK);
    INTは iは= 1のscanf(++ I; <I = N)" %sの"、ARR [I] + 1 )。
    int型 CNT =0 ;
    以下のためにINT iが= 1 ; I <= N; I ++ のためのINT J = 1 ; J <= Mであり、j ++ 場合(ARR [I] [J] == ' R ')CNT ++ INT X = CNT / K。
    int型 = CNT%K。
    int型 POS = 1 ;
    int型の合計= 0 ;
    以下のためにINT iが= 1 ; I <= N; I ++ ){
         場合(I&1 ){
             ためINT J = 1 ; J <= Mであり、j ++ ){
                 場合(ARR [I] [J] == ' R ' ){ 
                    合計 ++ もし(POS <= K- A){
                         場合(合計<X)マーク[I] [J] = S [POS]。
                        { 
                            マーク[I] [J] = S [POS]。
                            もし(POS < K)
                                POS ++  = 0 ;
                        }
                    } 
                    {
                         場合(合計<X + 1)マーク[I] [J] = S [POS]。
                        { 
                            マーク[I] [J] = S [POS]。
                            もし(POS < K)
                                POS ++ 
                            合計 = 0 ; 
                        } 
                    } 
                } 
                そうでなければマーク[I] [J] = S [POS]。
            } 
        } 
        {
              INT J = M; J> = 1 ; j-- ){
                 場合(ARR [I] [J] == ' R ' ){ 
                    合計 ++ もし(POS <= K- A){
                         場合(合計<X)マーク[I] [J] = S [POS]。
                        { 
                            マーク[I] [J] = S [POS]。
                            もし(POS <K)POS ++ 
                            合計 = 0 ; 
                        } 
                    } 
                     {
                         場合(合計<X + 1)マーク[I] [J] = S [POS]。
                        { 
                            マーク[I] [J] = S [POS]。
                            もし(POS <K)POS ++ 
                            合計 = 0 ; 
                        } 
                    } 
                } 
                そうでなければマーク[I] [J] = S [POS]。
            } 
        } 
    } 
    のためにINT iが= 1 ; I <= N; I ++ ){
         ため INTJ = 1 ; J <= Mであり、j ++ ){ 
            のprintf(" %のC " 、マーク[I] [J])。
        } 
        のprintf(" \ n " ); 
    } 
} 
int型のmain(){
     int型、T。
    scanf関数(" %のD "、&T)。
    一方、(t-- ))(解きます。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/Accepting/p/12002591.html