import java.util.Scanner;
import java.util.*;
class Main {
public static void main(String[] args) {
final int N = 110, M = 110;
Scanner input = new Scanner(System.in);
// code here
int n = input.nextInt(), m = input.nextInt();
input.nextLine();
int[][] arr = new int[N][M];
int[][] s = new int[N][M];
for (int i = 1; i <= n; i++) {
String line = input.nextLine();
for (int j = 1; j <= m; j++) {
arr[i][j] = line.charAt(j-1) - '0';
s[i][j] = s[i-1][j] + s[i][j-1] +arr[i][j] - s[i-1][j-1];
System.out.printf("%d ",s[i][j]);
}
System.out.println("");
}
input.close();
}
}
完全是二维前缀和的模板题,但输入数据有坑,需要用nextLine来读取,并且nextLine会读取换行符之前的内容,并将换行符留在输入中。因此,当你接下来再次调用nextLine()
时,它会立即返回一个空字符串。可以在读取n
和m
之后,先调用一次input.nextLine()
来消耗掉这个多余的换行符。这样就可以确保后续的nextLine()
调用能够正确地读取输入行。