タイトル効果: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 ; }