二维累加和

文章描述了一个编程问题,要求在一个H×W的网格中模拟N天的积雪过程,每次由指定的长方形区域增加积雪并更新相邻网格的值。最终输出每个网格的最终积雪量。
摘要由CSDN通过智能技术生成

ALGO 王国表现为一个H×W的网格。起初,每个网格均无积雪。但在接下来的N天中,雪将不断降临。定义从上数起第i行,从左数起第j列的网格为(i,j)。

在第i天:从左上角坐标为(At,Bt)开始,到右下角坐标为(Ct, Dt)的长方形区域,积雪将增加1厘米。

请编写一个程序,输出每个网格在最后的积雪量。

输入格式:

image

根据每个网格(i,j)最后的积雪量Zi,j,输出应采用以下格式:

image

限制条件:

  • H,W范围在1-1500之间
  • N范围在1-100000之间
  • At范围在1-H之间
  • Bt范围在1-W之间
  • Ct范围在1-H之间
  • Dt范围在1-W之间
  • 所有输入均为整数

输入的测试用例:

image

输出的测试用例:

image

Scanner sc=new Scanner(System.in);
int H,W,N;
H=sc.nextInt();
W=sc.nextInt();
N=sc.nextInt();
int arr[][]=new int[1509][1509];
int brr[][]=new int[1509][1509];
int A[]=new int[1509];
int B[]=new int[1509];
int C[]=new int[1509];
int D[]=new int[1509];

for (int i = 1; i <= N; i++) {
    A[i]=sc.nextInt();
    B[i]=sc.nextInt();
    C[i]=sc.nextInt();
    D[i]=sc.nextInt();

}

for (int i = 1; i <= N; i++) {
    arr[A[i]][B[i]]+=1;
    arr[C[i]+1][D[i]+1]+=1;
    arr[A[i]][D[i]+1]-=1;
    arr[C[i]+1][B[i]]-=1;
}


for (int i = 1; i <= H; i++) {
    for (int j = 1; j <= W; j++) {
        brr[i][j]=arr[i][j]+brr[i][j-1];
    }
}

for (int j = 1; j <= W; j++) {
    for (int i = 1; i <= H; i++) {
        brr[i][j]+=brr[i-1][j];
    }
}

for (int i = 1; i <= H; i++) {
    for (int j = 1; j <= W; j++) {
        System.out.print(brr[i][j]);
    }
    System.out.println();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值