Cod sursa(job #2072140)

Utilizator robert_fanrRobert Banu robert_fanr Data 21 noiembrie 2017 14:41:45
Problema Cele mai apropiate puncte din plan Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;

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

struct punct {
    int x=0;
    int y=0;
};

double distEuclid(punct a, punct b) {
    double x = a.x - b.x;
    double y = a.y - b.y;
    double dist;

    dist = pow(x, 2) + pow(y, 2);           //calculating distance by euclidean formula
    dist = sqrt(dist);                  //sqrt is function in math.h

    return dist;
}

bool cmpDupaXSiY(const punct& a, const punct& b)
{
    if (a.x == b.x)
        return a.y < b.y;
    return a.x < a.y;
}

void distMinPunctePlan() {
    int n;
    in >> n;

    vector <punct> puncte(n);
    for (int i = 0; i < n; ++i) {
        in >> puncte[i].x;
        in >> puncte[i].y;
    }

    sort(puncte.begin(), puncte.end(), cmpDupaXSiY);
    double distMin = 2000000000;

    for (int i=0; i<puncte.size(); ++i) {
        for (int j=i+1; j <puncte.size() && j-i<=8; ++j) {
            double distCur = distEuclid(puncte[i],puncte[j]);
            if (distCur < distMin)
                distMin = distCur;
        }
    }

    out << fixed;
    out << setprecision(6) << distMin << "\n";
}

int main()
{
    distMinPunctePlan();
    return 0;
}