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;  
    }  
  • 相关阅读:
    python学习笔记二--列表
    python学习笔记一--字符串
    写点什么呢
    nagios&pnp4nagios--yum 安装
    敏捷开发的思路
    Foreman--管理PuppetClient
    url编码解码的问题(urlencode/quote)
    json数据的处理和转化(loads/load/dump/dumps)
    http和https的区别
    python中requests的用法总结
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/6375384.html
Copyright © 2011-2022 走看看