Cod sursa(job #1843369)

Utilizator TincaMateiTinca Matei TincaMatei Data 8 ianuarie 2017 17:43:07
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <cstdio>

typedef long long i64;
typedef unsigned long long ui64;

i64 min(i64 a, i64 b) {
  if(a < b)
    return a;
  return b;
}

i64 max(i64 a, i64 b) {
  if(a > b)
   return a;
  return b;
}

struct Rect {
  i64 x1, x2, y1, y2;

  Rect operator+ (const Rect &x) {
    Rect r;
    r.x1 = max(x1, x.x1);
    r.x2 = min(x2, x.x2);
    r.y1 = max(y1, x.y1);
    r.y2 = min(y2, x.y2);
    if(r.x1 >= r.x2 || r.y1 >= r.y2)
      r.x1 = r.x2 = r.y1 = r.y2 = 0;
    return r;
  }
};

ui64 arie(Rect x) {
  return (x.x2 - x.x1) * (x.y2 - x.y1);
}

ui64 peri(Rect x) {
  return 2 * ((x.x2 - x.x1) + (x.y2 - x.y1));
}

int main() {
  Rect a, b, c;
  FILE *fin = fopen("reuniune.in", "r");
  fscanf(fin, "%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld", &a.x1, &a.y1, &a.x2, &a.y2, &b.x1, &b.y1, &b.x2, &b.y2, &c.x1, &c.y1, &c.x2, &c.y2);
  fclose(fin);
  FILE *fout = fopen("reuniune.out", "w");
  fprintf(fout, "%llu ", arie(a) + arie(b) + arie(c) + arie(a + b + c) - arie(a + b) - arie(a + c) - arie(b + c));
  fprintf(fout, "%llu ", peri(a) + peri(b) + peri(c) + peri(a + b + c) - peri(a + b) - peri(a + c) - peri(b + c));
  fclose(fout);
  return 0;
}