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一定是整数

所以 距离 = |pos - floor(pos + 0.5)| ,再除以(n+m),缩成周长为1的圆,到最后输出答案的时候乘以10000就可以了

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include <cmath>
 5 #include<stack>
 6 #include<vector>
 7 #include<map>
 8 #include<set>
 9 #include<queue>
10 #include<algorithm>
11 using namespace std;
12
13 typedef long long LL;
14 const int INF = (1<<30)-1;
15 const int mod=1000000007;
16 const int maxn=1000005;
17
18 int main(){
19     int n,m;
20     while(scanf("%d %d",&n,&m) != EOF){
21         double pos = 0.0,ans = 0.0;
22         for(int i = 1;i < n;i++){
23             pos = (double) (i) / n * (n+m);
24             ans += fabs(pos - floor(pos+0.5)) / (n+m);
25         }
26         printf("%.4lf\n",ans * 10000);
27     }
28     return 0;
29 }

时间: 2024-08-09 05:45:40

LA 3708 Graveyard的相关文章

思维 UVALive 3708 Graveyard

题目传送门 1 /* 2 题意:本来有n个雕塑,等间距的分布在圆周上,现在多了m个雕塑,问一共要移动多少距离: 3 思维题:认为一个雕塑不动,视为坐标0,其他点向最近的点移动,四舍五入判断,比例最后乘会10000即为距离: 4 详细解释:http://www.cnblogs.com/zywscq/p/4268556.html 5 */ 6 #include <cstdio> 7 #include <iostream> 8 #include <algorithm> 9 #

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

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

UVAlive 3708 Graveyard(最优化问题)

题目描述: 在周长10000的圆上,初始等距的放置着n个雕塑,现在新加入m个雕塑,要使得这n+m个雕塑仍然等距,问原来n个雕塑要移动的距离总和的最小值. 原题地址: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15133 分析:将原有的每个雕塑的坐标位置,映射在一个总长为n+m的数轴上,设第一个点的坐标为0,(新的等分点必然有至少有一个和原来n等分的等分点重合,因为等分点可以等距的绕圆周旋转,总可以转到有至少一个重合的,

UVALive 3708 Graveyard(思维题)

将原有的每个雕塑的坐标位置,映射在一个总长为n+m的数轴上,设第一个点的坐标为0,(新的等分点必然有至少有一个和原来n等分的等分点重合,因为等分点可以等距的绕圆周旋转,总可以转到有至少一个重合的,不妨就让这个重合的点是坐标为0的点)从0到n+m-1的每个整数端点为添加雕塑之后每个雕塑的正确位置.pos[i]代表原来的第i个点在新数轴上的坐标,i/n是在总长为1的线段上n等分的第i个点所占的比例,那么在总长为n+m的线段上它的坐标pos[i]=i/n*(n+m).由于第一个雕塑的坐标保持为0,从第

uvalive 3708 Graveyard

https://vjudge.net/problem/UVALive-3708 题意: 一个长度为10000的圆环上放着n个雕塑,每个雕塑之间的距离均相等,即这个圆环被n个点均分.现在需要加入m个雕塑,这m个雕塑任意放置,但是需要满足放置之后n+m个雕塑均分这个圆环.那么原来的雕塑就需要移动,求原来的雕塑移动的最小总距离. 思路: 首先,我们只需要移动原来的雕塑就可以解决问题,因为后面的m个雕塑可以任意放,所以直接放在安排好的位置上即可.其次,有一个雕塑是不需要移动的,至于为什么,我无法证明,但

LA 3708

题意:       在一个周长为10000的圆上等距分布着n 个雕塑,现在又有m 个新雕塑加入(位置可以随意放置), 希望所有(n+m)个雕塑在圆周上均匀分布,这就需要移动其中一些雕塑,要求n个雕塑移动的总距离尽量小. [输入格式]       输入包含若干组数据.每组数据仅一行,包含两个整数n和m(2≤n≤1000,1≤m≤1000),即原始雕塑数量和新加雕塑数量. 输入结束标志为文件结束符(EOF) [输出格式] 输入仅一行,为最小距离,精确到小数后四位. [样例输入] 2  1 2  3

POJ2100 Graveyard Design(尺取法)

POJ2100 Graveyard Design 题目大意:给定一个数n,求出一段连续的正整数的平方和等于n的方案数,并输出这些方案,注意输出格式: 循环判断条件可以适当剪支,提高效率,(1^2+2^2+..n^2)=n*(n+1)*(2n+1)/6; 尺取时一定要注意循环终止条件的判断. #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <

poj 2100 Graveyard Design

Graveyard Design Time Limit: 10000MS   Memory Limit: 64000K Total Submissions: 7357   Accepted: 1816 Case Time Limit: 2000MS Description King George has recently decided that he would like to have a new design for the royal graveyard. The graveyard m

Graveyard Design POJ - 2100

King George has recently decided that he would like to have a new design for the royal graveyard. The graveyard must consist of several sections, each of which must be a square of graves. All sections must have different number of graves. After a con