题解 CF1481A 【Space Navigation】

· · 题解

题意

你现在在 (0,0),要去 (x,y)

给定一个只含有 L,R,U,D 的字符串。问你是否可以删除其中的一些操作(几个字母)使得你最后能正好到达 (x,y)

思路

读入字符串后先统计,如果不删除就能正好到达的话就直接输出 YES

否则判断四个方向的字母数量够不够减少到正好到达 (x,y)。不够就不能到达,反之可以。

代码

#include <bits/stdc++.h>
using namespace std;
int T;
int x, y;
string s;
int main() {
    cin >> T;
    while(T--) {
        scanf("%d%d", &x, &y);
        cin >> s;
        int u = 0, d = 0, l = 0, r = 0;
        for(int i = 0; i < s.length(); ++i) { // 统计 
            if (s[i] == 'U') u++;
            if (s[i] == 'D') d++;
            if (s[i] == 'L') l++;
            if (s[i] == 'R') r++;
        }
        int xx = 0, yy = 0;
        xx += r; xx -= l;
        yy += u; yy -= d; // 求出现在到达的位置 
        if (xx == x && yy == y) puts("YES");
        else {
            bool flag = true;
            if (xx > x) { // 判断是否够减,注意加上 abs 
                if (r < abs(xx - x)) flag = false;
            }
            if (xx < x) {
                if (l < abs(xx - x)) flag = false;
            }
            if (yy > y) {
                if (u < abs(yy - y)) flag = false;
            }
            if (yy < y) {
                if (d < abs(yy - y)) flag = false;
            }
            if (flag) puts("YES");
            else puts("NO");
        }
    }
    return 0;
}