Good Bye 2019 E

Good Bye 2019 E

题意

n n 个点分成两类,不同类别之间的距离和相同类别之间的距离集合的交集应该为空集。构造。

题解

分类问题。
一开始没有思路,一直往距离想,实际上可以转换成奇偶的判断(之前有一道网络流也是通过奇偶划分二分图。
每个点分为奇偶则有四种类别。奇奇(1)、偶偶(2)、奇偶(3)、偶奇(4)。
显然可以看出1、2一组,3、4一组是没有问题的。
因为相同组别的距离都是偶数,不同的都是奇数
但是如果只有1、2或者只有3、4呢,首先我们可以发现,如果尝试分成两组。
相同的仍然是偶数^ 2+偶数^ 2=距离^2。
不同的是奇数^ 2+奇数^ 2=距离^2。
这两者单纯判断奇偶是相同的,但是偶数可以转换成4(奇数^ 2+奇数^ 2),显然不等于奇数^ 2+奇数 ^2,如果说等于的话,那么倒过来这个就可以转换成偶数了,也就是他就是偶数 ^2+ 偶数 ^2,但实际不是的。

所以只要不是只有一组,都是可解的。
如果一组呢,如果说只有一组,比如说(4,4)和(6,6),都是同偶,但是/2之后就是(2,2)和(3,3)。所以我们可以通过不断/2来得到不同。
/2对结果有影响吗,/2相当于扩大了坐标系,平移也是可以的,如果说奇数的话,就可以先+1再/2,对于同一横坐标和同一纵坐标,分别同时全部操作即可。
可以简化为(x+1)/2
因为有负数,所以我们需要初始加上1e6.

有人可能会担心除到0怎么办,实际上是这样的。我们甚至可以只扩大y轴或者x轴。我们采用(x+1)/2的话,在1的时候会不发生变化。而另一个一定是>=2,也就是无论如何都会不一样,就算现在是奇数也会走到2.
如果全是1呢?那么希望就建立在另一侧,另一侧肯定不会相同,题目保证了不同点。另一侧因为不同总有人先到1,所以和上述一样,就必然是可解的。

#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define sf(x) scanf("%d",&x)
using namespace std;
 
typedef long long ll;
const int maxn = 200050;
const int bs=1000050;
 
int n;
vector<int>G[4];
struct node{int x,y;}A[maxn];
 
bool check(){
    int one=0;
    for(int i=1;i<=4;i++)G[i-1].clear();
    for(int i=1;i<=n;i++){
        int tmp=(A[i].x%2)*2+A[i].y%2;
        G[tmp].push_back(i);
    }
    for(int i=1;i<=4;i++){
        if(G[i-1].size()==n)return false;
    }
    return true;
}//00同偶,01一偶一奇,10一奇一偶,11一奇一奇
 
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)scanf("%d%d",&A[i].x,&A[i].y),A[i].x+=bs,A[i].y+=bs;
    while(!check()){
        for(int i=1;i<=n;i++){
            A[i].x=(A[i].x+1)/2;
            A[i].y=(A[i].y+1)/2;
        }
    }
    if(G[0].size()+G[3].size()==n){
       // puts("?");
        cout<<G[0].size()<<endl;
        for(auto x:G[0])cout<<x<<" ";
    }
    else if(G[1].size()+G[2].size()==n){
        //puts("??");
        cout<<G[1].size()<<endl;
        for(auto x:G[1])cout<<x<<" ";
    }
    else{
        cout<<G[1].size()+G[2].size()<<endl;
        for(auto x:G[1])cout<<x<<" ";
        for(auto x:G[2])cout<<x<<" ";
    }
}
发布了203 篇原创文章 · 获赞 17 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/mxYlulu/article/details/104012397