Cod sursa(job #2970828)

Utilizator AndreibatmanAndrei Croitoriu Andreibatman Data 25 ianuarie 2023 22:46:30
Problema Reuniune Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
struct rectangle
{
    long long ok,left,bottom,right,top;
}v[4];
long long i,j,p,a;
long long perimetru(rectangle x)
{
    return 2*((x.right-x.left)+(x.top-x.bottom));
}
long long arie(rectangle x)
{
    return (x.right-x.left)*(x.top-x.bottom);
}
rectangle rect(rectangle x,rectangle y)
{
    if(x.ok==-1 || y.ok==-1)
        return {-1,0,0,0,0};
    if(x.right<=y.left || x.left>=y.right)
        return {-1,0,0,0,0};
    if(x.top<=y.bottom || x.bottom>=y.top)
        return {-1,0,0,0,0};
    return {1,max(x.left,y.left),max(x.bottom,y.bottom),min(x.right,y.right),min(x.top,y.top)};
}
signed main()
{
    for(i=1;i<=3;i++)
    {
        fin>>v[i].bottom>>v[i].left>>v[i].top>>v[i].right;
        v[i].ok=1;
        p=p+perimetru(v[i]);
        a=a+arie(v[i]);
    }
    for(i=1;i<=2;i++)
        for(j=i+1;j<=3;j++)
        {
            if(rect(v[i],v[j]).ok==-1)
                continue;
            p=p-perimetru(rect(v[i],v[j]));
            a=a-arie(rect(v[i],v[j]));
        }
    if(rect(rect(v[1],v[2]),v[3]).ok!=-1)
    {
        p=p+perimetru(rect(rect(v[1],v[2]),v[3]));
        a=a+arie(rect(rect(v[1],v[2]),v[3]));
    }
    fout<<a<<" "<<p<<'\n';
    return 0;
}