Cod sursa(job #1708069)

Utilizator bleo16783FMI Bleotiu Cristian bleo16783 Data 26 mai 2016 15:24:55
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.7 kb
#include <iostream>
#include<fstream>
#include<algorithm>
using namespace std;
long long i,P,S,k,j,l1,l2,poz1,nr,poz,s1,s2,s3,s4,d1,d2,a,b,c,d;
bool w[4];
struct dr
{
    int x,y,a,b;
}v[4];
/*struct coord
{
    int val;
    int poz;
}x[7],y[7];*/
//int x10[4],x20[4],y10[4],y20[4];
bool compare(int a,int b)
{
    return(a<b);
}
int maxim(int a,int b)
{
    if(a>b)return a;
    return b;
}
int minim(int a,int b)
{
    if(a<b)return a;
    return b;
}
int modul(int a)
{
    if(a>0)return a;
    return (0-a);
}
int main()
{
    ifstream f("reuniune.in");
    for(i=1;i<4;++i)f>>v[i].x>>v[i].y>>v[i].a>>v[i].b;
    f.close();nr=0;
    while(w[0]<1)
    {
        //for(i=0;i<4;++i)cout<<w[i];cout<<'\n';
        poz=3;while(w[poz]>0){w[poz]=0;--poz;--nr;}
        ++nr;
        if(w[0]<1)
        {w[poz]=1;
        if(nr<2)
        {
            l1=v[poz].a-v[poz].x;
            l2=v[poz].b-v[poz].y;d1=l1*l2;d2=2*(l1+l2);
            S+=modul(d1);
            P+=modul(d2);
            //cout<<"arie si perimetru "<<S<<" "<<P<<'\n';
        }
        else
        {
            if(nr<3)
            {
                poz1=poz-1;while(w[poz1]<1)--poz1;
                //cout<<poz1<<" "<<poz<<'\n';
                a=maxim(v[poz].x,v[poz1].x);
                b=maxim(v[poz].y,v[poz1].y);
                c=minim(v[poz].a,v[poz1].a);
                d=minim(v[poz].b,v[poz1].b);
                if(d>=b&&c>=a)
                {
                    //cout<<poz<<" "<<poz1<<'\n';
                    l1=c-a;//cout<<x[3].val<<" "<<x[2].val<<'\n';
                    l2=d-b;//cout<<y[3].val<<" "<<y[2].val<<'\n';
                    d1=l1*l2;d2=2*(l1+l2);
                    S=S-modul(d1);
                    P=P-modul(d2);
                    //cout<<"aria este "<<S<<" si perimetrul este "<<P<<'\n';
                    //cout<<'\n';
                }
                //cout<<S<<" "<<P<<'\n';
            }
            else
            {
                a=v[1].x;b=v[1].y;
                c=v[1].a;d=v[1].b;
                for(i=2;i<4;++i)
                {
                    a=maxim(a,v[i].x);//x1[i].poz=i;
                    c=minim(c,v[i].a);//x2[i].poz=i;
                    b=maxim(b,v[i].y);//y1[i].poz=i;
                    d=minim(d,v[i].b);//y2[i].poz=i;
                }

                if(d>=b&&c>=a)
                {
                    l1=c-a;
                    l2=d-b;
                    S+=modul(l1*l2);
                    P+=2*modul(l1+l2);
                }
                //cout<<S<<" "<<P<<'\n';
            }
        }
        }
    }
    ofstream g("reuniune.out");
    g<<S<<" "<<P;
    g.close();
    return 0;
}