算法
(贪心) $O(tn)$
先统计一下字符串 $s$ 中四个方向指令的数量,分别记为 L
, R
, D
, U
这个问题可以分成两个独立的1维问题,分别是:
- $px$ 是否落在 $[-L, R]$ 之内
- $py$ 是否落在 $[-D, U]$ 之内
如果上面两个条件都成立的话,则可以达到目标位置。
C++ 代码
#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::string;
int main() {
int t;
cin >> t;
while (t--) {
int px, py;
cin >> px >> py;
string s;
cin >> s;
int l = 0, r = 0, d = 0, u = 0;
for (auto& c : s) {
if (c == 'L') ++l;
else if (c == 'R') ++r;
else if (c == 'D') ++d;
else ++u;
}
if (px > 0 and r >= px) px = 0;
if (px < 0 and l >= -px) px = 0;
if (py > 0 and u >= py) py = 0;
if (py < 0 and d >= -py) py = 0;
cout << (!px and !py ? "YES\n" : "NO\n");
}
return 0;
}