zoukankan      html  css  js  c++  java
  • 【分类讨论】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;  
    }  
  • 相关阅读:
    Docker学习笔记之常用的 Docker Compose 配置项
    Docker学习笔记之使用 Docker Compose 管理容器
    qt无法使用终端启动的解决方法
    实践卡尔曼滤波--小球追踪
    高斯分布 笔记
    蒙特卡罗定位(Particle Filter Localization)笔记
    珊格地图笔记
    ubuntu14.04 下安装 gsl 科学计算库
    SLAM学习资料汇总
    矩阵的SVD分解
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/6375384.html
Copyright © 2011-2022 走看看