LA 3708 Graveyard(一个圆圈上有n个点,新加入m个点,求每个点的最小移动距离)

2014-11-24 02:30:34 · 作者: · 浏览: 1
 
/* 
 * LA_3708.cpp 
 * 
 *  Created on: 2013年11月17日 
 *      Author: Administrator 
 */  
  
#include   
#include   
#include   
  
using namespace std;  
  
int main(){  
    int n,m;  
    while(scanf("%d%d",&n,&m)!=EOF){  
        double ans = 0.0;  
        int i;  
        double pos;  
        for(i = 1 ; i < n ; ++i){  
            /** 
             * floor():向下取整 
             * floor(pos+0.5):四舍五入 
             * fabs():求绝对值 
             */  
            pos = (double)i/n*(n+m);//求除了原点,每个点的初始坐标.*(n+m)是为了求每一个圆圈的初始为周长伟(n+m0的圆圈  
            ans += fabs(pos - floor(pos+0.5))/(n+m);// /(n+m)是为了将圆圈的长度恢复为单位1  
        }  
  
        printf("%.4lf\n",ans*10000);  
    }  
  
    return 0;  
}