AC 了但不理解
查看原帖
AC 了但不理解
561529
Infinite_Energy楼主2023/9/4 21:56
#include<bits/stdc++.h>
using namespace std;
int a,b,c,q,val[10000010],d[10000010],l,r,mid,ans,lx[10000010],rx[10000010],ly[10000010],ry[10000010],lz[10000010],rz[10000010],v[10000010];
int calc(int x,int y,int z){
	return ((x-1)*b+(y-1))*c+(z-1)+1;
}
bool check(int lim){
	for(int i=0;i<=a*b*c;i++){
		d[i]=0;
	}
	for(int i=1;i<=lim;i++){
		 d[calc(lx[i],ly[i],lz[i])]+=v[i];
		 d[calc(rx[i]+1,ly[i],lz[i])]-=v[i];
		 d[calc(lx[i],ry[i]+1,lz[i])]-=v[i];
		 d[calc(lx[i],ly[i],rz[i]+1)]-=v[i];
		 d[calc(rx[i]+1,ry[i]+1,lz[i])]+=v[i];
		 d[calc(rx[i]+1,ly[i],rz[i]+1)]+=v[i];
		 d[calc(lx[i],ry[i]+1,rz[i]+1)]+=v[i];
		 d[calc(rx[i]+1,ry[i]+1,rz[i]+1)]-=v[i];
	}
	for(int i=1;i<=a;i++){
		for(int j=1;j<=b;j++){
			for(int k=1;k<=c;k++){
				d[calc(i,j,k)]+=d[calc(i-1,j,k)]+d[calc(i,j-1,k)]+d[calc(i,j,k-1)]-d[calc(i-1,j-1,k)]-d[calc(i-1,j,k-1)]-d[calc(i,j-1,k-1)]+d[calc(i-1,j-1,k-1)];
				if(d[calc(i,j,k)]>val[calc(i,j,k)]){
					return true;
				}
			}
		}
	}
	return false;
}
int main(){
	scanf("%d%d%d%d",&a,&b,&c,&q);
	for(int i=1;i<=a;i++){
		for(int j=1;j<=b;j++){
			for(int k=1;k<=c;k++){
				scanf("%lld",&val[calc(i,j,k)]);
			}
		}
	}
	for(int i=1;i<=q;i++){
		scanf("%d%d%d%d%d%d%d",&lx[i],&rx[i],&ly[i],&ry[i],&lz[i],&rz[i],&v[i]);
	}
	l=1;
	r=q;
	while(l<=r){
		mid=(l+r)/2;
		if(check(mid)){
			ans=mid;
			r=mid-1;
		}else{
			l=mid+1;
		}
	}
	printf("%d",ans);
	return 0;
}

这份代码样例输出 0 但是 AC 。请求好心人解答。

2023/9/4 21:56
加载中...