atcoder#ABC303C. [ABC303C] Dash

[ABC303C] Dash

配点 : 300300

問題文

二次元平面の点 (0,0)(0,0) に高橋君がいます。初め、高橋君の体力は HH です。また、二次元平面には MM 個の体力を回復するアイテムがあり、ii 個目のアイテムは点 (xi,yi)(x_i,y_i) に置いてあります。

高橋君は、これから NN 回の移動をします。ii 回目の移動は以下の方法で行われます。

  1. 今高橋君がいる点を (x,y)(x,y) とする。体力を 11 消費し、SSii 番目の文字 SiS_i に応じて以下の点に移動する。
    • SiS_iR のとき: (x+1,y)(x+1,y)
    • SiS_iL のとき: (x1,y)(x-1,y)
    • SiS_iU のとき: (x,y+1)(x,y+1)
    • SiS_iD のとき: (x,y1)(x,y-1)
  2. 高橋君の体力が負になった場合、高橋君は倒れてしまい、移動をやめる。そうでない場合、移動した点にアイテムがあり、かつ高橋君の体力が KK 未満ならば、移動した点に置かれたアイテムを消費し、高橋君の体力が KK になる。

高橋君が一度も倒れることなく NN 回の移動を行えるか判定してください。

制約

  • 1N,M,H,K2×1051\leq N,M,H,K\leq 2\times 10^5
  • SSR, L, U, D からなる長さ NN の文字列
  • xi,yi2×105|x_i|,|y_i| \leq 2\times 10^5
  • (xi,yi)(x_i,y_i) は互いに異なる
  • SS 以外の入力は全て整数

入力

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

NN MM HH KK

SS

x1x_1 y1y_1

\vdots

xMx_M yMy_M

出力

高橋君が一度も倒れることなく NN 回の移動を行える場合 Yes を、そうでない場合 No を出力せよ。

4 2 3 1
RUDL
-1 -1
1 0
Yes

初め高橋君の体力は 33 です。以下で移動を説明します。

  • 11 回目の移動: SiS_iR なので点 (1,0)(1,0) に移動する。高橋君の体力は 22 に減る。点 (1,0)(1,0) にはアイテムが置いてあるが、高橋君の体力は K=1K=1 以上なのでアイテムは消費されない。
  • 22 回目の移動: SiS_iU なので点 (1,1)(1,1) に移動する。高橋君の体力は 11 に減る。
  • 33 回目の移動: SiS_iD なので点 (1,0)(1,0) に移動する。高橋君の体力は 00 に減る。点 (1,0)(1,0) にはアイテムが置いてあり、体力は K=1K=1 未満なのでアイテムを消費し、体力が 11 になる。
  • 44 回目の移動: SiS_iL なので点 (0,0)(0,0) に移動する。高橋君の体力は 00 に減る。

以上より、高橋君は倒れずに 44 回の移動を行えるので、Yes を出力してください。体力は 00 になってもいいことに注意してください。

5 2 1 5
LDRLD
0 0
-1 -1
No

初め高橋君の体力は 11 です。以下で移動を説明します。

  • 11 回目の移動: SiS_iL なので点 (1,0)(-1,0) に移動する。高橋君の体力は 00 に減る。
  • 22 回目の移動: SiS_iD なので点 (1,1)(-1,-1) に移動する。高橋君の体力は 1-1 に減る。体力が 1-1 になってしまったので、高橋君は倒れてしまい、移動をやめる。

以上より、高橋君は倒れてしまうので、No を出力してください。

高橋君がはじめいる点 (0,0)(0,0) にはアイテムが置いてありますが、移動後にアイテムは消費されるので、11 回目の移動前にアイテムを消費しないことに注意してください。