XORされた合計の可能な最大値を見つけるためのC++プログラム
N個の要素と別の値Kを持つ配列Aがあるとします。0からKの範囲の整数Xの場合、f(X)=(X xor A [1])+(X xor A [2])+.。 。+(X xor A [N])。 fの可能な最大値を見つける必要があります。
したがって、入力がK=7のような場合。 A =[1、6、3]の場合、f(4)=(4 XOR 1)+(4 XOR 6)+(4 XOR 3)=5 + 2 + 7 =14. <であるため、出力は14になります。 / P>
ステップ
これを解決するには、次の手順に従います-
n := size of A for initialize i := 45, when i >= 0, update (decrease i by 1), do: p := 2^i m := 0 for initialize j := 0, when j < n, update (increase j by 1), do: if A[j] AND p is non-zero, then: (increase m by 1) if o + p <= k, then: if m < n - m, then: m := n - m o := o + p d := d + p * m return d
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; long solve(int k, vector<int> A){ long n = A.size(), d = 0, m, p, o = 0; for (long i = 45; i >= 0; i--){ p = pow(2, i); m = 0; for (int j = 0; j < n; j++){ if (A[j] & p) m++; } if (o + p <= k){ if (m < n - m){ m = n - m; o += p; } } d += p * m; } return d; } int main(){ int K = 7; vector<int> A = { 1, 6, 3 }; cout << solve(K, A) << endl; }
入力
7, { 1, 6, 3 }
出力
14
-
C++のバイナリツリーで最大レベルの合計を見つける
この問題では、正と負の値を持つ二分木が与えられます。私たちのタスクは、バイナリツリーで最大レベルの合計を見つけることです。 問題の説明: 二分木があります。二分木のすべてのレベルの合計を見つけて、それらの最大値を返します。 問題を理解するために例を見てみましょう 入力: 出力: 5 説明: レベル1:3の要素の合計 レベル2の要素の合計:-3 + 4 =1 レベル3の要素の合計:5 --1 + 6-5 =5 ソリューションアプローチ この問題を解決するには、レベル順トラバーサルを使用してツリーをトラバースする必要があります。そして、レベルごとに、合計
-
Pythonで最小グループの可能な最大値を見つけるプログラム
numsと呼ばれる数値のリストと別の値kがあるとします。リストをk個の連続したグループに分割する必要があります。最小のグループは、すべてのグループの中で合計が最小のグループです。したがって、最小のグループの可能な最大値を見つけます。 したがって、入力がnums =[2、6、4、5、8] k =3のような場合、リストを[2、6]、[4]のように3つのグループに分割できるため、出力は8になります。 、5]、[8]。したがって、最小グループの合計は8になります。 これを解決するには、次の手順に従います- 関数is_divisible()を定義します。これはターゲットになります ターゲ