Cod sursa(job #2711518)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 24 februarie 2021 11:53:09
Problema Reuniune Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <bits/stdc++.h>
#define int long long
#define ABS(x) ((x) >= 0 ? (x) : -(x))

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 (ABS(x1 - x2) + ABS(y1 - y2)) << 1;
        }

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

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);
    return ans;
}

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';
}