この問題では、指定された文字列に対して選択された K 個の操作をすべて実行した後、設定されたビット数の平均を見つける必要があります。
問題を解決するために総当たり法を使用することもできますが、総当たり法の時間計算量を克服するために確率原理を使用します。
問題文 - 整数 N、K 個の正の整数を含む配列 arr[]、および設定されたビットのみを含む長さ N のバイナリ文字列が与えられます。可能なすべての K 操作を実行した後、設定されたビット数の平均を見つける必要があります。 i 番目の操作では、指定された文字列内の任意の arr[i] ビットを反転できます。
###例### 入力– N = 2、arr[] = {1, 2}
出力– 1
説明– 初期のバイナリ文字列は 11 です。
選択の合計 = 2、最終文字列のセット ビットの合計 = 2、ans = 2/2 = 1。
入力– N = 3、arr[] = {2, 2}
出力– 1.6667
説明– 初期文字列は 111 です。
9文字列の設定桁数の合計=15、演算の合計数=9、答え=15/9=1.6667
方法 1
したがって、p の更新された値は、p の新しい設定ビットの平均、つまり新しい閉じられたビットの平均になります。
###アルゴリズム###
操作配列を走査します。
P 値と Q 値を使用して prev_p と prev_q を初期化します。
prev_p - prev_p * arr[i] / N prev_q * arr[i] / N を使用して P 値を更新します。これにより、反転されたビットが設定されたビットに平均化され、設定されたビットが設定されていないビットに反転されます
Q値を更新します。
P 値を返します。
Example
の中国語訳は次のとおりです:以上が可能なすべての K 操作後の、特定のバイナリ文字列内の設定ビット数の平均の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。