刚刚发生一个很诡异的事
就是我在做这道题的时候
在编译器里运行时,只要数据小一点就会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;
}
有点冗长,因为中间有一部分没有优化。
还是麻烦大佬帮忙看看,谢谢。