E - LRUD Moving 解説 by milkcoffee


Yes, No の判定については公式解説の通りです。 以下は Yes の場合のルートの構築について説明します。

\(A\) が偶数、\(B\) が奇数の場合を考えます。
グリッド全体を以下の \(3\) つの長方形に分割します。

  • 左上が \((1,1)\) 右下が \((A,B-1)\)
  • 左上が \((1,B)\) 右下が \((A,N)\)
  • 左上が \((A+1,1)\) 右下が \((N,N)\)

この \(3\) つの長方形を順に、全てのマスを訪れるようにします。

\(1\) つ目は DD...DRUU...UR\((B-1)/2\) 回繰り返せば良いです。
\(2\) つ目は RR...RDLL...LD\(A/2-1\) 回繰り返して \((A-1,B)\) に訪れた後、RDRURDRU...RDD とすれば良いです。
\(3\) つ目は LL...LDRR...RD を繰り返せば良いです。(最後の D は除外)

次に \(A\) が偶数、\(B\) が奇数の場合を考えます。
これはグリッド全体を対角線で反転し、上と同様に解けば良いです。
具体的には \(A,B\) を入れ替えて上のアルゴリズムを適用し、出力の文字列について U \(\leftrightarrow\) L , D \(\leftrightarrow\) R と置き換えれば良いです。

投稿日時:
最終更新: