Pagini recente » Istoria paginii runda/2920012225020/clasament | Cod sursa (job #638977) | Cod sursa (job #326762) | Cod sursa (job #220296) | Cod sursa (job #1234923)
#include <fstream>
#include <iomanip>
#include <cmath>
#define NMAX 50005
#define inf 200000000l
using namespace std;
int n;
struct punct
{
double x,y;
punct(double x=0,double y=0): x(x), y(y) {}
}v[NMAX];
double dist(const punct &a,const punct &b){
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double minim;
double dist_tot(const punct &a){
double total=0;
for(int i=1;i<=n;i++){
total+=dist(a,v[i]);
if(total>minim)
return inf;
}
return total;
}
int main()
{
ifstream cin("adapost2.in");
ofstream cout("adapost2.out");
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i].x>>v[i].y;
double x=0,y=0,aux;
minim=dist_tot(punct(0,0));
double step=1000;
for(int i=1;i<=23;i++){
while(1){
aux=dist_tot(punct(x+step,y));
if(aux<minim){
minim=aux;
x+=step;
continue;
}
aux=dist_tot(punct(x-step,y));
if(aux<minim){
minim=aux;
x-=step;
continue;
}
aux=dist_tot(punct(x,y+step));
if(aux<minim){
minim=aux;
y+=step;
continue;
}
aux=dist_tot(punct(x,y-step));
if(aux<minim){
minim=aux;
y-=step;
continue;
}
break;
}
step/=2;
}
cout<<fixed<<setprecision(4)<<x<<' '<<y<<'\n';
cin.close();
cout.close();
return 0;
}