Cod sursa(job #43501)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 30 martie 2007 10:55:12
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<stdio.h>
long double x0[4],y0[4],x1[4],y1[4],a[7],b[7],aux,s[7][7],aria,per;
int i,lx,ly,ok,j,k;
int main()
{
	FILE *f,*g;
	f=fopen("reuniune.in","r");
	g=fopen("reuniune.out","w");
	for(i=1;i<=3;i++)
	{ fscanf(f,"%Lf%Lf%Lf%Lf",&x0[i],&y0[i],&x1[i],&y1[i]);
	  a[2*i-1]=x0[i];a[2*i]=x1[i];
	  b[2*i-1]=y0[i];b[2*i]=y1[i];
	}
	lx=6;ly=6;
	ok=1;
	while(ok)
	{       ok=0;
		for(i=1;i<lx;i++)
		{ if(a[i]==a[i+1]){a[i+1]=a[lx];lx--;ok=1;}
		  else if(a[i]>a[i+1])
			 {aux=a[i];a[i]=a[i+1];a[i+1]=aux;ok=1;}
		}
	}
	ok=1;
	while(ok)
	{       ok=0;
		for(i=1;i<ly;i++)
		{ if(b[i]==b[i+1]){b[i+1]=b[ly];ly--;ok=1;}
		  else if(b[i]>b[i+1])
			 {aux=b[i];b[i]=b[i+1];b[i+1]=aux;ok=1;}
		}
	}
	for(i=1;i<lx;i++)
	for(j=1;j<ly;j++)
	for(k=1;k<=3;k++)
	if(a[i]>=x0[k])
	 if(a[i+1]<=x1[k])
	  if(b[j]>=y0[k])
	   if(b[j+1]<=y1[k])
	    {s[i][j]=(a[i+1]-a[i])*(b[j+1]-b[j]);}
	for(i=1;i<lx;i++)
	for(j=1;j<ly;j++)
	aria+=s[i][j];
	for(i=0;i<=5;i++)
	for(j=0;j<=5;j++)
	{ if(s[i][j]!=0) { if(s[i][j+1]==0) per=per+(a[i+1]-a[i]);
			   if(s[i][j-1]==0) per=per+(a[i+1]-a[i]);
			   if(s[i+1][j]==0) per=per+(b[j+1]-b[j]);
			   if(s[i-1][j]==0) per=per+(b[j+1]-b[j]);}
	}
	fprintf(g,"%.0Lf %.0Lf\n",aria,per);
	fcloseall();
	return 0;
}