墓地雕塑
问题描述
在一个周长为10000的圆上等距分布着n个雕塑。现在又有m个新雕塑加入(位置可以随意放),
希望所有n+m个雕塑在圆周上均匀分布。这就需要移动其中一些原有的雕塑。要求n个雕塑移动的总距离尽量小。
输入格式
输入包含若干组数据。每组数据仅一行,包含两个整数n和m(2≤n≤1 000,1≤m ≤1 000),
即原始的雕塑数量和新加的雕塑数量。输入结束标志为文件结束符(EOF)。
输出格式
输出一个正整数,表示每袋核桃的数量。
样例输入1
2 1
2 3
3 1
10 10
样例输出1
1666.6667
1000.0
1666.6667
0.0
PS:首先,这个题很恶心人,
我们假设这个圆环得长度为n+m
我第i个雕塑 为(n+m)/ni;
我移动得最小距离就是找到最近得那个新节点,就是最近得整数(我一共有n+m个长度,我新点就是每一个整数点)
求差就可以了
最后求和,然后10000在除m+n
package 第七次模拟;
import java.util.Scanner;
public class Demo1雕塑 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int m = sc.nextInt();
double ans = 0;
for(int i=0;i<n;i++)
{
double pos=(double)(n+m)/n*i;
ans=ans+Math.abs(Math.floor(pos+0.5)-pos);
}
System.out.printf("%.4f\n",ans*10000/(double)(n+m));
}
}
}