Problem p02805 (python)

Fixed submission:
def get_center_and_radius(x1, y1, x2, y2, x3, y3):
    if (y2-y1)*(x3-x1)==(y3-y1)*(x2-x1):
        return -1, -1, -1
        
    d = 2*(x1-x2)*(y1-y3)-2*(x1-x3)*(y1-y2)
    cx = ((x1**2-x2**2+y1**2-y2**2)*(y1-y3)-(x1**2-x3**2+y1**2-y3**2)*(y1-y2))/d
    cy = ((x1**2-x3**2+y1**2-y3**2)*(x1-x2)-(x1**2-x2**2+y1**2-y2**2)*(x1-x3))/d
    r2 = (x1-cx)**2+(y1-cy)**2
    
    return cx, cy, r2
    
def is_inclusive(cx, cy, r2):
    for xi, yi in xy:
        if (xi-cx)**2+(yi-cy)**2>r2+1e-10:
            return False
    
    return True
    
N = int(input())
xy = [tuple(map(int, input().split())) for _ in range(N)]
R2 = 10**18

for i in range(N):
    for j in range(i+1, N):
        xi, yi = xy[i]
        xj, yj = xy[j]
        cx, cy = (xi+xj)/2, (yi+yj)/2
        r2 = (cx-xi)**2+(cy-yi)**2
        
        if is_inclusive(cx, cy, r2):
            R2 = min(R2, r2)

for i in range(N):
    for j in range(i+1, N):
        for k in range(j+1, N):
            xi, yi = xy[i]
            xj, yj = xy[j]
            xk, yk = xy[k]
            cx, cy, r2 = get_center_and_radius(xi, yi, xj, yj, xk, yk)
            
            if cx==-1:
                continue
            
            if is_inclusive(cx, cy, r2):
                R2 = min(R2, r2)

print(R2**0.5)

Buggy submission (verdict: Runtime Error):
from decimal import Decimal

def f(x1, y1, x2, y2, x3, y3):
    d = 2 * ((y1 - y3) * (x1 - x2) - (y1 - y2) * (x1 - x3))
    
    if d==0:
        return (-1, -1, -1), -1
        
    x = Decimal(((y1 - y3) * (y1 ** 2 - y2 ** 2 + x1 ** 2 - x2 ** 2) - (y1 - y2) * (y1 ** 2 - y3 ** 2 + x1 ** 2 - x3 ** 2)) / d)
    cx = ((y1 - y3) * (y1 ** 2 - y2 ** 2 + x1 ** 2 - x2 ** 2) - (y1 - y2) * (y1 ** 2 - y3 ** 2 + x1 ** 2 - x3 ** 2))
    y = Decimal(((x1 - x3) * (x1 ** 2 - x2 ** 2 + y1 ** 2 - y2 ** 2) - (x1 - x2) * (x1 ** 2 - x3 ** 2 + y1 ** 2 - y3 ** 2)) / -d)
    cy = ((x1 - x3) * (x1 ** 2 - x2 ** 2 + y1 ** 2 - y2 ** 2) - (x1 - x2) * (x1 ** 2 - x3 ** 2 + y1 ** 2 - y3 ** 2))
    r = ((x - x1) ** 2 + (y - y1) ** 2)
    #return (x, y, d), r
    return (cx, cy, d), r

def f2(d, cx, cy, xl, yl, radius):
    dist = (cx-d*xl)**2+(cy+d*yl)**2
    return dist>d**2*radius
    #dist = (cx-xl)**2+(cy-yl)**2
    #return dist>radius

n = int(input())
xy = [tuple(map(int, input().split())) for _ in range(n)]
D = 10**18

if n==2:
    x1, y1 = xy[0]
    x2, y2 = xy[1]
    dist = (x1-x2)**2+(y1-y2)**2
    print(Deciaml(dist**0.5/2))
    exit()
    
for i in range(n-2):
    for j in range(i+1, n-1):
        for k in range(j+1, n):
            x1, y1 = xy[i]
            x2, y2 = xy[j]
            x3, y3 = xy[k]
            (cx, cy, d), radius = f(x1, y1, x2, y2, x3, y3)
            
            if radius==-1:
                continue
            #print(cx, cy, radius)
            if radius<D:
                check = False
                
                for l in range(n):
                    if l in [i, j, k]:
                        continue
                    
                    xl, yl = xy[l]
                    
                    if f2(d, cx, cy, xl, yl, radius):
                        check = True
                        
                if not check:
                    D = radius
    
print(float(D)**0.5)