En C++, maximiser le nombre de sous-tableaux avec zéro XOR
Nous obtenons un tableau Arr[] contenant des valeurs entières. Le but est de trouver le nombre maximum de sous-tableaux dont le XOR est 0. Les bits de n'importe quel sous-tableau peuvent être échangés un nombre illimité de fois.
Remarque : - 118
Afin de rendre le XOR de n'importe quel sous-tableau à 0 en échangeant des bits, deux conditions doivent être remplies : -
- Si le nombre de bits définis est compris entre gauche et droite est un nombre pair.
Pour la somme de bits dans une plage donnée
Examinons différents scénarios d'entrée et de sortie -
In −Arr[] = { 1,2,5,4 }
Out −
Sous-tableau qui ne satisfait qu'à la première condition : 4
Sous-tableau qui satisfait aux deux conditions : 3
In − Arr[] = { 3,7,2,9 }
Out −
Sous-tableau qui ne satisfait qu'à la première condition : 6
Sous-tableau qui satisfait les deux conditions : 3
La méthode utilisée dans le programme suivant est la suivante -
Dans cette méthode, nous observons que pour faire To XOR n'importe quel sous-tableau à 0 en échangeant les bits, deux conditions doivent être remplies : - Si le nombre de bits définis dans la plage de gauche à droite est pair ou pour une plage donnée, la somme des bits
Obtenez le tableau d'entrée Arr[ ] et calculez sa longueur .
La fonction removeSubarr(int arr[], int len) renvoie le nombre de sous-tableaux qui ne remplissent pas la condition 2.
Réglez le décompte initial sur 0.
Parcourez le tableau à l'aide d'une boucle for et prenez les variables sum et maxVal.
-
Utilisez une autre boucle for pour parcourir la plage de 60 sous-tableaux, car au-delà de 60 sous-tableaux, la condition 2 ne sera jamais fausse.
Ajoutez des éléments à additionner et prenez la valeur maximale dans maxVal.
Si la somme est paire et 2 * maxVal > sum, incrémenter le décompte car la condition 2 n'est pas satisfaite.
Les deux retours comptent à la fin des deux boucles.
La fonction findSubarrays(int arr1[], int len1) accepte un tableau d'entrée et sa longueur, et renvoie le nombre de sous-tableaux qui remplissent les deux conditions ci-dessus.
Prenez un tableau de préfixes pour compter le nombre de sous-tableaux qui ne satisfont que la condition 1.
Utilisez une boucle for pour parcourir le tableau et définir chaque élément __builtin_popcountll(arr1[i]) C'est le nombre de bits définis.
Utilisez une boucle for pour remplir le tableau de préfixes et définissez préfixe[i] = préfixe[i] + préfixe [i - 1] sauf pour le premier élément.
Comptez les valeurs paires et impaires dans le tableau de préfixes.
Définissez tmp1 = ( oddcount * (oddcount-1) )/2 et tmp2= ( Evencount * (evencount-1) )/2 et prenez le résultat comme la somme des deux.
Le résultat sera la somme des sous-tableaux qui satisfont uniquement à la condition 1.
Imprimez les résultats.
Maintenant, mettez à jour le résultat avec result=result - removeSubarr( arr1, len1).
Maintenant, le résultat contient des sous-tableaux qui satisfont aux deux conditions.
-
Imprimez à nouveau les résultats.
Exemple
#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; }
Output
Si nous exécutons le code ci-dessus, il générera la sortie suivante
Subarrays satisfying only 1st condition : 4 Subarrays satisfying both condition : 3
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nous avons deux tableaux d'entiers, l'un avec les éléments calculés et l'autre avec les points de division nécessaires pour diviser le tableau afin de générer des sous-ensembles, nous devons calculer la somme de chaque sous-ensemble dans chaque division et renvoyer le sous-ensemble maximum. Passons en revue l'exemple Comprendre : - input −intarr[]=intarr[]={9,4,5,6,7}intsplitPoints[]={0,2,3,1} ; sortie−la somme maximale du sous-tableau après chaque division [ 22, 13,9,9] Explication - Ici, nous décomposons le tableau en fonction de ses points de division et obtenons le sous-ensemble maximum après chaque division et après la première division → {9} et {4,5,6,7 }>> La somme maximale des sous-tableaux est de -22 après la deuxième division →{9},{4

Dans cet article, nous utiliserons C++ pour résoudre le problème de trouver le nombre de sous-tableaux dont les valeurs maximales et minimales sont les mêmes. Voici un exemple du problème −Input:array={2,3,6,6,2,4,4,4}Output:12Explication :{2},{3},{6},{6}, {2 },{4},{4},{4},{6,6},{4,4},{4,4}et{4,4,4}sont les sous-tableaux qui peuvent être formés avec les mêmes éléments maximum et minimum. Entrée : tableau = {3, 3, 1,5,

Nous avons 5 variables entières Num, P1, P2, profit_P1, profit_P2 et la tâche est de maximiser le profit et de choisir parmi tous les nombres naturels dans la plage [1, Num]. L'approche ici est que si un nombre positif est divisible par P1, le profit est augmenté de profit_P1, de même, si un nombre de la plage est divisible par P2, le profit est augmenté de profit_P2. De plus, les bénéfices des entiers positifs ne peuvent être ajoutés qu’une seule fois. Comprenons à travers des exemples : Entrée - intnum=4, P1=6, P2=2, profit_P1=8, profit_P2=2 ; Sortie - Maximiser le profit total de toutes les personnes X4 Explication - La plage de nombres ici est de 1 à 4 ( [1, Nu

Dans cet article, nous trouverons le nombre de sous-tableaux dont la somme est inférieure à K en utilisant C++. Dans ce problème, nous avons un tableau arr[] et un entier K. Nous devons maintenant trouver les sous-tableaux dont la somme est inférieure à K. Voici l'exemple −Input:arr[]={1,11,2,3,15}K=10Output:4{1},{2},{3}and{2,3} pour trouver la solution. Maintenant, nous Deux approches différentes seront utilisées pour résoudre le problème donné : la force brute. Dans cette approche, nous allons parcourir tous les sous-tableaux et calculer leur somme et si la somme est inférieure à k, comparer avec k pour augmenter notre réponse. Exemple#include<

Nous obtenons un tableau Arr[] contenant des valeurs entières. Le but est de trouver le nombre maximum de sous-tableaux dont le XOR est 0. Les bits de n'importe quel sous-tableau peuvent être échangés un nombre illimité de fois. Remarque : -1

Étant donné deux chaînes binaires str1 et str2 de même longueur, nous devons maximiser la valeur de fonction donnée en sélectionnant des sous-chaînes parmi les chaînes données de même longueur. La fonction donnée est comme ceci - fun(str1,str2)=(len(substring))/(2^xor(sub1,sub2)). Ici, len(substring) est la longueur de la première sous-chaîne et xor(sub1,sub2) est le XOR de la sous-chaîne donnée, cela est possible puisqu'il s'agit de chaînes binaires. L'exemple Input1:stringstr1=10110&stringstr2=11101Output:3 illustre notre

Un tableau est une collection de données similaires stockées dans des emplacements mémoire adjacents de manière contiguë. En définissant la valeur de décalage comme valeur de base spécifique pour la base de données, il est plus facile d'évaluer la position spécifique de chaque élément. La valeur de base de cet index particulier est zéro et la valeur de décalage est la différence entre les deux indices particuliers. Un sous-tableau fait partie d'un tableau spécifique et peut être défini comme un ensemble de variables, étiquetées avec plusieurs valeurs. Le sous-tableau le plus long fait référence à un tableau dans lequel tous les éléments du tableau sont supérieurs à K. Ici, la somme du sous-tableau de somme maximale est inférieure ou égale à l'ensemble de données donné dans l'ensemble de données donné. Pour trouver la longueur du sous-tableau le plus long étant inférieur à 1 dans un ensemble de données, il nous suffit de trouver le nombre total de 1 dans un sous-tableau particulier. REMARQUE : Le nombre doit être supérieur au nombre de zéro. Le plus grand diviseur commun est un phénomène mathématique dans lequel je

Un sous-tableau est une partie contiguë d'un tableau. Par exemple, nous considérons un tableau [5,6,7,8], alors il y a dix sous-tableaux non vides, tels que (5), (6), (7), (8), (5,6), (6, 7), (7,8), (5,6,7), (6,7,8) et (5,6,7,8). Dans ce guide, nous expliquerons toutes les informations possibles en C++ pour trouver le nombre de sous-tableaux avec des sommes impaires. Pour trouver le nombre de sous-tableaux de sommes impaires, nous pouvons utiliser différentes méthodes, voici donc un exemple simple - Input:array={9,8,7,6,5}Output:9Explanation:Sumofsubarray-{9}= 9{7
