Cod sursa(job #487892)

Utilizator freak93Adrian Budau freak93 Data 26 septembrie 2010 20:02:08
Problema Adapost 2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<fstream>
#include<algorithm>
#include<cmath>
#define point pair<double,double>
#define x first
#define y second

using namespace std;

const char iname[]="adapost2.in";
const char oname[]="adapost2.out";
const int maxn=50006;

ifstream f(iname);
ofstream g(oname);

double dis(point a,point b)
{
    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}

int n,i;
point a[maxn],p,q;
double m,aux,eps=1e-5;

int main()
{
    f>>n;
    if(n==1)
    {
        f>>a[i].x>>a[i].y;
        g.setf(ios::fixed,ios::floatfield);
        g.precision(4);
        g<<a[i].x<<" "<<a[i].y<<"\n";
        return 0;
    }
    for(i=1;i<=n;++i)
        f>>a[i].x>>a[i].y,p.x+=a[i].x,p.y+=a[i].y;
    p.x/=n;
    p.y/=n;
    while(1)
    {
        q.x=q.y=m=0;
        for(i=1;i<=n;++i)
            aux=dis(a[i],p),m+=1.0/aux,q.x+=a[i].x/aux,q.y+=a[i].y/aux;
        q.x/=m;
        q.y/=m;
        if(dis(p,q)<eps)
            break;
        p=q;
    }
    g.setf(ios::fixed,ios::floatfield);
    g.precision(4);
    g<<p.x<<" "<<p.y<<"\n";
}