求助,本地能跑过,一交就RE
查看原帖
求助,本地能跑过,一交就RE
147344
PG_JOB楼主2021/5/1 14:34

rt

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXN 3010
ll n;
int a[MAXN][MAXN][6];
ll ans;
ll add_te(ll x,ll y)
{
	a[x][y][0]=1;
	a[x][y-1][3]=1;
	a[x][y-1][5]++;
	a[x][y+1][1]=1;
	a[x][y+1][5]++;
	a[x-1][y][4]=1;
	a[x-1][y][5]++;
	a[x+1][y][2]=1;
	a[x+1][y][5]++;
}
ll add_fe(ll x,ll y)
{
	a[x][y][0]=2;
	a[x][y-1][3]=1;
	a[x][y-1][5]++;
	a[x][y+1][1]=1;
	a[x][y+1][5]++;
	a[x-1][y][4]=1;
	a[x-1][y][5]++;
	a[x+1][y][2]=1;
	a[x+1][y][5]++;
}
ll dfs(ll x,ll y)
{
	if(a[x][y][5]==3) 
	{
		if(a[x][y][1]==0) 
		{
			ans++;
			add_fe(x,y-1);
			dfs(x,y-1); 
		}
		if(a[x][y][2]==0) 
		{
			ans++;
			add_fe(x-1,y);
			dfs(x-1,y);
		}
		if(a[x][y][3]==0) 
		{
			ans++;
			add_fe(x,y+1);
			dfs(x,y+1);
		}
		if(a[x][y][4]==0) 
		{
			ans++;
			add_fe(x+1,y);
			dfs(x+1,y);	
		}
	}
	if(a[x-1][y][0]!=0&&a[x-1][y][5]==3) dfs(x-1,y);
	if(a[x+1][y][0]!=0&&a[x+1][y][5]==3) dfs(x+1,y);
	if(a[x][y-1][0]!=0&&a[x][y-1][5]==3) dfs(x,y-1);
	if(a[x][y+1][0]!=0&&a[x][y+1][5]==3) dfs(x,y+1);
}

signed main()
{
//	freopen("1.in","r",stdin);
//	freopen("1.out","w",stdout);
	cin>>n;
	ll x,y;
	for(ll i=1;i<=n;i++)	
	{
		cin>>x>>y;
		x+=1000;
		y+=1000;
		if(a[y][x][0]==2) 
		{
			ans--;
			cout<<ans<<endl;
			a[y][x][0]=1;
			continue;
		}
		add_te(y,x);
		dfs(y,x);
		cout<<ans<<endl;
	}	
	return 0;
   //QAQ
}

2021/5/1 14:34
加载中...