心得
code 半小时 debug 两小时。。
Java配合bufferedreader写的是心累啊。。。
需要注意的有两点:
1. 输入如果是Scanner,则时间不够用,类似地,矩阵前缀和也是那样,需要用到BufferReader
2. System.out.println也不可以作为输出,即使一样也会报错。这个不知道是不是bug,而改成BufferWriter则可以AC
算法1
C++ 代码
import java.io.*;
public class Main {
static void insert(int i1, int j1, int i2, int j2, int x, int[][] b) {
b[i1][j1] += x;
b[i1][j2 + 1] -= x;
b[i2 + 1][j1] -= x;
b[i2 + 1][j2 + 1] += x;
}
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
String[] str1 = reader.readLine().split(" ");
int n = Integer.parseInt(str1[0]);
int m = Integer.parseInt(str1[1]);
int q = Integer.parseInt(str1[2]);
int N = 1010;
int[][] b = new int[N][N];
for (int i = 1; i <= n; i++) {
String[] str2 = reader.readLine().split(" ");
for (int j = 1; j <= m; j++) {
int x = Integer.parseInt(str2[j - 1]);
insert(i, j, i, j, x, b);
}
}
while (q > 0) {
String[] str3 = reader.readLine().split(" ");
int x1 = Integer.parseInt(str3[0]);
int y1 = Integer.parseInt(str3[1]);
int x2 = Integer.parseInt(str3[2]);
int y2 = Integer.parseInt(str3[3]);
int c = Integer.parseInt(str3[4]);
insert(x1, y1, x2, y2, c, b);
q--;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
b[i][j] += b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1];
writer.write(b[i][j] + " ");
//和求S一样,因为b[i - 1][j]和b[i][j - 1]之前已经被算过了,都表示前缀和,b[i][j]还没有被算过
}
writer.write("\n");
}
writer.flush();
}
}
我用Scanner和System.out.println能ac但最后一个样例超时
大佬,b[i][j]不是存的差值吗,一维的最后还要和a[i][j]相加,怎么这个不用了呢
writer.flush()的作用是关闭输出流吗?我试了一下,没有这个代码,控制台输出不了东西呢?
对呢。所有write下的内容,会先存在writers中,当启用flush以后,会输出存在其中的内容。如果没有调用flush,则不会将writer中的内容进行输出。
好的,谢谢解答了。
嗯呢,加油hh