题解 | #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;
}
全部评论

相关推荐

在笔试的大西瓜很矫健:校招数分不用想了,这经历和学历都不够用,大厂更别想,初筛都过不了,说点不好听的小厂数分都进不去(小厂也是假数分),要两个对口实习+3个项目(或者3+2),而且要有含金量才能补一点你的学历劣势。 建议刷实习,社招找数分,校招看运气,能入行业就行,可以运营转数分
点赞 评论 收藏
分享
Edgestr:没项目地址就干脆把那一栏删了呗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务