Pagini recente » Cod sursa (job #2278319) | Cod sursa (job #1868113) | Cod sursa (job #1826758) | Cod sursa (job #2631242) | Cod sursa (job #1438304)
#include<iostream>
#include<fstream>
#include<math.h>
#include<iomanip>
using namespace std;
#define NMAX 500001
struct punct {
int x,y;
};
punct v[NMAX];
double dx[]={0,-1.0,0.0,1.0,0.0};
double dy[]={0,0.0,1.0,0.0,-1.0};
double dist(punct a, punct b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double suma(punct a, int n)
{
double s;
int i;
s=0;
for(i=1;i<=n;i++)
s=s+dist(a,v[i]);
return s;
}
int main ()
{
int n,i,j,ok,step;
double value,d,x,y;
punct sol,aux,pmin;
ifstream f("adapost2.in");
ofstream g("adapost2.out");
f>>n;
for(i=1;i<=n;i++) {
f>>x>>y;
v[i].x=round(x*1000);
v[i].y=round(y*1000);
}
f.close();
sol.x=0;
sol.y=0;
for(i=1;i<=n;i++) {
sol.x=sol.x+v[i].x;
sol.y=sol.y+v[i].y;
}
sol.x=sol.x/n;
sol.y=sol.y/n;
step=1000000;
for(i=1;i<=35;i++) {
value=suma(sol,n);
pmin=sol;
ok=1;
for(j=1;j<=4;j++) {
aux.x=sol.x+dx[j]*step;
aux.y=sol.y+dy[j]*step;
d=suma(aux,n);
if(d<value) {
value=d;
pmin=aux;
ok=0;
}
}
if(ok)
step=step/2;
sol=pmin;
}
g<<fixed;
g<<setprecision(3)<<sol.x/1000.0<<" "<<sol.y/1000.0;
g.close();
return 0;
}