Pagini recente » Istoria paginii runda/hlo-2023-cls9-tema0 | Cod sursa (job #1639366) | Cod sursa (job #906640) | Cod sursa (job #2293492) | Cod sursa (job #1073845)
#include<iostream>
#include<cstdio>
#include<cmath>
#define eps 0.0000001
using namespace std;
typedef struct un_punct
{
double x;
double y;
}punct;
punct p[50000];
int n;
double distanta(double x1, double y1)
{
int i;
double s=0;
for(i=0; i<n; i++)
{
s+=sqrt((p[i].x-x1)*(p[i].x-x1)+(p[i].y-y1)*(p[i].y-y1));
}
return s;
}
int main()
{
FILE *fin, *fout;
fin=fopen("adapost2.in","r");
fout=fopen("adapost2.out","w");
int aux, i, j;
double a, b, pas,s, pa, pb, smin, sx=0, sy=0;
fscanf(fin, "%d", &n);
for(i=0; i<n; i++)
{
fscanf(fin, "%lf %lf", &p[i].x, &p[i].y);
sx+=p[i].x;
sy+=p[i].y;
}
a=sx/(n*1.0);
b=sy/(n*1.0);
smin=distanta(a,b);
pas=100;
while(pas>0.0001)
{
double da[]={pas, -pas, 0, 0};
double db[]={0, 0, pas, -pas};
aux=-1;
for(j=0; j<4 && aux==-1; j++)
{
pa=a+da[j];
pb=b+db[j];
s=distanta(pa, pb);
if(s<smin)
{
smin=s;
aux=j;
}
}
if(aux!=-1)
{
a=a+da[aux];
b=b+db[aux];
pas*=2;
}
pas/=2;
}
fprintf(fout, "%lf %lf", a, b);
}