H - 旅立ちの日に Editorial /

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 1800

問題文

あなたと kaage 君(以降「あなたたち」とする)は、N*N のグリッド上において、二人組になって自転車でオリエンテーリングをしている。グリッドの上から(0-indexed で) i 行目、左から(0-indexed で) j 列目のマスは (i,j) と表される。以下に示されるオリエンテーリングのルールのもと、オリエンテーリングの終了時の「スコア」をなるべく高くすることが、あなたたちの目的である。

  • あなたたちは、時刻 0 にマス (sx,sy) を出発する。
  • オリエンテーリングをするフィールドは、0\leq i,j<N を満たす任意の整数 i,j を用いて (i,j) で表されるマス全体である。オリエンテーリングのあいだ、あなたたちはこの外に出ることはできない。
  • フィールドのマスは、「陸」「海」の 2 種類に分かれている。「陸」マスにいるとき、あなたたちはそれぞれ別々に,1 分かけて上下左右に隣接する「陸」マスに移動するか,その場にとどまることができる。「海」マスに入ることはできない。
  • あなたたちが「スコア」を獲得する方法は、最初に与えられる M 個の「ミッション」を達成することである。ミッションには次の 3 種類があり、それぞれを達成すると、ミッション 1 つにつき S_1, S_2, S_3 点が獲得できる。

    • ミッション 1: あるマス (x, y) を、二人で同時に訪れる。
    • ミッション 2: あるマス (x, y) を、二人のうちどちらかが訪れる。
    • ミッション 3: あるマスの集合 (x_1, y_1),(x_2,y_2),\cdots,(x_k,y_k) に含まれるマス全部を、それぞれ二人のうちどちらかが訪れる。

入力

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

\(N\) \(T\) \(M\) \(sx\) \(sy\)
\(S_1\) \(S_2\) \(S_3\)
\(v_{0,0}\) \(v_{0,1}\) \(\cdots\) \(v_{0,N-1}\)
\(\vdots\)
\(v_{N-1,0}\) \(v_{N,1}\) \(\cdots\) \(v_{N-1,N-1}\)
Mission_1\\
Mission_2\\
\vdots\\
Mission_M

\(v_{i,j}\) は . であるか、- であるかのいずれかである。v_{i,j}. のときマス (i,j) が「陸」であることを、- のとき「海」であることを表す。

また、Mission_i はミッションを表し、それぞれ次のような形式である。

\(1\) \(x_i\) \(y_i\)

ミッション 1 を表し、訪れるべきマスは (x_i,y_i) である。

\(2\) \(x_i\) \(y_i\)

ミッション 2 を表し、訪れるべきマスは (x_i,y_i) である。

\(3\) \(k_i\)
\(x_{i,1}\) \(y_{i,1}\)
\(x_{i,2}\) \(y_{i,2}\)
\vdots
\(x_{i,k_i}\) \(y_{i,k_i}\)

ミッション 3 を表し、訪れるべきマスは (x_{i,1}, y_{i,1}),(x_{i,2},y_{i,2}),\cdots,(x_{i,k_i},y_{i,k_i}) である。

出力

あなたたちは、すべての 1\leq i\leq T について、オリエンテーリング開始 i 分後にそれぞれ二人がいるマス目の位置を、 i 行目に空白区切りで出力しなければならない。ただし、題意に反するような移動をした場合、この問題におけるあなたの得点は 0 点となり、WA になる。例として、i 分後におけるあなたのいるマスが (x_{i,A},y_{i,A}), kaage 君のいるマスが (x_{i,B},y_{i,B}) のとき、i 行目の出力は次のようになる。

\(x_{i,A}\) \(y_{i,A}\) \(x_{i,B}\) \(y_{i,B}\)

制約

  • 入力は v_{i,j} を除きすべて整数である。
  • N=201
  • sx=sy=100
  • T=10000
  • M=1000
  • S_1=5,S_2=4,S_3=7
  • \(v_{i,j}\) は . であるか、- であるかのいずれかである。
  • 1\leq k_i \leq 5
  • 0\leq x_i,x_{i,j},y_i,y_{i,j}\leq 200
  • (x_i,y_i),(x_{i,j},y_{i,j}),(sx,sy) は「陸」のマスである。
  • (sx,sy) から海のマスを通らずにすべての海以外のマスに到達できる。
  • 「陸」のマスはフィールド全体の半分以上を占める。

テストケースの生成方法

テストケースは全部で 20 個あり、これらは次に示すアルゴリズムで生成される。

  1. N*N のグリッドを考える。[0,N) から一様ランダムに x_i,y_i を、[0,70] から一様ランダムに h_i を選び、 (x,y) を中心として高さ h_i の山を構成してグリッドに足す。具体的には、(x,y) には max(0, h_i-|x_i-x|-|y_i-y|) が加算される。
  2. 1. の操作を合計 50 回繰り返す。
  3. 2. でできたグリッドに対し、あるマスの数を X としたとき、X<30 なら「海」、そうでなければ「陸」とする。
  4. 3. でできたグリッドが制約を満たさない場合、1. に戻る。制約を満たせば、これが出力するグリッドとなる。
  5. M 個のミッションを生成する。ミッション番号は [1,3] から一様ランダムに選ばれ、ミッション 3 の座標の個数は [1,5] から一様ランダムに選ばれる。座標は、「陸」のマス全体から一様ランダムに選ばれる。
また、開発用ファイルを配布しているので、そちらも参照すること。

採点

あなたのこの問題での得点は、20 個のテストケースに対する得点の和を 80 で割って小数点以下を切り捨てた値となる。


入力例1

4 5 2 2 2
7 3 6
....
....
...-
..--
3 2
1 2
2 1
2 1 1

出力例1

1 2 2 2
1 1 2 1
2 1 2 1
2 2 2 2
2 2 2 2

これは説明用の入力例であり、制約を満たしていないことに注意せよ。 この例では、あなたたちのスコアは 9 となる。

Writer : kaage