Pagini recente » Cod sursa (job #1578832) | Cod sursa (job #1683330) | Cod sursa (job #398232) | Cod sursa (job #2097014) | Cod sursa (job #2069741)
#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;
float Abs=SumAbs,Ord=SumOrd;
RezAbs=Abs,RezOrd=Ord;
Pas=1000.0;
float PrevFct=Suma(Abs,Ord),NewFct;
while(Pas>=0.000001)
{
if(Abs+Pas<=1000.0 && Ord+Pas<=1000.0)
{
NewFct=Suma(Abs+Pas,Ord+Pas);
if(NewFct<=PrevFct)
{
RezAbs=Abs+=Pas;
RezOrd=Ord+=Pas;
PrevFct=NewFct;
}
}
if(Abs+Pas<=1000.0 && Ord-Pas>=0.0)
{
NewFct=Suma(Abs+Pas,Ord-Pas);
if(NewFct<=PrevFct)
{
RezAbs=Abs+=Pas;
RezOrd=Ord+=Pas;
PrevFct=NewFct;
}
}
if(Abs-Pas>=0.0 && Ord+Pas<=1000.0)
{
NewFct=Suma(Abs-Pas,Ord+Pas);
if(NewFct<=PrevFct)
{
RezAbs=Abs-=Pas;
RezOrd=Ord+=Pas;
PrevFct=NewFct;
}
}
if(Abs-Pas>=0.0 && Ord-Pas>=0.0)
{
NewFct=Suma(Abs-Pas,Ord-Pas);
if(NewFct<=PrevFct)
{
RezAbs=Abs-=Pas;
RezOrd=Ord-=Pas;
PrevFct=NewFct;
}
}
Pas*=0.6;
}
}
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;
}