Cod sursa(job #1728643)

Utilizator otnielMercea Otniel otniel Data 13 iulie 2016 14:13:26
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2 kb
#include<iostream>
#include<algorithm>
#include<fstream>
using namespace std;
struct drept
{
    long long x1,y1,x2,y2;


};
drept p1,p2,p3;
int inters(drept p,drept q)
{
    if(!(p.x2<q.x1||q.x2<p.x1||p.y1>q.y2&&q.y1>p.y2))
        return 1;
        else
        return 0;
}
long long inter3(drept p,drept q,drept t,int z)
{
    long long rx1,rx2,ry1,ry2;
    rx1=max(p.x1,q.x1);
    rx2=min(p.x2,q.x2);
    ry1=max(p.y1,q.y1);
    ry2=min(p.y2,q.y2);
    rx1=max(rx1,t.x1);
    ry1=max(ry1,t.y1);
    rx2=min(rx2,t.x2);
    ry2=min(ry2,t.y2);
    if(z==0)
    return (rx2-rx1)*(ry2-ry1);
    else
    return 2*(rx2-rx1+ry2-ry1);
}
long long arint(drept p,drept q,int z)
{
    long long rx1,rx2,ry1,ry2;

        rx1=max(p.x1,q.x1);
        ry1=max(p.y1,q.y1);
        rx2=min(p.x2,q.x2);
        ry2=min(p.y2,q.y2);
        if(z==0)
        return (rx2-rx1)*(ry2-ry1);
        else
        return 2*(rx2-rx1+ry2-ry1);
}
int main()
{

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

        f>>p1.x1>>p1.y1>>p1.x2>>p1.y2;
        f>>p2.x1>>p2.y1>>p2.x2>>p2.y2;
        f>>p3.x1>>p3.y1>>p3.x2>>p3.y2;

    long long  arie1,arie2,arie3,ariefin,per1,per2,per3,perfin;
    arie1=(p1.x2-p1.x1)*(p1.y2-p1.y1);
    arie2=(p2.x2-p2.x1)*(p2.y2-p2.y1);
    arie3=(p3.x2-p3.x1)*(p3.y2-p3.y1);
    per1=2*((p1.x2-p1.x1)+(p1.y2-p1.y1));
    per2=2*((p2.x2-p2.x1)+(p2.y2-p2.y1));
    per3=2*((p3.x2-p3.x1)+(p3.y2-p3.y1));
    ariefin=arie1+arie2+arie3;
    perfin=per1+per2+per3;

        if(inters(p1,p2))
        {ariefin=ariefin-arint(p1,p2,0);
        perfin=perfin-arint(p1,p2,1);
        }
        if(inters(p1,p3))
        {ariefin=ariefin-arint(p1,p3,0);
        perfin=perfin-arint(p1,p3,1);
        }
        if(inters(p2,p3))
        {ariefin=ariefin-arint(p2,p3,0);
        perfin=perfin-arint(p2,p3,1);}
        if(inters(p1,p2)&&inters(p2,p3)&&inters(p3,p1))
            {
                ariefin=ariefin+inter3(p1,p2,p3,0);
                perfin=perfin+inter3(p1,p2,p3,1);

            }
        g<<ariefin<<" "<<perfin<<endl;
}