【翻硬币问题】

【翻硬币问题】

Entangled Coins

https://ac.nowcoder.com/acm/contest/108302/A

题目大意

223ea3e0-bbbe-4f2a-95aa-f122558649de

思路

f0c7b2e475506a58290f6749e3223855_720
4507f2d24382c73123129a9014ccd631_720

代码

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;
}
posted @ 2025-08-20 18:35  White_ink  阅读(4)  评论(0)    收藏  举报