您的位置:首页 > 其它

Graveyard(UVa1388)

2015-09-11 21:49 405 查看
题意:

在一个周长为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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: