Pagini recente » Cod sursa (job #2604746) | Cod sursa (job #145779) | Cod sursa (job #2611515) | Cod sursa (job #482059) | Cod sursa (job #2430258)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <cmath>
#include <iomanip>
using namespace std;
ifstream fin ("cmap.in");
ofstream fout ("cmap.out");
typedef pair<long long int,long long int> dublu;
vector<dublu> p;
bool cmp(dublu a,dublu b)
{
if (a.first!=b.first)
return a.first<b.first;
return a.second<b.second;
}
long double dist(dublu a,dublu b)
{
return sqrt((a.first-b.first)*(a.first-b.first)+(a.second-b.second)*(a.second-b.second));
}
long double divide(int st,int dr)
{
if (dr-st<=2&&dr-st!=0)
{
long double v,mini=20000000;
mini=dist(p[st], p[st+1]);
for (int i=st+1;i<dr;i++)
{
v=dist(p[i],p[i+1]);
if (v<mini)
mini=v;
}
v=dist(p[st],p[dr]);
if (v<mini)
mini=v;
cout<<setprecision(6)<<fixed<<mini<<' ';
return mini;
}
int mij=(st+dr)/2;
///TODO
return min(divide(st, mij),divide(mij+1,dr));
}
int main()
{
int n;
fin>>n;
for (int i=0;i<n;i++)
{
int x,y;
fin>>x>>y;
p.push_back(make_pair(x, y));
}
sort(p.begin(), p.end(), cmp);
fout<<setprecision(6)<<fixed<<divide(0, n);
return 0;
}