Codeforces 1270E数学的構造+

問題の意味

そこ\(N- \)二次元平面、偶数ライン上の点は、これらの二つの点が2点の各セットの間の非空に分割されている\(A \) \ (B \) 同じセットラベルの2つの異なるセット、同じ色の同じラインの距離との間の著しい黄、青のライン内の二点間の線分。

分析

最初のポイントの一つに全ての点の座標は原点を形質として、そうである点が存在しなければならない((0,0)\)\
(奇数のためにも、1、0)4つのグループに分け、次いですべての奇数タップ:\(A_ {00}、{10} A_、A_ {01}、A_ 11} {\。)
同じであれば全ての点\(A_ {00} \) 2に加えて、全ての点の座標、少なくとも一つの点の座標まで奇数です。

  • \(A_ {01} \)または\(A_ {10} \)空でない場合、\(A_ {00} \)\(A_ {11} \)のセットに割り当てられたすべての点で(\ A_ {01} \)及び(A_ {10} \)\距離の同じセットからの二点間の他に割り当てられたセット内のすべての点については偶数である、異なる組からの2点間の距離は、に沿って、奇数であります要件。
  • \(A_ {01} \)\(A_ {10} \)空である場合、\(A_ {11} \)空でない必要があり、\(A_ {00} \)サブのすべての点でコレクションに\(A_。11} {\)点の別のセットに割り当てられたすべての、同じセットからの点の間の距離である\(8K ^ 2 \)の2つの異なるセットから、4で割り切れます間の距離である\(8K ^ 2 + + 8K 2 \) 42以外は、要件を満たしています。

コード

#include<bits/stdc++.h>
#define fi first
#define se second
#define lson l,mid,p<<1
#define rson mid+1,r,p<<1|1
#define pb push_back
#define ll long long
using namespace std;
const int inf=1e9;
const int mod=1e9+7;
const int maxn=1e5+10;
int n;
int x[1010],y[1010];
vector<int>a[2][2];
int main(){
    ios::sync_with_stdio(false);
    //freopen("in","r",stdin);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>x[i]>>y[i];
    }
    int flag=1;
    for(int i=n;i>=1;i--){
        x[i]-=x[1],y[i]-=y[1];
        if(x[i]&1) flag=0;
        if(y[i]&1) flag=0;
    }
    while(flag){
        for(int i=1;i<=n;i++){
            x[i]/=2;y[i]/=2;
            if(x[i]&1) flag=0;
            if(y[i]&1) flag=0;
        }
    }
    for(int i=1;i<=n;i++){
        a[x[i]&1][y[i]&1].pb(i);
    }
    if(!a[0][1].empty()||!a[1][0].empty()){
        cout<<(int)(a[0][0].size()+a[1][1].size())<<endl;
        for(int x:a[0][0]) cout<<x<<" ";
        for(int x:a[1][1]) cout<<x<<" ";
    }else{
        cout<<(int)a[0][0].size()<<endl;
        for(int x:a[0][0]) cout<<x<<" ";
    }
    return 0;
}

おすすめ

転載: www.cnblogs.com/xyq0220/p/12124381.html