Description:

現在、高層ビルのF階への引越しの最中。
人は階段を用いて荷物を一つずつ運ぶ。
上に移動する時は常に荷物を持ち、下に移動する時は常に荷物を持たない。
荷物を持っているいないに関わらず、一階の移動には一分かかる。
階段は狭く、人がすれ違うことが出来ない為、階段でぶつかると、下に居る人は上の人に荷物を渡し、二人とも方向転換するものとする。
N人で引越しで、玄関(0階)にはB個の荷物がある。
作業員の居る位置と進行方向が与えられるので、全ての荷物がF階に到着するのは何分後か?

1 <= F, N <= 1000
1 <= B <= 100万

Answer:

人を区別しないとすれば、階段ですれ違う事が可能と見做せる。
なので、2Fだけ時間が経った時に、Nだけ0階の荷物がF階に運ばれて、はじめと同じ位置に戻っているはずである。
このループを繰り返し、0階の荷物を残りN個未満になるまで減らすことが出来る。
後は各作業員が次とその次に荷物をF階に届けるのに必要な時間の中から(運搬中+0階の荷物)番目に小さい時間だけ余計二時間がかかる。
計算時間はN log(N)

Source: