ask
  • 板块灌水区
  • 楼主zcx0628
  • 当前回复12
  • 已保存回复15
  • 发布时间2024/11/26 13:57
  • 上次更新2024/11/26 17:58:46
查看原帖
ask
779007
zcx0628楼主2024/11/26 13:57

站外题。
题面:
有一个 n×mn \times m 的矩阵,第 iijj 列的坐标是 (i,j)(i,j) 。每个元素有元素值。有 qq 次询问。每次给三个数 x,y,kx,y,k ,求与坐标 (x,y)(x,y) 曼哈顿距离小于k的哥子元素值。
数据:
n=m=1000,q=300000n=m=1000,q=300000
感觉得前缀和,关键是怎么写啊! 我的代码也就这样:

#include<bits/stdc++.h>
using namespace std;
int a[1001][1001];
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>a[i][j];
	int q;
	cin>>q;
	for(int i=0;i<q;i++){
		int x,y,k;
		cin>>x>>y>>k;
		if(k==1)cout<<a[x][y]<<endl;
		else{
			int ans=0;
			for(int j=1;j<=n;j++){
				for(int k=1;k<=m;k++){
					if(abs(i-x)+abs(j-y)<k){
						ans+=a[i][j];
					}
				}
			}
			cout<<ans<<endl;
		}
	}
	return 0;
}

有人能给我一个思路或者告诉我应该怎样写吗? orz

2024/11/26 13:57
加载中...