zoukankan      html  css  js  c++  java
  • UVALive3708

    题意:在一个周长为10000的圆上等距分布着n个雕塑,现在又有m个新雕塑加入,位置可以随意放,希望所有的n+m个雕塑在圆周上均匀分布,这就需要移动其中一些原有的雕塑,要求n个雕塑移动的总距离最小,输出这个最小值
    分析:把点转化为相对坐标,先缩小n倍再放大n+m倍,得到新坐标pos,并取离pos最近的整点,两者之差的绝对值再缩小n+m倍就是需要移动的距离,所有的点的移动距离累加即可。floor(pos+0.5)表示距离pos最近的整数点

    代码:

    #include <iostream>
    #include <stdio.h>
    #include <math.h>
    using namespace std;
    int main(){
        int n, m;
        while(scanf("%d%d", &n, &m)!=EOF){
            int i;
            double ans = 0;
            for(i=1; i
                double pos = (i*1.0/n)*(n+m);
                double ret = floor(pos+0.5);
                ans += fabs(ret - pos)/(n+m);
            }
            printf("%.4lf\n", ans*10000);
        }
        return 0;
    }
    



  • 相关阅读:
    Rocket
    Rocket
    Rocket
    Rocket
    Scala
    Rocket
    Rocket
    Rocket
    Rocket
    Rocket
  • 原文地址:https://www.cnblogs.com/zjutzz/p/3207886.html
Copyright © 2011-2022 走看看