#chokudai004a. [chokudai004_a]Just Write Numbers!

[chokudai004_a]Just Write Numbers!

問題文

高橋君は、 33 つの整数 B1,B2,B3B_1, B_2, B_3 が好きです。

そこで、高橋君は、 N×NN×N のマス目に数を書き込み、縦または横に連続した数の区間で、和が好きな数になるものを、たくさん作ろうと思いました。

例えば、以下のようにマス目に数を書き込み、好きな整数が 1313 だった時、赤で塗ったような区間が、条件を満たす区間となります。

例

和が B1,B2,B3B_1, B_2, B_3 となる縦または横の区間の数を A1,A2,A3A_1, A_2, A_3 とすると、A1×B1+A2×B2+A3×B3A_1×B_1+A_2×B_2+A_3×B_3 が、得られる点数となります。

ただし、高橋君は、盤面に自由に数を書き込むことが出来ません。各マスには、書き込める数の最小値と最大値が決められています。

上から ii 番目、左から jj 番目のマスには、li,jl_{i,j} から ri,jr_{i,j} の間の数しか書き込むことが出来ません。

高橋君が獲得できる点数が、出来るだけ多くなるような、数の書き込み方を求めてください。

この問題は、最適な解を発見することを想定されていない、所謂マラソン系問題です。条件を満たす解であれば、点数を獲得することが出来ます。

制約

  • N=30N = 30
  • 1010B1B_11919
  • 2020B2B_22929
  • 3030B3B_33939
  • 11li,jl_{i,j}ri,jr_{i,j}99

入力

入力は以下の形式で与えられる。

NN B1B_1 B2B_2 B3B_3 l1,1l_{1,1} l1,2l_{1,2} ... l1,Nl_{1,N} l2,1l_{2,1} l2,2l_{2,2} ... l2,Nl_{2,N} : lN,1l_{N,1} lN,2l_{N,2} ... lN,Nl_{N,N} r1,1r_{1,1} r1,2r_{1,2} ... r1,Nr_{1,N} r2,1r_{2,1} r2,2r_{2,2} ... r2,Nr_{2,N} : rN,1r_{N,1} rN,2r_{N,2} ... rN,Nr_{N,N}

出力

ii 行目、 jj 列目のマスに書き込む数を Ai,jA_{i,j} として、以下のフォーマットで出力せよ。

A1,1A_{1,1} A1,2A_{1,2} ... A1,NA_{1,N} A2,1A_{2,1} A2,2A_{2,2} ... A2,NA_{2,N} : AN,1A_{N,1} AN,2A_{N,2} ... AN,NA_{N,N}

出力された全ての Ai,jA_{i,j} について、li,jAi,jri,jl_{i,j} ≦ A_{i,j} ≦ r_{i,j} が満たされていれば、正解となり、問題文に書かれた点数が得られる。

不正解となる出力が行われた場合は、ほぼ全てのテストケースが 00 点として扱われる。

入力生成方法

  • BB は、制約の範囲内で一様なランダムで生成される。
  • li,j,ri,jl_{i,j}, r_{i,j} は、11 から 99 の間で一様なランダムで独立に生成される。この際、li,jl_{i,j}ri,jr_{i,j} より大きかった場合、それらの値をswapする。

入出力例その他

入出力(Example01~03)、入出力検証プログラム(C++)のダウンロードはこちらから。