墓地雕塑-LA3708
在一个周长为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)
墓地雕塑-LA3708的更多相关文章
- 【贪心】【POJ3154】墓地雕塑(Graveyard, NEERC 2006, LA 3708)需要稍稍加工的(先贪心,再确保能这样贪(可行性&&如果可行必定最优&&非证明最优性)的题)(K)
例题4 墓地雕塑(Graveyard, NEERC 2006, LA 3708) 在一个周长为10000的圆上等距分布着n个雕塑.现在又有m个新雕塑加入(位置可以随意放),希望所有n+m个雕塑在圆周 ...
- C/C++每日小练(七)——墓地雕塑
墓地雕塑 题目描写叙述: 在一个周长为10000的圆上等距分布着n个雕塑. 如今又有m个新雕塑增加(位置能够任意放).希望全部n+m个雕塑在圆周上均匀分布.这就须要移动当中一些原有的雕塑.要求n个雕塑 ...
- Java实现蓝桥杯墓地雕塑
墓地雕塑 问题描述 在一个周长为10000的圆上等距分布着n个雕塑.现在又有m个新雕塑加入(位置可以随意放), 希望所有n+m个雕塑在圆周上均匀分布.这就需要移动其中一些原有的雕塑.要求n个雕塑移动的 ...
- LA3708墓地雕塑
题意: 有N个墓碑,等距离的分布在一个圆形墓地的周围,然后又要添加m个墓碑,最后要求所有的墓碑还是等距离,添加的墓碑可以放在任意位置,问之前的N个墓碑的最少移动距离之和是多少? 思路: ...
- [ACM_数学] LA 3708 Graveyard [墓地雕塑 圈上新加点 找规律]
Description Programming contests became so popular in the year 2397 that the governor of New Earck ...
- LA 3708 Graveyard 墓地雕塑 NEERC 2006
在一个周长为 10000 的圆上等距分布着 n 个雕塑.现在又有 m 个新雕塑加入(位置可以随意摆放),希望所有 n + m 个雕塑能在圆周上均匀分布.这就需要移动一些原有的雕塑.要求 n 个雕塑移动 ...
- LA 3708 墓地雕塑
题目链接:https://vjudge.net/contest/132704#problem/D 题意:一个长度为10000的园上,均匀分布n个雕塑,现在要加入m个雕塑,这样原先的就可能会移动,求移动 ...
- LA 3708 墓地雕塑(模拟)
题目链接:https://vjudge.net/problem/UVALive-3708 这道题的思路也是比较难想. 首先根据上一题(Uva 11300)可知,要想让移动距离最短,那么至少要使一个雕塑 ...
- LA 3708
题意: 在一个周长为10000的圆上等距分布着n 个雕塑,现在又有m 个新雕塑加入(位置可以随意放置), 希望所有(n+m)个雕塑在圆周上均匀分布,这就需要移动其中一些雕塑,要求n个雕塑移 ...
随机推荐
- unity3D——自带寻路Navmesh入门教程(二)(转)
转自:http://liweizhaolili.blog.163.com/blog/static/16230744201271210237616/ 上一节简单介绍了NavMesh寻路的基本用法,这次来 ...
- Hash哈希(二)一致性Hash(C++实现)
一致性Hash 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,经常用于分布式.负载均衡等. 原理 一致哈希是 ...
- 配置SharePoint 2013 Search 拓扑结构
在单台服务器上安装了 SharePoint Server 2013,并且创建了具有默认搜索拓扑的 Search Service 应用程序.在默认搜索拓扑中,所有搜索组件都位于承载管理中心的服务器上.S ...
- SQL语法的重要知识点总结
好几年没写SQL语句了.现在到了新的team,需要用到数据库.作为QA的话时常需要使用客户端工具连接到数据库中找寻或修改数据.这么长时间没使用,一些SQL的使用技巧都忘得差不多了.晚上看了一些资料,花 ...
- Minifying Angular应用时产生的问题
一.产生的问题 如果你正在进行AngularJS的项目开发,生产时Minified JS文件有没有遇到下面问题: angular.module("myApp", []) .cont ...
- jQuery演示10种不同的切换图片列表动画效果以及tab动画演示 2
很常用的一款特效纯CSS完成tab实现5种不同切换对应内容效果 实例预览 下载地址 实例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...
- Atitit.常用的gc算法
Atitit.常用的gc算法 1.1. 记-清除算法1 1.2. 复制算法1 1.3. 标记-整理算法2 1.4. 分代收集算法2 1.1. 记-清除算法 最基础的收集算法,算法分为标记和清除两个阶段 ...
- paip.判断字符是否中文与以及判读是否是汉字uapi python java php
paip.判断字符是否中文与以及判读是否是汉字uapi python java php ##判断中文的原理 注意: 中文与汉字CJKV 的区别..日本,韩国,新加坡,古越南等国家也用汉字,但不是中 ...
- paip.函数方法回调机制跟java php python c++的实现
paip.函数方法回调机制跟java php python c++的实现 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...
- 关闭Windows Update更新驱动程序
关于Win10的更新配置,特别是自动更新驱动程序,经常会导致驱动安装错误而无法开机的问题. 此时只好开机时按F8进入高级模式恢复最后一次正确配置,或者在安全模式删除错误的驱动程序. 关于Win10的更 ...