题意:
在一个周长为10000的圆周上等距分布者n个雕塑,加入m个新雕塑(位置可以随便放),若希望n+m个雕塑在圆周上均匀分布,就需要移动其中一些原有的雕塑,要求n个雕塑移动的总距离尽量小。
思路:
要使n+m个雕塑均匀分布,需移动原有的雕塑中n-1个雕塑,将没动的那个雕塑作为坐标原点,将圆周长缩放为n+m,则第i(1<=i<=n-1)个雕塑的坐标为i*(n+m)/n,需要把每个雕塑移动的最近的位置。
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#define endl "\n"
using namespace std;
int main()
{
int n, m;
while(cin>>n>>m) {
double x, ans = 0;
for(int i=1; i<n; i++) {
x = (double)i / n * (n + m);
ans += fabs(x - floor(x + 0.5)) / (n + m);
}
printf("%.4lf\n", ans * 10000);
}
}