Cod sursa(job #2031627)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 3 octombrie 2017 17:01:08
Problema Adapost 2 Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
# include <fstream>
# include <cmath>
# include <iomanip>
# include <algorithm>
# define DIM 50010
# define f first
# define s second
using namespace std;
ifstream fin("adapost2.in");
ofstream fout("adapost2.out");
pair<double,double> v[DIM];
pair<double,int> s[5];
double x,y,xx,yy,xm,ym;
int n,i,j;
double dist(double a,double b,double c,double d){
    return sqrt((a-c)*(a-c)+(b-d)*(b-d));
}
int main () {
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i].f>>v[i].s;
    x=0;
    y=0;
    xx=1024;
    yy=1024;
    for(j=1;j<=30;j++){
        xm=(x+xx)/2;
        ym=(y+yy)/2;
        for(i=1;i<=4;i++){
            s[i].f=0;
            s[i].s=i;
        }
        for(i=1;i<=n;i++){
            if(v[i].f<=xm&&v[i].s<=ym)
                s[1].f+=dist(v[i].f,v[i].s,xm,ym);
            if(v[i].f>xm&&v[i].s<=ym)
                s[2].f+=dist(v[i].f,v[i].s,xm,ym);
            if(v[i].f<=xm&&v[i].s>ym)
                s[3].f+=dist(v[i].f,v[i].s,xm,ym);
            if(v[i].f>xm&&v[i].s>ym)
                s[4].f+=dist(v[i].f,v[i].s,xm,ym);
        }
        sort(s+1,s+5);
        if(s[4].s==1){
            xx=xm;
            yy=ym;
        }
        if(s[4].s==2){
            x=xm;
            yy=ym;
        }
        if(s[4].s==3){
            xx=xm;
            y=ym;
        }
        if(s[4].s==4){
            x=xm;
            y=ym;
        }
    }
    xm=(x+xx)/2;
    ym=(y+yy)/2;
    fout<<setprecision(5)<<fixed<<xm<<" "<<ym<<"\n";
    return 0;
}