1677: 约会
Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lldSubmitted: 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;
}