Página Principal

MC521-1s2014

MC621-2s2014

MC521-1s2015

MC621-2s2015

MC521-1s2016

Conteúdo

Área Reservada

edit sidebar

TIMUS 1809

Autor: Lucas Castro

#include <iostream>
#include <set>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

#define FOR(i) for(int i = 0 ; i < 4 ; i++)

#define INF 0x3f3f3f3f
#define TAM 32

int mapa[TAM][TAM];
int foix[TAM],foiy[TAM];
vector<int> vx,vy;
int conta[TAM];
int x[TAM],y[TAM];

bool possivel(){
  FOR(i) conta[i] = 0;

  FOR(i) FOR(j){
    if(i != j){
      if(x[i] == x[j] || y[i] == y[j]){
        if(x[i] == x[j] && y[i] == y[j]) return false;
        conta[i]++;
      }
    }    
  }

  FOR(i){
    if(conta[i] != 1) return false;    
  }
  return true;  
}

int main(){

  vx.clear();
  vy.clear();  

  int vxx[TAM],vyy[TAM];

  for(int i = 0 ; i < 4 ; i++){
    int xx,yy;
    cin >> xx >> yy;
    vxx[i] = xx;
    vyy[i] = yy;

    if(!foix[xx]){
      vx.push_back(xx);
      foix[xx] = 1;
    }
    if(!foiy[yy]){
      vy.push_back(yy);
      foiy[yy] = 1;
    }      
  }

  for(int i = 1 ; i <= 20 ; i++){
    if(vx.size() < 4 && !foix[i])
      vx.push_back(i);
    if(vy.size() < 4 && !foiy[i])
      vy.push_back(i);
  }

  int ans = INF;
  int resx[TAM],resy[TAM];

  FOR(i1) FOR(i2) FOR(i3) FOR(i4) FOR(i5) FOR(i6) FOR(i7) FOR(i8){
    x[0] = vx[i1];
    y[0] = vy[i2];

    x[1] = vx[i3];
    y[1] = vy[i4];

    x[2] = vx[i5];
    y[2] = vy[i6];

    x[3] = vx[i7];
    y[3] = vy[i8];

    int aux = 4;
    if(possivel()){
      FOR(i)
        aux -= (x[i] == vxx[i] && y[i] == vyy[i]);

      if(aux < ans){
        ans = aux;
        FOR(i){
          resx[i] = x[i];
          resy[i] = y[i];
        }      
      }      
    }
  }

  FOR(i)
    printf("%d %d\n",resx[i],resy[i]);



  return 0;
}