困牛放牧AcWing

Farmer John 的三头获奖奶牛 Bessie、Elsie 和 Mildred,总是会迷路走到农场上遥远的地方去!

他需要你帮助将她们一起赶回来。

农场的草地大体是一块狭长的区域——我们可以将其想象成一条数轴,奶牛可以占据数轴上的任意整数位置。

这 3 头奶牛现在正位于不同的整数位置,Farmer John 想要移动她们,使得她们占据三个相邻的位置(例如,位置 6、7、8)。

不幸的是,奶牛们现在很困,Farmer John 要让她们集中精力听从命令移动并不容易。

任意时刻,他只能使得一头处在“端点”(在所有奶牛中位置最小或最大)位置的奶牛移动。

当他移动奶牛时,他可以命令她走到任意一个未被占用的整数位置,只要在新的位置上她不再是一个端点。

可以看到随着时间的推移,这样的移动可以使奶牛们趋向越来越近。

请求出使得奶牛们集中到相邻位置所进行的移动次数的最小和最大可能值。

输入格式

输入包含一行,包括三个空格分隔的整数,为 Bessie、Elsie 和 Mildred 的位置。

输出格式

输出的第一行包含 Farmer John 需要将奶牛们聚集起来所需进行的最小移动次数。

第二行包含他将奶牛聚集起来能够进行的最大移动次数。

数据范围

每个位置均为一个范围 1…10^9 内的整数。

输入样例:

4 7 9

输出样例:

1
2

样例解释

最小移动次数为 11——如果 Farmer John 将位置 4 的奶牛移动到位置 8,那么奶牛们就处在连续的位置 7、8、9。

最大移动次数为 2。例如,位置 9 的奶牛可以被移动到位置 6,然后位置 7 的奶牛可以被移动到位置 5。

源代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    vector<int> A;
    A.push_back(a);
    A.push_back(b);
    A.push_back(c);//从大到小存数据
    sort(A.begin(),A.end());//排序
    if(A[0]==A[1]-1&&A[2]-1==A[1])//如果三者连续,无解
    {
        cout<<0<<endl<<0;
        return 0;
    }
    int minans=0;
    if(A[2]-2==A[1]||A[1]-2==A[0])minans=1;//如果中间者与最大值或者最小值相差2,一步即可到位
    else minans=2;//其余情况均为最小2步完成
    int maxans=max(A[2]-A[1]-1,A[1]-A[0]-1);//最大步数为中间值与最大值或者最小值的差,取最大
    cout<<minans<<endl<<maxans;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/couchpotatoshy/article/details/124558847
今日推荐