Pagini recente » Cod sursa (job #2740420) | Cod sursa (job #391254) | Cod sursa (job #464231) | Rating Pasarin Marina (Flavias) | Cod sursa (job #1044604)
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#define NMAX 51000
FILE *f,*g;
using namespace std;
int dl[]={-1, 1, 0, 0};
int dc[]={0, 0, -1, 1};
float sum;
int N;
struct point{
float x,y;
};
point fin;
point V[NMAX];
void read()
{
fscanf(f,"%d",&N);
for(int i=1 ; i<=N ; i++)
{
fscanf(f,"%f%f\n",&V[i].x,&V[i].y);
}
}
float dist(point a, point b)
{
float d;
d=sqrt((b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y));
return d;
}
void centru(point V[NMAX], int N, point &a)
{
a.x = 0;
a.y = 0;
for(int i=1; i<=N ; i++)
{
a.x += V[i].x;
a.y += V[i].y;
}
a.x = a.x/N;
a.y = a.y/N;
float newsum=0;
for(int j=1 ; j<=N ; j++)
{
newsum += dist(a,V[j]);
}
sum = newsum;
fin = a;
}
float suma(point V[NMAX], point b)
{
float newsum=0;
for(int j=1 ; j<=N ; j++)
{
newsum += dist(b,V[j]);
}
return newsum;
}
void solve(point V[NMAX], point a, float p)
{
bool sem=0;
while(!sem && p>0.000)
{
for(int i=0; i<4 ; i++)
{
point b;
b.x = a.x + dl[i] * p;
b.y = a.y + dc[i] * p;
float newsum=suma(V,b);
if( sum - newsum > 0.000 )
{
sem = 1;
swap(sum,newsum);
swap(fin,b);
solve(V,b,p/2);
}
}
p = p/2;
}
}
int main()
{
f=fopen("adapost2.in","r");
g=fopen("adapost2.out","w");
read();
point a;
centru(V,N,a);
fin = a;
solve(V,a,1);
fprintf(g,"%f %f",fin.x,fin.y);
fclose(f);
fclose(g);
return 0;
}