本蒟蒻求调
查看原帖
本蒟蒻求调
1392765
Golden_apple_楼主2024/12/20 21:18

样例都过不了,而且不知道哪里错了

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

struct attack
{
	int x1;
	int x2;
	int y1;
	int y2;
	int z1;
	int z2;
	int value;
}at[10000010];
int A,B,C,m;
int s[10000010];
int b[10000010];
int xyz(int x, int y, int z)
{
    return ((x-1)*B+(y-1))*C+(z-1)+1;
}
bool check(int mid)
{
	memset(b,0,sizeof(b));
	for(int i=1;i<=mid;i++)
	{
		b[xyz(at[i].x1,at[i].y1,at[i].z1)]+=at[i].value;
		b[xyz(at[i].x2+1,at[i].y1,at[i].z1)]-=at[i].value;
		b[xyz(at[i].x1,at[i].y2+1,at[i].z1)]-=at[i].value;
		b[xyz(at[i].x1,at[i].y1,at[i].z2+1)]-=at[i].value;
		b[xyz(at[i].x2+1,at[i].y2+1,at[i].z1)]+=at[i].value;
		b[xyz(at[i].x1,at[i].y2+1,at[i].z2+1)]+=at[i].value;
		b[xyz(at[i].x2+1,at[i].y1,at[i].z2+1)]+=at[i].value;
		b[xyz(at[i].x2+1,at[i].y2+1,at[i].z2+1)]-=at[i].value;
	}
	for(int i=1;i<=A;i++)
    {
    	for(int j=1;j<=B;j++)
    	{
        	for(int k=1;k<=C;k++)
    		{
            	b[xyz(i,j,k)]+=b[xyz(i-1,j,k)]+b[xyz(i,j-1,k)]+b[xyz(i,j,k-1)]-b[xyz(i-1,j-1,k)]-b[xyz(i-1,j,k-1)]-b[xyz(i,j-1,k-1)]+b[xyz(i-1,j-1,k-1)];
				if(b[xyz(i,j,k)]>s[xyz(i,j,k)]) return true;
			}
		}
	}
	return false;
}
int main()
{
	scanf("%d%d%d%d",&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("%d",&s[xyz(i,j,k)]);
			}
		}
	}
	for(int i=1;i<=m;i++) scanf("%d%d%d%d%d%d%d",&at[i].x1,&at[i].x2,&at[i].y1,&at[i].y2,&at[i].z1,&at[i].z2,&at[i].value);
	int l=1,r=m; 
	while(l<r)
	{
		int mid=(l+r)>>1;
		if(check(mid))	r=mid;
		else l=mid+1;
	}
	cout<<l<<endl;
	return 0;
} 
2024/12/20 21:18
加载中...