泰黎普了,球著
查看原帖
泰黎普了,球著
508032
int08楼主2021/9/26 22:30

刚刚发生一个很诡异的事

就是我在做这道题的时候

在编译器里运行时,只要数据小一点就会MLE

然后尝试提交一下代码

结果……结果就过了!

ohhhhhhhhh(雾)

代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,i,j,k,x,y,xb,yb,xn,yno,xy[403][403],d,ans;bool s[403][403];
int search(int p,int q)
{
	s[p][q]=true;
	ans++;
	if(p!=0&&s[p-1][q]==false&&xy[p-1][q]==0) search(p-1,q);
	if(p!=402&&s[p+1][q]==false&&xy[p+1][q]==0) search(p+1,q);
	if(q!=0&&s[p][q-1]==false&&xy[p][q-1]==0) search(p,q-1);
	if(q!=402&&s[p][q+1]==false&&xy[p][q+1]==0) search(p,q+1);
}
int main()
{
	memset(s,false,sizeof(s));
	cin>>n;
	cin>>xb>>yb;x=xb;y=yb;
	for(i=2;i<=n;i++)
	{
		cin>>xn>>yno;
		if(xn>xb)
		{
			for(j=xb+1;j<=xn;j++)
			{
				xy[j+201][yno+201]=1;
				d++; 
			} 
		}
		if(xn<xb)
		{
			for(j=xb-1;j>=xn;j--)
			{
				xy[j+201][yno+201]=1;
				d++; 
			} 
		}
		if(yno>yb)
		{
			for(j=yb+1;j<=yno;j++)
			{
				xy[xn+201][j+201]=1;
				d++; 
			} 
		}
		if(yno<yb)
		{
			for(j=yb-1;j>=yno;j--)
			{
				xy[xn+201][j+201]=1;
				d++; 
			} 
		}
		xb=xn;yb=yno;
	}
	xn=x;yno=y;
	if(xn>xb)
	{
		for(j=xb+1;j<=xn;j++)
		{
			xy[j+201][yno+201]=1;
			d++; 
		} 
	}
	if(xn<xb)
	{
		for(j=xb-1;j>=xn;j--)
		{
			xy[j+201][yno+201]=1;
			d++; 
		} 
	}
	if(yno>yb)
	{	
		for(j=yb+1;j<=yno;j++)
		{
			xy[xn+201][j+201]=1;
			d++; 
		} 
	}
	if(yno<yb)
	{
		for(j=yb-1;j>=yno;j--)
		{
			xy[xn+201][j+201]=1;
			d++; 
		} 
	}
	search(0,0);
	cout<<403*403-ans-d+d/2-1;
	return 0;
} 

有点冗长,因为中间有一部分没有优化。

还是麻烦大佬帮忙看看,谢谢。

2021/9/26 22:30
加载中...