6.计算方程【算法赛】 - 蓝桥云课 (lanqiao.cn)
求x的最大范围
在不考虑 给 增值的情况下:
因此,x最大不会超过m的平方+1,即。
现在我们再看看看会对x增值有多大影响: 因为k是样例输入的值,因为log函数底越小函数增长越快,我们假设k是2(1被排除了),这样求出来的值最大。
因此
26可以忽略不计。
因此我们可以枚举x最大到1e8
就可以了。
code
这里有两个小Tips:
一:换底公式:
二:向下取整:
#include<bits/stdc++.h>
using namespace std;
int k,m;
int check(int x)
{
if(sqrt(x)+floor(log(x)/log(k))-m>0)return true;
return false;
}
void sovel()
{
cin>>k>>m;
//二分查找x
int l=1,r=1e8;
while(l<r)
{
int mid=(l+r)>>1;
if(check(mid))r=mid; //如果mid大了,说明x在左半边
else l=mid+1; //如果mid小了,说明x在右半边
}
cout<<l<<endl;
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t; cin >> t;
while (t--) {
sovel();
}
return 0;
}