码迷,mamicode.com
首页 > 其他好文 > 详细

LA 3708 Graveyard

时间:2015-07-05 14:50:32      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:

题意:给出一个圆周,这个圆周上有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 }
View Code

 

LA 3708 Graveyard

标签:

原文地址:http://www.cnblogs.com/wuyuewoniu/p/4622046.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!