Description:
31階建てのビルがある。
このビルで目的の階に行くにはエレベータを使う方法と、階段を使う方法がある。
エレベータを用いると、一階の移動に4秒かかり、エレベータが停止すると、次に動くまで10秒待たなくてはいけない。
階段を使うと、一階の移動に20秒かかる。
今エレベータが1階に止まっていて、2階から31階の内、1階にいる客の行きたい階が与えられる。
最も遅く目的階に到着する客が出来るだけ早く着くように客とエレベータの動きをプランニングし、必要な秒数と、その時エレベータが止まるべき階を答えよ。
解が複数ある時はどれでもよい。
Answer:
特定の秒数以内で全員が辿り着けるかは貪欲法で解くことが出来る、
1. エレベータが止まっている階から階段で間に合う客は歩く。
2. この階で止まらないと間に合わないという客が出るまで、エレベータは上昇。
というステップを繰り返し、途中で絶対間に合わない客が出たらNG。
答えは最大でも600秒で、特定の秒数に対して間に合うかどうかが判定できるのだから、あとはバイナリサーチで答えの秒数を探してやれば良い。
Source: