Java算法实现:墓地雕塑(Graveyard, NEERC 2006, LA 3708)

探讨了在一个固定周长的圆上,如何通过最小化原有雕塑的移动距离来均匀分布新增雕塑的问题。采用数学方法计算每个雕塑的新位置,以实现整体布局的均匀分布。

问题描述
在一个周长为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

import java.util.Scanner;

public class _1雕塑 {
	public static void main(String[] args) {
		Scanner abc=new Scanner(System.in);
		int a=abc.nextInt();
		int b=abc.nextInt();
		while (a!=0 || b!=0) {
			double ans = 0.0;
		    for(int i = 1; i < a; i++) {
		      double pos = (double)i / a * (a+b);       //计算每个需要移动的雕塑的坐标
		      ans += Math.abs(pos - Math.floor(pos+0.5)) / (a+b);    //累加移动距离
		    }
		    System.out.printf("%.4f",ans*10000);               //等比例扩大坐标
		    break;
		}	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值