難しい 0件解決済み 正答率0%

Hotel Room Allocation

Assign arriving groups in order.

このチャレンジで学べること

  • 十分な空きがある最初の位置を探す
  • セグメント木を更新しクエリする
  • 遅い走査を対数時間の処理に変える

問題

Assign arriving groups in order. A group must stay entirely in the earliest hotel with enough free rooms. Subtract the group size from that hotel’s free rooms. If no hotel fits, return 0 for that group and leave all capacities unchanged. Hotel positions start at 1.

Implement hotel_room_allocation(rooms, groups).

Input

rooms: Initial free rooms per hotel, in priority order.

groups: Group sizes in arrival order.

Output

Return the selected hotel position for each group, or 0 when it cannot be placed.

制約

1…200,000 hotels and 0…200,000 groups. Initial room counts are 0…1,000,000,000. Group sizes are 1…1,000,000,000. Empty groups input returns an empty list.

例

例 1
入力:
rooms = [3, 1, 4]
groups = [2, 3, 2]

期待される出力:
expected = [1, 3, 0]
入力:
std::vector<long long> rooms = {3, 1, 4};
std::vector<long long> groups = {2, 3, 2};

期待される出力:
std::vector<long long> expected = {1, 3, 0};
入力:
long[] rooms = new long[] {3, 1, 4};
long[] groups = new long[] {2, 3, 2};

期待される出力:
long[] expected = new long[] {1, 3, 0};

解説

The first group leaves [1, 1, 4]. The second uses hotel 3, leaving [1, 1, 1]. The last group of 2 cannot fit.

例 2
入力:
rooms = [2, 2]
groups = [2, 2]

期待される出力:
expected = [1, 2]
入力:
std::vector<long long> rooms = {2, 2};
std::vector<long long> groups = {2, 2};

期待される出力:
std::vector<long long> expected = {1, 2};
入力:
long[] rooms = new long[] {2, 2};
long[] groups = new long[] {2, 2};

期待される出力:
long[] expected = new long[] {1, 2};

解説

Both hotels fit the first group, so choose the earlier hotel 1. It becomes full, so the next group uses hotel 2.

解き方のヒント

まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。

ヒント 1

各グループは、必要な部屋数を満たす最初のホテルに入れるので、容量で素早く前方探索できる必要があります。

ヒント 2

各ホテルの現在の部屋数を持ち、しきい値を満たす最初の index を探して更新できる構造を使います。

ヒント 3

条件を満たすホテルがなければ 0 を出力し、部屋数は変更しません。

目安の計算量

時間 O((hotels + groups) log hotels)、追加メモリ O(hotels)

参考資料

この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。