Cod sursa(job #3304515)

Utilizator Cyb3rBoltSbora Ioan-David Cyb3rBolt Data 24 iulie 2025 14:00:31
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
#define int long long

struct Iris {
    int x1, y1, x2, y2;

    bool ePosibil() { return x1 <= x2 && y1 <= y2; }
    int getPerimetru() { return 2 * (x2 - x1) + 2 * (y2 - y1); }
    int getArie() { return (x2 - x1) * (y2 - y1); }
}p1, p2, p3;

inline Iris reuniune(Iris a, Iris b) {
    Iris rez;
    rez.x1 = max(a.x1, b.x1);
    rez.y1 = max(a.y1, b.y1);
    rez.x2 = min(a.x2, b.x2);
    rez.y2 = min(a.y2, b.y2);
    if(!rez.ePosibil()) rez = {0, 0, 0, 0};
    return rez;
}

signed main()
{
    fin >> p1.x1 >> p1.y2 >> p1.x2 >> p1.y1;
    if(p1.x2 < p1.x1) swap(p1.x1, p1.x2);
    if(p1.y2 < p1.y1) swap(p1.y1, p1.y2);
    fin >> p2.x1 >> p2.y2 >> p2.x2 >> p2.y1;
    if(p2.x2 < p2.x1) swap(p2.x1, p2.x2);
    if(p2.y2 < p2.y1) swap(p2.y1, p2.y2);
    fin >> p3.x1 >> p3.y2 >> p3.x2 >> p3.y1;
    if(p3.x2 < p3.x1) swap(p3.x1, p3.x2);
    if(p3.y2 < p3.y1) swap(p3.y1, p3.y2);
    fout << p1.getArie() + p2.getArie() + p3.getArie() - reuniune(p1, p2).getArie() - reuniune(p1, p3).getArie() - reuniune(p2, p3).getArie() + reuniune(p1, reuniune(p2, p3)).getArie() << " ";
    fout << p1.getPerimetru() + p2.getPerimetru() + p3.getPerimetru() - reuniune(p1, p2).getPerimetru() - reuniune(p1, p3).getPerimetru() - reuniune(p2, p3).getPerimetru() + reuniune(p1, reuniune(p2, p3)).getPerimetru();

    return 0;
}