C++ では、ゼロ XOR を使用してサブ配列の数を最大化します。
整数値を含む配列 Arr[] を取得します。目標は、XOR が 0 であるサブ配列の最大数を見つけることです。サブ配列のビットは何度でも交換できます。
注:- 118
ビットを交換してサブ配列の XOR を 0 にするには、2 つの条件を満たす必要があります:-
- 左から右の範囲の設定桁数が偶数の場合。
- #任意の範囲のビットの合計については、
−Arr[] = { 1,2,5,4 }
Out−最初の条件を満たすサブ配列のみ: 4
2 つの条件を満たすサブ配列: 3
In− Arr[] = { 3,7,2,9 }#Out
−最初の条件のみを満たすサブ配列条件: 6
両方の条件を満たすサブ配列: 3以下のプログラム内 使用する方法は次のとおりです -このメソッドでは、ビットを交換してサブ配列の XOR を 0 にするには、2 つの条件を満たす必要があることがわかります。- 範囲が左から右に設定されている場合、桁数は偶数、または任意の範囲の桁の合計入力配列 Arr[] を取得し、その長さを計算します。
- 関数removeSubarr(int arr[], int len)は、条件2を満たさない部分配列の数を返します。
- 初期カウントを 0 に設定します。
- for ループを使用して配列を反復処理し、変数 sum と maxVal を取得します。
- 別の for ループを使用して、60 個のサブ配列の範囲を反復処理します。60 個のサブ配列を超えると、条件 2 が false になることはありません。
- 合計する要素を追加し、maxVal の最大値を取得します。
- 合計が偶数で、2 * maxVal > 合計の場合、条件 2 としてのカウントの増加は満たされません。
- 両方のループは最後に count を返します。
- 関数 findSubarrays(int arr1[], int len1) は、入力配列とその長さを受け入れ、上記の 2 つの条件を満たすサブ配列の数を返します。
- プレフィックス配列を使用して、条件 1 のみを満たすサブ配列の数を数えます。
- for ループを使用して配列を走査し、設定します。それぞれの要素 __builtin_popcountll(arr1[i]) これは、それに設定されているビット数です。
- for ループを使用してプレフィックス配列を設定し、最初の要素を除いて prefix[i] = prefix[i] prefix [i - 1] を設定します。
- プレフィックス配列の奇数と偶数の値を計算します。
- tmp1 = ( oddcount * (oddcount-1) )/2 および tmp2= ( Evencount * (evencount-1) )/2 を設定し、結果を 2 つの合計として取得します。 。
- 結果は、条件 1 のみを満たす部分配列の合計になります。
#結果を印刷します。
ここで、result=result - RemoveSubarr( arr1, len1) で結果を更新します。
結果には、両方の条件を満たす部分配列が含まれます。
- #結果を再度印刷します。
- 例出力
#include <bits/stdc++.h> using namespace std; // Function to count subarrays not satisfying condition 2 int removeSubarr(int arr[], int len){ int count = 0; for (int i = 0; i < len; i++){ int sum = 0; int maxVal = 0; for (int j = i; j < min(len, i + 60); j++){ sum = sum + arr[j]; maxVal = arr[j] > maxVal ? arr[j]: maxVal; if (sum % 2 == 0){ if( 2 * maxVal > sum) { count++; } } } } return count; } int findSubarrays(int arr1[], int len1){ int prefix[len1]; int oddcount, evencount; int result; for (int i = 0; i < len1; i++) { arr1[i] = __builtin_popcountll(arr1[i]); } for (int i = 0; i < len1; i++){ prefix[i] = arr1[i]; if (i != 0) { prefix[i] = prefix[i] + prefix[i - 1]; } } oddcount = evencount = 0; for (int i = 0; i < len1; i++){ if (prefix[i] % 2 == 0) { evencount = evencount +1; } else { oddcount = oddcount +1; } } evencount++; int tmp1= ( oddcount * (oddcount-1) )/2; int tmp2= ( evencount * (evencount-1) )/2; result = tmp1+tmp2; cout << "Subarrays satisfying only 1st condition : "<<result << endl; cout << "Subarrays satisfying both condition : "; result = result - removeSubarr(arr1, len1); return result; } int main() { int Arr[] = { 1,2,5,4 }; int length = sizeof(Arr) / sizeof(Arr[0]); cout << findSubarrays(Arr, length); return 0; }
ログイン後にコピー
Subarrays satisfying only 1st condition : 4
Subarrays satisfying both condition : 3
ログイン後にコピー
Subarrays satisfying only 1st condition : 4 Subarrays satisfying both condition : 3
以上がC++ では、ゼロ XOR を使用してサブ配列の数を最大化します。の詳細内容です。詳細については、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)

