UVA1388 Graveyard

思路

就是对于每个点,找出离他最近的目标点的距离

我使用了上取整和下取整实现,蓝书上的实现方法是坐标系缩放,每个点的目标位置就是它四舍五入的结果

具体证明见蓝书

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int main(){
    int n,m;
    while(scanf("%d %d",&n,&m)==2){
        double t1=10000.0/n,t2=10000.0/(n+m),ans=0;
        for(int i=0;i<n;i++){
            ans+=abs(t1*i-min(t2*(floor((t1*i)/t2+0.5)),t2*(ceil((t1*i)/t2+0.5))));
        }
        printf("%.4lf\n",ans);
    }
    return 0;
}
posted @ 2019-04-08 17:26  dreagonm  阅读(113)  评论(0编辑  收藏  举报