Cod sursa(job #1713121)

Utilizator hrazvanHarsan Razvan hrazvan Data 4 iunie 2016 19:28:21
Problema Sortare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#include <algorithm>
#include <vector>
#define MAXN 5000
#define pb(x) push_back(x)
int a[MAXN + 1], b[MAXN + 1], c[MAXN + 1];
int nr = 0;

std::vector<int> solve(int n){
  nr++;
  if(n < 3){
    std::vector<int> r;
    r.pb(1);
    if(n == 2)
      r.pb(2);
    return r;
  }
  std::vector<int> r, rez;
  int i, j;
  if(a[n] == b[n] && a[n] == c[n]){
    r = solve(n - 1);
    rez.resize(n);
    rez[a[n] - 1] = 1;
    j = 0;
    for(i = 0; i <= n; i++){
      if(i != a[n] - 1){
        rez[i] = r[j] + 1;
        j++;
      }
    }
  }
  else{
    r = solve(n - 2);
    rez.resize(n);
    rez[a[n] - 1] = 1;
    if(b[n] != a[n])
      rez[b[n] - 1] = 2;
    else{
      rez[c[n] - 1] = 2;
      b[n] = c[n];
    }
    j = 0;
    for(i = 0; i < n; i++){
      if(i != a[n] - 1 && i != b[n] - 1){
        rez[i] = r[j] + 2;
        j++;
      }
    }
  }
  return rez;
}

int main(){
  FILE *in = fopen("sortare.in", "r");
  int n, i;
  fscanf(in, "%d", &n);
  for(i = 2; i <= n; i++)
    fscanf(in, "%d%d%d", &a[i], &b[i], &c[i]);
  fclose(in);
  std::vector<int> rez = solve(n);
  FILE *out = fopen("sortare.out", "w");
  fprintf(out, "%d\n", nr);
  for(i = 0; i < n; i++)
    fprintf(out, "%d ", rez[i]);
  fclose(out);
  return 0;
}