蒟蒻的代码:
#include<bits/stdc++.h>
using namespace std;
const int dx[4]={1,0,-1,0};
const int dy[4]={0,1,0,-1};
int n;
bool flag[3001][3001];
int ans=0;
inline bool check(const int &x,const int &y)
{
if(!flag[x][y])
return 0;
int sum=0;
for(int i=0;i<4;i++)
{
if(flag[x+dx[i]][y+dy[i]])
sum++;
}
// printf("sum=%d\n",sum);
return sum==3;
}
void dfs(const int &x,const int &y)
{
for(int i=0;i<4;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(!flag[nx][ny])
{
flag[nx][ny]=1;
ans++;
if(check(nx,ny))
dfs(nx,ny);
for(int i=0;i<4;i++)
{
if(check(nx+dx[i],ny+dy[i]))
dfs(nx+dx[i],ny+dy[i]);
}
}
}
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int x,y;
scanf("%d %d",&x,&y);
x+=1000,y+=1000;
if(flag[x][y]) ans--;
else
{
flag[x][y]=1;
if(check(x,y))
dfs(x,y);
for(int j=0;j<4;j++)
{
if(check(x+dx[j],y+dy[j]))
dfs(x+dx[j],y+dy[j]);
}
}
printf("%d\n",ans);
}
// fclose(stdin);
// fclose(stdout);
return 0;
}
在本机测试还没问题,交到洛谷上就报编译错误
环境:Windows7 x64
Dev-Cpp v5.11