【第22期】观点:IT 行业加班,到底有没有价值?

uva 1388 - Graveyard(数论)

原创 2013年12月02日 18:56:44

题目链接:1388 - Graveyard


题目大意:在一个周长为10000的圆形水池旁有n个等距离的雕塑,现在要再添加m个雕塑,为了使得n + m个雕塑等距离,需要移动一些雕塑,问如何使得移动的总位移最小,输出最小值。


解题思路:可以将周长展成坐标来看,原来的n个雕塑在x[i] = i / n,而移动过后的位置应该在y[i] = i / (n + m),根据贪心的思想,x[i]肯定要移动到最近的y[j]上,问题就解决了,然后就讨论说会不会有两个雕像移动到同一个位置,大白书里给出了很好的反证法,假设有两个雕塑会移动到同一个位置上,0.5 和1.499999,他们计算过后都会移动到1的位置上去,但是n和m都是小于1000的,即使取得最大值,n + m = 2000, 而圆的周长为10000,所以每两个雕塑之间的距离最小为5。


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main () {
	int n, m;
	while (scanf("%d%d", &n, &m) == 2) {
		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);
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

UVAlive3708 UVA1388 POJ3154 Graveyard【水题】

Graveyard Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1715   Acce...

uva 10586 - Polynomial Remains(数论)

题目链接:uva 10586 - Polynomial Remains 题目大意:给出一个

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

UVA 1388 Graveyard

Graveyard Programming contests became so popular in the year 2397 that the governor of New Earck --...

uva 1388 - Graveyard

点击打开链接uva1388 思路:数学

UVA之1388 - Graveyard

1388 - Graveyard <p style="font-family: Simsun; font-size: 14
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)