Cod sursa(job #1898423)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 2 martie 2017 00:27:37
Problema Reuniune Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <bits/stdc++.h>
struct Point{
   int x;
   int y;
};
struct Segment{
   Point A;
   Point B;
};
Segment D1,D2,D3;
inline long long myabs(long long x){
    if(x<0)
      x=-x;
    return x;
}
inline long long aria(Segment d){
    return 1LL*myabs(d.A.x-d.B.x)*myabs(d.A.y-d.B.y);
}
inline long long perim(Segment d){
    return myabs(d.A.x-d.B.x)+myabs(d.A.y-d.B.y);
}
inline void myswap(Segment d){
    int aux;
    if(d.A.x>d.B.x){
       aux=d.A.x;
       d.A.x=d.B.x;
       d.B.x=aux;
    }
    if(d.A.y>d.B.y){
       aux=d.A.y;
       d.A.y=d.B.y;
       d.B.y=aux;
    }
}
inline bool ok(Segment d1,Segment d2){
    return std::min(d2.B.x,d1.B.x)>=std::max(d1.A.x,d2.A.x)&&std::min(d2.B.y,d1.B.y)>=std::max(d1.A.y,d2.A.y);
}
bool flag;
inline Segment intersect(Segment d1,Segment d2){
    Segment d;
    if(ok(d1,d2)){
      d.A.x=std::max(d1.A.x,d2.A.x);
      d.A.y=std::max(d1.A.y,d2.A.y);
      d.B.x=std::min(d2.B.x,d1.B.x);
      d.B.y=std::min(d2.B.y,d1.B.y);
    }
    else
      flag=0;
    return d;
}
inline Segment drept(Segment d1,Segment d2){
    return intersect(d1,d2);
}
int main(){
    FILE*fi,*fout;
    fi=fopen("reuniune.in" ,"r");
    fout=fopen("reuniune.out" ,"w");
    fscanf(fi,"%d %d %d %d " ,&D1.A.x,&D1.A.y,&D1.B.x,&D1.B.y);
    myswap(D1);
    fscanf(fi,"%d %d %d %d " ,&D2.A.x,&D2.A.y,&D2.B.x,&D2.B.y);
    myswap(D2);
    fscanf(fi,"%d %d %d %d " ,&D3.A.x,&D3.A.y,&D3.B.x,&D3.B.y);
    myswap(D3);
    flag=1;
    Segment D=drept(D1,D2);
    if(flag)
       D=drept(D,D3);
    if(flag==0)
       fprintf(fout,"0 0");
    else{
       fprintf(fout,"%lld " ,aria(D1)+aria(D2)+aria(D3)-aria(drept(D1,D2))-aria(drept(D2,D3))-aria(drept(D1,D3))+aria(drept(D1,drept(D2,D3))));
       fprintf(fout,"%lld" ,2*(perim(D1)+perim(D2)+perim(D3)-perim(drept(D1,D2))-perim(drept(D2,D3))-perim(drept(D1,D3))+perim(drept(D1,drept(D2,D3)))));
    }
    fclose(fi);
    fclose(fout);
    return 0;
}