【翻硬币问题】
【翻硬币问题】
Entangled Coins
https://ac.nowcoder.com/acm/contest/108302/A
题目大意
思路
代码
const int N=3e5+10;
i64 n,k,s,t;
void solve(){
cin>>n>>k>>s>>t;
if(n==k){
if(t!=s && t!=(n-s)) cout<<-1<<endl;
else{
if(t==s) cout<<0<<endl;
else cout<<1<<endl;
}
return;
}
i64 l=min64(k,n-k);
//偶数次操作
i64 ans1=0;bool flag1=0;
if(s%2LL==t%2LL){
flag1=1;
ans1=2LL*((llabs(t-s)+2LL*l-1LL)/(2LL*l));
}
//奇数次操作
i64 sl=s+k-2LL*min64(s,k),sr=s+k-2LL*max64(0,k-(n-s));
i64 ans2=0;bool flag2=0;
if(sl%2LL==t%2LL){
flag2=1;
if(t<sl){
ans2=1LL+2LL*(((sl-t)+2LL*l-1LL)/(2LL*l));
}
else if(t>=sl && t<=sr){
ans2=1LL;
}
else{
ans2=1LL+2LL*(((t-sr)+2LL*l-1LL)/(2LL*l));
}
}
i64 ans=inf_i64;
if(flag1) ans=min64(ans1,ans);
if(flag2) ans=min64(ans2,ans);
if(ans==inf_i64) cout<<-1<<endl;
else cout<<ans<<endl;
}