题解的构造,比较麻烦。
以下是更简单的构造:
设a数组a[M][M];
a[i*2-1][j],表示第i行(横线)第j个横着的线的颜色。
a[i*2][j],表示第i行(竖线)第j个竖着的线的颜色。
如代码中这样赋值,以下是样例涂色的图例。
这样构造有个显然的好处:
首先任意相邻两个横线(左右)的颜色一定不同,这样规则3就满足一半了。
下面证明任意相邻两个竖线(上下)的颜色不同:
这样规则3完全满足。
且:任意相邻两个竖线(上下)的颜色不同不就说明:任意大小为4的环均不同颜色。
而任意相邻两个横线(左右)的颜色一定不同则说明:任意大小大于4的环均不同颜色。
规则123均满足。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M =