Pagini recente » Cod sursa (job #2232643) | Cod sursa (job #112841) | Cod sursa (job #3032983) | Cod sursa (job #2235481) | Cod sursa (job #503921)
Cod sursa(job #503921)
#include<stdio.h>
#include<algorithm>
using namespace std;
#define inf 1<<29
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,j;
long long S,P;
int di[4] = {0,0,1,-1};
int dj[4] = {1,-1,0,0};
struct pct{
int x1; int y1; int x2; int y2;
} W[5];
void fill ( int i ,int j,int d ){
if ( !(i >= 0 && i <= k2 && j >= 0 && j <= p2 ) || A[i][j] == -inf )
return ;
if ( A[i][j] > 0 ){
if ( d > 1 ){
P += ((long long)(C[j+1] - C[j]));
}
else
P += ((long long)(L[i+1] - L[i]));
return ;
}
for ( int dd = 0 ; dd < 4 ; ++dd ){
A[i][j] = -inf;
fill(i+di[dd],j+dj[dd],dd);
}
}
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] ;
}
}
}
}
for ( i = 1 ; i < k2 ; ++i ){
for ( j = 1 ; j < p2; ++j ){
if ( A[i][j] > 0 ){
S += (long long)( L[i+1] - L[i] ) * ( C[j+1] - C[j] );
}
}
}
fill(0,0,0);
fprintf(g,"%lld %lld\n",S,P);
fclose(f);
fclose(g);
return 0;
}