Cod sursa(job #2336944)

Utilizator Mr.IonutMuntean Ionut Mr.Ionut Data 5 februarie 2019 18:33:36
Problema Cele mai apropiate puncte din plan Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream fin("cmap.in");
ofstream fout("cmap.out");
double my_sqrt(double x)
{
    double a=1,b;
    double eps=0.000001; //eroare mai mica de 10 la -6
    do
    {
        b=a;
        a=(b+x/b)/2;
        //cout<<a<<'\n';

    }while(a-b>eps || b-a>eps);
    return a;
}
struct Punct{
    int x,y;
};
double ls(Punct p1, Punct p2)
{
    return my_sqrt( (p1.x-p2.x)*(p1.x-p2.x)+ (p1.y-p2.y)*(p1.y-p2.y) );
}
int main()
{
    int n;
    fin>>n;
    int i;
    Punct punct[105]={0};
    //double lungimi[4950]={0};
    for(i=1;i<=n;i++)
        fin>>punct[i].x>>punct[i].y;

    //double lminn=INT_MAX;

    Punct p1,p2;
    p1.x=1000000001;
    p1.y=1000000001;
    p2.x=-1000000001;
    p2.y=-1000000001;
    long double lminn=ls(p1,p2); // o lungime de segment determinata de oricare 2 puncte introduse nu poate fi mai mare decat
                            //aceasta valoare
    int j;
    //int xRet1,yRet1,xRet2,yRet2;
    double l;
    for(i=1;i<=n-1;i++)
        for(j=i+1;j<=n;j++)
        {
            l=ls(punct[i],punct[j]);
            /*cout<<l<<": "<<punct[i].x<<" "<<punct[i].y<<" "<<punct[j].x<<" "<<punct[j].y<<'\n';*/
            if(l<lminn) {lminn=l; /*cout<<lminn<<'\n'; xRet1=punct[i].x; yRet1=punct[i].y; xRet2=punct[j].x; yRet2=punct[j].y;*/}
        }
    fout<<fixed<<setprecision(6)<<lminn<<'\n';
    return 0;
}