Cod sursa(job #503748)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 24 noiembrie 2010 19:12:14
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
FILE*f=fopen("reuniune.in","r");
FILE*g=fopen("reuniune.out","w");

int i,lin[20],col[20],L[20],C[20],k,p,k2,p2,A[20][20],d,S,j,P;

struct pct{
	int x1; int y1; int x2; int y2;
} W[5];

int abs(int a){
	if ( a < 0 )
		return -a;
	return a;
}


int main () {
	
	for ( i = 1 ; i <= 3 ; ++i ){
		fscanf(f,"%d %d %d %d",&W[i].x1,&W[i].y1,&W[i].x2,&W[i].y2);
		lin[++k] = W[i].x1; lin[++k] = W[i].x2;
		col[++p] = W[i].y1; col[++p] = W[i].y2;
	}
	sort(lin+1,lin+k+1); sort(col+1,col+k+1);
	lin[0] = col[0] = -1<<29;
	for ( i = 1 ; i <= k ; ++ i ){
		if ( lin[i] != lin[i-1] )
			L[++k2] = lin[i];
		if ( col[i] != col[i-1] )
			C[++p2] = col[i];
	}
	
	for ( i = 1 ; i < k2 ; ++i ){
		for ( j = 1 ; j < p2; ++j ){
			
			for ( d = 1 ; d <= 3 ; ++d ){
				if ( L[i] >= W[d].x1 && L[i+1] <= W[d].x2 && C[j] >= W[d].y1 && C[j+1] <= W[d].y2 ){
					A[i][j] = 1;
					S += (abs( L[i+1] - L[i] )) * (abs(C[j+1] - C[j] ));
					break;
				}
				
			}
			
		}
	}
	
	for ( i = 1 ; i < k2 ; ++i ){
		for ( j = 1 ; j < p2; ++j ){
			if ( A[i][j] && !A[i-1][j] )
				P += L[i+1] - L[i];
			if ( A[i][j] && !A[i][j+1] )
				P += C[j+1] - C[j];
			if ( A[i][j] && !A[i-1][j] )
				P += C[i+1] - C[i];
			if ( A[i][j] && !A[i][j-1] )
				P += L[i+1] - L[i];
		}
	}
	
	/*
	for ( i = 1 ; i < k2 ; ++i ){
		for ( j = 1 ; j < p2; ++j )
			fprintf(g,"%d ",A[i][j]);
		
		fprintf(g,"\n");
	}
	*/
	
	fprintf(g,"%d %d\n",S,P);
	
	fclose(f);
	fclose(g);
	
	return 0;
}