1、观察fibonacci数列的应用,并构造了。
2、另外练习了矩阵快速幂,不过像这种一路算下来的情况迭代即可
3、不要害怕long long!只是输入输出的格式有些混乱而已,照常使用即可!
4、一次即AC,很高兴~
//Perfect Pair 2013.7.21
#include <cstdio>
using namespace std;
long long mx(long long a,long long b)
{
return a<b?b:a;
}
const int MAX = 100;
const long long LONGLONG = 1000000000000000005;
long long fib[MAX];
int main()
{
int i=0,j=1;
fib[i] = 1;
fib[j] = 1;
// cout<<"1 1 ";
while(fib[j]<=LONGLONG)
{
fib[j+1]=fib[i++]+fib[j];
j++;
//cout<<fib[j]<<" ";
}
long long x,y,m;
scanf("%I64d %I64d %I64d",&x,&y,&m);
long long t = mx(x,y);
if(t>=m) printf("0\n");
else if(t<1) printf("-1\n");
//now,m must be strictly positive!
else
{
long long cnt = 0;
do{
if(x>y)
{
t = x;
x = y;
y = t;
}//x<=y
if(x<0)//y>0
{
t = 0 - x;
long long k = t/y + 1;
x += k*y;
cnt += k;
}
else
{
t = 0;
int i;
for(i=0;t<m;i++)
{
t = x*fib[i]+y*fib[i+1];
}
y = t;
cnt += i;
}
}while(mx(x,y)<m);
printf("%I64d\n",cnt);
}
return 0;
}