Cod sursa(job #3340327)

Utilizator BuzdiBuzdugan Rares Andrei Buzdi Data 13 februarie 2026 18:36:35
Problema Reuniune Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <bits/stdc++.h>
#define ll long long
#define int long long

using namespace std;

const int INF = 1e9;

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

int X0[3], Y0[3], X1[3], Y1[3];
int xminren, xmaxren, yminren, ymaxren;
ll area;

signed main() {
//    ios::sync_with_stdio(0);
//    cin.tie(0);
//    cout.tie(0);

    for(int i = 0; i < 3; i++) {
        fin >> X0[i] >> Y0[i] >> X1[i] >> Y1[i];
    }

    xminren = yminren = INF + 1;
    xmaxren = ymaxren = -INF - 1;
    for(int i = 0; i < 3; i++) {
        xminren = min(xminren, X0[i]);
        xmaxren = max(xmaxren, X1[i]);
        yminren = min(yminren, Y0[i]);
        ymaxren = max(ymaxren, Y1[i]);
    }

    for(int mask = 1; mask < (1 << 3); mask++) {
        int xmininter, xmaxinter, ymininter, ymaxinter;
        xmininter = ymininter = -INF - 1;
        xmaxinter = ymaxinter = INF + 1;

        for(int i = 0; i < 3; i++) {
            if(mask >> i & 1) {
                xmininter = max(xmininter, X0[i]);
                xmaxinter = min(xmaxinter, X1[i]);
                ymininter = max(ymininter, Y0[i]);
                ymaxinter = min(ymaxinter, Y1[i]);
            }
        }

//        cout << bitset<3>(mask) << '\n';
//        cout << xmininter << ' ' << xmaxinter << ' ' << ymininter << ' ' << ymaxinter << '\n';

        int sign = (__builtin_popcount(mask) % 2 == 1 ? 1 : -1);
        if(xmininter <= xmaxinter && ymininter <= ymaxinter) {
//            cout << "GIGEL\n";
            area += sign * (ll)(ymaxinter - ymininter) * (xmaxinter - xmininter);
        }
    }

    fout << area << ' ' << 2 * (xmaxren - xminren + ymaxren - yminren) << '\n';

    return 0;
}