競プロに出てきそうな問題つくった(解説は明日公開予定)

第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杯です!」
と秒速で答えられます。

タイトルとURLをコピーしました