• 墓地雕塑-LA3708


    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=20&page=show_problem&problem=1709

    在一个周长为10000的圆上等距分布着n个雕塑。现在又有m个新雕塑加入(位置可以随意放),希望所有n+m个雕塑在圆周上均匀分布。这就需要移动其中一些原有的雕塑。要求n个雕塑移动的总距离尽量小。

    2<=n<=1000, 1<=m<=1000,输出最小总距离,精确到10-4

    这题是《算法竞赛入门经典--训练指南》第七页的一道例题,作者分析的时候声称一定有一个雕塑没有移动,但是没给出证明

    我也没法给出证明,因为里面涉及到round(返回最接近的整数)这种非线性函数,有点难处理

    但是我想到可以用Matlab画个图验证一下是不是这样,其实只要确定旧的n个点中的一个点在新的n+m个点构成的环上的位置,其余的点就都确定了,我们随便找一个点,让它在一个区间上移动,算出其在各个位置处对应的总距离。我预计这个图可能是中间凹,两边高,实际上并非如此,而是有很多峰。

    在这个图中,n=7(注意到图中恰有7个峰),m=32,区间被分成1000份。峰的个数似乎是n/gcd(n,m),对n=8,m=32和n=6,m=2都成立,但是对n=8,m=18就不成立(没有峰),我表示搞不懂,归纳不出这个公式……

    所以,从图中可见,让该点处于区间一端确实可以使得总距离最小,但是这个点还有其他位置可以放,如上图中区间中部的6个最低点。(但是作者声称的一定有一个雕塑没移动,貌似也是对的)

    Matlab代码如下:

    %uva online judge LA 3708, test, <算法竞赛入门经典训练指南>第7页
    n = 7;%original points on a circle
    m = 32;% points to be added
    dist = (n + m) / n;
    step = 0.001;
    total = zeros(1, 1 / step + 1);
    t_idx = 0;
    for start = 0 : step : 1
        t_idx = t_idx + 1;
        for idx = 0 : n - 1
            point = start + idx * dist;
            total(t_idx) = total(t_idx) + abs(point - round(point));
        end
    end
    plot(total) %此图与m无关,只与n有关

    另外还画了一个在取定一个雕塑不动的情况下,总距离随m,n变化的3D图:

    代码如下:

    %uva online judge LA 3708, test2, <算法竞赛入门经典训练指南>第7页
    %假设圈长为1,为计算方便,先假设圈长为n+m,然后再缩放一下
    %n = 7;%original points on a circle
    %m = 8;% points to be added
    
    MAX = 30;%max test points for n
    total = zeros(MAX, MAX);
    start = 0;
    for n = 1:MAX
        for m = 1 : MAX
            dist = (n + m) / n;
            for idx = 0 : n - 1
                point = start + idx * dist;
                total(n,m) = total(n,m) + abs(point - round(point));
            end
            total(n,m) = total(n,m) / (m + n);
        end
    end
    figure, mesh(total)
  • 相关阅读:
    Vue单向数据流
    npm常用命令
    vue自定义指令
    slot的用法(Vue插槽)
    js闭包
    canvas 给画的多边形着色
    canvas画线
    canvas初体验
    canvas
    json
  • 原文地址:https://www.cnblogs.com/fstang/p/3331988.html
Copyright © 2020-2023  润新知