Cod sursa(job #2939433)

Utilizator Silviu_StefanStefan Silviu Silviu_Stefan Data 13 noiembrie 2022 18:06:14
Problema Reuniune Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <fstream>
#include <algorithm>
using namespace std;
struct segment{
    int st,dr;
};
struct dreptunghi{
    segment x,y;
}v[10];
int gasit=0;
segment intersectie(segment a,segment b){
    segment rez;
    rez.st=max(a.st,b.st);
    rez.dr=min(a.dr,b.dr);
    if(rez.st<=rez.dr){gasit++;}
    return rez;
}
pair<long long,long long> calc(dreptunghi a){
    pair<long long,long long>val;
    val.first=1LL*(a.x.dr-a.x.st)*(a.y.dr-a.y.st);
    val.second=2*(a.x.dr-a.x.st)+2*(a.y.dr-a.y.st);
    return val;
}
int main()
{
    ifstream fin("reuniune.in");
    ofstream fout("reuniune.out");
    segment a,b;int x1,y1,x2,y2;
    dreptunghi d;
    for(int i=1;i<=3;i++){
        fin>>x1>>y1>>x2>>y2;
        a.st=x1;a.dr=x2;
        b.st=y1;b.dr=y2;
        v[i].x=a;v[i].y=b;
    }
    long long arie=0,perimetru=0;
    pair<long long,long long>nr;
    for(int i=1;i<=3;i++){
        nr=calc(v[i]);
        arie+=nr.first;
        perimetru+=nr.second;
    }
    for(int i=1;i<=3;i++){
        for(int j=i+1;j<=3;j++){
            gasit=0;
            a=intersectie(v[i].x,v[j].x);
            b=intersectie(v[i].y,v[j].y);
            if(gasit==2){
                d.x=a;d.y=b;
                nr=calc(d);
                arie-=nr.first;
                perimetru-=nr.second;
            }
        }
    }
    gasit=0;
    a=intersectie(v[1].x,v[2].x);
    b=intersectie(v[1].y,v[2].y);
    if(gasit==2){
        gasit=0;
        a=intersectie(a,v[3].x);
        b=intersectie(b,v[3].y);
        if(gasit==2){
            d.x=a;d.y=b;
            nr=calc(d);
            arie+=nr.first;
            perimetru+=nr.second;
        }
    }
    fout<<arie<<" "<<perimetru<<'\n';
    return 0;
}