hihocoder 1650 扁平化管理

2022-08-05 03:51:10 字數 1521 閱讀 5792

描述小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...