奇葩做法求救
查看原帖
奇葩做法求救
757432
laijingnian楼主2023/7/13 12:40
#include <iostream>
#include <cstring>

using namespace std;

typedef long long ll;

const ll N = 4011;

ll z[N][N],u[N][N],v[N][N],w[N][N]; 
ll n;
ll a,b,g,k;
ll x,y;

void init(ll a,ll b,ll g,ll k,ll n)
{
	if(a < N)
	{
		if(b < N)
		{
			for(int j = b,l = 0;l < k;l++,j++)
			{
				for(int i = a,m = 0;m < g;m++,i++)
				{
					z[i][j] = n;
				}
			}
		}
		else if(b >= N)
		{
			b -= N;
			for(int j = b,l = 0;l < k;l++,j++)
			{
				for(int i = a,m = 0;m < g;m++,i++)
				{
					u[i][j] = n;
				}
			}
		}
	}
	else if(a >= N)
	{
		if(b < N)
		{
			a -= N;
			for(int j = b,l = 0;l < k;l++,j++)
			{
				for(int i = a,m = 0;m < g;m++,i++)
				{
					w[i][j] = n;
				}
			}
		}
		else if(b >= N)
		{
			a -= N;
			b -= N;
			for(int j = b,l = 0;l < k;l++,j++)
			{
				for(int i = a,m = 0;m < g;m++,i++)
				{
					v[i][j] = n;
				}
			}
		}
	}
}

int query(int x,int y)
{
	if(x < N)
	{
		if(y < N)
		{
			return z[x][y];
		}
		else if(y >= N)
		{
			y -= N;
			return u[x][y];
		}
	}
	else if(x >= N)
	{
		if(y < N)
		{
			x -= N;
			return w[x][y];
		}
		else if(y >= N)
		{
			x -= N;
			y -= N;
			return v[x][y];
		}
	}
}

int main()
{
	memset(z,-1,sizeof z);
	memset(u,-1,sizeof u);
	memset(v,-1,sizeof v);
	memset(w,-1,sizeof w);
	cin >> n;
	for(ll i = 0;i < n;i++)
	{
		cin >> a >> b >> g >> k;
		init(a,b,g,k,i+1);
	}
	cin >> x >> y;
	/*
	for(int i = 1;i <= 10;i++)
	{
		for(int j = 1;j <= 10;j++)
			cout<<z[i][j]<<" ";
		cout<<endl;
	}
	*/
	cout<<query(x,y);
	return 0;
}

测试点全部MLE

思路:

2023/7/13 12:40
加载中...