F - Spices Editorial by Mitsubachi


公式解説の方針において、 \(S\) の要素から辛さ \(p_i\) を作れるかを判定するパートがあり、この周辺についての別解を紹介します。

\(S\) の要素から辛さ \(p_i\) を作れる必要十分条件は \(S\) について基底を取った際、それらのxorを組み合わせて \(p_i\) が得られることです。この判定は \(S\) の基底をbasesとして以下のような疑似コードで行えます。

def can_make(n):
    now = n

    for base in bases:
        now = min(now, now ^ base)

    if now == 0:
        return True
    else:
        bases.append(now)
        return False

\(S\) の基底は最初は空集合として、上の疑似コード(の10行目の部分)においてelseに分岐した際にbasesにnowを入れることで管理できます。

posted:
last update: