贪心思想,STR 值增长得越慢,可能得到的 EXP 值就越多。
根据此,我们在 \(x\) 较小时,可以乘 \(a\) 也可以加 \(b\),选择运算后较小的一种情况。在某一时刻,当 \(x \times a > x + b\) 时,可知一直到最后都应选择加 \(b\)(前者是几何级增长,后者是算术级增长)。然后计算能加的次数即可。
具体实现如下:
#include <iostream>
#include <cstdio>
#define int long long
using namespace std;
signed main()
{
int x,y,a,b,k,ans=0;
cin >> x >> y >> a >> b;
while(x < y/a && x*a < x+b)//注意,这里不可写成 x*a<y,否则会因超过极限最大值变为负数,从而导致死循环
x *= a,ans++;
k = y - x - 1;
ans += k / b;
cout << ans;
return 0;
}
标签:增长,int,long,&&,abc180,include
From: https://www.cnblogs.com/-lilong-/p/17976884