求助,样例过不去(前缀和和坐标不对)
查看原帖
求助,样例过不去(前缀和和坐标不对)
320209
cleverxia楼主2022/3/24 22:48
using namespace std;
int n,a[1005][1005],b[1005][1005],m;
pair<int,int>ls(int a,int b,int c){
	return {a-c+n,b-a+n};
}
pair<int,int>rs(int a,int b,int c){
	return {a-c+n,b-c+n};
}
int main(){
	cin>>n>>m;
	while(m--){
		int x,y,z,X,Y,R,W;
		cin>>x>>y>>z>>R>>W;
		X=ls(x,y,z).first;
		Y=ls(x,y,z).second;
		a[X][min(2*2*n,Y+R-1)]-=W;
		a[max(X-R+1,1)][min(2*n,Y+R+1)]+=W;
		a[X][max(0,Y-R)]-=W;
		a[min(2*n+1,X+R)][max(0,Y-R)]+=W;
		X=rs(x,y,z).first;
		Y=rs(x,y,z).second;
		a[X][min(2*2*n,Y+R-1)]+=W;
		a[max(X-R+1,1)][min(2*n,Y+R+1)]-=W;
		a[X][max(0,Y-R)]+=W;
		a[min(2*n+1,X+R)][max(0,Y-R)]-=W;
	}
	for(int i=0;i<=n*3;i++)for(int j=0;j<=3*n;j++){
		a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
		b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1];
	}
	for(int i=1;i<2*n;i++)for(int j=1;j<=n+i-1-max(0,2*(i-n));j++){
		j=n+i-j-max(0,2*(i-n));
		cout<<i<<' '<<j<<endl;
		int x,y,z,X,Y;
		y=j-3-i+n;
		if(i<n)x=-i+n;
		else z=i-n;
		int ans=0;
		X=ls(x,y,z).first;
		Y=ls(x,y,z).second;
		cout<<x<<' '<<y<<' '<<z<<endl;
		cout<<X<<' '<<Y<<endl;
		ans+=a[X][Y];
		X=rs(x,y,z).first;
		Y=rs(x,y,z).second;
		ans+=b[X][Y];
		cout<<X<<' '<<Y<<endl;
		cout<<ans<<endl;
		j=n+i-j-max(0,2*(i-n));
	}
}```
2022/3/24 22:48
加载中...