使用Scanner读取m行操作数据 输出n*n的数组当n=2000 m=100数据超时
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;
//本题目中心思想是根据每个位置被插入的次数来判断是黑棋还是白棋从而输出棋子
//先通过差分思想对数据进行操作修改,最后计算前缀和得到数组每个元素的值即操作的次数
public class Main {
static int N=2010;
static int a[][]=new int [N][N];
static int n,m;
static int x1,x2,y1,y2;
public static void main(String[] args) throws IOException {
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
String spart[]=br.readLine().split(" ");
n=Integer.parseInt(spart[0]);
m=Integer.parseInt(spart[1]);
while(m-->0) {
String line[]=br.readLine().split(" ");
x1=Integer.parseInt(line[0]);
y1=Integer.parseInt(line[1]);
x2=Integer.parseInt(line[2]);
y2=Integer.parseInt(line[3]);
insert(x1,y1,x2,y2);
}
for (int i = 1; i <=n; i++) {
for (int j = 1; j<=n; j++) {
a[i][j]=a[i][j]+a[i-1][j]+a[i][j-1]-a[i-1][j-1];
if(a[i][j]%2==0) bw.write("0");
else bw.write("1");
}
bw.newLine();
}bw.flush();
}
private static void insert(int x1, int y1, int x2, int y2) {
// TODO Auto-generated method stub
a[x1][y1]+=1;
a[x1][y2+1]-=1;
a[x2+1][y1]-=1;
a[x2+1][y2+1]+=1;
}
}