在本题中,我们使用一个全局变量双端队列 来模拟贪吃蛇的身体。队列从头到尾存放蛇身各部分的坐标,队头为蛇尾,队尾为蛇头。 系统会调用以下两个函数,你需要实现它们的逻辑: moveSnack 函数:moveSnack 函数接受一个方向参数 ,,分别表示上下左右移动。函数功能如下: 将蛇头向对应方向移动一个单位长度; 身体的其他部分依次跟随前移一格; 如果移动后蛇头与身体其他部分重叠,则函数返回 ,表示会撞到自己,此时不执行任何移动操作;否则返回 。 eatSnack 函数:eatSnack 函数接受一个方向参数 ,,分别表示上下左右移动。函数功能如下: 将蛇头向对应方向移动一个单位长度; 身体的其他部分依次跟随前移一格; 蛇尾在原方向上生长一个单位长度; 如果移动后蛇头与身体其他部分重叠,则函数返回 ,表示会撞到自己,此时不执行任何移动操作;否则返回 。
输入描述:
输入数据仅用于主函数获取数据后调用你实现的函数,你其实可以不用管。第一行输入两个正整数 ,分别表示初始蛇身长度和操作次数。接下来 行,每行输入两个整数 ,表示蛇身从尾部到头部第 节的坐标。随后 行,每行输入两个整数 :当 时,调用 moveSnack 函数;当 时,调用 eatSnack 函数。


输出描述:
输出数据仅用于主函数获取返回值后于评测机交互,你其实可以不用管。对每次操作进行如下处理:如果会撞到自己,输出 并停止程序;否则,输出从蛇头到蛇尾各节的坐标,每对坐标占一行。
示例1

输入

6 5
0 -1
0 0
0 1
1 1
2 1
2 2
1 1
1 3
1 2
1 2
1 1

输出

2 3
2 2
2 1
1 1
0 1
0 0
1 3
2 3
2 2
2 1
1 1
0 1
1 2
1 3
2 3
2 2
2 1
1 1
1 1
1 2
1 3
2 3
2 2
2 1
-1

说明

我们用浅色代表蛇尾,深色代表蛇头,则贪吃蛇的移动过程如下:
\hspace{8pt}\bullet\,初始时,蛇的位置如下图所示:

\hspace{8pt}\bullet\,操作1,向上移动一步后:
\hspace{8pt}\bullet\,操作2,向左移动一步后:
\hspace{8pt}\bullet\,操作3,向下移动一步后:
\hspace{8pt}\bullet\,操作4,向下移动一步后:

\hspace{8pt}\bullet\,操作5,向上移动,导致蛇头与蛇身相撞,游戏结束。
示例2

输入

1 5
0 0
2 1
2 4
1 2
1 3
1 4

输出

0 1
0 0
1 1
0 1
0 0
1 0
1 1
0 1
0 0
1 0
1 1
-1
加载中...