题目链接:棋盘
这道题真的是非常典型的二维差分问题了(在我个人看来),题目中的0和1,我们直接让差分数组++,偶数就是0,奇数就是1.初始化是0,是白子(偶数),然后根据子矩阵范围开始进行差分数组的计算
import java.util.ArrayDeque; import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {static int[][] a=new int[2100][2100];//一开始全是0static int[][] d=new int[2100][2100];//差分数组public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int n=scanner.nextInt(),m=scanner.nextInt();while(m--!=0){int x1=scanner.nextInt();int y1=scanner.nextInt();int x2=scanner.nextInt();int y2=scanner.nextInt();cha(x1,y1,x2,y2);}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){//计算a数组//反过来d[i][j]=a[i][j]-a[i][j-1]-a[i-1][j]+a[i-1][j-1]a[i][j]=d[i][j]+a[i-1][j]+a[i][j-1]-a[i-1][j-1];}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(a[i][j]%2==0){System.out.print(0);}else{System.out.print(1);}}System.out.println();}}public static void cha(int x1,int y1,int x2,int y2){//这四个感觉就是模板了,不理解可以背下来,建议理解d[x1][y1]++;d[x2+1][y2+1]++;d[x1][y2+1]--;d[x2+1][y1]--;} }