Pagini recente » Cod sursa (job #2369487) | Cod sursa (job #1146816) | Cod sursa (job #541094) | Cod sursa (job #969582) | Cod sursa (job #1054289)
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("adapost2.in");
ofstream out("adapost2.out");
const int NMAX = 50001;
const int DIST = 1250;
const int DIRECT = 9;
const double PREC = 0.00001;
const double dx[] = {0.0,0.0,0.0,1.0,1.0,1.0,-1.0,-1.0,-1.0};
const double dy[] = {0.0,1.0,-1.0,0.0,1.0,-1.0,0.0,1.0,-1.0};
class Point{
public:
double x,y;
Point(double x_ = 0, double y_ = 0){
x = x_;
y = y_;
}
}points[NMAX];
int N;
inline double distanceBetweenTwoPoints(const Point &a, const Point &b){
return sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));
}
inline double distanceToAllPoints(const Point &reper){
double distance = 0;
for(int i = 0; i < N; i++)
distance += distanceBetweenTwoPoints(reper,points[i]);
return distance;
}
int main()
{
int pos, j;
in >> N;
for(j = 0; j < N; j++)
in >> points[j].x >> points[j].y;
Point reperPoint = points[0];
Point aux;
double minDist = NMAX * 1000, auxDistance;
for(double precission = DIST; precission >= PREC; precission /=2){
//caut directia cea mai buna
for(j = 0; j < DIRECT; j++){
aux.x = reperPoint.x + dx[j]*precission;
aux.y = reperPoint.y + dy[j]*precission;
auxDistance = distanceToAllPoints(aux);
if(auxDistance < minDist){
minDist = auxDistance;
reperPoint = aux;
}
}
}
out << reperPoint.x << ' ' << reperPoint.y << '\n';
return 0;
}