0314 月球上的老鼠
* * * *
拉格朗日计划
* * * *
月球上的老鼠

为了开发月球,现每个国家都能分配到一块500米乘500米的方形土地,若能在这块土地上砌起一条封闭的围墙,那么该国就能获得墙内的所有土地。

这块土地上已按1米的间隔打下251001根桩,墙必须由一些列线段构成,每天线段的端点都必须是桩。

显然最理想是方式是在边界上建一堵2000米长的围墙,这样就可以获得全部250000平方米的土地。

但大芬威克公国(注:老电影《鼠吼奇谈》中的虚拟国家)希望找出能使包围面积与周长之比最大的砌法。

例如在土地的边界上用2000米长的围墙围住全部250000平方米土地,则面积与周长之比是125。

但若从方形土地四角各切掉一个直角边长为75米的等腰直角三角形,则尽管围地的总面积将会减少为238750平方米,但周长变为$1400+300\sqrt2$米,从而两者之比增加为$130.87$。



求围地面积和周长之比的最大值,结果保留8位小数,即abc.defghijk的格式。

本题难度:



解答

本题是所谓的Cheeger问题(求$\mathbb R^n$中有界开集$\Omega$的Borel子集F,使得F的周长与Lebesgue测度之比最小)。

如果不考虑这些整点处的桩,则最优解是把正方形的四角都替换为圆弧,可以参考此文

其中圆弧的半径是正方形的$1/(2 + \sqrt{\pi})$时取到最优比例$500/(2 + \sqrt{\pi})\approx 132.53972607$。

本题中的离散解显然应该尽可能接近这一连续解,以下代码改写自官方论坛,利用对称性将正方形八等分(水平、垂直、对角),并递推计算其中一块的比例。

最终结果是$132.52756426$。

注:因需用cache装饰器作记忆化搜索,以下为Python 3代码。

注2:理解本题的背景所需要的前置知识一般在数学系本科高年级或研究生低年级的《实分析》课程中讲授。

import math
from functools import *

def heron(a,b,c):
    s=0.5*(a+b+c)
    v=s*(s-a)*(s-b)*(s-c)
    return math.sqrt(v) if v>=0 else 0

def dist(x,y,x2,y2):
    a=math.sqrt(x*x+y*y)
    b=math.sqrt(x2*x2+y2*y2)
    c=math.sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2))
    A=heron(a,b,c)
    return A-r*c,A,c

r=132.53972607

@cache
def check(x,y):
    bests,besta,bestp=dist(x,y,y,x)
    bests*=0.5
    besta*=0.5
    bestp*=0.5   
    for y2 in range(y+1,min(y+15,251)):
      for x2 in range(y2,min(x+15,251)):
          s,a,p=dist(x,y,x2,y2)
          s2,a2,p2=check(x2,y2)
          if s+s2>bests:
            bests,besta,bestp=s+s2,a+a2,p+p2
    return bests,besta,bestp

s,a,p=check(250,0)
print(f'{a/p:.8f}')