您的位置:首页 > 其它

Uva 1388 Graveyard - 水题

2013-12-11 22:36 429 查看
题目描述:lrj厚白书第一章第四到例题
题目分析:如果插入点的个数是n的倍数,那么不需要移动这n个点。如果想要移动的距离最短,那么不难想象最多只需要要移动(n-1)个点。所以可以在这n个点中选取一个参照点,其它点的位置是相对于该参照点的。所以在没有加入m个点之前,这n个点都有一个相对与参照点的以为坐标pi,那么在插入m个点之后,这n个点会有确定的位置。然后在判断pi与这写位子的最短距离即可。

下面是代码:

#include <stdio.h>
#include <string.h>
#include <math.h>
const double len = 10000;
int n,m;
double d0,d1;
int main()
{
while(~scanf("%d%d",&n,&m)) {
if(m % n == 0) printf("0.0\n");
else {
d0 = len / (n * 1.0);
d1 = len / ((n + m) * 1.0);
//printf("%.4lf %.4lf\n",d0,d1);
double ans = 0.0;
for(int i = 1; i < n; i++) {
double t = i * d0;
int d = floor(t/d1);
double t1 = fabs(t - d * d1);
double t2 = fabs(t - (d + 1.0) * d1);
if(t1 > t2) ans += t2;
else ans += t1;
}
printf("%.4lf\n",ans);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva