UVALive.3708 Graveyard (思维题)
UVALive.3708 Graveyard (思维题)
题意分析
这标题真悲伤,墓地。
在周长为1e4的圆周上等距分布着n个雕塑,现在要加入进来m个雕塑,最终还要使得这n+m个雕塑等距,那么原来的n个雕塑移动的最小距离是多少。
W=W 依旧没思路,看了题解学习此种技巧。
首先原先给出的n个雕塑中有一个假定不动。然后剩余的n-1的个雕塑移动到最近的目标点。目标点的定义如下:
将原圆周等距分为n+m份,每一份的分界点为一个位置,即目标点。那么难点就在于如何判断是最近的呢,这里用到的方法就是按比例扩大+下取整。
刚才说过分为n+m份,那么我们规定那个不动的雕像为0,其他的目标点,依次标记为1,2,3……(n+m-1)。然后按照这样的比例,标记出原先的n个点的位置。这样的标记实际上已经完成了比例的放大,放大比为原来:现在 = 1:(n+m).
放大完成后,我们只需要求出原来和现在的位置差多少就行了:
原来第i个雕塑的位置为
pos = i / n * (n+m) ps:要放大n+m倍
然后要移动到的目标点是 floor(pos + 0.5 )
这两者差的绝对值,就是需要在圆周上移动的比例,注意这里是比例,不是实际的距离,也就是说最后在输出的时候还需要乘1e4.
为何+0.5在下取整就是目标点呢?
不放假设,有一个雕塑在1.01, 其+0.5后为1.51, 下取整完为1,即离它最近的应该是1那个目标点;在比如说有一个雕塑在1.49,+0.5后为1.99,离它最近的也是1那个目标点,而不是2. 不难看出+0.5在下取整是求最近的目标点。
最后,将求出的比例累加,再乘1e4输出即可,注意保留4位小数。
代码总览
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int n,m;
while(scanf("%d%d",&n,&m) != EOF){
double pos = 0,ans = 0;
for(int i =1; i<n; ++i){
pos = 1.0*i/n *(n+m); ans += fabs(pos -floor(pos+0.5))/(n+m);}
printf("%.4f\n",ans*10000);
}
return 0;
}
UVALive.3708 Graveyard (思维题)的更多相关文章
- 思维 UVALive 3708 Graveyard
题目传送门 /* 题意:本来有n个雕塑,等间距的分布在圆周上,现在多了m个雕塑,问一共要移动多少距离: 思维题:认为一个雕塑不动,视为坐标0,其他点向最近的点移动,四舍五入判断,比例最后乘会10000 ...
- UVALive 3708 Graveyard(思维题)
将原有的每个雕塑的坐标位置,映射在一个总长为n+m的数轴上,设第一个点的坐标为0,(新的等分点必然有至少有一个和原来n等分的等分点重合,因为等分点可以等距的绕圆周旋转,总可以转到有至少一个重合的,不妨 ...
- UVAlive 3708 Graveyard(最优化问题)
题目描述: 在周长10000的圆上,初始等距的放置着n个雕塑,现在新加入m个雕塑,要使得这n+m个雕塑仍然等距,问原来n个雕塑要移动的距离总和的最小值. 原题地址: http://acm.hust.e ...
- UVALive - 6434 —(思维题)
题意:给出了你由n个数组成的序列,让你将这个序列分为成m个集合,使得每一个集合的最大值减最小值的差相加最小.(如果某集合只有一个数字,则最大值减最小值为0) . 思路:首先我们不难想到,最优的分配方法 ...
- uvalive 3708 Graveyard
https://vjudge.net/problem/UVALive-3708 题意: 一个长度为10000的圆环上放着n个雕塑,每个雕塑之间的距离均相等,即这个圆环被n个点均分.现在需要加入m个雕塑 ...
- UVALive - 6442 (思维题)
题目链接:https://vjudge.net/contest/241341#problem/I 题目大意:给你一个有N个点等距的环,编号[0,N-1],然后有些点上有一个或多个硬币,通过移动这些硬币 ...
- UVALive - 6434 (思维题)
题目链接:https://vjudge.net/contest/241341#problem/A 题目大意,给你n个数字,让你分成m组,每组的花费为每组的最大值-最小值,总的花费就是各组花费相加,要求 ...
- UVALive - 6439(思维题)
题目链接:https://vjudge.net/contest/241341#problem/F 题目大意:给你一个字符串,你可以用任意单个字符代替其中的一个子串,使它形成一个回文串,要求形成的回文串 ...
- UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)
UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There W ...
随机推荐
- OSG-漫游
本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...
- selenium,unittest——两个class连续运行
将多个class放在一个文件内一起运行,这是一个多用例不同网站进行测试的方法 #encoding=utf-8from selenium import webdriverimport time,unit ...
- 了解Python控制流语句——if语句
控制流 截止到现在,在我们所看过的程序中,总是有一系列语句从上到下精确排列,并交由 Python 忠实地执行.如果你想改变这一工作流程,应该怎么做?就像这样的情况:你需要程序作出一些决定,并依据不同的 ...
- 【WXS数据类型】Number
Number包括整数与小数. 属性: 名称 返回 说明 [Number].constructor 值为字符串“Number” 返回该类型的结构字符串 方法: 原型:[Number].toString( ...
- ThreadLocal 线程的私有内存
话说在<操作系统原理>这门课里面,我们学到了很多概念:进程.线程.锁.PV操作.读写者问题等等,大家还记得么?(估计有些概念早已忘记了吧,哈哈哈~) 其中关于进程.线程和锁的东西是我们平时 ...
- SpringCloud IDEA 教学 番外篇 后台运行Eureka服务注册中心
写在开头 研发过程中经常要做的事就是启动Eureka服务注册中心,每每都要启动一个IDEA,很是困扰.现在分享一个后台启动服务注册中心的方法. 准备工作 1打包一个eureka服务注册中心jar包(注 ...
- 机器人控制tcp通信参数调优
机器人使用WiFi通信,实现指令下传,状态上传.而WiFi信道平时带宽较稳定,但会在某些时候突然中断,造成ping的延时较高,但可以马上恢复.如果一直ping,则一般情况下ping值很小,但长时间(数 ...
- BAT 批处理脚本 教程 【转】
BAT 批处理脚本 教程 第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令 ...
- 《剑指Offer》题一~题十
一.赋值运算符函数 题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char *pData = nul ...
- 软件工程 作业part1
自我介绍 老师您好,我叫宋雨,本科在长春理工大学,专业是计算机科学与技术. 1.回想一下你曾经对计算机专业的畅想:当初你是如何做出选择计算机专业的决定?你认为过去接触的课程是否符合你对计算机专业的期待 ...