开局没考虑好0行0列不应该存值,只能拿try防御一下了
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
private static long safeGet(long[][] num, int i, int j){
try{
return num[i][j];
}catch(Exception e){
return 0;
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int q = in.nextInt();
long[][] input = new long[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
input[i][j] = in.nextInt();
}
}
long[][] dp = new long[n][m];
dp[0][0] = input[0][0];
for (int i = 1; i < n; i++) dp[i][0] = input[i][0]+dp[i-1][0];
for (int j = 1; j < m; j++) dp[0][j] = input[0][j]+dp[0][j-1];
for (int i = 1; i < n; i++) {
for (int j = 1; j < m; j++) {
dp[i][j] = dp[i][j - 1] + dp[i - 1][j] + input[i][j] - dp[i - 1][j - 1];
}
}
//操作开始
int x1, x2, y1, y2;
for (int i = 0; i < q; i++) {
x1 = in.nextInt() - 1;
y1 = in.nextInt() - 1;
x2 = in.nextInt() - 1;
y2 = in.nextInt() - 1;
long a = dp[x2][y2];
long b = 0, c = 0, d = 0;
b = safeGet(dp,x2,y1 - 1);
c = safeGet(dp,x1-1,y2);
d = safeGet(dp,x1-1,y1 - 1);
System.out.println(a - b - c + d);
}
}
}

京公网安备 11010502036488号