#XMOJ11795. 魔法扫帚飞行大挑战
魔法扫帚飞行大挑战
说明
时间限制:2 Sec
内存限制:64 MB
输入文件:broomstick.in 输出文件:broomstick.out
魔法学院新开了一门神奇的课程——飞行扫帚课!练习场是一块巨大的「魔法广场」,广场由无数块方格地砖铺成,向东南西北无限延伸。不过,有些地砖被施了「禁飞结界」,扫帚一旦靠近就会被轻轻弹开,所以佳佳在飞行时绝对不敢落到有结界的格子上。
佳佳驾驶着心爱的扫帚,从某一块没有结界的方格起飞,一格一格地向前飞。扫帚每次移动,都恰好越过一条公共边,落到相邻的另一块地砖上。佳佳把每一步的方向都认真地记了下来:L 表示向左一格,R 表示向右一格,U 表示向上一格,D 表示向下一格。她保证自己全程没有撞上结界,但悲催的是——她完全忘了哪些地砖有结界,也忘了自己是从哪块地砖起飞的。
小明决定当一回「结界侦探」:他想知道,是否至少存在一种结界分布方式,使得佳佳记录的这条路线,恰好是起飞点到降落点之间的最短飞行路线(即在避开结界的前提下,移动次数最少的路线)?如果存在,就说明佳佳这次的飞行很完美;如果无论如何都做不到,那佳佳一定偷偷绕了远路。
输入格式
第一行包含一个整数 $T$,表示飞行记录的数量。
接下来 $T$ 行,每行包含一个字符串 $s$,由大写字母 L、R、U、D 组成,表示一次飞行记录。
输出格式
对每组飞行记录输出一行:如果存在结界分布使该路线成为最短路线,输出 OK;否则输出 BUG。
样例
样例 1
3
LLUUUR
RRUULLDD
LUR
OK
BUG
BUG
样例说明:
第一组 LLUUUR:先向左两格、再向上三格、最后向右一格,在空中画出一条弯弯的折线。小明在广场上找到了结界的一种摆法,能让这条路线恰好成为最短路线,输出 OK。
第二组 RRUULLDD:向右、向上、向左、向下各飞两格,最后又落回了起飞点。既然起飞点就是降落点,那一步都不飞($0$ 步)才是最短路,而佳佳飞了 $8$ 步,这条路线绝不可能是最短路线,输出 BUG。
第三组 LUR:向左、向上、向右各飞一格。降落点其实就在起飞点的正上方,直接向上飞一格只要 $1$ 步,比佳佳的 $3$ 步短得多——而且这块地砖是佳佳自己落过的空地,结界挡不住这条捷径——所以这条路线绝不可能是最短路线,输出 BUG。
样例 2
2
R
URDL
OK
BUG
样例说明:
第一组 R:只飞一步就降落,一步到位的路线自然是最短路线,输出 OK。
第二组 URDL:向上、向右、向下、向左飞了一个小方框,最后又停在了起飞点。起飞点就是降落点,$0$ 步才是最短路线,而佳佳飞了 $4$ 步,这条路线绝不可能是最短路线,输出 BUG。
样例 3
2
RURD
LUURRD
BUG
OK
样例说明:
第一组 RURD:向右、向上、向右、向下,绕了一个小拱。降落点其实就在起飞点右边两格,直接向右飞两格(RR)只要 步,比佳佳的 步短得多——而且这两块地砖都是佳佳自己飞过的空地,结界挡不住这条捷径——所以这条路线绝不可能是最短路线,输出 BUG。
第二组 LUURRD:向左一格、向上两格、向右两格、再向下一格,像走台阶一样层层前进。小明很快就在广场上找到了结界的一种摆法,让这条路线成为最短路线,输出 OK。
数据范围
令 $T$ 表示测试组数,$|s|$ 表示一组飞行记录的长度。
对于 $50\%$ 的测试点,$1 \le T \le 50$,$1 \le |s| \le 10^2$,所有 $|s|$ 之和不超过 $10^4$。
对于 $100\%$ 的测试点,$1 \le T \le 100$,$1 \le |s| \le 10^3$,所有 $|s|$ 之和不超过 $10^5$。
相关
在下列比赛中: