谷甚论ZOI&ZOJ P2594的MLE
  • 板块学术版
  • 楼主_xinyu1113
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/8/8 17:19
  • 上次更新2023/11/6 20:55:50
查看原帖
谷甚论ZOI&ZOJ P2594的MLE
274271
_xinyu1113楼主2020/8/8 17:19

蒟蒻求助ZOI 2594MLE https://zoj.pintia.cn/problem-sets/91827364500/problems/91827366093

#include <bits/stdc++.h>
using namespace std;
short a,b,e[802][802],d,y,z,x,s,p1,p2,xh,yy,aa,bb;
bool ppp[802][802];
char c[802];
int main()
{
//	freopen("a.in","r",stdin);
	cin>>xh;
	for(int ll=0;ll<xh;ll++)
	{
	for(int i=a*2-1;i>=1;i--)
	{
		for(int j=1;j<=b*2-1;j++)
		{
		e[i][j]=0;
		ppp[i][j]=0;
	}
	}
	cin>>a>>b;
	for(int i=a*2;i>=1;i--)
	{	
		cin.getline(c,800);
		yy=strlen(c);
		aa=b*2-1;
		for(int j=1;j<=min(yy,aa);j++)
		{
			if(c[j-1]=='-'||c[j-1]=='+'||c[j-1]=='|')
			e[i][j]=1;
		}
	}
	queue<short int>q1;//a
	queue<short int>q2;//b
	queue<short int>q3;
	q1.push(a*2-1);
	q2.push(b*2-1);
	q3.push(1);
	while(!q1.empty())
	{
		if(e[q1.front()+1][q2.front()]>=1&&ppp[q1.front()+1][q2.front()]==0&&q1.front()+1<=a*2-1)
		{
			q1.push(q1.front()+1);
			q2.push(q2.front());
			q3.push(q3.front()+1);
		}
		if(e[q1.front()][q2.front()+1]>=1&&ppp[q1.front()][q2.front()+1]==0&&q2.front()+1<=b*2-1)
		{
			q1.push(q1.front());
			q2.push(q2.front()+1);
			q3.push(q3.front()+1);
		}
		if(e[q1.front()][q2.front()-1]>=1&&ppp[q1.front()][q2.front()-1]==0&&q2.front()-1>=1)
		{
			q1.push(q1.front());
			q2.push(q2.front()-1);
			q3.push(q3.front()+1);
		}
		if(e[q1.front()-1][q2.front()]>=1&&ppp[q1.front()-1][q2.front()]==0&&q1.front()-1>=1)
		{
			q1.push(q1.front()-1);
			q2.push(q2.front());
			q3.push(q3.front()+1);
		}
    ppp[q1.front()][q2.front()]=1;
		e[q1.front()][q2.front()]=q3.front();
		q1.pop();
		q2.pop();
		q3.pop();
	}
/*	for(int i=a*2-1;i>=1;i--)
	{
		for(int j=1;j<=b*2-1;j++)
		{
		cout<<e[i][j]<<" ";
	}
		cout<<endl;
	}*/
	s=1;
	y=0;
	x=0;
	z=0;
	p1=1;
	p2=1;
	if(e[p1+1][p2]==e[p1][p2]-1)
	{
		cout<<"N";
		p1+=2;
		s=1;
	}
	else
	{
		cout<<"E";
		p2+=2;
		s=0;
		y=1;
	}
	cout<<endl;
	while(1)
	{
	//	if(p2!=-1)
	//	cout<<p1<<" "<<p2<<endl;
		if(p1==a*2-1&&p2==b*2-1)
		{
			break;
		}
		if(s==1)
		{
			if(e[p1+1][p2]==e[p1][p2]-1&&p1+1<=a*2-1)
			{
				cout<<"F";
				p1+=2;
			}
			else if(e[p1][p2-1]==e[p1][p2]-1&&p2-1>=1)
			{
				cout<<"L";
				p2-=2;
				s=0;
				z=1;
			}
			else if(e[p1][p2+1]==e[p1][p2]-1&&p2+1<=b*2-1)
			{
				cout<<"R";
				p2+=2;
				s=0;
				y=1;
			}
		}
		else if(z==1)
		{
			if(e[p1][p2-1]==e[p1][p2]-1&&p2-1>=1)
			{
				cout<<"F";
				p2-=2;
			}
			else if(e[p1+1][p2]==e[p1][p2]-1&&p1+1<=a*2-1)
			{
				cout<<"R";
				p1+=2;
				s=1;
				z=0;
			}
			else if(e[p1-1][p2]==e[p1][p2]-1&&p1-1>=1)
			{
				cout<<"L";
				p1-=2;
				z=0;
				x=1;
			}
		}
		else if(x==1)
		{
			if(e[p1-1][p2]==e[p1][p2]-1&&p1-1>=1)
			{
				cout<<"F";
				p1-=2;
			}
			else if(e[p1][p2-1]==e[p1][p2]-1&&p2-1>=1)
			{	
				cout<<"R";
				p2-=2;
				x=0;
				z=1;
			}
			else if(e[p1][p2+1]==e[p1][p2]-1&&p2+1<=b*2-1)
			{
				cout<<"L";
				p2+=2;
				x=0;
				y=1;
			}
		}
		else if(y==1)
		{
			if(e[p1][p2+1]==e[p1][p2]-1&&p2+1<=b*2-1)
			{
				cout<<"F";
				p2+=2;
			}
			else if(e[p1+1][p2]==e[p1][p2]-1&&p1+1<=a*2-1)
			{
				cout<<"L";
				p1+=2;
				s=1;
				y=0;
			}
			else if(e[p1-1][p2]==e[p1][p2]-1&&p1-1>=1)
			{
				cout<<"R";
				p1-=2;
				y=0;
				x=1;
			}
		}
	}
		cout<<endl;
}
//	fclose(stdin);
	return 0;
}

限制65536KB,求各位大佬帮忙看看

2020/8/8 17:19
加载中...