Pagini recente » Cod sursa (job #766629) | Cod sursa (job #1091737) | Cod sursa (job #3281191) | Cod sursa (job #143434) | Cod sursa (job #406572)
Cod sursa(job #406572)
#include<iostream>
#include<fstream.h>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<math.h>
using namespace std;
ifstream fin("cmp.in");
ofstream fout("cmp.out");
struct point
{
long long x,y;
};
long long lin,col,n,stanga;
double rez1,rez2,rez3;
point punct;
vector<point> v;
vector<int>::iterator it;
long long i,min=2502500,rez;
double teta(point p1, point p2)
{
return sqrt((double)((long long)((long long)p1.x-p2.x)*(p1.x-p2.x)+(long long)((long long)p1.y-p2.y)*(p1.y-p2.y)));
}
bool compare(point a, point b)
{
return (b.x>a.x);
}
double Divide_and_Conquer(long long st, long long dr,long long n)
{
double minim=2481294;
int i=0;
int j=0;
double dist;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(st<=v[i].x && v[i].x<=dr && st<=v[j].x && v[j].x<=dr)
{
dist=teta(v[i],v[j]);
if(dist<minim)
minim=dist;
}
return minim;
}
long long end,mj,p=1000000;
int main()
{
fin>>n;
for(i=0;i<n;i++)
{
fin>>punct.x>>punct.y;
v.push_back(punct);
}
sort(v.begin(),v.end(),compare);
for(i=0;i<n;i++)
cout<<v[i].x<<' '<<v[i].y<<' '<<"\n";
long long mj=(0+punct.x)/2;
end=punct.x;
rez1=Divide_and_Conquer(0,mj,n);
rez2=Divide_and_Conquer(mj+1,end,n);
cout<<rez1<<" "<<rez2;
if(rez1<rez2)
rez2=rez1;
else
rez1=rez2;
rez3=Divide_and_Conquer(double(mj)-rez1,double(mj)+rez1,n);
cout<<" "<<rez3;
if(rez3<rez1)
fout<<setprecision(6)<<rez3;
else
fout<<setprecision(6)<<rez1;
return 0;
}