acdream 1187

来源:互联网 发布:淘宝旺旺号怎么查看 编辑:程序博客网 时间:2024/05/17 02:59

水题,因为longlong是2^63-1,我以为是2^64-1,又傻逼了。

代码:

#include <iostream>#include <cstring>#include <cstdio>#define LL unsigned long long intusing namespace std;LL n,p,q;int mark[100];void dfs1(LL k){    memset(mark,-1,sizeof(mark));    int cnt=0;    while (k>1)    {        cnt++;        mark[cnt]=0;        if (k&1)            mark[cnt]=1;        k=k/2;    }    p=q=1;    while (cnt)    {        if (mark[cnt]==0)            q+=p;        else            p+=q;        cnt--;    }    return ;}void dfs2(LL a,LL b){    memset(mark,-1,sizeof(mark));    int cnt=0;    while (a!=b)    {        cnt++;        if (a<b)        {            b-=a;            mark[cnt]=0;        }        else        {            a-=b;            mark[cnt]=1;        }    }    n=1;    while (cnt)    {        if (mark[cnt]==0)            n=n*2;        else            n=n*2+1;        cnt--;    }    return ;}int main(){    int T;    cin>>T;    for (int r=1;r<=T;r++)    {        int kk;        cin>>kk;        if (kk==1)        {            cin>>n;            dfs1(n);            cout<<"Case #"<<r<<": "<<p<<" "<<q<<endl;        }        else        {            cin>>p>>q;            dfs2(p,q);            cout<<"Case #"<<r<<": "<<n<<endl;        }    }}


0 0
原创粉丝点击