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

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









この問題では、0 と 1 で構成される文字列が与えられており、1 から始まるすべての順列の合計数を見つける必要があります。答えは膨大な数になる可能性があるため、1000000007 を法にして出力します。 Input:str="10101001001"Output:210Input:str="101110011"Output:56 いくつかの組み合わせ数学を適用し、いくつかの式を設定することで、この問題を解決します。解決方法 この方法では、0 と 1 の数を数えます。ここで、n が文字列に現れる 1 の数、m が文字列に現れる 0 の数であると仮定します。

この問題では、指定された文字列の最長の非増加サブシーケンスを見つける必要があります。非増加とは、文字が同じか降順であることを意味します。バイナリ文字列には「0」と「1」のみが含まれるため、結果の文字列は「1」で始まり「0」で終わるか、「0」または「1」で始まり「1」で終わる必要があります。この問題を解決するには、文字列の各位置で接頭辞「1」と接尾辞「0」を数え、接頭辞「1」と接尾辞「0」の最大合計を求めます。問題ステートメント - バイナリ文字列 str が与えられています。指定された文字列から最長の非増加サブシーケンスを見つける必要があります。例 入力 – str="010100"出力 – 4 は、最長の非再帰を示しています。

Pack() 関数は、データをバイナリ文字列にパックします。構文 Pack(format,args) パラメータ format - 使用する形式。可能な値は次のとおりです - a - NUL 埋め込み文字列 A - スペース埋め込み文字列 h - 16 進数文字列、下位ニブルが最初 H - 16 進数文字列、上位ニブルが最初 c - 符号付き文字 C - 符号なし文字 s - 符号付き short (常に 16 ビット) 、マシンバイトオーダー) S - 符号なし short (常に 16 ビット、マシンバイトオーダー) n - unsigned short (常に 16 ビット、ビッグエンディアンバイトオーダー) v - unsigned short (常に 16 ビット、リトルエンディアンバイトオーダー) i - 符号付き整数(マシンのサイズとバイト順序に依存します) I - なしの符号付き整数 (マシンのサイズとバイト順序に依存します)

問題文 文字列 str とバイナリ文字列 B があります。両方の文字列の長さは N に等しくなります。文字列 B 内に等しくない文字を含むインデックスのペアでその文字を複数回交換することで、文字列 str を回文文字列にできるかどうかを確認する必要があります。例 例 入力 str='AAS' B='101' 出力 'YES' 説明の中国語訳は次のとおりです。 説明 B[1] と B[2] が等しくないため、str[1] と str[2] を交換できます。 。最後の文字列は「ASA」にすることができます。 str=‘AASS’ B=‘1111’ と入力し、「No」を出力します。説明の中国語訳は次のようになります。文字列を回文にすることができないという説明、

同じ長さの 2 つのバイナリ文字列 str1 と str2 が与えられた場合、同じ長さの指定された文字列から部分文字列を選択することによって、指定された関数値を最大化する必要があります。指定された関数は次のようになります - fun(str1,str2)=(len(substring))/(2^xor(sub1,sub2))。ここで、len(substring) は最初の部分文字列の長さ、xor(sub1,sub2) は指定された部分文字列の XOR です。これらはバイナリ文字列であるため、これが可能です。例 Input1:stringstr1=10110&stringstr2=11101Output:3 は、

この記事の目的は、部分文字列を繰り返し連結して形成された長さ N のバイナリ文字列の数を数えるプログラムを実装することです。目標は、指定されたテキストの個々の部分文字列を繰り返し連結することによって、長さ N のバイナリ文字列をいくつ作成できるかを決定することです (N は正の整数)。問題文 部分文字列を繰り返し連結する長さ N のバイナリ文字列の数を数えるプログラムを実装します。例 例 1 入力、N = 3 の出力を考えます。 2 説明の中国語訳は次のとおりです。 説明 以下に、部分文字列が繰り返し連結される、長さ N = 3 の実行可能なバイナリ文字列をリストします。 "000":サブストリング

問題ステートメント バイナリ文字列 str が与えられ、1 の前にすべての 0 を配置できるように文字列から最小限の文字を削除する必要があります。入力例 str=‘00110100111’ 出力 3 の説明 ここでは、2 つの方法で出力 3 を実現できます。 arr[2]、arr[3]、および arr[5]、または arr[4]、arr[6]、および arr[7] を文字列から削除できます。入力 str=‘001101011’ と出力 2 は、arr[4] と arr[6] を削除して、1 の前にすべての 0 を置くことができることを示しています。入力 str=‘000111’ 出力 0 は、指定された文字列内ですべてのゼロが 1 の前に配置されていることを意味するため、最初から開始する必要はありません。

この記事では、文字列操作とゲーム理論の分野に関連する興味深い問題について説明します。「空ではない部分文字列を削除してバイナリ文字列を空にし、残りのゼロが最も少ないプレイヤーを見つける」です。この質問では、競技ゲームでのバイナリ文字列の使用の概念について説明します。私たちの目標は、ゲーム終了時に残っている 0 が最も少ないプレイヤーを見つけることです。この問題について説明し、C++ コードの実装を示し、例を通して概念を説明します。問題文を理解する 2 人のプレーヤーにバイナリ文字列が与えられ、交代でゲームをプレイします。各ターンで、プレイヤーは少なくとも 1 つの「1」を含む空でない部分文字列を削除します。文字列が空になるか、文字列に「1」がなくなるとゲームは終了します。アクションを起こせないプレイヤーはゲームに負けます。課題は最後の 0 を見つけることです
