Adiós 2019 E

Adiós 2019 E

El significado de los problemas

norte norte puntos en dos categorías, una distancia entre la intersección de la distancia entre las diferentes categorías y fijar la misma categoría es un conjunto vacío. Estructura.

solución del problema

problemas de clasificación.
No empezar a pensar, ha querido llegar hasta el final, de hecho, se puede convertir en una paridad juicio (hay un flujo de red antes de paridad se divide por un grafo bipartito.
Cada punto se divide en cuatro categorías de paridad no Kiki (1), aun -. Incluso (2), la paridad (3), el par-impar (4).
es evidente grupo 1, grupo 3 y 4 no es un problema.
puesto que la distancia del mismo grupo son par, impar son diferentes
pero Si sólo 1,2 o solamente 3,4, podemos ver que en primer lugar, si el intento de dividir en dos grupos.
lo mismo es incluso todavía un número par ^ 2 + 2 ^ 2 = ^ distancia.
la diferencia es que extraño extraño ^ 2 = ^ 2 + distancia ^ 2.
la vez simple juicio de paridad es el mismo, pero se puede convertir en 4 de número par (impar-impar ^ ^ 2 + 2), es, obviamente, no es igual a la extraña extraño ^ ^ 2 + 2, si es igual, entonces invertido esta se pueden convertir en par, es decir, que es par-par número ^ ^ 2 + 2, pero en realidad no lo es.

Siempre y cuando no sólo un conjunto, tienen solución.
Si un grupo hace, si sólo un grupo, por ejemplo, (4,4) y (6,6), son los mismos incluso, pero es (2,2) y (3,3) después de / 2. Así que podemos obtener a través de diferentes constantes / 2.
/ 2 resultados afectan, / 2 corresponde a la expandido sistema de coordenadas, la traducción también es posible, si un número impar, entonces se puede primero entonces 1/2, para el mismo la misma abscisa y ordenada, es decir, todas las operaciones son simultáneamente puede.
Se puede reducirse a (x + 1) / 2
debido a la negativa, por lo que tenemos que añadir el 1E6 inicial.

Algunas personas pueden estar preocupados de que, además de 0 a hacer, de hecho, el caso. Incluso podemos ampliar sólo el eje Y o eje x. Usamos las palabras (x + 1) / 2, no va a cambiar cuando 1. Y el otro debe ser> = 2, es decir, en cualquier caso será diferente, incluso si ahora es un número impar llegará a 2.
Si todo es uno? Así esperanza se basa en el otro lado, el otro lado no es la misma, tema para asegurar que los diferentes puntos. Siempre era el otro lado a causa de la diferente primero-1, como se describe anteriormente, y por lo tanto, debe ser soluble.

#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<<" ";
    }
}
Publicados 203 artículos originales · ganado elogios 17 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/mxYlulu/article/details/104012397
Recomendado
Clasificación