atcoder#ABC221G. [ABC221G] Jumping sequence

[ABC221G] Jumping sequence

题目描述

無限に広がる 2 2 次元の座標平面を考えます。 高橋君は最初 (0,0) (0,0) に立っており、今から上下左右いずれかの方向を選んでジャンプすることを N N 回行います。 それぞれのジャンプで移動する距離は定まっており、具体的には i i 回目のジャンプでは距離 Di D_i を移動します。 N N 回のジャンプの後で、ちょうど位置 (A,B) (A,B) にいるようにすることは可能か判定し、 可能ならばそのような移動方法を 1 1 つ示してください。

ただし、現在の位置が (X,Y) (X,Y) のときに、それぞれの方向を選んで距離 D D のジャンプをしたときの着地地点はそれぞれ以下の通りです。

  • 上方向 : (X,Y)  (X,Y+D) (X,Y)\ \to\ (X,Y+D)
  • 下方向 : (X,Y)  (X,YD) (X,Y)\ \to\ (X,Y-D)
  • 左方向 : (X,Y)  (XD,Y) (X,Y)\ \to\ (X-D,Y)
  • 右方向 : (X,Y)  (X+D,Y) (X,Y)\ \to\ (X+D,Y)

输入格式

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

N N A A B B D1 D_1 D2 D_2 \ldots DN D_N

输出格式

条件をみたす移動方法が存在するならば Yes 、そうでないならば No1 1 行目に出力せよ。
Yes の場合は 2 2 行目に条件をみたす移動方法を、U , D , L , R からなる長さ N N の文字列 S S として出力せよ。
ただし、S S i i 文字目が

  • U のとき、 i i 回目のジャンプでは上方向に移動する
  • D のとき、 i i 回目のジャンプでは下方向に移動する
  • L のとき、 i i 回目のジャンプでは左方向に移動する
  • R のとき、 i i 回目のジャンプでは右方向に移動する

ことを指す。

题目大意

有一个无限大的平面直角坐标系,初始时你在 (0,0)(0,0) 处。给你一个长度为 nn 的序列 dd,你可以移动 nn 步,每一步可以选择:

  • 向上移动 did_i 距离,从 (x,y)(x,y)(x,y+di)(x,y+d_i)

  • 向下移动 did_i 距离,从 (x,y)(x,y)(x,ydi)(x,y-d_i)

  • 向右移动 did_i 距离,从 (x,y)(x,y)(x+di,y)(x+d_i,y)

  • 向左移动 did_i 距离,从 (x,y)(x,y)(xdi,y)(x-d_i,y)

你想在 nn 步结束后位于 (A,B)(A,B) 位置,问是否存在这样的方案,如果存在需输出任意一种方案。

3 2 -2
1 2 3
Yes
LDR
2 1 0
1 6
No
5 6 7
1 3 5 7 9
Yes
LRLUR

提示

制約

  • 1  N  2000 1\ \leq\ N\ \leq\ 2000
  • $ \lvert\ A\rvert,\ \lvert\ B\rvert\ \leq\ 3.6\times\ 10^6 $
  • 1  Di  1800 1\ \leq\ D_i\ \leq\ 1800
  • 入力は全て整数である。

Sample Explanation 1

1 1 回目のジャンプで左方向に、2 2 回目のジャンプで下方向に、3 3 回目のジャンプで右方向にジャンプすると、 (0,0)(1,0)(1,2)(2,2) (0,0)\to(-1,0)\to(-1,-2)\to(2,-2) と高橋君は動き、 最終的に (2,2) (2,-2) に到達しているためこれは条件をみたしています。

Sample Explanation 2

2 2 回のジャンプの後でちょうど (1,0) (1,0) にいるようにすることはできません。