Cod sursa(job #3168954)

Utilizator paaull69Ion Paul paaull69 Data 13 noiembrie 2023 21:14:25
Problema Reuniune Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.31 kb
#include <bits/stdc++.h>

using namespace std;
typedef long long int ll;
#define MOD 1000000007

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

int dist(int x1,int y1,int x2,int y2)
{
    return (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
}
int det(int x1,int y1,int x2,int y2,int x3,int y3)
{
    return (x2-x1)*(y3-y1)-(x3-x1)*(y2-y1);
}

struct point
{
    int x,y;
};

ll arr(point l,point r)
{
    return (long long)(r.x-l.x)*(long long)(r.y-l.y);
}
ll per(point l,point r)
{
    return (long long)(r.x-l.x)+(long long)(r.y-l.y);
}
ll areaofrect(point l1,point r1,point l2,point r2)
{
    long long dx=min(r1.x,r2.x)-max(l1.x,l2.x);
    long long dy=min(r1.y,r2.y)-max(l1.y,l2.y);
    long long ar=dx*dy >= 0 ? dx*dy : 0;
    return ar;
}
ll perofrect(point l1,point r1,point l2,point r2)
{
    ll dx=min(r1.x,r2.x)-max(l1.x,l2.x);
    ll dy=min(r1.y,r2.y)-max(l1.y,l2.y);
    if(dx < 0 || dy < 0)return 0;
    return dx+dy;
}
pair<point,point> v[4];

long long mn(int x,int y,int z)
{
    return min(min(x,y),z);
}
long long mx(int x,int y,int z)
{
    return max(max(x,y),z);
}
int main()
{
    ll tot=0,pr=0;
    for(int i=1;i<=3;i++)
    {
        fin >> v[i].first.x >> v[i].first.y >> v[i].second.x >> v[i].second.y;
        tot += arr(v[i].first,v[i].second);
        pr  += per(v[i].first,v[i].second);
    }
    tot -= areaofrect(v[1].first,v[1].second,v[2].first,v[2].second);
    tot -= areaofrect(v[3].first,v[3].second,v[2].first,v[2].second);
    tot -= areaofrect(v[3].first,v[3].second,v[1].first,v[1].second);

    ll dx= mn(v[1].second.x,v[2].second.x,v[3].second.x)-mx(v[1].first.x,v[2].first.x,v[3].first.x);
    ll dy= mn(v[1].second.y,v[2].second.y,v[3].second.y)-mx(v[1].first.y,v[2].first.y,v[3].first.y);
    ll ar= dx*dy > 0 ? dx*dy : 0;
    tot += ar;
    fout << tot << " ";

    pr -= perofrect(v[1].first,v[1].second,v[2].first,v[2].second);
    pr -= perofrect(v[3].first,v[3].second,v[2].first,v[2].second);
    pr -= perofrect(v[3].first,v[3].second,v[1].first,v[1].second);
    dx= mn(v[1].second.x,v[2].second.x,v[3].second.x)-mx(v[1].first.x,v[2].first.x,v[3].first.x);
    dy= mn(v[1].second.y,v[2].second.y,v[3].second.y)-mx(v[1].first.y,v[2].first.y,v[3].first.y);
    if(dx < 0 || dy < 0)fout << 2*pr;
    else fout << 2*(pr+dx+dy);

}