Cod sursa(job #2547016)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 14 februarie 2020 20:24:03
Problema Cele mai apropiate puncte din plan Scor 15
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
using namespace std;
mt19937 rnd((long long)(new char));
#pragma GCC optimize("O3")
struct dd
{
    double x,y;
};
bool cmp(dd a ,dd b)
{
    if(a.x<b.x)return a.y<b.y;
    return a.x<b.x;
}
double dist(dd a,dd b)
{
    return sqrt((double)(b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y));
}
dd v1[100005];
dd v2[100005];
int main()
{
    freopen("cmap.in","r",stdin);
    freopen("cmap.out","w",stdout);
    int n,i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%lf%lf",&v1[i].x,&v1[i].y);
    double unghi=rnd();
    double cos1=cos(unghi),sin1=sin(unghi);
    for(i=1;i<=n;i++)
    {
        v2[i].x=v1[i].x*cos1-v1[i].y*sin1;
        v2[i].y=v1[i].x*sin1+v1[i].y*cos1;
    }
    sort(v2+1,v2+n+1,cmp);
    double dist_min=10000000;
    for(i=1;i<n;i++)
    {
        double d1=dist(v2[i],v2[i+1]);
        if(dist_min>d1)dist_min=d1;
    }
    printf("%.6lf",dist_min);
}