Cod sursa(job #1762544)

Utilizator Dan_RadulescuRadulescu Dan Dan_Radulescu Data 23 septembrie 2016 18:34:09
Problema Reuniune Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
FILE *f1=fopen("reuniune.in","r");
FILE *f2=fopen("reuniune.out","w");
long long xp1[3],yp1[3],xp2[3],yp2[3],xr1,yr1,xr2,yr2,arie,perim,i,sw=0;
void intersectie(int i,int j){
    if (yp2[i]<yp1[j]) {
            sw=1;
            return;
    }
    if (yp1[i]>yp2[j]) {
            sw=1;
            return;
    }
    if (xp2[i]<xp1[j]) {
            sw=1;
            return;
    }
    if (xp1[i]>xp2[j]) {
            sw=1;
            return;
    }
    yr2=min(yp2[i],yp2[j]);
    yr1=max(yp1[i],yp1[j]);
    xr2=min(xp2[i],xp2[j]);
    xr1=max(xp1[i],xp1[j]);
    arie=arie-(xr2-xr1)*(yr2-yr1);
    perim=perim-2*(xr2-xr1)-2*(yr2-yr1);
}
void intersectie3(){
    int x1f,y1f,x2f,y2f;
    if (sw==1) return;
    if (yr2<yp1[0]) {
            return;
    }
    if (yr1>yp2[0]) {
            return;
    }
    if (xr2<xp1[0]) {
            return;
    }
    if (xr1>xp2[0]) {
            return;
    }
    y2f=min(yr2,yp2[0]);
    y1f=max(yr1,yp1[0]);
    x2f=min(xr2,xp2[0]);
    x1f=max(xr1,xp1[0]);
    arie=arie+(x2f-x1f)*(y2f-y1f);
    perim=perim+2*(x2f-x1f)+2*(y2f-y1f);
}
int main(){
   for (i=0;i<=2;i++){
      fscanf(f1,"%lld%lld%lld%lld",&xp1[i],&yp1[i],&xp2[i],&yp2[i]);
      arie=arie+(xp2[i]-xp1[i])*(yp2[i]-yp1[i]);
      perim=perim+2*(xp2[i]-xp1[i])+2*(yp2[i]-yp1[i]);
   }
   intersectie(0,1);
   sw=0;
   intersectie(0,2);
   sw=0;
   intersectie(1,2);
   intersectie3();
   fprintf(f2,"%lld %lld",arie,perim);
   fclose(f1);
   fclose(f2);
   return 0;
}