Cod sursa(job #2230967)

Utilizator Constantin.Dragancea Constantin Constantin. Data 12 august 2018 15:56:37
Problema Reuniune Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll a, b, c, d, x, y, z, t, area, perim, A, B, C, D, e, f, g, h, E, F, G, H;

int main(){
    ifstream cin ("reuniune.in");
    ofstream cout ("reuniune.out");
    cin >> a >> b >> c >> d;
    cin >> x >> y >> z >> t;
    area += (c-a)*(d-b) + (z-x)*(t-y);
    perim += 2*(c-a) + 2*(d-b) + 2*(z-x) + 2*(t-y);
    A = max(a, x); B = max(b, y); C = min(c, z); D = min(d, t);
    if ((C-A)*(D-B) > 0) area -= (C-A)*(D-B), perim -= 2*(C-A) + 2*(D-B);
    else if ((C-A)*(D-B) == 0) perim -= 2*max(C-A, D-B);
    cin >> e >> f >> g >> h;
    area += (g-e)*(h-f);
    perim += 2*(g-e + h-f);
    E = max(e, x); F = max(f, y); G = min(g, z); H = min(h, t);
    if ((G-E)*(H-F) > 0) area -= (G-E)*(H-F), perim -= 2*(G-E+H-F);
    else if ((G-E)*(H-F) == 0) perim -= 2*max(G-E, H-F);
    A = max(A, E); B = max(B, F); C = min(C, G); D = min(D, H);
    if ((C-A)*(D-B) > 0) area += (C-A)*(D-B), perim += 2*(C-A+D-B);
    //else if ((C-A)*(D-B) == 0)
    E = max(e, a); F = max(f, b); G = min(g, c); H = min(H, d);
    if ((G-E)*(H-F) > 0) area -= (G-E)*(H-F), perim -= 2*(G-E+H-F);
    else if ((G-E)*(H-F) == 0) perim -= 2*max(G-E, H-F);
    cout << area << " " << perim;
    return 0;
}