zoukankan      html  css  js  c++  java
  • AGC025D Choosing Points

    Link
    两个限制分开考虑都是二分图独立集,那么现在相当于给了一个四染色的图需要求一个不小于(frac{|V|}4)的独立集,由鸽巢原理可知取最大的一种颜色的点集一定满足条件。
    直接做的话是(O(n^2c))的,(c)(x^2+y^2=d)的非负整数解数。
    考虑如何在不建图的情况下完成二分图染色,设(d=2^{2k}p(4 mid p))
    那么所有距离为(d)的点对都可以写成((2^ku,2^kv))的形式,其中(u^2+v^2=p^2)
    考虑(mod 2^k)的等价类,当(pequiv3pmod4)时显然不存在合法点对。
    (pequiv1pmod4),那么(u,v)为一奇一偶,按(u+v)的奇偶性染色即可。
    (pequiv2pmod4),那么(u,v)都是奇数,按(u)的奇偶性染色即可。

    #include<cstdio>
    int check(int x,int y,int d){int c=__builtin_ctz(d);return c&1? !(x>>(c/2)&1):!((x^y)>>(c/2)&1);}
    int main()
    {
        int n,d1,d2;scanf("%d%d%d",&n,&d1,&d2);
        for(int c=0,i=0;i<n+n;++i)
    	for(int j=0;j<n+n;++j)
    	    if(check(i,j,d1)&&check(i,j,d2))
    	    {
    		printf("%d %d
    ",i,j);
    		if(++c==n*n) return 0;
    	    }
    }
    
  • 相关阅读:
    学习笔记之jq
    学习笔记之pytest
    本月学习小结(01/10
    本月学习小结(01/09
    学习笔记之Poetry
    学习笔记之Dynaconf
    学习笔记之asyncio — Asynchronous I/O
    Redis 根据key获取所有 HashKey
    Java ffmpeg 合成音视频文件
    Redis 存储中文方式
  • 原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/12901347.html
Copyright © 2011-2022 走看看