C++에서는 XOR이 0인 하위 배열 수를 최대화합니다.
정수 값을 포함하는 Arr[] 배열을 얻습니다. 목표는 XOR이 0인 하위 배열의 최대 개수를 찾는 것입니다. 모든 하위 배열의 비트는 원하는 만큼 교환될 수 있습니다.
참고: - 118
비트를 교환하여 하위 배열의 XOR을 0으로 만들려면 두 가지 조건을 충족해야 합니다. -
- 설정된 비트 수가 왼쪽에서 오른쪽으로 범위에 있는 경우 짝수입니다.
특정 범위의 비트 합계
다양한 입력 및 출력 시나리오를 살펴보겠습니다.
In −Arr[] = { 1,2,5,4 }
Out −
첫 번째 조건만 만족하는 하위 배열: 4
두 조건을 모두 만족하는 하위 배열: 3
In − Arr[] = { 3,7,2,9 }
Out −
첫 번째 조건만 만족 조건: 6
두 조건을 모두 만족하는 하위 배열: 3
다음 프로그램에서 사용된 방법은 다음과 같습니다. 0 비트를 교환하면 두 가지 조건이 충족되어야 합니다. - 왼쪽에서 오른쪽으로 범위에 설정된 비트 수가 짝수이거나 특정 범위에 대해 비트 합계
- 입력 배열 Arr[ ]을 가져와 길이를 계산합니다.
- removeSubarr(int arr[], int len) 함수는 조건 2를 충족하지 않는 하위 배열의 수를 반환합니다.
- 초기 개수를 0으로 설정하세요.
- for 루프를 사용하여 배열을 반복하고 변수 sum 및 maxVal을 사용합니다.
- 60개 하위 배열 범위를 반복하려면 또 다른 for 루프를 사용하세요. 왜냐하면 60개 하위 배열을 초과하면 조건 2가 결코 거짓이 되지 않기 때문입니다.
- sum에 요소를 추가하고 maxVal에서 최대값을 취합니다.
- 합이 짝수이고 2 * maxVal > sum인 경우 조건 2로 개수를 증가시키는 것은 만족되지 않습니다.
- 두 루프가 모두 끝나면 두 반환 횟수가 모두 계산됩니다.
- findSubarrays(int arr1[], int len1) 함수는 입력 배열과 해당 길이를 받아들이고 위의 두 조건을 충족하는 하위 배열의 수를 반환합니다.
- 접두사 배열을 사용하여 조건 1만 만족하는 하위 배열의 수를 계산합니다.
- for 루프를 사용하여 배열을 반복하고 각 요소를 설정합니다. __builtin_popcountll(arr1[i]) 여기에 설정된 비트 수입니다.
- for 루프를 사용하여 접두사 배열을 채우고 첫 번째 요소를 제외하고 접두사[i] = 접두사[i] + 접두사 [i - 1]을 설정합니다.
- 접두사 배열에서 홀수 및 짝수 값을 셉니다.
- tmp1 = (oddcount * (oddcount-1) )/2 및 tmp2= ( Evencount * (evencount-1) )/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; }
Output
위 코드를 실행하면 다음과 같은 출력이 생성됩니다
Subarrays satisfying only 1st condition : 4 Subarrays satisfying both condition : 3
위 내용은 C++에서는 XOR이 0인 하위 배열 수를 최대화합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











두 개의 정수 배열이 있습니다. 하나는 계산된 요소가 있고 다른 하나는 배열을 분할하여 하위 집합을 생성하는 데 필요한 분할 점이 있습니다. 각 분할에서 각 하위 집합의 합을 계산하고 최대 하위 집합을 반환해야 합니다. 예제를 살펴보겠습니다. 이해: - 입력 −intarr[]=intarr[]={9,4,5,6,7}intsplitPoints[]={0,2,3,1} 출력−각 분할 후 최대 하위 배열 합계 [ 22, 13,9,9] 설명 − 여기서는 분할 지점에 따라 배열을 분해하고 각 분할 후와 첫 번째 분할 후 최대 부분 집합을 얻습니다. → {9} 및 {4,5,6,7 }>>최대 합계 하위 배열의 수는 두 번째 분할 후 -22입니다.→{9},{4

이번 글에서는 C++를 이용하여 최대값과 최소값이 같은 부분배열의 개수를 찾는 문제를 해결해보겠습니다. 다음은 문제의 예입니다. −Input:array={2,3,6,6,2,4,4,4}Output:12Explanation:{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로 나누어지면 이익이 이익_P1만큼 증가하고, 마찬가지로 범위의 숫자가 P2로 나누어지면 이익이 이익_P2만큼 증가한다는 것입니다. 게다가, 양의 정수로부터의 이익은 최대 한 번만 추가될 수 있습니다. 예를 통해 이해해 봅시다. 입력 - 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},{3}and{2,3}의 예입니다. 이제 우리는 주어진 문제를 해결하기 위해 두 가지 다른 접근 방식이 사용됩니다. 무차별 대입 이 접근 방식에서는 모든 하위 배열을 반복하고 그 합계를 계산하며, 합계가 k보다 작으면 k와 비교하여 답을 늘립니다. 예#포함<

정수 값을 포함하는 Arr[] 배열을 얻습니다. 목표는 XOR이 0인 하위 배열의 최대 개수를 찾는 것입니다. 모든 하위 배열의 비트는 원하는 만큼 교환될 수 있습니다. 참고: -1

동일한 길이의 두 이진 문자열 str1과 str2가 주어지면 주어진 동일한 길이의 문자열에서 부분 문자열을 선택하여 주어진 함수 값을 최대화해야 합니다. 주어진 함수는 다음과 같습니다 - fun(str1,str2)=(len(substring))/(2^xor(sub1,sub2)). 여기서 len(substring)은 첫 번째 부분 문자열의 길이이고 xor(sub1,sub2)는 주어진 부분 문자열의 XOR입니다. 이는 이진 문자열이므로 가능합니다. 예:Input1:stringstr1=10110&stringstr2=11101Output:3은 다음을 보여줍니다.

하위 배열은 배열의 연속된 부분입니다. 예를 들어 배열 [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++에서 가능한 모든 정보를 설명합니다. 홀수 합계의 하위 배열 수를 찾으려면 다양한 방법을 사용할 수 있으므로 다음은 간단한 예입니다. Input:array={9,8,7,6,5}Output:9Explanation:Sumofsubarray-{9}= 9{7

배열은 인접한 메모리 위치에 연속적으로 저장된 유사한 데이터의 모음입니다. 오프셋 값을 데이터베이스의 특정 기본 값으로 정의하면 각 요소의 특정 위치를 더 쉽게 평가할 수 있습니다. 특정 인덱스의 기본 값은 0이고 오프셋 값은 두 특정 인덱스 간의 차이입니다. 하위 배열은 특정 배열의 일부이며 여러 값으로 레이블이 지정된 변수 집합으로 정의될 수 있습니다. 가장 긴 하위 배열은 배열의 모든 요소가 K보다 큰 배열을 나타냅니다. 여기서 최대 합 하위 배열의 합은 주어진 데이터 세트에서 주어진 데이터 세트보다 작거나 같습니다. 데이터 세트에서 1보다 작게 주어진 가장 긴 하위 배열의 길이를 찾으려면 특정 하위 배열에서 1의 총 개수를 찾으면 됩니다. 참고: 개수는 0 개수보다 커야 합니다. 최대공약수는 내가 설명하는 수학적 현상이다.
