题意:

      有N个墓碑,等距离的分布在一个圆形墓地的周围,然后又要添加m个墓碑,最后要求所有的墓碑还是等距离,添加的墓碑可以放在任意位置,问之前的N个墓碑的最少移动距离之和是多少?

思路:

      现在我们猜想,如果之前的n个墓碑至少有一个是不动的,那么来了m个墓碑之后的所有墓碑的位置都已经固定了,现在就是看要把之前的n个墓碑都放在哪个位置,现在有一个结论就是说每个墓碑放在离他最近的位置,这样就ok了,这么敲有两个东西要证明

(1) 为什么至少有一个墓碑是没有移动的(这个我还没想好,书上说是之前的例3的中位数,那个我理解了,不过这个我没想好怎么和他们联系上,以后再补充.)

(2) 每个墓碑移动到最近的位置是不是会有两个墓碑最后移动到同一个位置的时候?

      这个我来证明下:

      方法1 给的n,m都是<= 1000的,我们直接跑一边验证一下就行了。

      方法2 是直接证明,首先对于每个墓碑去它最近的位置可以这样算

      比如第i个墓碑那么我们现在先在单位原上操作,最后*10000就行了

    pos = double(i) / n * (n + m) ://这个其实是把圆放大后i原来的实际位置

    tmp = abs(pos - int(pos+0.5))/(n + m):// int(pos+0.5)是放大后i的实际位置 

      如果有两个点的最近点在同一个点上那么就会有int(pos1+0.5) = int(pos2+0.5) 

      也就是两个数的四舍五入值相等,那么这两个数的最大差是1.49999..-0.5虽然很接      近1,但是永远都不可能是1,而放大的圆的每两个点之间的距离都是1,随意矛盾了

最后解释下上面说的那个放大 就是之前是把一个单位圆分成n分,现在是把一个周长为(n+m)的圆分成(n+m)分,每份是1,放大后离自己最近的点就是离自己最近的整数点也就是四舍五入后的点。 

#include<stdio.h>

double abss(double x)

{

   return  x > 0 ? x : -x;

}

int main ()

{

    int n ,m;

    double Ans;

    while(~scanf("%d %d" ,&n ,&m))

    {

        Ans = 0;

        for(int i = 1 ;i < n ;i ++)

        {

           double pos = i * 1.0 / n * (n + m);

           double now = abss(pos - int(pos + 0.5)) / (n + m);

           Ans += now;

        }

        printf("%.4lf\n" ,Ans * 10000);

    }

    return 0;

}

LA3708墓地雕塑的更多相关文章

  1. 【贪心】【POJ3154】墓地雕塑(Graveyard, NEERC 2006, LA 3708)需要稍稍加工的(先贪心,再确保能这样贪(可行性&&如果可行必定最优&&非证明最优性)的题)(K)

    例题4  墓地雕塑(Graveyard, NEERC 2006, LA 3708) 在一个周长为10000的圆上等距分布着n个雕塑.现在又有m个新雕塑加入(位置可以随意放),希望所有n+m个雕塑在圆周 ...

  2. C/C++每日小练(七)——墓地雕塑

    墓地雕塑 题目描写叙述: 在一个周长为10000的圆上等距分布着n个雕塑. 如今又有m个新雕塑增加(位置能够任意放).希望全部n+m个雕塑在圆周上均匀分布.这就须要移动当中一些原有的雕塑.要求n个雕塑 ...

  3. Java实现蓝桥杯墓地雕塑

    墓地雕塑 问题描述 在一个周长为10000的圆上等距分布着n个雕塑.现在又有m个新雕塑加入(位置可以随意放), 希望所有n+m个雕塑在圆周上均匀分布.这就需要移动其中一些原有的雕塑.要求n个雕塑移动的 ...

  4. 墓地雕塑-LA3708

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=20& ...

  5. [ACM_数学] LA 3708 Graveyard [墓地雕塑 圈上新加点 找规律]

    Description   Programming contests became so popular in the year 2397 that the governor of New Earck ...

  6. LA 3708 Graveyard 墓地雕塑 NEERC 2006

    在一个周长为 10000 的圆上等距分布着 n 个雕塑.现在又有 m 个新雕塑加入(位置可以随意摆放),希望所有 n + m 个雕塑能在圆周上均匀分布.这就需要移动一些原有的雕塑.要求 n 个雕塑移动 ...

  7. LA 3708 墓地雕塑

    题目链接:https://vjudge.net/contest/132704#problem/D 题意:一个长度为10000的园上,均匀分布n个雕塑,现在要加入m个雕塑,这样原先的就可能会移动,求移动 ...

  8. LA 3708 墓地雕塑(模拟)

    题目链接:https://vjudge.net/problem/UVALive-3708 这道题的思路也是比较难想. 首先根据上一题(Uva 11300)可知,要想让移动距离最短,那么至少要使一个雕塑 ...

  9. LA 3708

    题意:       在一个周长为10000的圆上等距分布着n 个雕塑,现在又有m 个新雕塑加入(位置可以随意放置), 希望所有(n+m)个雕塑在圆周上均匀分布,这就需要移动其中一些雕塑,要求n个雕塑移 ...

随机推荐

  1. 记录mysql查询数据遇到的一个小问题

    今天在测试的时候,需要使用mysql对插入的数据进行检验,但是写完查询语句的时候执行会报错.原因很简单,这个表名是order(订单),在MySQL语言中order是用来排序的关键字,原则上讲是不能作为 ...

  2. Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  3. python爬虫(正则取数据)读取表格内的基金代码后爬取基金最新净值,同时写到对应的表格中,基于最近一次购买净值计算出涨跌幅(名字有点长)

    最近基金跌的真够猛,虽说是定投,但大幅度下跌,有时候适当的增加定投数也是降低平均成本的一种方式 每天去看去算太费时间,写了个爬虫,让他自动抓数据后自动计算出来吧 实现逻辑: 1.创建了一个excel表 ...

  4. 理解函数式编程中的函数组合--Monoids(二)

    使用函数式语言来建立领域模型--类型组合 理解函数式编程语言中的组合--前言(一) 理解函数式编程中的函数组合--Monoids(二) 继上篇文章引出<范畴论>之后,我准备通过几篇文章,来 ...

  5. ArrayList 、Vector 和 LinkedList 有什么区别?

    ArrayList.Vector .LinkedList 类均在java.util 包中,均为可伸缩数组,即可以动态改变长度的数组. ArrayList 和 Vector 都是基于存储元素的 Obje ...

  6. 从yield到yield from再到python协程

    yield 关键字 def fib(): a,b = 0,1 while 1: yield b a,b = b,a+b yield是在:PEP 255 -- Simple Generators 这个p ...

  7. python-顺序串基本操作的实现

    1 #*********************************************************************** ** 2 #> File Name: seq ...

  8. linux库文件编程

    参考博文链接: https://www.cnblogs.com/guochaoxxl/p/7141447.html https://www.cnblogs.com/tuhooo/p/8757192.h ...

  9. P1601_A+B Problem(高精)(JAVA语言)

    思路:BigInteger first blood! //四行搞定 题目背景 无 题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b] ...

  10. 剪切DOM节点中断transition执行【问题】

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...