ACM-基础-二分查找 HDU6288 2018字节跳动杯C题

题目链接

二分查找答案
我当时真的第一次见这种题型。
代码
1.1e18 unsigned long long 肯定可以装下K
2.【n】^a*【log2(n)】^b肯定爆unsigned long long(k) 所以只能除法解决
3.注意取对数时,分母可能是0(不能整除0)
4.直接ans存储答案,不要费心力去判断取L还是取R

#include<bits/stdc++.h>
typedef unsigned long long ull;
using namespace std;
int a,b;
ull k,ans;
bool check(ull mid,ull k){//
    for(int i=0;i<a;i++){
        if(k<mid)return false;//too big
        k/=mid;
    }
    ull x=(ull)ceil(log2(mid));//loge(mid);(RE(div 0)
    if(x==0)return true;
    for(int i=0;i<b;i++){
        if(k<x)return false;
        k/=x;
    }
    return true;
}
int main(){
    int t;
    //freopen("1.txt","r",stdin);
    ios::sync_with_stdio(false);
    cin>>t;
    ull l,r,n,x,mid;
    while(t--){
        cin>>a>>b>>k;
        l=0,r=k;
        while(l<=r){
            mid=(l+r)/2;
            if(check(mid,k)){
                //cout<<"mid="<<mid<<endl;
                ans=mid;
                l=mid+1;
            }
            else r=mid-1;
        }
        cout<<ans<<endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值