Cod sursa(job #3297105)

Utilizator Lex._.Lexi Guiman Lex._. Data 21 mai 2025 09:31:48
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.14 kb
#include <bits/stdc++.h>
using namespace std;

struct dreptunghi
{
    int x1, x2, y1, y2;
    long long arie, per;
};

dreptunghi intersectie(dreptunghi d, dreptunghi e) ///calculeaza intersectia a doua dreptunghiuri
{
    dreptunghi intersectie;
    intersectie.x1=max(d.x1, e.x1);
    intersectie.x2=min(d.x2, e.x2);

    intersectie.y1=max(d.y1, e.y1);
    intersectie.y2=min(d.y2, e.y2);

    if(min(d.arie, e.arie)==0) ///daca una dintre arii este 0, inseamna ca intersectia va fi vida
    {
        intersectie.arie=0;
        intersectie.per=0;
    }
    else if(intersectie.x1>intersectie.x2 || intersectie.y1>intersectie.y2) ///daca intersectia este vida
    {
        intersectie.arie=0;
        intersectie.per=0;
    }
    else
    {
        intersectie.arie=(long long)(intersectie.x2-intersectie.x1)*(intersectie.y2-intersectie.y1); ///calculam aria si perimetrul
        intersectie.per=(long long)2*((intersectie.x2-intersectie.x1)+(intersectie.y2-intersectie.y1));
    }

    return intersectie;
}

int main()
{
    ifstream cin("reuniune.in");
    ofstream cout("reuniune.out");
    dreptunghi a, b, c;
    cin >> a.x1 >> a.y1 >> a.x2 >> a.y2; ///citim cele 3 dreptunghiuri
    cin >> b.x1 >> b.y1 >> b.x2 >> b.y2;
    cin >> c.x1 >> c.y1 >> c.x2 >> c.y2;
    ///calculam ariile si perimetrele celor 3 dreptunghiuri
    a.arie=(long long)(a.x2-a.x1)*(a.y2-a.y1);
    a.per=(long long)2*((a.x2-a.x1)+(a.y2-a.y1));

    b.arie=(long long)(b.x2-b.x1)*(b.y2-b.y1);
    b.per=(long long)2*((b.x2-b.x1)+(b.y2-b.y1));

    c.arie=(long long)(c.x2-c.x1)*(c.y2-c.y1);
    c.per=(long long)2*((c.x2-c.x1)+(c.y2-c.y1));

    dreptunghi a_b=intersectie(a, b), b_c=intersectie(b, c), c_a=intersectie(c, a); ///intersectiile dreptunghiurilor doua cate doua
    dreptunghi a_b_c=intersectie(a_b, c); ///intersectia tuturor dreptunghiurilor

    long long arie_reuniune, per_reuniune;
    arie_reuniune=(long long)a.arie+b.arie+c.arie-a_b.arie-b_c.arie-c_a.arie+a_b_c.arie;
    per_reuniune=(long long)a.per+b.per+c.per-a_b.per-b_c.per-c_a.per+a_b_c.per;

    cout << arie_reuniune << " " << per_reuniune;

    return 0;
}