问题
分析
在书上的解释中已经比较清楚了,这道题就是考思维的,如果想通了解法就比较简单了
关键点在于每一个雕塑都移到离它最近的点上去,首先假设圈的总长度为(n+m),那么原先的每个雕塑的坐标就是i/n*(n+m),求新的坐标的小技巧floor(pos+0.5),比较巧妙,然后除以(n+m)是为了单位化
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
int n,m;
int main(void){
while(scanf("%d%d",&n,&m)==2){
double ans=0;
for(int i=0;i<n;++i){
double pos=(double)i/n*(n+m);
ans+=fabs(pos-floor(pos+0.5))/(n+m); //这个地方的floor(pos+0.5)很巧妙,一下自就算出了和pos最近的整数
}
printf("%.4lf\n",ans*10000);
}
}