题意:
在一个周长为10000的圆上有平均分布着n个雕像,现在在这个圆上加上m个雕像,问想要平均分布(n+m)个雕像,最少要把原来的n个雕像一共移动多少距离。
思路:
先求出n个雕像和(n+m)在圆上的平均距离。把n个雕像的圆以任意一个点为起点,求出第i个点的值,用第i个点的值除以(n+m)的圆的点的平均值(化为整数)。求得(n+m)上离i最近的一个点,用这点的值乘以(n+m)的点的平均值。然后再减去i点上的值,就是最短距离,求n个点既为总和。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int n,m;
while(cin>>n>>m)
{
double len_n=10000.0/n;
double len_nm=10000.0/(n+m);
double ans=0;
for(int i=1;i<n;i++)
{
double a=i*len_n;
int b=floor(a/len_nm+0.5);
ans+=fabs(a-b*len_nm);
}
printf("%.4lf\n",ans);
}
return 0;
}