0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

yukicoder No.3550 「Another Rurumaru Function Problem 」別解

0
Posted at

想定解と違う方法で解いたので解法を書きたいと思います。

$2^n>\displaystyle\sum_{i=0}^{n-1}2^i$ より大きい桁を $1$ にする方が小さい桁を $1$ にするより常に重要なため、大きい桁から見て達成可能かを考えます。
また、数列 $X$ を用意します(始め $X$ は空です)。
$i$ の大きい順に解の $i$ 桁目が1にできるかを考えます。

・$i$が奇数のとき
$A$ に $i$ 桁目が含まれるときのみ解の $i$ 桁目を $1$ にすることが可能です。また、 $X$ に $i$ を追加します。

・$i$ が偶数の時
$A$ の要素のうち $i$ 桁目が $1$ であるようなもののみを集めた数列 $B$ とします。これを用意して解の $i$ 桁目を $1$ にできるかを考えます。
まず、$B$ が要素を持たない場合は $i$ 桁目が $1$ で $A$ に含まれるものがそもそも存在しないため、$i$ 桁目を $1$ にすることはできません。
また、$X$ に含まれる要素 $j$ について、$B$ にも $j$ 桁目が $1$ である要素が一つ以上含まれている必要があるため、その判定も行う必要があります。
そして、この条件を満たす場合解の $i$ 桁目を $1$ にできます。この時、$A$ に含まれていなくて $B$ に含まれている要素を使用することはできないので、$A$ を $B$ に置き換えて考えることになります。

計算をすべて終えた後、解の $i$ 桁目を $1$ にできる $i$ を全て列挙できているため、解を求めることができます。

計算量を考えます。
$2^i\leq \max(A)$ である $i$ のみ考えればよいため、見るべき $i$ は $O(\log(\max(A)))$ 個だけでよいです。そのため、$X$ に含まれる要素も $O(\log(\max(A)))$ 個であり、$A$ の要素数も常に $N$ 個以下のため、全体 $O(N\log(\max(A))^2)$ でこの問題に解くことができました。

コード(C++)

読みにくいかもしれませんが許してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?