Cod sursa(job #3223084)

Utilizator unomMirel Costel unom Data 12 aprilie 2024 13:15:30
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <fstream>

using namespace std;

#define int long long

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

ifstream in("reuniune.in");
ofstream out("reuniune.out");
el v[10];
el w[10];
int a, p;

signed main()
{
    for(int i = 1; i<=3; i++)
    {
        in>>v[i].x1>>v[i].y1>>v[i].x2>>v[i].y2;

        a += (v[i].x2 - v[i].x1) * (v[i].y2 - v[i].y1);
        p += (v[i].x2 - v[i].x1) * 2 + (v[i].y2 - v[i].y1) * 2;
    }

    int x1, y1, x2, y2;

    int cnt = 0;
    for(int i = 1; i<=3; i++)
    {
        for(int j = i + 1; j<=3; j++)
        {
            x1 = max(v[i].x1, v[j].x1);
            x2 = min(v[i].x2, v[j].x2);
            y1 = max(v[i].y1, v[j].y1);
            y2 = min(v[i].y2, v[j].y2);

            if(x1 <= x2 && y1 <= y2)
            {
                a -= (x2 - x1) * (y2 - y1);
                p -= (x2 - x1) * 2 + (y2 - y1) * 2;
            }

            cnt++;
            w[cnt] = {x1, y1, x2, y2};

            //out<<x1<<" "<<y1<<" -> "<<x2<<" "<<y2<<'\n';
        }
    }

    if(w[3].x1 <= w[3].x2 && w[3].y1 <= w[3].y2)
    {
        //intersectia la toate 3
        x1 = max(v[1].x1, w[3].x1);
        x2 = min(v[1].x2, w[3].x2);
        y1 = max(v[1].y1, w[3].y1);
        y2 = min(v[1].y2, w[3].y2);


        if(x1 <= x2 && y1 <= y2)
        {
            a += (x2 - x1) * (y2 - y1);
            p += (x2 - x1) * 2 + (y2 - y1) * 2;
        }
    }


    out<<a<<" "<<p;

    return 0;
}