题目链接:Country Meow
代码:
import math
import random
#温度变化率
K=0.99
#结束温度,控制降温时间
EPS=1E-14
#计算自变量的增量
def get(T):
return T*random.randint(-5000000,5000000)
def calc(x,y,z,nowx,nowy,nowz):
ans=float('-inf')
for i in range(len(x)):
ans=max(ans,(abs(nowx-x[i])**2+abs(nowy-y[i])**2+abs(nowz-z[i])**2)**0.5)
return ans
def solve():
n=eval(input())
x,y,z=[0]*n,[0]*n,[0]*n
for i in range(n):
x[i],y[i],z[i]=map(eval,input().split())
x0,y0,z0=sum(x)/n,sum(y)/n,sum(z)/n
ans=calc(x,y,z,x0,y0,z0)
cnt=3
while cnt>0:
cnt-=1
cur=ans
x1,y1,z1=x0,y0,z0
T=100000
#初始温度
while T>EPS:
x2,y2,z2=x1+get(T),y1+get(T),z1+get(T)
temp=calc(x,y,z,x2,y2,z2)
if temp<ans:
ans=temp
x0,y0,z0=x2,y2,z2
if cur>temp or math.exp((cur-temp)/T)>random.random():
cur=temp
x1,y1,z1=x2,y2,z2
T*=K
print("{:.15f}".format(ans))
solve()