AT_abc180_d

贪心思想,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;
}
posted @ 2024-01-20 18:00  liyilang2021  阅读(2)  评论(0编辑  收藏  举报