Pagini recente » Cod sursa (job #3228323) | Cod sursa (job #1978969) | Cod sursa (job #2708671) | Cod sursa (job #3264200) | Cod sursa (job #3155290)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin ("adapost2.in");
ofstream cout ("adapost2.out");
const short directie[2][4] = {{-1 , 0 , 1 , 0} , {0 , 1 , 0 , -1}};
double abscisa = 500 , ordonata = 500 , distanta_minima;
pair <double , double> coordonate[50001];
int numar_soldati;
double Distanta (pair <double , double> locatie)
{
double distanta = 0;
for (int indice = 1 ; indice <= numar_soldati ; indice++)
distanta += sqrt((locatie.first - coordonate[indice].first) * (locatie.first - coordonate[indice].first) + (locatie.second - coordonate[indice].second) * (locatie.second - coordonate[indice].second));
return distanta;
}
void Cautare ()
{
for (double salt = 250 ; salt >= 0.0001 ; salt *= 0.5)
for (int indice = 0 ; indice < 4 ; indice++)
{
const double _abscisa = abscisa + salt * directie[0][indice] , _ordonata = ordonata + salt * directie[1][indice] , _distanta = Distanta(make_pair(_abscisa , _ordonata));
if (_distanta < distanta_minima) { abscisa = _abscisa; ordonata = _ordonata; distanta_minima = _distanta; }
}
}
int main ()
{
cin >> numar_soldati;
for (int indice = 1 ; indice <= numar_soldati ; indice++)
cin >> coordonate[indice].first >> coordonate[indice].second;
distanta_minima = Distanta(make_pair(abscisa , ordonata));
Cautare();
cout << fixed << abscisa << ' ' << ordonata;
cout.close(); cin.close();
return 0;
}