zoukankan      html  css  js  c++  java
  • HihoCoder1650 : 扁平化管理([Offer收割]编程练习赛38)(二分)

    描述

    小Hi的公司包括CEO在内一共有N名员工。这N名员工的上下级关系形成树形结构,CEO处于树根,普通员工处于叶子节点。  

    现在公司希望管理扁平化,要求树形结构中的层级不超过L层。此外,假设A是B的直接上级,那么B管理的下属数目必须少于A管理的下属数目。  

    请你判断CEO至少要管理多少名下属?

    例如N=12,L=3则CEO至少要管理4名下属。因为假设CEO只管理3名下属,则整个公司最多容纳10名员工,如下图所示:

           1
        /  |  
       2   3   4
      /  /  / 
     5  6 7 8 9 10
    

    输入

    两个整数N和L。 (2 ≤ N, L ≤ 1018)

    输出

    一个整数代表答案。

    样例输入

    12 3

    样例输出

    4

    。。没敢写二分。。。结果数据这么水。。。所以直接借的别人代码,此题意义不大。

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    ll N,L,l,r,mid,sum,tmp,t;
    int main()
    {
        scanf("%lld%lld",&N,&L);
        if(L==2){
            printf("%lld
    ", N-1);
            return 0;
        } l=1;r=N;
        while(l<r){
            mid=(l+r)>>1;
            sum=1,tmp=1,t=max(mid-L+2,(ll)1);
            for(ll i=mid;i>=t;i--){
                if(N/i<=tmp||sum>=N){ 
                    sum=N;
                    break;
                }  tmp*=i; sum+=tmp;
            }
            if(sum>=N) r=mid;
            else  l=mid+1;
        }
        printf("%lld
    ",l);
        return 0;
    }
  • 相关阅读:
    Android SDK镜像的介绍使用
    如何在使用MAMP环境下安装MySQLdb
    MySQL – 导出数据成csv
    CSV
    自己写的一个Yeoman的Generator-Require-Angularjs
    笔记
    PHP
    Intellij IDEA 14的注册机
    nodejs
    Python
  • 原文地址:https://www.cnblogs.com/hua-dong/p/8126762.html
Copyright © 2011-2022 走看看