在线求调
查看原帖
在线求调
667558
_Kamisato_Ayaka_楼主2024/7/16 09:24
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e6 + 10;
int A,B,C,m,Num[N];
int Damage[N >> 1][8],Dx[N];
int dir[8][4] = 
{
	{0,0,0,1},
	{0,0,1,-1},
	{0,1,0,-1},
	{0,1,1,1},
	{1,0,0,-1},
	{1,0,1,1},
	{1,1,0,1},
	{1,1,1,-1},
};
int iint(int i,int j,int k){return (i * B + j) * C + k;}

bool P_sum()
{
	memset(Num,0,sizeof(Num));
	for(int i=1;i<=A;i++)
	{
		for(int j=1;j<=B;j++)
		{
			for(int k=1;k<=C;k++)
			{
				Num[iint(i,j,k)] = Dx[iint(i,j,k)];
				for(int p=1;p<8;p++)
				{
					int fx = i - dir[p][0];
					int fy = j - dir[p][1];
					int fz = k - dir[p][2];
					int fw = dir[p][3];
					Num[iint(i,j,k)] -= Num[iint(fx,fy,fz)] * fw;
				}
				if(Num[iint(i,j,k)] < 0)
					return true;
			}
		}
	}
	return false;
}

bool check(int x)
{
	for(int i=1;i<=x;i++)
	{
		int u1 = Damage[i][0],u2 = Damage[i][1];
		int v1 = Damage[i][2],v2 = Damage[i][3];
		int w1 = Damage[i][4],w2 = Damage[i][5];
		int P_D = Damage[i][6];
		
		Dx[iint(u1,v1,w1)] += -P_D;
		Dx[iint(u1,v1,w2 + 1)] -= -P_D;
		Dx[iint(u1,v2 + 1,w1)] -= -P_D;
		Dx[iint(u1,v2 + 1,w2 + 1)] += -P_D;
		
		Dx[iint(u2 + 1,v1,w1)] -= -P_D;
		Dx[iint(u2 + 1,v1,w2 + 1)] += -P_D;
		Dx[iint(u2 + 1,v2 + 1,w1)] += -P_D;
		Dx[iint(u2 + 1,v2 + 1,w2 + 1)] -= -P_D;
	}
	return P_sum();
}

signed main()
{
	scanf("%lld%lld%lld%lld",&A,&B,&C,&m);
	for(int i=1;i<=A;i++)
		for(int j=1;j<=B;j++)
			for(int k=1;k<=C;k++)
				scanf("%lld",&Num[iint(i,j,k)]);
	for(int i=1;i<=m;i++)
		for(int j=0;j<7;j++)
			scanf("%lld",&Damage[i][j]);
	for(int i=1;i<=A;i++)
	{
		for(int j=1;j<=B;j++)
		{
			for(int k=1;k<=C;k++)
			{
				for(int p=0;p<8;p++)
				{
					int fx = i - dir[p][0];
					int fy = j - dir[p][1];
					int fz = k - dir[p][2];
					int fw = dir[p][3];
					Dx[iint(i,j,k)] += Num[iint(fx,fy,fz)] * fw;
				}
			}
		}
	}
	int l = 1,r = m;
	while(l < r)
	{
		int mid = l + r >> 1;
		if(check(mid))
			r = mid;
		else
			l = mid + 1;
	}
	printf("%lld\n",r + 1);
	return 0;
}
2024/7/16 09:24
加载中...