MLE之问
查看原帖
MLE之问
437398
EastIsRed楼主2021/11/26 21:53

这份代码到底错哪了

#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
int t,a,b,n;
struct node{
	int a,b,pos;
	node(){}
	node(int _a,int _b,int _pos)
	{
		a=_a,b=_b,pos=_pos;
	}
};
queue<node>q;
bool mark[1048][1048];
int pth[1048][1048][3];
void print(int x,int y)
{
	if(pth[x][y][2]==0)
		return;
	print(pth[x][y][0],pth[x][y][1]);
	printf("%d ",pth[x][y][2]);
}
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		memset(mark,0,sizeof(mark));
		scanf("%d%d%d",&a,&b,&n);
		while(q.size())
			q.pop();
		mark[0][0]=true;
		mark[a][0]=true;
		mark[0][b]=true;
		pth[a][0][2]=1;
		pth[0][b][2]=2;
		q.push(node(a,0,1));
		q.push(node(0,b,1));
		while(q.size())
		{
			node now=q.front();
			int temp1,temp2;
			q.pop();
			//printf("NOW:a %d,b %d,pos %d\n",now.a,now.b,now.pos);
			if(now.b==n)
			{
				printf("%d ",now.pos);
				print(now.a,now.b);
				printf("\n");
				goto next;
			}
			if(!mark[now.a][b])
			{
				mark[now.a][b]=true;
				pth[now.a][b][0]=now.a;
				pth[now.a][b][1]=now.b;
				pth[now.a][b][2]=2;
				//printf("ADD:a %d,b %d,pos %d,mode 2,pre:%d,%d\n",now.a,b,now.pos+1,pth[now.a][b][0],pth[now.a][b][1]);
				q.push(node(now.a,b,now.pos+1));
			}
			if(!mark[a][now.b])
			{
				mark[a][now.b]=true;
				pth[a][now.b][0]=now.a;
				pth[a][now.b][1]=now.b;
				pth[a][now.b][2]=1;
				//printf("ADD:a %d,b %d,pos %d,mode 1,pre:%d,%d\n",a,now.b,now.pos+1,pth[a][now.b][0],pth[a][now.b][1]);
				q.push(node(a,now.b,now.pos+1));
			}
			if(!mark[now.a][0])
			{
				mark[now.a][0]=true;
				pth[now.a][0][0]=now.a;
				pth[now.a][0][1]=now.b;
				pth[now.a][0][2]=4;
				//printf("ADD:a %d,b %d,pos %d,mode 4,pre:%d,%d\n",now.a,0,now.pos+1,pth[now.a][0][0],pth[now.a][0][1]);
				q.push(node(now.a,0,now.pos+1));
			}
			if(!mark[0][now.b])
			{
				mark[0][now.b]=true;
				pth[0][now.b][0]=now.a;
				pth[0][now.b][1]=now.b;
				pth[0][now.b][2]=3;
				//printf("ADD:a %d,b %d,pos %d,mode 3,pre:%d,%d\n",0,now.b,now.pos+1,pth[0][now.b][0],pth[0][now.b][1]);
				q.push(node(0,now.b,now.pos+1));
			}
			temp1=now.a+now.b,temp2=0;
			if(temp1>a)
				temp2=temp1-a,temp1=a;
			if(!mark[temp1][temp2])
			{
				mark[temp1][temp2]=true;
				pth[temp1][temp2][0]=now.a;
				pth[temp1][temp2][1]=now.b;
				pth[temp1][temp2][2]=5;
				//printf("ADD:a %d,b %d,pos %d,mode 5,pre:%d,%d\n",temp1,temp2,now.pos+1,pth[temp1][temp2][0],pth[temp1][temp2][1]);
				q.push(node(temp1,temp2,now.pos+1));
			}
			temp1=0,temp2=now.a+now.b;
			if(temp2>b)
				temp1=temp2-b,temp2=b;
			if(!mark[temp1][temp2])
			{
				mark[temp1][temp2]=true;
				pth[temp1][temp2][0]=now.a;
				pth[temp1][temp2][1]=now.b;
				pth[temp1][temp2][2]=6;
				//printf("ADD:a %d,b %d,pos %d,mode 6,pre:%d,%d\n",temp1,temp2,now.pos+1,pth[temp1][temp2][0],pth[temp1][temp2][1]);
				q.push(node(temp1,temp2,now.pos+1));
			}
		}next:;
	}
	return 0;
}

结果

本地内存毫无波澜,一交就MLE

2021/11/26 21:53
加载中...