题目
给你一个A B p q,A<B A B可能有1e9那么大,
对于A 每一次可以+p 或者把p变成p*q
问使得A>=B最少需要几步
解法
题目给你的信息有一点迷惑性,题目故意让你想"哎呀又加又乘的。我来个bfs吧!然后你就T了
实际上呢,我们这么想。你完全可以先乘完再加,不然先加又乘不是亏了么!!!!这是肯定的
所以相当于把乘提前了,先乘再加。
这个时候又,只要枚举乘就可以了,乘只能123456789.。。。次,剩下的都是加了。
A和B可直接搞到C(C=B-A)
然后每次O(1)的...... 1e9都不怕,况且加了限定条件如果乘法次数太大就gg了,~~~
代码
(我没交 我也不知道对错..)
#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
typedef long long ll;
ll a, b, p, q,c;
int main()
{
int t;
cin >> t;
while (t--) {
cin >> a >> b >> p >> q;
ll tmp = 0; ll ans = 0; ll minn;
minn = 1000000009;
c = b - a;
for (int i = 0; i <= c; i++) {
//b-a 是至少要达到的数、 i是需要乘的个数
tmp = p * pow(q, i);
ans = i;
if (tmp > c) {
ans += 1;
break;
}
else {
ans +=(c==(c - c / tmp) ? c / tmp : (c / tmp) + 1);
}
minn = min(minn, ans);
}
cout << minn << endl;
}
return 0;
}