题解:P15541 [CCC 2026 S1] Baby Hop, Giant Hop
lsc_shenyin · · 题解
题目大意
给出
题目思路
考虑先处理
接下来分析
- 当
n+m \ne n+1+k-m 时,次少步数可能是较大者。 - 可以选择先加
1 再减1 ,增加两步。 - 如果至少用过一次加减
k 的操作,便可以将其中一个加减k 转化为k 个加减1 ,增加k-1 步。
在以上三种情况找最小者即可。
code
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define the_end return 0;
ll a,b,k,t,ans,tmp,ma=1e18;
int main(){
cin>>a>>b>>k>>t;
ans=abs(b-a)/k;
tmp=abs(b-a)%k;
if(t==1)cout<<min(ans+tmp,ans+1+(k-tmp));
else {
if(ans+tmp!=ans+1+(k-tmp))ma=max(ans+tmp,ans+1+(k-tmp));//情况一
ma=min(ma,min(ans+tmp,ans+1+(k-tmp))+2);//情况二,选择最小者加两步,因为步数较大的再加两步不可能成为第二大
if(ans!=0)ma=min(ma,ans+tmp+(k-1));//情况三
ma=min(ma,ans+1+(k-1)+(k-tmp));//情况三
cout<<ma;
}
the_end
}