Graveyard

来源:互联网 发布:java求最大值和最小值 编辑:程序博客网 时间:2024/05/01 12:07

题意:

在一个周长10000的圆上等距分布n个雕塑,现加入m个,求原先雕塑的最小移动距离

思路:

如果加入的雕塑是n的倍数,那自然不用移动,如果不是,那就求出间距,从一个旧雕塑出发(至少一个不要动)然后逐个选择移动的最小距离。

代码:

#include<cstdio>#include<iostream>#include<math.h>const double len = 10000;int n, m;int main() {double t, d1, d2;while(scanf("%d%d", &n, &m)!=EOF) {if(m%n==0) {printf("0.0\n");continue;}d1 = len/n*(1.0);d2 = len/(n+m)*(1.0);double sum = 0;for(int i=1; i<n; i++) {double t = i * d1;//第i个雕像的位置double r = floor(t/d2);处于第几个,自然要四舍五入(更靠近)double r1 = fabs(t - r*d2);double r2 = fabs(t - (r+1)*d2);if(r1 > r2) sum += r2;else sum += r1;}printf("%.4lf\n", sum);}return 0;}


0 0
原创粉丝点击