1 条题解

  • 0
    @ 2024-10-21 11:44:24

    这是一道中等偏简单的题。会觉得难大概率是你被题面吓到而不敢去写去想了。

    经过读题我们发现,题干所说的可以删除序列中的某些操作,所以我们在思考上可以将不需要的指令全部删除,只保留对到达目的地有用的指令,在x和y正半轴负半轴能够到达的最远距离的范围内,目标点如果存在则为YES,否则为NO。 接下来细节在代码中讲述。

    #include<stdio.h>
    #include<string.h>
    const int N = 3e5 + 5;
    char s[N];
    int main() {
        int t;
        scanf("%d", &t);
        while (t--) {
            int x, y;
            scanf("%d%d%s", &x, &y, s);
            int x1 = 0, x2 = 0, y1 = 0, y2 = 0;//飞船移动的四个方向,记录其能够在该方向到达的最远距离
            for (int i = 0; i < strlen(s); i++) {
                if (s[i] == 'U') y1++;
                if (s[i] == 'D') y2--;
                if (s[i] == 'R') x1++;
                if (s[i] == 'L') x2--;
            }
            int flag = 0;//记录判断飞船最后能够到达
            if (y <= y1 && y >= y2) flag++;//对于y的方向,目标值在飞船能到达的范围内则记录一次
            if (x <= x1 && x >= x2) flag++;//x方向上同理
            if (flag == 2) {//当x和y均能够满足即为能够到达目标地点
                printf("YES\n");
            } else {
                printf("NO\n");
            }
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1025
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    103
    已通过
    23
    上传者