Cod sursa(job #2217207)

Utilizator PetyAlexandru Peticaru Pety Data 29 iunie 2018 16:17:50
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("reuniune.in");
ofstream fout ("reuniune.out");

long long a, p;

struct drept {
  int x1, y1, x2, y2;
}v[3];

long long arie (drept d) {
  return 1LL * (d.x2 - d.x1) * (d.y2 - d.y1);
}

long long perimetru (drept d) {
  return 2LL * (d.x2 - d.x1 + d.y2 - d.y1);
}

drept piu (drept d1, drept d2) {
  int x1 = max(d1.x1 , d2.x1);
  int y1 = max(d1.y1, d2.y1);
  int x2 = min(d1.x2, d2.x2);
  int y2 = min(d1.y2, d2.y2);
  if (x1 > x2 || y1 > y2)
    x1 = y1 = x2 = y2 = 0;
  return {x1, y1, x2, y2};
}

int main() {
  for (int i = 0; i < 3; i++)
    fin >> v[i].x1 >> v[i].y1 >> v[i].x2 >> v[i].y2;
  a = arie(v[0])
      + arie(v[1])
      + arie(v[2])
      - arie(piu(v[0], v[1]))
      - arie (piu(v[0], v[2]))
      - arie (piu(v[1], v[2]))
      + arie(piu(v[0], piu(v[1], v[2])));
  p = perimetru(v[0])
    + perimetru(v[1])
    + perimetru(v[2])
    - perimetru(piu(v[0], v[1]))
    - perimetru(piu(v[0], v[2]))
    - perimetru(piu(v[1], v[2]))
    + perimetru(piu(v[0], piu(v[1], v[2])));
  fout << a << " " << p;
  return 0;
}