UVA-墓地雕塑

来源:互联网 发布:武汉壹方凌网络怎么样 编辑:程序博客网 时间:2024/04/27 21:16

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

题解:

周长为多少先不考虑,先用n+m算,之后再按比例扩大。用n+m算,既新雕塑加入后各个雕塑之间的距离为1,移动后的位置。移动前,选定一个雕塑为原点,那么每个雕塑的坐标就是 i*(n+m)/n 把每个雕塑移动到离它最近的整数坐标的位置,既移动完成后需要有雕塑的位置。

如果没有两个雕塑移动到相同的位置,那么这样的移动是最优的。

那么如何证明,不会存在有两个雕像移动到同一个地方呢。能移动到同一个地方的雕塑坐标距离会小于1,例如1.5与2.4999,它们会移动到2这个位置,但这是不可能的,因为,移动之前位置是等距分配的,而周长(n+m)除以移动之前的个数n,距离是大于1的,所以,不会存在有两个雕像移动到同一个地方。

代码:

#include<cstdio>#include<cmath>int main(){int n,m;while(~scanf("%d%d",&n,&m)){double ans=0.0;int i;for(i=1;i<n;i++){double pos=(double)i/n*(n+m);ans+=fabs(pos-floor(pos+0.5))/(n+m);}printf("%.4lf\n",ans*10000);}return 0;}


0 0
原创粉丝点击