CF1073C Vasya and Robot
题目描述
Vasya 有一个机器人,初始位于无限大的笛卡尔平面上的格点 $(0, 0)$。机器人可以执行以下四种操作:
- U — 从 $(x, y)$ 移动到 $(x, y + 1)$;
- D — 从 $(x, y)$ 移动到 $(x, y - 1)$;
- L — 从 $(x, y)$ 移动到 $(x - 1, y)$;
- R — 从 $(x, y)$ 移动到 $(x + 1, y)$。
Vasya 还有一个长度为 $n$ 的操作序列。Vasya 想要修改这个序列,使得机器人执行完后最终停在 $(x, y)$。
Vasya 希望修改的连续子段长度尽可能小。这个长度的计算方式为:$maxID - minID + 1$,其中 $maxID$ 是被修改操作的最大下标,$minID$ 是被修改操作的最小下标。例如,如果 Vasya 将 RRRRRRR 改为 RLRRLRL,则第 $2$、$5$、$7$ 个操作被修改,修改子段长度为 $7 - 2 + 1 = 6$。另一个例子:如果 Vasya 将 DDDD 改为 DDRD,则修改子段长度为 $1$。
如果不需要修改,则修改子段长度为 $0$。修改操作指的是将某个操作替换为另一个操作(也可以替换为相同的操作);Vasya 不能在序列中插入新操作或删除操作。
请帮助 Vasya!告诉他,最少需要修改多长的连续子段,才能使机器人从 $(0, 0)$ 移动到 $(x, y)$,如果无法实现,请输出 $-1$。
输入格式
第一行包含一个整数 $n~(1 \le n \le 2 \cdot 10^5)$,表示操作序列的长度。
第二行包含一个长度为 $n$ 的字符串,表示操作序列。每个字符为 U、D、L 或 R。
第三行包含两个整数 $x, y~(-10^9 \le x, y \le 10^9)$,表示机器人最终应到达的坐标。
输出格式
输出一个整数,表示最小需要修改的连续子段长度,使得修改后的操作序列能将机器人从 $(0, 0)$ 移动到 $(x, y)$。如果无法实现,输出 $-1$。
说明/提示
在第一个样例中,可以将序列修改为 LULUU。因此修改子段的长度为 $3 - 1 + 1 = 3$。
在第二个样例中,原序列已经能使机器人到达 $(x, y)$,所以修改子段长度为 $0$。
在第三个样例中,机器人无法到达 $(x, y)$。
由 ChatGPT 4.1 翻译