Cod sursa(job #2034592)

Utilizator MoodyFaresFares Mohamad MoodyFares Data 8 octombrie 2017 01:02:49
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <cstdio>
#include <algorithm>

struct Dreptunghi {
  long long x1;
  long long y1;
  long long x2;
  long long y2;
  
  void scan() {
    scanf("%lld%lld%lld%lld", &x1, &y1, &x2, &y2);
  }
};

Dreptunghi intersection(Dreptunghi d1, Dreptunghi d2) {
  Dreptunghi inter;
  inter.x1 = std::max(d1.x1, d2.x1);
  inter.y1 = std::max(d1.y1, d2.y1);
  inter.x2 = std::min(d1.x2, d2.x2);
  inter.y2 = std::min(d1.y2, d2.y2);
  return inter;
}

long long arie(Dreptunghi d) {
  if (d.x2 >= d.x1 && d.y2 >= d.y1) {
    return (d.x2 - d.x1) * (d.y2 - d.y1);
  }
  return 0;
}

long long perimetru(Dreptunghi d) {
  if (d.x2 >= d.x1 && d.y2 >= d.y1) {
    return 2 * ((d.x2 - d.x1) + (d.y2 - d.y1));
  }
  return 0;
}

int main() {
  freopen("reuniune.in", "r", stdin);
  freopen("reuniune.out", "w", stdout);
  
  Dreptunghi d[3];
  d[0].scan();
  d[1].scan();
  d[2].scan();
  long long ar = 0;
  long long per = 0;
  for (long long i = 1; i < 8; i++) {
    Dreptunghi inter;
    long long nr = 0;
    for (long long j = 0; j < 3; j++) {
      if (i & (1 << j)) {
        if (nr == 0) {
          inter = d[j];
        } else {
          inter = intersection(inter, d[j]);
        }
        nr++;
      }
    }
    long long sign;
    if (nr % 2 == 1) {
      sign = 1;
    } else {
      sign = -1;
    }
    ar += sign * arie(inter);
    per += sign * perimetru(inter);
  }
  printf("%lld %lld\n", ar, per);
  return 0;
}