比賽時50分.
當時的想法就是
對於最小: 類似於二分,分成兩半,取小的那一半繼續分,記錄次數
對於最大: 直接輸出大的那一邊
有一個特判就是
如果就直接在處理。
如果就直接在處理。
事實證明,我想的太複雜了(對於最小)
除去的情況,其實我們只需要輸出就行了
Why?
因爲可以我們直接將結尾端點放到開頭端點+2的地方,這樣就演變成了的情況,
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int x,y,z,xy,yz;
int main()
{
freopen("herding.in","r",stdin);
freopen("herding.out","w",stdout);
cin>>x>>y>>z;
if(x+1==y&&y+1==z) //0的情況
cout<<0<<endl;
else if(x+2==y||y+2==z) //1的情況
cout<<1<<endl;
else //2的情況
cout<<2<<endl;
xy=y-x,yz=z-y; //求最大,一位一位挪,所以是最大區間-1
if(xy>yz)
cout<<xy-1;
else
cout<<yz-1;
return 0;
}