DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

Cats & Soup: Magic Recipe

問題に戻る

解説

合成できるときはすぐ合成する

レベル xxx の物品の重みを 2x−12^{x-1}2x−1 とする。合成は各種類の総重量を保ち、一枠を空ける。合成を尽くすと、レベル MMM 未満では各レベルに高々一個だけ残る。この正規形は二進数の繰り上がりで一意に定まり、同じ総重量を表す状態の中で使用枠数が最少となる。

生成される種類の列を固定する。ある戦略がその列に従って生成を続けられるなら、正規化する戦略も空き枠が少なくならないため続けられる。星の総重量が 2L−12^{L-1}2L−1 に達すれば、合成してレベル LLL の星を作れる。したがって、どの生成結果の列に対しても即座の合成は不利にならない。毎回合成を尽くし、空き枠があれば生成すればよい。

状態と遷移

S=2L−1S=2^{L-1}S=2L−1、H=2M−1H=2^{M-1}H=2M−1 とする。成功前の星は 0 のマスク、レベル 未満の月は のマスクで表せる。レベル の月は一枠を永久に使う。

そのような月を除いた残りの枠数を ccc とし、状態からの成功確率を F(c,s,t)F(c,s,t)F(c,s,t) とする。popcount⁡(s)+popcount⁡(t)≥c\operatorname{popcount}(s)+\operatorname{popcount}(t)\geq cpopcount(s)+popcount(t)≥ なら生成できず、値は零である。 の層も零とする。

星の生成は sss に一を加えることで、すべての二進の繰り上がりをまとめて処理できる。SSS に達したら即成功する。月の生成は ttt に一を加え、HHH に達したら t=0t=0t=0 として cc を一減らす。

α=a/b\alpha=a/bα=a/b、β=1−α\beta=1-\alphaβ=1−α とすると

F(c,s,t)=αA+βB,F(c,s,t)=\alpha A+\beta B,F(c,s,t)=αA+βB, A={1s+1=S,F(c,s+1,t)s+1<S,A=\begin{cases}1&s+1=S,\\F(c,s+1,t)&s+1<S,\end{cases}A={1F(c,s+1,t B={F(c−1,s,0)t+1=H,F(c,s,t+1)t+1<H.B=\begin{cases}F(c-1,s,0)&t+1=H,\\F(c,s,t+1)&t+1<H.\end{cases}B={F(c−1,s

答えは F(N,0,0)F(N,0,0)F(N,0,0) である。最後の空き枠を使う場合でも、目標の星ができたら成功とする。最高レベルの月は捨てられないので、必ず容量を減らす。

ccc の昇順、同じ層では s,ts,ts,t の降順に計算する。現在と一つ前の層だけ保持すればよい。時間計算量は O(N2L+M−2)O(N2^{L+M-2})O(N2L+M−2)、空間計算量は O(2L+ で、全体の制約では最大 状態を計算する。

サブタスク

サブタスク 1 は各種類・各レベルの実際の個数を保存するメモ化探索で解ける。合成できれば合成し、できず空きがあるときだけ生成の二通りに分岐する。個数ベクトルは高々 (N+2M2M)\binom{N+2M}{2M}(2MN+2M​) 個で、このサブタスクでは最大 848484 個となる。付属の naive はこの方法である。

サブタスク 2 は L=1L=1L=1 なので、一度でも星が出れば成功する。月だけが出続けた場合、初めて生成できなくなるまでの回数は

D={2N−1N<M,(N−M+2)2M−1−1N≥MD=\begin{cases}2^N-1&N<M,\\(N-M+2)2^{M-1}-1&N\geq M\end{cases}D={2N−1

である。答えは 1−βD1-\beta^D1−βD で、逆元も含めて O(log⁡998 244 353+log⁡D)O(\log998\,244\,353+\log D)O(log998244353+logD) 時間で計算できる。

P=998 244 353P=998\,244\,353P=998244353 として α=abP−2 mod P\alpha=a b^{P-2}\bmod Pα=abP−2mod、 を使う。生成のたびに総重量が一増え、その上限は なので生成回数は有限である。既約分母は の累乗の約数で、 より逆元が存在する。

二つの確率の積の和は 2(P−1)2<2⋅10182(P-1)^2<2\cdot10^{18}2(P−1)2<2⋅1018 未満なので符号付き 646464 ビット整数で十分であり、既約分数をそのまま構成する必要はない。独立な forward 解法は星と月の総重量順に確率を伝播する。小さい場合は正確な有理数で全合成・生成の選択も比較した。

Solution written by GPT

≤s<S0\leq s<S
0≤s<S
MMM
0≤t<H0\leq t<H0≤t<H
MMM
c
c=0c=0c=0
c
)
​
s+1=S,s+1<S,​
,
0
)
F(c,s,t+1)
​
t+1=H,t+1<H.​
M−2)O(2^{L+M-2})
O(2L+M−2)
5 242 8805\,242\,8805242880
(N−M+2)2M−1−1
​
N<M,N≥M​
P
β=(1−α+P) mod P\beta=(1-\alpha+P)\bmod Pβ=(1−α+P)modP
N2M−1N2^{M-1}N2M−1
bbb
1≤b<P1\leq b<P1≤b<P