Cod sursa(job #2711522)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 24 februarie 2021 11:58:10
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <bits/stdc++.h>
#define int long long

using namespace std;

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

class rectangle {
    public:
        int x1, y1, x2, y2;

        void read() {
            fin >> x1 >> y1 >> x2 >> y2;
        }

        int perimeter() {
            return (x2 - x1 + y2 - y1) << 1;
        }

        int area() {
            return (x2 - x1) * (y2 - y1);
        }
};

rectangle intersect(const rectangle &A, const rectangle &B) {
    rectangle ans;
    ans.x1 = max(A.x1, B.x1);
    ans.y1 = max(A.y1, B.y1);
    ans.x2 = min(A.x2, B.x2);
    ans.y2 = min(A.y2, B.y2);
    if(ans.x1 <= ans.x2 && ans.y1 <= ans.y2)
        return ans;
    return rectangle{0, 0, 0, 0};
}

int32_t main() {
    vector<rectangle> a(3);
    for(auto &x : a)
        x.read();
    int A = a[0].area() + a[1].area() + a[2].area()
            - intersect(a[0], a[1]).area() - intersect(a[0], a[2]).area() - intersect(a[1], a[2]).area()
            + intersect(intersect(a[0], a[1]), a[2]).area();
    int P = a[0].perimeter() + a[1].perimeter() + a[2].perimeter()
            - intersect(a[0], a[1]).perimeter() - intersect(a[0], a[2]).perimeter() - intersect(a[1], a[2]).perimeter()
            + intersect(intersect(a[0], a[1]), a[2]).perimeter();
    fout << A << ' ' << P << '\n';
}