Pagini recente » Cod sursa (job #624161) | Cod sursa (job #611157) | Cod sursa (job #1690955) | Cod sursa (job #3287630) | Cod sursa (job #2069560)
#include <iostream>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;
int n;
struct Punct{float abs,ord;};
vector<Punct> v;
float distanta(float Abs1,float Ord1,float Abs2,float Ord2)
{
return sqrt((Abs1-Abs2)*(Abs1-Abs2)+(Ord1-Ord2)*(Ord1-Ord2));
}
float Suma(float Abs,float Ord)
{
int i;float sum=0;
for(i=0;i<n;++i)
sum+=distanta(Abs,Ord,v[i].abs,v[i].ord);
return sum;
}
void CautBin(float SumAbs,float SumOrd,float &RezAbs,float &RezOrd)
{
float Pas=1000;float Abs=SumAbs,Ord=SumOrd;RezAbs=Abs,RezOrd=Ord;
Pas=min(Pas,SumAbs);Pas=min(Pas,SumOrd);Pas=min(Pas,1000-SumOrd);Pas=min(Pas,1000-SumAbs);
float PrevFct=Suma(Abs,Ord),NewFct;
while(Pas>0.001)
{
NewFct=Suma(Abs+Pas,Ord+Pas);
if(NewFct<PrevFct) {RezAbs=Abs+=Pas;RezOrd=Ord+=Pas;PrevFct=NewFct;continue;}
NewFct=Suma(Abs+Pas,Ord-Pas);
if(NewFct<PrevFct) {RezAbs=Abs+=Pas;RezOrd=Ord+=Pas;PrevFct=NewFct;continue;}
NewFct=Suma(Abs-Pas,Ord+Pas);
if(NewFct<PrevFct) {RezAbs=Abs-=Pas;RezOrd=Ord+=Pas;PrevFct=NewFct;continue;}
NewFct=Suma(Abs-Pas,Ord-Pas);
if(NewFct<PrevFct) {RezAbs=Abs-=Pas;RezOrd=Ord-=Pas;PrevFct=NewFct;continue;}
Pas/=2;
}
}
int main()
{
ifstream f("adapost2.in");
ofstream g("adapost2.out");
f>>n;v.resize(n);float SumAbs=0,SumOrd=0;
int i;
for(i=0;i<n;i++)
{f>>v[i].abs>>v[i].ord;SumAbs+=v[i].abs;SumOrd+=v[i].ord;}
SumAbs/=n;SumOrd/=n;float x=0,y=0;
CautBin(SumAbs,SumOrd,x,y);
g<<x<<' '<<y<<'\n';
return 0;
}