Cod sursa(job #1244291)

Utilizator RatkinHHKNica Dan RatkinHHK Data 17 octombrie 2014 01:44:56
Problema Tribute Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.59 kb
#include "stdafx.h"
#include <stdio.h>

int i;
float N,DX,DY;
float Top,Bottom,Left,Right;
float X,Y;
float mediumX,mediumY;
float S;

float distance(float &X,float &Y)
{
	if(X==Left || X==Right || Y==Top || Y==Bottom) return 0;
	if(X<Left && Y>Top) return (Left-X)+(Y-Top);
	if(X<Left && Y<Top && Y>Bottom) return Left-X;
	if(X<Left && Y<Bottom) return (Left-X)+(Bottom-Y);
	if(X>Left && X<Right && Y>Top) return Y-Top;
	if(X>Left && X<Right && Y<Top && Y>Bottom) return 0;
	if(X>Left && X<Right && Y<Bottom) return Bottom-Y;
	if(X>Right && Y>Top) return (X-Right)+(Y-Top);
	if(X>Right && Y<Top && Y>Bottom) return X-Right;
	if(X>Right && Y<Bottom) return (X-Right)+(Bottom-Y);
}
void build()
{
	Top=mediumY+DY/2;
	Bottom=mediumY-DY/2;
	Left=mediumX-DX/2;
	Right=mediumX+DX/2;
}
float medium(float medium,float point,int i)
{
	if(point>medium) return medium+(point-medium)/i;
	if(point<medium) return medium-(medium-point)/i;
	if(point==medium) return medium;
}

void main()
{
	FILE* buffer;
	buffer = fopen("tribute.in","r");
	fscanf(buffer,"%f","%f","%f",N,DX,DY);

	fscanf(buffer,"%f","%f",mediumX,mediumY);
	for(i=2;i<=N;i++)
	{
		fscanf(buffer,"%f","%f",X,Y);
		mediumX=medium(mediumX,X,i);
		mediumY=medium(mediumY,Y,i);
	}
	fclose(buffer);
	build();

	buffer = fopen("tribute.in","r");
	fscanf(buffer,"%f","%f","%f",N,DX,DY);

	S=0;
	for(i=1;i<=N;i++)
	{
		fscanf(buffer,"%f","%f",X,Y);
		S=S+distance(X,Y);
	}
	/* printf("%f",S); */

	fclose(buffer);


	FILE *output;
	output = fopen("tribute.out","w");
	fprintf(output,"%f",S);
	fclose(output);

}