1 条题解
-
0
这是一道中等偏简单的题。会觉得难大概率是你被题面吓到而不敢去写去想了。
经过读题我们发现,题干所说的可以删除序列中的某些操作,所以我们在思考上可以将不需要的指令全部删除,只保留对到达目的地有用的指令,在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
- 上传者