题解 | #C Looooops#

C Looooops

https://ac.nowcoder.com/acm/contest/980/J

C Looooops

思路

k 位存储系统,意思是能储存的最大数为 2^k-1,越过了会变为 0

所以 A + x*C 图片说明 B(mod 2^k)
利用扩欧求得 x 即可

Code

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

ll exgcd(ll a,ll b,ll &x,ll &y){
    if(!b){
        x=1,y=0;
        return a;
    }

    ll d=exgcd(b,a%b,y,x);
    y-=a/b*x;

    return d;
}

ll get_mod(ll a,ll b){
    return (a%b+b)%b;
}

int main(){
    ll A,B,C,k;

    while(cin>>A>>B>>C>>k){
        if(A==0&&B==0&&C==0&&k==0) break;

        ll a=C,b=(ll)1<<k,c=B-A;

        ll x=0,y=0;
        ll d=exgcd(a,b,x,y);

        if(c%d) puts("FOREVER");
        else{
            x*=c/d;
            x=get_mod(x,b/d);
            cout<<x<<endl;
        }
    }

    return 0;
}
全部评论

相关推荐

11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务