当前位置: 首页 > news >正文

蓝桥杯2023年第十四届省赛真题-棋盘

蓝桥杯2023年第十四届省赛真题-棋盘
时间限制: 5s 内存限制: 576MB 提交: 3804 解决: 735
题目描述
小蓝拥有 n × n 大小的棋盘,一开始棋盘上全都是白子。小蓝进行了 m 次操作,每次操作会将棋盘上某个范围内的所有棋子的颜色取反 (也就是白色棋子变为黑色,黑色棋子变为白色)。请输出所有操作做完后棋盘上每个棋子的颜色。
输入格式
输入的第一行包含两个整数 n, m,用一个空格分隔,表示棋盘大小与操作数。
接下来 m 行每行包含四个整数 x1, y1, x2, y2,相邻整数之间使用一个空格分隔,表示将在 x1 至 x2 行和 y1 至 y2 列中的棋子颜色取反。
输出格式
输出 n 行,每行 n 个 0 或 1 表示该位置棋子的颜色。如果是白色则输出 0,否则输出 1 。
样例输入复制
3 3
1 1 2 2
2 2 3 3
1 1 3 3
样例输出复制
001
010
100
提示
对于 30% 的评测用例,n m ≤ 500 ;
对于所有评测用例,1 ≤ n, m ≤ 2000 ,1 ≤ x1 ≤ x2 ≤ n ,1 ≤ y1 ≤ y2 ≤ m 。

1.分析

        1.把每次反转操作当成对区间内的数加一操作,差分矩阵,再求一遍前缀和就可以了。

        2.如果数不是2的倍数就是黑,否则为白。

2.代码

#include<iostream>
using namespace std;
const int MAX = 2100;
int n, m;
int a[MAX][MAX];
int main() {
    cin >> n >> m;
    while (m--) {
        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;     //初始化差分矩阵
        a[x1][y1]++;
        a[x1][y2 + 1]--;
        a[x2 + 1][y1]--;
        a[x2 + 1][y2 + 1]++;
    }
    for (int i = 1; i <= n; i++) {        //求前缀和
        for (int j = 1; j <= n; j++) {
            a[i][j] = a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1]+a[i][j];
        }
    }
    for (int i = 1; i <= n; i++) {       //输出
        for (int j = 1; j <= n; j++) {
            cout << a[i][j]%2 ;
        }
        cout << endl;
    }
    return 0;
}

相关文章:

  • stack与queue和deque
  • Unicode统一码及实现方式的全面讲解
  • fbx bip互转 测试OK
  • 容器 = 命名空间 + Cgroups + 文件系统
  • ISIS协议中的数据库同步
  • Ubuntu完整复制其他用户的anaconda及虚拟环境
  • 【工具】Json在线解析工具
  • 【Android Studio】配置教程以及解决过程中的问题(详细版本)
  • Hive(4.3)Hive基础查询完全指南:从SELECT到复杂查询的10大核心技巧
  • 【教学类-102-01】自制剪纸图案(留白边、沿线剪)01
  • 蓝桥23省赛——接龙数列
  • Spring Boot 实现文件秒传功能
  • 小程序28-事件传参-data-*自定义数据
  • 自然语言处理(25:(终章Attention 1.)Attention的结构​)
  • Prometheus operator怎么添加targets和告警规则
  • 模拟实现线程池
  • 快速排序求第k小的数
  • C-RAN(Cloud-Radio Access Network,云化无线接入网)
  • Moo0 VideoResizer,简单高效压缩视频!
  • HDFS的shell命令
  • 做一家算命的网站/培训机构优化
  • seo网络推广优化/seo搜索引擎优化课程总结
  • 一个人做网站需要多久/东莞seo网络优化
  • 英国新冠肺炎疫情最新情况/西安关键字优化哪家好
  • 无锡手机网站制作费用/互联网去哪里学
  • 云南 网站建设/惠州seo排名