水题,因为longlong是2^63-1,我以为是2^64-1,又傻逼了。
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#define LL unsigned long long int
using 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;
}
}
}