Cod sursa(job #2492663)

Utilizator Alexandra112Alexandra Rosca Alexandra112 Data 15 noiembrie 2019 09:22:51
Problema Cele mai apropiate puncte din plan Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 1.32 kb
def distanta(a,b):
    return (a[0]-b[0])*(a[0]-b[0])+(a[1]-b[1])*(a[1]-b[1])

def solutie(st,dr):
    print(st,dr)
    if(dr-st == 1):
        return distanta(v[st],v[dr])
    if(dr-st == 2):
        return min(distanta(v[st],v[st+1]),distanta(v[st+1],v[dr]),distanta(v[st],v[dr]))
    mij = math.floor((st+dr)/2)
    minim = min(solutie(st,mij),solutie(mij+1,dr))
    
    vector_puncte = []
    for i in range(st,dr+1):
        if((v[i][0]-v[mij][0])*(v[i][0]-v[mij][0]) < minim): #comparam cu punctul din mijloc pe dreapta x, punctul cel mai apropiat de dreapta verticala
            vector_puncte.append(v[i])
   # print(vector_puncte)
    vector_puncte = sorted(vector_puncte, key=itemgetter(1))
   # print(vector_puncte)
    for i in range(0, len(vector_puncte)):
        for j in range(i+1,i+8):
            if(j >= len(vector_puncte)):
                break
            minim = min(minim, distanta(vector_puncte[i],vector_puncte[j]))
    return minim   
 
from operator import itemgetter
import math 
f=open("T3-Pr4.txt","r")
n=int(f.readline())
v = []
for i in range(0,n):
    a=f.readline()
    a=a.split()
    for i in range(0,2):
        a[i] = int(a[i])
    v.append(a)
print(v)
v = sorted(v, key=itemgetter(0))
distanta_minima = math.sqrt(solutie(0,n-1))
print(distanta_minima)