F - Zero or One Editorial by yuto1115

別解

\(B,d\) を定数として、以下のアルゴリズムを考えます。

  1. \(b=2,3,\dots,B\) に対して、条件を満たすかどうか愚直に判定する。
  2. 長さ \(d\) の 01 文字列 \(S\) を全探索する。それぞれの \(S\) に対して、\(N\)\(b\) 進数表記した時に \(S\) になるような \(b>B\) が存在するかどうか判定する。これは、\(S\)\(b\) 進数表記された数とみた時の値が \(N\) を超えないような最大の \(b > B\) を二分探索で求めて、その \(b\) が条件を満たすかどうか判定すればよい。

このアルゴリズムは \((B+1)^d > \max(N)\) のとき正当で、計算量は \(O(B\log N+2^d\cdot d\log N)\) です。この問題の制約下では、\(B=1000,d=6\) などと定めると十分高速に動作します。

なお、2. の部分に公式解説のアルゴリズムを適用すると、公式解および本解のいずれよりも高速に動作します (その場合 \(d=8\) 程度に設定するのが最適なようです)。

posted:
last update: