Pagini recente » Cod sursa (job #1328440) | Cod sursa (job #1224455) | Cod sursa (job #422475) | Cod sursa (job #2653262) | Cod sursa (job #326313)
Cod sursa(job #326313)
#include<stdio.h>
#include<math.h>
#include<utility>
using namespace std;
#define fs first
#define sc second
#define mp make_pair
#define pdd pair<double,double>
#define N 50010
const double eps=1e-10;
int n;
pdd v[N],rez;
inline double modul(double x)
{
if(x<0)
return -x;
return x;
}
inline double dist(pdd &x,pdd &y)
{
return sqrt((x.fs-y.fs)*(x.fs-y.fs)+(x.sc-y.sc)*(x.sc-y.sc));
}
int main()
{
freopen("adapost2.in","r",stdin);
freopen("adapost2.out","w",stdout);
scanf("%d",&n);
pdd p;
for(int i=0; i<n; ++i)
{
scanf("%lf%lf",&v[i].fs,&v[i].sc);
rez.fs+=v[i].fs;
rez.sc+=v[i].sc;
}
rez.fs/=(double)n;
rez.sc/=(double)n;
double dacu=0.0,d=0.0;
for(int i=0; i<n; ++i)
dacu+=dist(rez,v[i]);
while(modul(dacu-d)>eps)
{
d=dacu;
p=rez;
rez.fs=rez.sc=0;
double aux=0;
for(int i=0; i<n; ++i)
{
dacu=dist(p,v[i]);
rez.fs+=v[i].fs/dacu;
rez.sc+=v[i].sc/dacu;
aux+=(1.0/dacu);
}
rez.fs/=aux;
rez.sc/=aux;
dacu=0;
for(int i=0; i<n; ++i)
dacu+=dist(rez,v[i]);
}
printf("%lf %lf\n",rez.fs,rez.sc);
return 0;
}