第1問
あなたは今、お気に入りの猫カフェにいます。
そこには看板猫の 「しろ」「もも」「くろ」 の3匹がいます。
店員さんから「今日は合計で K 粒 のカリカリ(おやつ)を彼らにあげてください」と、
一袋のカリカリを渡されました。
ただし、猫たちの健康のために以下のルールを守らなければなりません。
【ルール】公平に: 3匹それぞれに、最低でも 1粒 はあげてください。
食べすぎ注意: 1匹にあげられる上限は N粒 までです。
【問い】3匹へのカリカリの配り方は、全部で何通りあるでしょうか?
第2問
赤い棚(導入美容液): N種類の導入美容液があり、
価格は P_1, P_2・・・P_N円です。
青い棚(保湿クリーム): N種類のクリームがあり、
価格は Q_1, Q_2・・・Q_N円です。
ミッション: 導入液とクリームを1本ずつ選んで、
合計金額がピッタリK円になる組み合わせはあるかな?
左側(赤い美容液): [1000, 2500, 3000]円
右側(青いクリーム): [1500, 4000, 5000]円
ターゲット: 予算 K = 5500 円
問いかけ:「この中から1つずつ選んで、合計5500円にできる?」
ミッション: 導入液とクリームを1本ずつ選んで、
合計金額がピッタリK円になる組み合わせを全探索で探す
第3問
あなたは、このカフェの店員さんです。
このお店には、全N種類のドリンクが載った
大きな「本日のおすすめメニュー表」があります。
📋 メニューの基本設定
初期状態: まだ開店前なので、全てのドリンクの「本日の注文数」は 0 です。
N と Q: ドリンクの種類数と、今日発生する出来事(クエリ)の数です。
🥧 注文(クエリ)の種類
店員さんであるあなたの仕事は、次の2つです。
クエリ1.注文が入った!
「pos番目のドリンクの注文数がx杯になりました!」
店員の動き: メニュー表のpos番目の数字をxに書き換えます。
ポイント: 今日の売れ筋を常に最新に保ちます。
クエリ2.人気調査
「l番目からr−1番目までのドリンクの中で、一番売れているのは何杯?」
店員の動き: 指定された範囲をバッと見て、その中の最大値を答えます。
🍰 効率よくさばくためのコツ(セグメント木)☕️
普通にメニューを端から端まで確認していると、
ドリンクの種類 N が 100,000 もある場合、
お客さんを待たせすぎてしまいます(時間切れ)。
そこで、このカフェでは「ピラミッド型の集計ボード」を使います。
一番下の段: 各ドリンクの注文数。
その上の段: 2つずつペアにして、そのうちの「大きい方の値」を書いておく。
さらに上の段: そのまた「大きい方」をまとめていく。
こうしておけば、広い範囲の最大値を聞かれても、
上の段の数字をいくつか見るだけで「はい、最大は13杯です!」
と秒速で答えられます。
