今日、この問題に遭遇しました。これではa[]
、昇順でソートされた配列が与えられ、数値の合計を見つけて、型(負でない)の追加の整数の最小数を見つける必要があります。存在するすべての整数の合計が、ある整数(が負ではない) に等しくなるように必要です。2a1, 2a2, 2a3, ..., 2an
2l
l
2k - 1
k
k
例えば:
入力は、最初の行の整数 n で構成されます。2 番目の入力行には、スペースで区切られた n 個の整数 a(1)、a(2)、...、a(n) が含まれます。
例 1:
3
0 1 2
この場合の答えは 0 です。2 0 +2 1 +2 2 = 7 は、k=3 に対して 2 k -1 の形式になっているからです。
例 2:
3
2 4 5
この場合の答えは 2 2 +2 4 +2 5 =52 なので 3 で、2 k -1 を作るには 63 なので、3 項として 2 0 ,2 1 ,2 3が必要です。
この問題に取り組み、合計を見つけてから、バイナリ表現の 1 の数を数え、 equals と答えmax(a[i])-count
ました。
しかし、私が得る問題は、問題の与えられた制約です
1 ≤ n ≤ 10^5
0 ≤ a[i] ≤ 2*10^9
誰か助けてくれませんか?この問題は私がプログラミング コンテストで得たもので、解決策は 2.6 MB のメモリで受け入れられました。したがって、2*10^9 ビットの配列ビットを格納または取得することは、より良い方法ではありません。別のアプローチまたはアイデアがあると思います。