ホットトピック









2 つの整数配列があり、1 つは計算された要素を含み、もう 1 つは配列を分割してサブセットを生成するために必要な分割点を含みます。分割ごとに各サブセットの合計を計算し、最大のサブセットを返す必要があります。例を見てみましょう理解: - input -intarr[]=intarr[]={9,4,5,6,7}intsplitPoints[]={0,2,3,1}; Output - 各分割後の最大部分配列合計 [ 22, 13,9,9] 説明 - ここでは、分割点に従って配列を分解し、各分割後と最初の分割後の最大サブセットを取得します → {9} と {4,5,6,7 }>>最大合計2 番目の分割後の部分配列の数は -22 → {9},{4

この記事では、C++ を使用して、最大値と最小値が同じ部分配列の数を求める問題を解決します。以下は問題の例です。 -入力:array={2,3,6,6,2,4,4,4}出力:12説明:{2},{3},{6},{6}, {2 }、{4}、{4}、{4}、{6,6}、{4,4}、{4,4}、および {4,4,4} は、同じ最大要素と最小要素で形成できるサブ配列です。入力: 配列 = {3, 3、1、5、

5 つの整数変数 Num、P1、P2、profit_P1、profit_P2 があり、タスクは利益を最大化し、範囲 [1, Num] 内のすべての自然数から選択することです。ここでのアプローチは、正の数値が P1 で割り切れる場合、利益は Profit_P1 だけ増加し、同様に、範囲内の数値が P2 で割り切れる場合、利益は Profit_P2 だけ増加します。さらに、正の整数による利益は最大 1 回しか加算できません。例を通して理解しましょう: 入力 - intnum=4, P1=6, P2=2,profit_P1=8,profit_P2=2; 出力 - すべての人の合計利益 X4 を最大化します 説明 - ここでの数値の範囲は 1 ~ 4 ( [1、ヌ

この記事では、C++ を使用して合計が K 未満の部分配列の数を求めます。この問題では、配列 arr[] と整数 K があります。次に、合計が K より小さい部分配列を見つける必要があります。これは、解決策を見つけるための例です。 −Input:arr[]={1,11,2,3,15}K=10Output:4{1},{2},{2,3}与えられた問題を解決するために 2 つの異なるアプローチが使用されます - ブルートフォース このアプローチでは、すべてのサブ配列を反復処理してそれらの合計を計算し、合計が k 未満の場合は k と比較して答えを増やします。例#include<

整数値を含む配列 Arr[] を取得します。目標は、XOR が 0 であるサブ配列の最大数を見つけることです。サブ配列のビットは何度でも交換できます。注: -1

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

配列は、隣接するメモリ位置に連続的に格納された同様のデータの集合です。オフセット値をデータベースの特定の基本値として定義すると、各要素の特定の位置を評価しやすくなります。その特定のインデックスの基本値はゼロで、オフセット値は 2 つの特定のインデックスの差です。サブ配列は特定の配列の一部であり、複数の値でラベル付けされた変数のセットとして定義できます。最長の部分配列とは、配列内のすべての要素が K より大きい配列を指します。ここで、最大合計部分配列の合計は、指定されたデータ セット内の指定されたデータ セット以下になります。データセット内で 1 未満の値が与えられた最長の部分配列の長さを見つけるには、特定の部分配列内の 1 の合計数を見つけるだけで済みます。注: カウントはゼロのカウントより大きくなければなりません。最大公約数とは、次のような数学的現象です。

サブ配列は配列の連続した部分です。たとえば、配列 [5,6,7,8] を考えると、(5)、(6)、(7)、(8)、(5,6)、などの 10 個の空ではないサブ配列があります。 (6, 7)、(7,8)、(5,6,7)、(6,7,8)、(5,6,7,8)。このガイドでは、奇数の合計を持つ部分配列の数を見つけるために C++ で考えられるすべての情報を説明します。奇数和の部分配列の数を見つけるには、さまざまな方法を使用できます。ここでは簡単な例を示します。入力:配列={9,8,7,6,5}出力:9説明:Sumofsubarray-{9}= 9{7
