這道題自己對代碼的理解還是可以的,但是整個思路以及兩個漏洞理解的不夠徹底,所以思路寫的不是很好
題目鏈接: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>