Cod sursa(job #2974048)

Utilizator 100pCiornei Stefan 100p Data 2 februarie 2023 23:15:56
Problema Reuniune Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <bits/stdc++.h>

#define int long long

using namespace std;

struct rectangle
{
    int x1, y1;
    int x2, y2;
};

int bestX, bestY, worstX = 1e9, worstY = 1e9, totalPoints;

vector <rectangle> v;

signed main()
{
    for(int i = 1;i <= 3; ++i)
    {
        int a, b, c, d;
        std::cin >> a >> b >> c >> d;
        bestX = max(bestX, c), bestY = max(bestY, d);
        worstX = min(worstX, a), worstY = min(worstY, b);
        totalPoints += (c - a) * (d - b);
        v.push_back({a, b, c, d});
    }

    int p = (bestX + bestY - worstX - worstY) * 2;
    for(int i = 1;i < (1 << 3); ++i)
    {
        if(i == 1 || i == 2 | i == 4)
            continue;
        int rightX = -1e9, rightY = 1e9, leftX = 1e9, leftY = -1e9, cnt = 0, bits = 0;
        for(int j = 1;j <= i; j *= 2)
        {
            if(i & j)
            {
                rightX = max(rightX, v[cnt].y1), leftY = max(leftY, v[cnt].x1);
                rightY = min(rightY, v[cnt].x2), leftX = min(leftX, v[cnt].y2);

                bits++;
            }
            cnt++;
        }
        if(bits % 2)
            totalPoints += abs((leftX - rightX)) * abs((leftY - rightY));
        else
            totalPoints -= abs((leftX - rightX)) * abs((leftY - rightY));
    }
    std::cout << totalPoints << ' ' << p;
}