3.	本题是一款模拟贫吃蛇程序,游戏是在一个a*a的网格上进行的。其中输入第一行一个整数a。第二行两个些数n和m。接下来是n行,每行第一个数为opt,表示操作编号。接下来的输入的变量与操作编号对应,输出:即第m秒过后的地图,蛇所在的位置输出
“o”,其余位置输出“.”以换行结尾。
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
int a,mp[101][101];
int t[100003] ;
int y[100003] ;
int cnt;
int len=2,dir=3,die=0;
const int dx[5] = {0,0,-1,0,1};
const int dy[5] = {0,-1,0,1,0};
int nx=0, ny=1;
int px=1, py=2;
int check(int x, int yy)
{
	if(x<1||x>a||yy<1||yy>a)
		return 1;
	if(cnt+1-mp[x][yy] < len)
		return 1;
	return 0;
}
void work()
{
	if(die) return;
	px += nx;
	py += ny;
	die=check(px,py);
	if(die) return;
	mp[px][py]= ++cnt;
}
void show()
{
	for(int i= 1; i<=a; ++i)
	{
		for(int j=1; j<=a; ++j)
		{
			if(mp[i][j] != 0&& mp[i][j]>= cnt-len+1)
				putchar('o');
			else
				putchar('.');
		}
		puts("");
	}
}
int main()
{
	mp[1][1]= ++cnt;
	mp[1][2]= ++cnt;
	int n,m,op,xx;
	char s[3];
	scanf("%d",&a);
	scanf("%d%d",&n, &m);
	while(n--)
	{
		scanf("%d%d",&op,&xx);
		if(op==1)
		{
			t[xx]=1;
			scanf("%s",s);
			if(s[0]=='L')
				y[xx]= 1;
			else if(s[0]=='U')
				y[xx]= 2;
			else if(s[0]=='R')
				y[xx]= 3;
			else
				y[xx]= 4;
		}
		else
		{
			t[xx]= 2;
		}			
	}
	for(int tm=1; tm<=m; ++tm)
	{
		if(t[tm]==1)
		{
			if(y[tm]%2!= dir%2)
			{
				dir = y[tm];
				nx = dx[y[tm]];
				ny = dy[y[tm]];
			}
		}
		else if(t[tm]==2)
		{
			++len;
		}
		work();
		if(die)
		{
			break;
		}
	}
	show();
	return 0;
}
判断题
1) (2分)由程序代码可知,贪吃蛇的初始长度为2,蛇头和蛇尾分别在坐标[1,2]、[1,1]处。( )
 
 
2) (2分) check函数是用来检测蛇是否吃到果实的。( )
 
 
3) (2分)第54行及第58行输入1 x y表示在第x秒按下了y键,y为LURD中的一种,分别表示按下了左、上,右、下四种按钮。( )
 
 
4) (2分)当输入样例如下所示时:10\n10 20\n2 1\n2 2\n2 3\n2 4\n2 5\n1 6 R\n1 7 D\n1 8 L\n1 9 U最终程序的运行结果所代表的含义可表示为贪吃蛇在第9秒过后就死亡了,因此最后贪吃蛇保持的是死亡前(第7秒过后)的位置。(  )
 
 
选择题
5) 若输入地图边长为x,共n次操作(x>n),则该程序时间复杂度为( )