本文主要是介绍【笔试】]网易校招2020 某次某岗位的笔试题B(2/4),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
给你一个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;
}
这篇关于【笔试】]网易校招2020 某次某岗位的笔试题B(2/4)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!