LA 3708 墓地雕塑 证明

代码和题目都在训练指南里面有了。在这里简单地证明一下书上提到的漏洞。

①首先,我们不知道是不是一定有一个雕塑没有移动

证明:书中把圆进行了缩放,缩放后圆的周长为(n+m),相邻的两个最终位置之间间隔为1.

书上提示说证明思路在例题3中已经展示过了,这里描述如何把本问题的证明转化到例题3的证明。

首先我们先画出间距为1且在同一直线上的三个点。然后,我们在原n个位置中任选一个不移动的点作为这三个点的中点,如图所示。


那么,以这个不移动的点为中心,它的左右半圆上 原先分别有(n-1)/2个初始点。对于每个初始点,截取下来完整的单位长度的线段,把截取下来的线段重叠到左边的线段,根据这个方法把左半圆上的点全部映射到左边的线段上。右半圆进行相同的处理。

由圆的对称性易得两边的两条线段是关于中心点对称的。

对于线段[-1/2,1/2]上的点,问题就转化成了例题3中证明的线段上点到点x0的最短距离和的问题。显然不移动的点一定是线段[-1/2,1/2]的中点。证毕。

②会不会有两个雕塑移动到相同的位置。


假设会有两个雕塑移动到相同的位置。(蓝点,均移动到中间的红点)

根据题设有

x1+x2=1

x3+x4=1

x2<x1

x3<x4

那么肯定有x2+x3=(n+m)/n<(1/2+1/2)=1

显然不成立,所以不会有两个雕塑移动到相同的位置。

代码如下

#include<bits/stdc++.h>
using namespace std;
int n, m;
int main()
{
	while (scanf("%d%d", &n, &m) == 2) {
		double ans = 0;
		for (int i = 1; i < n; i++) {
			double p = (double)i * (n + m) / n;
			ans += fabs(p - floor(p + 0.5)) / (n+m)*1e4;
		}
		printf("%.4f\n", ans);
	}
}



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页