POJ 3154 Graveyard

這道題自己對代碼的理解還是可以的,但是整個思路以及兩個漏洞理解的不夠徹底,所以思路寫的不是很好

 

題目鏈接: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>


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章