首页 > 试题广场 >

小红的贪吃蛇

[编程题]小红的贪吃蛇
  • 热度指数:244 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小红正在玩贪吃蛇游戏。游戏中小红需要控制蛇向上、下、左、右走,当蛇吃到食物时,蛇的身体会变长。当蛇撞到自己的身体时,游戏结束。当指令执行完毕时,游戏也结束。
本游戏和传统贪吃蛇不同的是,初始地图上就会存在所有的食物,吃完食物后也不能增加新的食物!
地图是无穷大的,因此没有撞墙这个说法。
假设蛇初始的坐标为(0,0),初始长度是1(即只占用(0,0)这一个坐标)。
'W'指令代表向上移动,坐标由(x,y)移动到(x,y+1)。
'S'指令代表向下移动,坐标由(x,y)移动到(x,y-1)。
'A'指令代表向左移动,坐标由(x,y)移动到(x-1,y)。
'D'指令代表向右移动,坐标由(x,y)移动到(x+1,y)。
小红想知道,游戏结束的时候,蛇的长度是多少?

输入描述:
第一行输入一个正整数n,代表操作的指令长度。
第二行输入一个长度为n的,仅包含'W'、'A'、'S'、'D'四种字符的字符串。'W'代表蛇向上移动,'S'蛇向下移动,'A'代表蛇向左移动,'D'代表蛇向右移动。
第三行输入一个正整数m,代表食物的数量。
接下来的m行,每行输入两个整数x_i,y_i,代表每个食物的坐标。


保证蛇不会相反方向移动,例如,如果上一步蛇向上移动,那么下一步一定不会向下移动。
保证食物不会出现在(0,0)。保证没有两个食物的坐标重合。


输出描述:
一个正整数,代表游戏结束时蛇的长度。
示例1

输入

10
WASDDSAASD
3
2 0
-1 1
1 -1

输出

3

说明

蛇可以吃到两个食物,且过程中没有撞到自己的身体。最终长度为3。
示例2

输入

10
WWASDDDWAS
5
0 1
-1 1
-1 2
1 1
2 0

输出

5

说明

第五步向右时并不会撞到自己的身体,因为第五步向右到(0,1)时,位于(0,1)的尾巴正好离开了。
但第十步向下时会撞到自己的身体,游戏结束。
总共吃了4个食物,身体长度变成5。