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;
}

原文地址:https://www.cnblogs.com/cjwen/p/10744629.html

时间: 2024-08-30 03:35:28

LA 3708的相关文章

LA 3708 Graveyard

题意:给出一个圆周,这个圆周上有n个雕塑,现在加入m个雕塑,问最小的移动距离 因为不管怎么移动,可以选择一个作为坐标原点,所以需要挪动的是n-1个 最开始不理解白书上的式子--- 后来搜题解 http://www.cnblogs.com/wuhenqs/p/3203114.html pos = i*(n + m) /n 是把这个圆周缩成周长为(n + m)的圆,然后除以n代表原来的一份有多少,再乘以份数i,得到它原来的位置 又因为圆的周长是n+m,所以现在的pos一定是整数 所以 距离 = |p

LA 3708 &amp;&amp; POJ 3154 Graveyard (思维)

题意:在周长为10000的圆上等距分布着n个雕塑,现在又加入m个,现在让m+n个等距分布,那就得移动一些原有的雕塑,问你移动的最少总距离是多少. 析:首先我们可以知道,至少有一个雕塑是可以不用移动的,那么我们以那修个没有移动的雕塑为原点建立坐标.现在问题就转化为把剩下的移动到离它最近的位置(这个位置是放入m个雕塑之后的位置),那么这个距离就应该是最短的. 代码如下: #include <cstdio> #include <iostream> #include <cstring

hdu 5745 la vie en rose

这道题的官方题解是dp,但是可以暴力出来.改天再研究怎么dp. 暴力的时候,如果计算sum的时候,调用strlen函数会超时,可见这个函数并不是十分的好.以后能不用尽量不用. La Vie en rose Time Limit: 14000/7000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 861    Accepted Submission(s): 461 Problem

让MAC OS也能使用LL LA L等LS的别名

linux下默认ll是ls -l的别名.OS X下默认不支持.习惯了linux下使用ll,我们同样也可以将习惯搬到os x下的shell中. 再当前用户家目录下新建.bash_profile文件.根据你的习惯,添加下面格式内容即可. 1 2 3 alias ll='ls -l' alias la='ls -a' alias l='ls -la' 然后执行:source .bash_profile你还可以添加你喜欢的其他别名.

LA 3942 Remember the Word (Trie)

Remember the Word 题目:链接 题意:给出一个有S个不同单词组成的字典和一个长字符串.把这个字符串分解成若干个单词的连接(单词可以重复使用),有多少种方法? 思路:令d[i]表示从字符i开始的字符串(后缀s[i..L])的分解数,这d[i] = sum{d(i+len(x)) | 单词x是其前缀}.然后将所有单词建成一个Trie树,就可以将搜索单词的复杂度降低. 代码: #include<map> #include<set> #include<queue>

LA 2678 Subsequence

有一个正整数序列,求最短的子序列使得其和大于等于S,并输出最短的长度. 用数组b[i]存放序列的前i项和,所以b[i]是递增的. 遍历终点j,然后在区间[0, j)里二分查找满足b[j]-b[i]≥S的最大的i,时间复杂度为O(nlongn). 这里二分查找用到库函数lower_bound() 1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #inclu

LA 4127 - The Sky is the Limit (离散化 扫描线 几何模板)

题目链接 非原创 原创地址:http://blog.csdn.net/jingqi814/article/details/26117241 题意:输入n座山的信息(山的横坐标,高度,山底宽度),计算他们的轮廓线, 即露出来的表面边长,有些山是重叠的不计.空白地带不计,每座山都是等腰三角形. 分析:大白书P414页. 求小山的总长度,用一些虚线将其离散化,分成一段一段的,特征点:山脚,山顶,交点.这样就能保 证相邻两个扫描点之间再无交点.然后一最上面的点就是分割点,维护上一个点lastp即可. 1

LA 2031

Mr. White, a fat man, now is crazy about a game named ``Dance, Dance, Revolution". But his dance skill is so poor that he could not dance a dance, even if he dances arduously every time. Does ``DDR" just mean him a perfect method to squander his

Mac下ll、l、la、等简写命令不能使用

Mac默认用的也是Unix系统,Unix系统本身是没有这些简写命令的,可以通过给命令设置别名来使得可以使用这些简写命令 查看本机所有已经设置的命令别名:alias 设置命令别名:alias ll='ls -alF' 执行命令只在当前shell有效,要长期有效可以设置在用户的.bash_profile里面,这样每次登陆就都可以用这些简写命令了. 步骤: 1.vim ~/.bash_profile 2.将以下内容写入文件并保存 alias ll='ls -alF' alias la='ls -A'