Codeforces Round #586 (Div. 1 + Div. 2) D

D. Alex and Julian

题链
很容易发现我们要是两个数互相不构成奇环的话
=(a+b)/gcd(a,b)为偶数
我们发现如果a b为奇数的时候一定可以 并且奇偶一定不同组
但是发现2 4这种又不行
模拟一下大概分组就是
1 3 5 7...
2 6 10 14...
4 12 20 28...
8...
我们可以发现开头都是2的多少次方 然后再乘1乘3乘5乘7....
这样我们就知道了我们只能保留上面一组

void solve(){
    int n;cin>>n;
    vector<int>v[61],a(n+1);
    for(int i=1;i<=n;i++){
        cin>>a[i];
        int x=a[i],cnt=0;
        while(x%2==0){
            x/=2;
            cnt++;
        }
        v[cnt].push_back(a[i]);
    }
    int mx=0,ans;
    for(int i=0;i<=60;i++){
        if(v[i].size()>mx){
            mx=max(mx,(int)v[i].size());
            ans=i;
        }
    }
    cout<<n-mx<<endl;
    set<int>s;
    for(auto i:v[ans])s.insert(i);
    for(int i=1;i<=n;i++){
        if(s.count(a[i])==0){
            cout<<a[i]<<' ';
        }
    }
}
posted @ 2022-12-25 16:15  ycllz  阅读(19)  评论(0)    收藏  举报