这道题自己对代码的理解还是可以的,但是整个思路以及两个漏洞理解的不够彻底,所以思路写的不是很好
题目链接:http://poj.org/problem?id=3154
大意:在一个周长为10000的圆上等距分布着几个雕塑。现在有m个新雕塑加入(位置可以随意摆放),希望所有n+m个雕塑在圆上均匀分布。这就需要移动其中一些原有的雕塑,要求n个雕塑移动的总距离尽量小
思路:
将圆的周长缩小为n+m,计算出n个雕塑相对于最后n+m个雕塑摆放的位置,只要有可以移动的雕塑那么一定最优
<span style="font-size:18px;"><span style="font-size:18px;">#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
int n, m;
while(scanf("%d%d", &n, &m) == 2)
{
double ans = 0.0;
for(int i = 1; i< n; i++)
{
double pos = (double)i / n * (n+m);
ans += fabs(pos - floor(pos + 0.5))/ (n+m);
}
printf("%.4lf\n", ans*10000);
}
return 0;
}
</span></span>