【分类讨论】Codeforces Round #395 (Div. 2) D. Timofey and rectangles

D题:

           题目思路:给你n个不想交的矩形并别边长为奇数(很有用)问你可以可以只用四种颜色给n个矩形染色使得相接触的

                            矩形的颜色不相同,我们首先考虑可不可能,我们分析下最多有几个矩形互相接触,两个时可以都互相接触

                            三个时也可以互相接触,而四个时怎么摆我们都不能让他们相互都接触,所以我们最多可以用三种不同颜色

                            的矩形去接触另一个矩形,因此我们就一定可以用四种颜色来染色,然后我们来考虑怎么染色,因为不存在相

                            交的情况,所以就拿左下角来分析,首先我们来分析下,

                            1,两个矩形要上下接触时:我们考虑纵坐标,因为边长为奇数,所以坐标必须的奇偶必须不同,

                            2,两个矩形左右接触:同理,横坐标奇偶不同,

                            3,两个矩形永远都不可能接触,通过上面两个结论我们很好得知当横纵坐标奇偶都相同时,不可能接触

                            有了上面的结论,我们先令横纵坐标都为奇数的矩形为颜色1,所有的1都不可能接触,

                            当纵坐标为偶数,横坐标为奇数,这样只能与1的矩形上下接触,此时颜色为2

                            当纵坐标为奇数,横坐标为偶数,这样与1只能左右接触,此时颜色为3

                            除了上面的就是颜色为4,这个算法的正确性是从上面三个结论得来的!我们确定每种颜色矩形坐标的奇偶时,

                           就能保证相同颜色的矩形不可能相交!结论3

——http://blog.csdn.net/qq_34731703/article/details/54845983

#include<cstdio>  
  
#define abs(x) (x<0?-x:x)  
  
int x[500005],y[500005];  
  
int main()  
{  
    int n;scanf("%d",&n);  
    for(int i=1;i<=n;i++){  
        int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);  
        x[i]=abs(a);  
        y[i]=abs(b);  
    }  
    puts("YES");  
    for(int i=1;i<=n;i++){  
        if(x[i]%2==1&&y[i]%2==1)puts("1");  
        else if(x[i]%2==1&&y[i]%2==0)puts("2");  
        else if(x[i]%2==0&&y[i]%2==1)puts("3");  
        else puts("4");  
    }  
    return 0;  
}  
原文地址:https://www.cnblogs.com/autsky-jadek/p/6375384.html