算法1
(暴力枚举) $O(n^2)$
对于每一个点 , 如果反转奇数次 , 那么就是黑色 , 反转偶数次 , 那么就是白色 ;
用二阶的差分 + 前缀和 来统计每一个格子需要反转的次数 , 最后一一判断即可 ;
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 2e3 + 10 ;
int a[N][N] , b[N][N] ;
int main(){
int n , m ; cin >> n >> m ;
for(int i=0;i<=n+1;i++)
for(int j=0;j<=n+1;j++)
a[i][j] = 0 ;
// 记录奇偶次数
while(m--){
int x1,y1,x2,y2 ;
cin >> x1 >> y1 >> x2 >> y2 ;
a[x1][y1] ++ ;
a[x2+1][y1]-- ;
a[x1][y2+1]--;
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++){
if(a[i][j] % 2 == 0) cout << 0 ;
else cout << 1 ;
}
cout << endl ;
}
return 0 ;
}