Cod sursa(job #403166)

Utilizator alexandru92alexandru alexandru92 Data 24 februarie 2010 18:02:48
Problema Adapost 2 Scor 12
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstdlib>

/*
 *
 */
using namespace std;
struct pr
{
	double first, second;
	pr() { first=second=0; }
}p, p2;
vector< pr > v;
const short dx[]={ -1, 0, 0, 1 }, dy[]={ 0, -1, 1, 0 };
double distance( pr p )
{
	double d=0;
	for( unsigned i=0, N=v.size(); i < N; ++i )
		d+=sqrt( ( v[i].first-p.first )*( v[i].first-p.first ) + ( v[i].second-p.second )*( v[i].second-p.second ) );
	return d;
}
void search( void )
{
	unsigned int i;
	double pas=1<<10, d2, d=distance( p );
	while( pas >= 0.001 )
	{
		for( i=0; i < 4; ++i )
		{
			p2.first=p.first+dx[i]*pas;
			p2.second=p.second+dy[i]*pas;
			d2=distance( p2 );
			if( d2 < d )
			{
				fprintf( fopen( "adapost2.out", "wt" ), "%lf %lf", p2.first, p2.second );
				exit( 0 );
			}
		}
		pas/=2;
	}
	fprintf( fopen( "adapost2.out", "wt" ), "%lf %lf", p.first, p.second );
}
int main( void )
{
	int n;
	freopen( "adapost2.in", "rt", stdin );
	scanf( "%d", &n );
	for( ; n; --n )
	{
		scanf( "%lf %lf", &p2.first, &p2.second );
		v.push_back( p2 );
		p.first+=p2.first;
		p.second+=p2.second;
	}
	n=v.size();
	p.first/=n;
	p.second/=n;
	search();
	return 0;
}