题意:给定n个点对的坐标,分别表示以此两点位左下右上顶点的矩形,保证每个矩形的边长都是奇数。问相邻的矩形不同色,能否用四色染色,并输出每个颜色。
思路:根据四色定理,一定能够根据题意染色,即YES是一定的。 然后由于每个矩形的边长是奇数,现在我们只考虑左下角点的坐标x,y
若: x,y为奇数,边长是奇数,则对应的右上角的点坐标都是偶数,所以这样的矩形一定不会彼此相邻,可以涂颜色1。
若x为奇数,y为偶数,则对应右上角的点坐标横坐标是偶数,纵坐标是奇数,则这样的矩形只能与1颜色的矩形左右相邻,可涂颜色2.
若x为偶数,y为奇数,则与上面情况相反,与颜色1的矩形一定只能上下相邻,可涂颜色3.
若x为偶数y为偶数,可涂颜色4.
以上结果则符合题意。
代码:
#include <iostream>
using namespace std;
int x[500005], y[500005];
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; ++i)
{
int a,b;
cin >> x[i] >> y[i] >> a >> b;
}
cout << "YES\n";
for(int i = 0; i < n; ++i)
{
if(x[i]<0)x[i]=-x[i];
if(y[i]<0)y[i]=-y[i];
if(x[i]%2==1&&y[i]%2==1)
cout << "1" << endl;
else if(x[i]%2==1&&y[i]%2==0)
cout << "2" << endl;
else if(x[i]%2==0&&y[i]%2==1)
cout << "3" << endl;
else
cout << "4" << endl;
}
return 0;
}