Cod sursa(job #3168328)

Utilizator Botnaru_VictorBotnaru Victor Botnaru_Victor Data 11 noiembrie 2023 23:27:38
Problema Reuniune Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>

using namespace std;

#ifndef LOCAL
string name="reuniune";
ifstream in(name+".in");
ofstream out(name+".out");
#define cin in
#define cout out
#endif // LOCAL

#define int long long

struct dr{
    int t,l,r,b;
    dr reuniune(dr &other)
    {
        dr ans;
        ans.l=max(l,other.l);
        ans.r=min(r,other.r);
        ans.t=min(t, other.t);
        ans.b=max(b,other.b);

        return ans;
    }

    pair<int,int> area()
    {
        if(l>r||b>t) return {0ll,0ll};
        return {(r-l)*(t-b),2*(r-l+t-b)};
    }
};

istream& operator >>(istream &in, dr &a)
{
    in>>a.l>>a.b>>a.r>>a.t;
    return in;
}

pair<int,int> operator +(const pair<int, int> &a,const pair<int,int > &b)
{
    return {a.first+b.first, a.second+b.second};
}
pair<int,int> operator -(const pair<int, int> &a,const pair<int,int > &b)
{
    return {a.first-b.first, a.second-b.second};
}

int32_t main()
{
    dr a,b,c;
    cin>>a>>b>>c;

    pair<int,int> ans=a.area()+b.area()+c.area();
    ans=ans-(a.reuniune(b).area()+b.reuniune(c).area()+c.reuniune(a).area());
    ans=ans+a.reuniune(b).reuniune(c).area();
    cout<<ans.first<<' '<<ans.second<<' '<<'\n';
    return 0;
}

/*
0 0 8 6
4 2 11 9
2 -2 6 4
*/