Cod sursa(job #2665724)

Utilizator CraniXortDumitrescul Eduard CraniXort Data 31 octombrie 2020 11:41:14
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <bits/stdc++.h>

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

long long comb[55][55];
long long dp[55][55];

struct Dreptunghi{
    long long x1, y1;
    long long x2, y2;
}a[4];

Dreptunghi intersectie (Dreptunghi p, Dreptunghi k){
    long long x1, y1, x2, y2;

    x1 = std::max(p.x1, k.x1);
    y1 = std::max(p.y1, k.y1);
    x2 = std::min(p.x2, k.x2);
    y2 = std::min(p.y2, k.y2);

    if(x1 > x2 or y1 > y2){
        x1 = x2 = 0;
        y1 = y2 = 0;
    }

    return {x1, y1, x2, y2};
}

long long calculeaza(Dreptunghi p){
    long long arie=0;
    arie = (p.x2-p.x1) * (p.y2-p.y1);
    return arie;
}

long long calculeaza_perimetru(Dreptunghi p){
    long long perimetru=0;
    perimetru = 2 * (p.x2-p.x1) + 2*(p.y2-p.y1);
    return perimetru;
}

int main(){
    for(int i=1; i<=3; i++){
        fin >> a[i].x1 >> a[i].y1;
        fin >> a[i].x2 >> a[i].y2;
    }

    //Dreptunghi aux = intersectie(a[1], a[2]);
    //fout << aux.x1 << ' ' << aux.y1 << '\n' << aux.x2 << ' ' << aux.y2;

    long long arie=0;
    long long perimetru = 0;
    for(int i=1; i<=3; i++){
        arie += calculeaza(a[i]);
        perimetru += calculeaza_perimetru(a[i]);
    }
    for(int i=1; i<=3; i++){
        for(int j=i+1; j<=3; j++){
            Dreptunghi aux = intersectie(a[i], a[j]);
            arie -= calculeaza(aux);
            perimetru -=  calculeaza_perimetru(aux);
        }
    }

    Dreptunghi aux = intersectie(a[1], a[2]);
    aux = intersectie(aux, a[3]);

    arie += calculeaza(aux);
    perimetru += calculeaza_perimetru(aux);

    fout << arie << ' ' << perimetru << '\n';

    return 0;
}