Cod sursa(job #2094489)

Utilizator lorena1999Marginean Lorena lorena1999 Data 25 decembrie 2017 22:46:55
Problema Cele mai apropiate puncte din plan Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include <fstream>
#include <math.h>

using namespace std;

ifstream f("cmap.in");
ofstream g("cmap.out");

struct pct{int x, y;};

void afis(int n, pct v[])
    {
        cout<<n<<endl;
        for(int i=1; i<=n; i++)
            cout<<v[i].x<<" "<<v[i].y<<endl;
        cout<<endl;
    }

double calc(pct a, pct b)
    {
        return sqrt(pow(b.x-a.x, 2)+pow(b.y-a.y, 2));
    }

int compar(pct a, pct b)
    {
        if(a.x<b.x || a.x==b.x && a.y<b.y)
            return -1;
        else if(a.x>b.x || a.x==b.x && a.y>b.y)
            return 1;
        else return 0;
    }

void inserare(pct a, int &k, pct v[])
    {
        int i=k;
        while(i>0 && compar(a, v[i])<0)
        {
            v[i+1]=v[i];
            i--;
        }
        v[i+1]=a;
        k++;
    }

double det_dist(pct v[], int n)
    {
        double d_min=10000000;
        for(int i=1; i<n; i++)
        {
            double d=calc(v[i], v[i+1]);
            if(d<d_min)
                d_min=d;
        }
        return d_min;
    }

void prelucrare(pct v[], int n)
    {
        int k=0;
        pct a;
        f>>n;
        for(int i=1; i<=n; i++)
        {
            f>>a.x>>a.y;
            inserare(a, k, v);
        }
        //afis(n, v);
        g<<det_dist(v, n);
    }

int main()
{
    pct v[100001];
    int n;
    prelucrare(v, n);
    return 0;
}