赞
踩
题目链接:棋盘
这道题真的是非常典型的二维差分问题了(在我个人看来),题目中的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]; //一开始全是0 static 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]--; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。