Cod sursa(job #2419570)

Utilizator dragos231456Neghina Dragos dragos231456 Data 8 mai 2019 20:54:02
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <bits/stdc++.h>
#define pb push_back

using namespace std;

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<long long,long long> per;
typedef long double LD;

const long long N=100005;
const long long M=1005;
const LL mod=1000000007;
const long long inf=(1<<30);
const LL linf=(1LL<<61);

ifstream f("reuniune.in");
ofstream g("reuniune.out");

///LONG LONG

struct drept{
    long long x1,y1,x2,y2;
}v[5];

long long Ar,P;

bool unite(drept&A,drept B)
{
    if(B.x1<A.x1) swap(A,B);
    else if(A.x1==B.x1 && B.y1<A.y1) swap(A,B);

    if(A.y2<B.y1) return 1;
    if(A.x2<B.x1) return 1;

    A.x1=max(A.x1,B.x1); A.y1=max(A.y1,B.y1);
    A.x2=min(A.x2,B.x2); A.y2=min(A.y2,B.y2);

    return 0;
}

void doua(drept A,drept B)
{
    if(unite(A,B)) return;
    Ar-=(A.x2-A.x1)*(A.y2-A.y1);
    P-=2*(A.x2-A.x1+A.y2-A.y1);
}

void all(drept A,drept B,drept C)
{
    if(unite(A,B) || unite(A,C)) return;
    Ar+=(A.x2-A.x1)*(A.y2-A.y1);
    P+=2*(A.x2-A.x1+A.y2-A.y1);
}

void arie()
{
    ///sigma 1
    for(long long i=1;i<=3;++i) Ar+=(v[i].x2-v[i].x1)*(v[i].y2-v[i].y1), P+=2*(v[i].x2-v[i].x1+v[i].y2-v[i].y1);
    ///sigma 2
    for(long long i=1;i<=2;++i) for(long long j=i+1;j<=3;++j) doua(v[i],v[j]);
    ///sigma 3
    all(v[1],v[2],v[3]);
    g<<Ar<<' '<<P;
}

int main()
{
    for(long long i=1;i<=3;++i) f>>v[i].x1>>v[i].y1>>v[i].x2>>v[i].y2;
    arie();
    return 0;
}