C Looooops POJ

来源:互联网 发布:sql 批量replace 编辑:程序博客网 时间:2024/05/20 01:10


题目:点击打开链接


题意:  直接公式化出来就是:

         Cx=(B-A)%(2^k)


明显的扩欧解方程嘛,刚做了一个扩欧的总结,以为会秒A,结果 呵呵。。。


确实很坑,差不多改了半个小时了,交了一面,感到绝望,怀疑人生大哭


直接贴代码吧。


还是先说一下坑吧:



#include<cstdio>#include<iostream>using namespace std;typedef long long ll;ll  ex_gcd(ll a,ll b,ll &x,ll &y){    if(b==0)    {        x=1;        y=0;        return a;    }    ll d=ex_gcd(b,a%b,y,x);    y-=x*(a/b);    return d;}int main(){    ll A,B,C,k;    while(scanf("%lld%lld%lld%lld",&A,&B,&C,&k)&&(A+B+C+k))    {        ll x,y,d;        ll a=C;        ll b=(ll)1<<k;    //就是这,,,,,,        d=ex_gcd(a,b,x,y);        ll c=B-A;        if(c==0)        {            puts("0");            continue;        }        if(c%d!=0)        {            puts("FOREVER");            continue;        }        x=x*(c/d);        ll t=b/d;        x=(x%t+t)%t;             printf("%lld\n",x);    }    return 0;}





原创粉丝点击