CF1791B Following Directions

题目描述

Alperen 站在点 $(0,0)$。他得到一个长度为 $n$ 的字符串 $s$,并进行 $n$ 次移动。第 $i$ 次移动如下: - 如果 $s_i = \texttt{L}$,则向左移动一格; - 如果 $s_i = \texttt{R}$,则向右移动一格; - 如果 $s_i = \texttt{U}$,则向上移动一格; - 如果 $s_i = \texttt{D}$,则向下移动一格。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1791B/f7080a9f921542de4115442759a59ebc8f7f4033.png) 如果 Alperen 从中心点出发,他可以进行如图所示的四种移动。 在 $(1,1)$ 处有一颗糖果(即 Alperen 起点的右上方各一格)。你需要判断 Alperen 是否曾经过这颗糖果。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1791B/2e0273962ce58884c74304276d5024743c50c413.png) 第一组测试数据中 Alperen 的路径如图所示。

输入格式

输入的第一行包含一个整数 $t$($1 \leq t \leq 1000$),表示测试用例的数量。 每组测试用例的第一行包含一个整数 $n$($1 \leq n \leq 50$),表示字符串的长度。 每组测试用例的第二行包含一个长度为 $n$ 的字符串 $s$,由字符 $\texttt{L}$、$\texttt{R}$、$\texttt{D}$ 和 $\texttt{U}$ 组成,表示 Alperen 的移动方式。

输出格式

对于每组测试用例,如果 Alperen 曾经过糖果的位置,输出 "YES"(不带引号);否则输出 "NO"(不带引号)。 你可以用任意大小写输出答案(例如 "yEs"、"yes"、"Yes" 和 "YES" 都会被识别为正确答案)。

说明/提示

在第一组测试数据中,Alperen 的路径为 $$ (0, 0) \overset{\texttt{U}} {\to} (0, 1) \overset{\texttt{U}} {\to} (0, 2) \overset{\texttt{U}} {\to} (0, 3) \overset{\texttt{R}} {\to} (1, 3) \overset{\texttt{D}} {\to} (1, 2) \overset{\texttt{D}} {\to} {\color{green} \mathbf{(1, 1)}} \overset{\texttt{L}} {\to} (0, 1)。 $$ 注意,Alperen 不需要最终停在 $(1,1)$,只要在移动过程中经过即可。 在第二组测试数据中,Alperen 的路径为 $$ (0, 0) \overset{\texttt{U}} {\to} (0, 1) \overset{\texttt{R}} {\to} {\color{green} \mathbf{(1, 1)}}。 $$ 在第三组测试数据中,Alperen 的路径为 $$ (0, 0) \overset{\texttt{R}} {\to} (1, 0) \overset{\texttt{R}} {\to} (2, 0) \overset{\texttt{R}} {\to} (3, 0) \overset{\texttt{U}} {\to} (3, 1) \overset{\texttt{U}} {\to} (3, 2) \overset{\texttt{D}} {\to} (3, 1) \overset{\texttt{D}} {\to} (3, 0) \overset{\texttt{D}} {\to} (3, -1)。 $$ 在第四组测试数据中,Alperen 的路径为 $$ (0, 0) \overset{\texttt{L}} {\to} (-1, 0) \overset{\texttt{L}} {\to} (-2, 0) \overset{\texttt{L}} {\to} (-3, 0)。 $$ 由 ChatGPT 4.1 翻译