zoukankan      html  css  js  c++  java
  • LA 3708

    题意:

          在一个周长为10000的圆上等距分布着n 个雕塑,现在又有m 个新雕塑加入(位置可以随意放置),

    希望所有(n+m)个雕塑在圆周上均匀分布,这就需要移动其中一些雕塑,要求n个雕塑移动的总距离尽量小。

    【输入格式】

          输入包含若干组数据。每组数据仅一行,包含两个整数n和m(2≤n≤1000,1≤m≤1000),即原始雕塑数量和新加雕塑数量。

    输入结束标志为文件结束符(EOF)

    【输出格式】

      输入仅一行,为最小距离,精确到小数后四位。

    【样例输入】

      2  1

      2  3

      3  1

      10  10

    【样例输出】

      1666.6667

      1000.0

      1666.6667

      0.0

    【代码】

    //2019.4.21 墓地雕塑
    #include <iostream>
    #include <iomanip>
    #include <cmath>
    using namespace std;
    
    int main()
    {
        int n, m;
        while (scanf_s("%d%d", &n, &m) == 2)
        {
            double ans = 0.0;
            for (int i = 1; i < n; i++)
            {
                double pos = (double)i / n*(n + m);//计算每个需要移动的雕塑的坐标
                ans += fabs(pos - floor(pos + 0.5)) / (n + m);//fabs浮点数取绝对值,floor向下取整,floor(x+0.5)类似round四舍五入
                //先计算出需要移动的雕塑坐标,计算移动最短距离,换算成(n+m)比例
            }
            cout <<fixed<<setprecision(4)<< ans * 10000;//格式化输出保留四位小数
        }
        return 0;
    }

     

  • 相关阅读:
    sujection重构
    serialize存入数组
    migration integer limit option
    FineReport——FS
    Oracle事务处理
    FineReport——发送邮件
    FineReport——登录不到决策系统
    FineReport——JS二次开发(复选框全选)
    FineReport——JS二次开发(局部刷新)
    FineReport——JS二次开发(工具栏按钮事件及说明)
  • 原文地址:https://www.cnblogs.com/cjwen/p/10744629.html
Copyright © 2011-2022 走看看