題目鏈接:https://vjudge.net/problem/UVALive-3708
解析:思維題。
固定一個點不動,讓其餘各點分別移動到離它最近的目標點。這種情況下一定是最優的 。
注意細節。將距離按比例縮小計算。
考慮特殊情況,會不會有多個點移動到了一個點上?答案是否定的。假設有兩個雕塑被移動到了一個位置,這說明它們很接近。具體來說,相差小於1.但這是不可能的,因爲新增雕塑以後,彼此間的距離纔等於1,在增加之前應該比1大。
AC代碼:
#include<iostream>
#include<cstdio>
#include<queue>
#include<map>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
int n,m;
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
double ans=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);
}
}