Pagini recente » Cod sursa (job #1206878) | Cod sursa (job #546312) | Cod sursa (job #240706) | Cod sursa (job #2119222) | Cod sursa (job #476406)
Cod sursa(job #476406)
#include<fstream>
using namespace std;
ifstream fi("reuniune.in");
ofstream fo("reuniune.out");
int i,x0[3],y0[3],x1[3],y1[3],rasterX[7],rasterY[7];
bool filled[5][5];
long long A,P;
void addToRaster(int raster[], int c) {
int i=1,j;
while(i<=raster[0] && raster[i]<c) ++i;
if(i>raster[0]) raster[++raster[0]]=c;
else
if(c!=raster[i]) {
++raster[0];
for(j=raster[0];j>i;--j) raster[j]=raster[j-1];
raster[i]=c;
}
}
void fillRectangle(int k) {
int left,down,right,up,i,j;
for(left=1;rasterX[left]<x0[k];++left);
for(down=1;rasterY[down]<y0[k];++down);
for(right=left;rasterX[right]<x1[k];++right);
for(up=down;rasterY[up]<y1[k];++up);
for(i=left-1;i<right-1;++i)
for(j=down-1;j<up-1;++j) filled[i][j]=true;
}
void calculate() {
int i,j;
for(i=0;i<rasterX[0]-1;++i)
for(j=0;j<rasterY[0]-1;++j)
if(filled[i][j]) {
A+=(rasterX[i+2]-rasterX[i+1])*(rasterY[j+2]-rasterY[j+1]);
if(!i || !filled[i-1][j]) P+=rasterY[j+2]-rasterY[j+1];
if(i==rasterX[0]-2 || !filled[i+1][j]) P+=rasterY[j+2]-rasterY[j+1];
if(!j || !filled[i][j-1]) P+=rasterX[i+2]-rasterX[i+1];
if(j==rasterY[0]-2 || !filled[i][j+1]) P+=rasterX[i+2]-rasterX[i+1];
}
}
int main() {
for(i=0;i<3;++i) {
fi>>x0[i]>>y0[i]>>x1[i]>>y1[i];
addToRaster(rasterX,x0[i]);
addToRaster(rasterY,y0[i]);
addToRaster(rasterX,x1[i]);
addToRaster(rasterY,y1[i]);
}
for(i=0;i<3;++i) fillRectangle(i);
calculate();
fo<<A<<" "<<P<<"\n";
return 0;
}