Cod sursa(job #191580)

Utilizator scvalexAlexandru Scvortov scvalex Data 27 mai 2008 13:46:27
Problema Adapost 2 Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

const double eps = 1e-10;

int N;
double X[50001], Y[50001];
double Xm, Ym;

double d, D;

inline double dist(double x1, double y1, double x2, double y2)
{
	return sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
}

int main(int argc, char *argv[]) 
{
	FILE *fi = fopen("adapost2.in", "r");
	fscanf(fi, "%d", &N);
	for (int i(0); i < N; ++i) {
		fscanf(fi, "%lf %lf", X+i, Y+i);
		Xm += X[i];
		Ym += Y[i];
	}
	fclose(fi);

	Xm = Xm / (double)N;
	Ym = Ym / (double)N;

	for (int i(0); i < N; ++i)
		d += dist(Xm, Ym, X[i], Y[i]);

	while (fabs(d-D) > eps) {
		/*cout << d << endl;
		  cout << Xm << " " << Ym << endl;*/
		D = d;
		
		double xm = Xm;
		double ym = Ym;
		Xm = Ym = 0;
	      
		double s(0);
		for (int i(0); i < N; ++i) {
			double aux = dist(xm, ym, X[i], Y[i]);
			Xm += X[i]/aux;
			Ym += Y[i]/aux;
			s += 1.0 / aux;
		}
		Xm /= s;
		Ym /= s;

		d = 0;
		for (int i(0); i < N; ++i)
			d += dist(Xm, Ym, X[i], Y[i]);
	}

	FILE *fo = fopen("adapost2.out", "w");
	fprintf(fo, "%.4lf %.4lf\n", Xm, Ym);
	fclose(fo);

	return 0;
}