Cod sursa(job #1762536)

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