CodeForces 712C Memory and De-Evolution(贪心+数学)

Description

Memory is now interested in the de-evolution of objects, specifically triangles. He starts with an equilateral triangle of side length x, and he wishes to perform operations to obtain an equilateral triangle of side length y.

In a single second, he can modify the length of a single side of the current triangle such that it remains a non-degenerate triangle (triangle of positive area). At any moment of time, the length of each side should be integer.

What is the minimum number of seconds required for Memory to obtain the equilateral triangle of side length y?

Input

The first and only line contains two integers x and y (3 ≤ y < x ≤ 100 000) — the starting and ending equilateral triangle side lengths respectively.

Output

Print a single integer — the minimum number of seconds required for Memory to obtain the equilateral triangle of side length y if he starts with the equilateral triangle of side length x.

Examples

input
6 3
output
4
input
8 5
output
3
input
22 4
output
6

题目大意

将边长为x的正三角形减少为边长为y的正三角形,每一步只能改变一条边,问最小需要多少次操作。

解题思路

逆向思维。
根据贪心策略,我们的想法是每一步变化的越大越靠近目标值越好,可是当正向考虑时根据第三组样例数据我们会发现每一步减少的值无法控制。当用逆向思维去将正三角形的边由y增大为x,根据三角形任意两边之和小于第三边,可以每一步都将第三边修改为最大的两条边的和-1,直至最小边的值>=x.

代码实现

#include<bits/stdc++.h>
using namespace std;
#define IO ios::sync_with_stdio(false);\
cin.tie(0);\
cout.tie(0);
typedef long long ll;
int num[1<<18];
char str[20];
int main()
{
    IO;
    int x,y;
    cin>>x>>y;
    int a,b,c,ans=0;
    a=b=c=y;
    while(a<x)
    {
        swap(a,b);
        swap(b,c);
        c=a+b-1;
        ans++;
//        cout<<a<<" "<<b<<" "<<c<<endl;
    }
    cout<<ans<<endl;
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值