1.奇怪的函数
https://www.luogu.com.cn/problem/P2759
这道题好像没有什么方法可以巧妙地解决问题,所以想到枚举答案。
但面临枚举会想到二分答案(更快),判断:
1.二分性:找到一个答案,如果小了,没达到,就往后找,如果大了,已达到,就往前找。直到找到最优答案
2.如何判断:
首先要知道:
所以判断数位就可以转为判断x*log10(x)>=(n-1)
代码
注意点:
1.边界:从1到答案可能出现的最大值即(2e9)
2。二分不能l=r,因为当l=r,mid=l=r,所以就会是死循环
const int N=2e9;
#define ll long long
ll search(int el,int er){
ll l=el,r=er,mid=0,jud=0;
while(l<r){
mid=(l+r)>>1;
jud=(mid*log10(1.0*mid));
if(n-1>jud){
l=mid+1;
}else{
r=mid;
}
}
return l;
}
int main(){
scanf("%ld",&n);
ll ans=search(1,N);
printf("%ld",ans);
return 0;
}
启示:出现死循环就找找是不是哪个等于出现问题