当前位置:   article > 正文

蓝桥杯---棋盘(典型的二维差分问题)

蓝桥杯---棋盘(典型的二维差分问题)

题目链接:棋盘

这道题真的是非常典型的二维差分问题了(在我个人看来),题目中的0和1,我们直接让差分数组++,偶数就是0,奇数就是1.初始化是0,是白子(偶数),然后根据子矩阵范围开始进行差分数组的计算

  1. import java.util.ArrayDeque;
  2. import java.util.Scanner;
  3. // 1:无需package
  4. // 2: 类名必须Main, 不可修改
  5. public class Main {
  6. static int[][] a=new int[2100][2100];
  7. //一开始全是0
  8. static int[][] d=new int[2100][2100];//差分数组
  9. public static void main(String[] args) {
  10. Scanner scanner=new Scanner(System.in);
  11. int n=scanner.nextInt(),m=scanner.nextInt();
  12. while(m--!=0){
  13. int x1=scanner.nextInt();
  14. int y1=scanner.nextInt();
  15. int x2=scanner.nextInt();
  16. int y2=scanner.nextInt();
  17. cha(x1,y1,x2,y2);
  18. }
  19. for(int i=1;i<=n;i++){
  20. for(int j=1;j<=n;j++){
  21. //计算a数组
  22. //反过来d[i][j]=a[i][j]-a[i][j-1]-a[i-1][j]+a[i-1][j-1]
  23. a[i][j]=d[i][j]+a[i-1][j]+a[i][j-1]-a[i-1][j-1];
  24. }
  25. }
  26. for(int i=1;i<=n;i++){
  27. for(int j=1;j<=n;j++){
  28. if(a[i][j]%2==0){
  29. System.out.print(0);
  30. }
  31. else{
  32. System.out.print(1);
  33. }
  34. }
  35. System.out.println();
  36. }
  37. }
  38. public static void cha(int x1,int y1,int x2,int y2){
  39. //这四个感觉就是模板了,不理解可以背下来,建议理解
  40. d[x1][y1]++;
  41. d[x2+1][y2+1]++;
  42. d[x1][y2+1]--;
  43. d[x2+1][y1]--;
  44. }
  45. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/244597
推荐阅读
相关标签
  

闽ICP备14008679号