描述小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 管理的層次可以看做一棵樹,假設根節點的下屬有k個,那麼這k個人最多各自管理(k-1)個,依次類推,顯然總人數是各階乘的和。
在l層的限制下,上層的直接管理人員人數要大於下一層,能用l層就盡量用l層,而不是用 < l層,否則題目要求的直接管理人數會上公升。如果用不到l層,比如人數很少,但是給了10000層,顯然是用不到的,設直接下屬人數為ans,也要往小了找ans。
題目的層數可以達到10^18,所以尋找最小ans的話是不可以用暴力解法的。所以我們用二分法求解,對能滿足總人數大於n且層數小於l層的k,二分k判斷是不是能滿足條件,並取滿足條件的最小值。
#include#include#include
using
namespace
std;
typedef
long
long
ll;int
main()
else
else
x = x *num;
}sum +=x;
if (n <=sum)
++ll;
--num;
}//to ensure when low = high - 1, the result will be true
if (sum >=n)
else
}printf(
"%lld\n
", low);
}}
return0;
}
sample i/o:
in:20 3
out:5
because 20-1=19, and in the limit of 3,4+4*3<19<5+5*4, so answer is 5
in:1000000000000000000 2
out:1000000000
陣列扁平化
原陣列 const arr 1,2,3,4 5,6,7,8 9 希望輸出 1,2,3,4,5,6,7,8,9 方法一 遞迴 function arrdelayering arr else return newarr let newarr arrdelayering arr 1,2,3,4,5,6,7...
陣列扁平化
今天看到了陣列扁平化處理,猶記得之前面試被問到過,下面介紹一下陣列扁平化處理的幾種形式 題目要求 將陣列 arr 1,2,3,4,5,6,7,8,9 轉化為 1,2,3,4,5,6,7,8,9 1 遞迴 var arr 1,2,3,4,5,6,7,8,9 方法一 遞迴 function flatfu...
扁平化陣列
第一次遇到陣列扁平化已經是在3k遊戲的筆試題裡,當時是用了遞迴的方法。因為對一些陣列方法,字串方法十分的不熟練 扁平化陣列的核心都是,遍歷陣列元素,遇到陣列就拆,不是陣列就加進去。var arr 1,2,3,4,5 console.log bianpinghua arr tostring split...