👈轻点一下,感谢资瓷
幸好我这题以前做了,我都不知道周日有题……
分析
农场的草地大体是一块狭长的区域——我们可以将其想象成一条数轴,奶牛可以占据数轴上的任意整数位置。
我建议可以画个图,更好理解,我这里就简单表示一下
数轴大家都会画吧
我手画的,有亿点点丑,大佬们谅解……
图中的 $d1$ , $d2$ 分别表示左端点到 $a[2]$ 的距离和右端点到 $a[2]$ 的距离
接下来,我们分三种情况讨论:
1.三头牛相邻,那就很容易,直接 $0$
2.其中两头牛相邻,那么最小值就是 $min(d1/d2,2)$ (/是或者,不是除……)
为肾什么是 $d1或d2和2$ 呢?我来解释一下
在一般情况下, $2$ 是两头牛相邻的最小值,但是有一种可能,就是有两头牛之间的距离为 $1$
这个 $1$ ,就是 $d1或d2$
3.三头牛一头都不相邻,跟上面差不多,只是要取三个值的最小值 $d1,d2和2$
其实呢,分析一下最小值只有三种情况, $0,1,2$
有没有感觉被坑了
再来说最大值
这太简单了,只要取 $d1,d2$ 的最大值就行了
我建议大家还是自己画个图,我描述的可能不太清
$\color{red}{你学废了吗?}$
代码比较逊,仅供参考
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[10],minn,maxn;
for(int i=1;i<=3;i++) cin>>a[i];
sort(a+1,a+4);
int d1=a[2]-a[1]-1,d2=a[3]-a[2]-1;
if(d1==0&&d2==0) minn=0;
else if(d1!=0&&d2==0) minn=min(d1,2);
else if(d1==0&&d2!=0) minn=min(d2,2);
else minn=min(2,min(d1,d2));
maxn=max(d1,d2);
printf("%d\n%d",minn,maxn);
}