WUST OJ 1677:约会(思维)

1677: 约会

Time Limit: 1 Sec   Memory Limit: 128 MB   64bit IO Format: %lld
Submitted: 7   Accepted: 1
[ Submit][ Status][ Web Board]

Description

Fth今天很开心,因为他的女神今天答应和他一起出去看电影,这可是提升好感度的好机会。

女神很喜欢学霸,所以她出了一道题来检验Fth是不是学霸。有一个边长为a的等边三角形,

每一秒你可以任意改变一条边的长度,但是每时每刻这个图形必须是三角形,并且每次改变前后,

这条边的长度必须为整数,问最少需要多少秒变成边长为b的等边三角形。请你帮帮Fth,毕竟和

女神出去一次挺不容易的QAQ

Input

第一行一个整数T(T<=101),代表测试组数

接下来T组数据,每一组有两个数a,b(1<=a,b<=1e18)含义如上

Output

输出变换需要的最少秒数,若无解,输出-1

Sample Input 


2

3 5

2 4

Sample Output

3
4

HINT


For the first sample,the transformation is (3,3,3)->(5,3,3)->(5,5,3)->(5,5,5)


For the second sample,the transformation is(2,2,2)->(3,2,2)->(3,4,2)->(3,4,4)->(4,4,4)

思路:每次把最短的边的长度变为(另2条边的和-1),判断下特殊情况。

#include<stdio.h>
int main()
{
    int t;
    long long a,b,x,c,m,y;
    scanf("%d",&t);
    while(t--)
    {
        x=0;
        scanf("%lld%lld",&a,&y);
        if(a==y)printf("0\n");
        else if((y==1&&a>y)||(a==1&&y>a))printf("-1\n");
        else
        {
            m=a>y?a:y;
            a=b=c=a+y-m;
            y=m;
            while(a<y||b<y||c<y)
            {
                if(a<=b&&a<=c)a=b+c-1,x++;
                else if(b<=a&&b<=c)b=a+c-1,x++;
                else if(c<=a&&c<=b)c=a+b-1,x++;
                if(a>=y)a=y;
                if(b>=y)b=y;
                if(c>=y)c=y;
            }
            printf("%lld\n",x);
        }
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值