AtCoder Beginner Contest 293 F問題 Zero or One
問題
提出解答
問題の概要
以上の整数 のうち, 以下を満たすような整数の数を求めよ.
- を 進法で表すと, 全ての桁について, 「その桁が または 」が成り立つ.
個のテストケースについて答えよ.
制約
解法
まず, とすると, の 進法が となり, の制約から, は条件を満たさない.
よって, の場合を調べれば良い.
正の整数 を固定する. 次のような方針で調べる.
とする. 進法で表すと 桁になるような についてまとめて計算する.
このとき, 桁なので, 可能な 進法の表し方は 通りである. よって, 各表し方について, 二分探索を利用することにより, その表し方を達成するような が存在するか? 存在するならばそのような は何か? ということを 時間で計算できる.
よって, のときは 時間で列挙できる.
これを 以上 以下の整数 全てに対して行うことで, 桁以下の場合を処理できた.
ここまでの計算量は 時間である.
桁以上の場合について, このような は を満たす. よって, を満たす. よって, このような 全てに対して愚直に判定すれば良い.
このパートの計算量は 時間である.
よって, 合計で 時間/テストケース である. という制約化では, が最も高速になる.