破自行车题解

什么破玩意,不然发题解?
如果有跳跃机会,我们优先往终点走,超过终点了就不走。

就像这样

if(k<=a/l) a-=k*l,k=0;
else k-=a/l,a=a%l;
if(k<=b/l) b-=k*l,k=0;
else k-=b/l,b=b%l;

如果这时 k=0 那么答案是 a+b ,因为已经没法跳了。

如果是 k=1 说明只能跳一下,怎么跳呢,我们可以跳过头,再往回走,但是我们最多会跳两下 ab 各一下,这个时候就要取最优解了。

像这样

int s=1e16;
s=min(s,b+min(a,l-a));//min(a,l-a)是指,跳和不跳算出步数少的那个
s=min(s,a+min(b,l-b));
cout<<min(s,a+b)<<endl;

如果 k≥2 ,因为最多跳 a,b 两下,所以可以随便跳,在跳与不跳之间取一个最优值就行。