题解 P6426 【[COCI2008-2009#1] SKOCIMIS】

· · 题解

题意:数轴上有三个点,每一次将一个两侧的点移动至另两个点之间的一个整数位置,求这样做的最大移动次数。

我们设开始是这样的:

可以这样移动:M:

或者这样:N:

题目让找出最大的移动次数,我们显然可以看出:像 N 一样移动,明显比像 M 一样移动,可移动的次数多。

所以我们让所有的移动方式都像 N 一样,将靠其他两点最近的移动到与它最近的点的前一个整数点。

易发现:这样每移动一次,ABC 中最大的距离就会减少 1 。而当它们距离等于 0 时无法移动。

所以可得:最大移动次数等于最大距离减一。即为 B - A - 1 或 C - B - 1 的最大值。

易得代码如下:

#include<stdio.h> 
#define max(m,n) (m>n?m:n) 
int a,b,c;
int main()
{
    scanf("%d%d%d",&a,&b,&c);
    printf("%d",max(b-a,c-b)-1);
    return 0;
}

蒟蒻橙后第 8 篇题解。