Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで生成されたリストから特定の要素のXOR値を見つけるプログラム


自然数を含むリストが与えられたとしましょう。ここで、そのリストから、バイナリ表現に2つの連続する1を含むすべての数値を削除し、Zという別のリストを生成します。これで、整数値を含む別のリスト'input_list'が与えられます。 input_listでインデックスが指定されているZから、指定された要素のXOR値を見つける必要があります。

したがって、入力がinput_list =[3、4、5]のようである場合、出力は9になります。

Zのインデックス3、4、および5。値は4、5、および8です。したがって、4 XOR 5 XOR8=9です。

これを解決するには、次の手順に従います-

  • 関数zeck_num()を定義します。これにはk、f_list
      が必要です
    • res:=0
    • iの範囲(f_list -1のサイズ)から-1の場合、1ずつ減らします。
      • k> =f_list [i]の場合、
        • res:=res + 2 ^ i
        • k:=k --f_list [i]
    • return res
  • MOD:=10 ^ 9 + 7
  • max_val:=10 ^ 18
  • f_list:=値1と2を含む新しいリスト
  • f_listの最後の要素<=max_val、do
    • f_listの最後の要素+f_listの最後から2番目の要素をf_listの最後に挿入します
  • res:=0
  • input_listのインデックスごとに、
      を実行します。
    • res:=res XOR zeck_num(index、f_list)
  • return res mod MOD

理解を深めるために、次の実装を見てみましょう-

def zeck_num(k, f_list):
   res = 0
   for i in range(len(f_list)-1,-1,-1):
      if k >= f_list[i]:
         res += 2**i
         k -= f_list[i]
   return res

def solve(input_list):
   MOD = 10**9+7
   max_val = 10**18
   f_list = [1,2]
   while f_list[-1] <= max_val:
      f_list.append(f_list[-1] + f_list[-2])
   res = 0
   for index in input_list:
      res ^= zeck_num(index, f_list)
   return res % MOD

print(solve([3, 4, 5]))

入力

[3, 4, 5]

出力

9

  1. Pythonのサブツリーのノード値の合計から最小値を見つけるプログラム

    すべてのノードに1からnまでの番号が付けられたツリーがあるとします。各ノードには整数値が含まれています。ここで、ツリーからエッジを削除する場合、2つのサブツリーのノード値の合計の差を最小限に抑える必要があります。そのようなサブツリー間の最小の違いを見つけて返す必要があります。ツリーはエッジのコレクションとして提供され、ノードの値も提供されます。 したがって、入力がn =6の場合、edge_list =[[1、2]、[1、3]、[2、4]、[3、5]、[3、6]]、values =[15、 25、15、55、15、65]の場合、出力は0になります。 エッジ(1,2)を削除すると、重みの

  2. リストからN個の最大の要素を見つけるPythonプログラム

    整数リストが与えられた場合、私たちのタスクはリスト内で最大のN個の要素を見つけることです。 例 Input : [40, 5, 10, 20, 9] N = 2 Output: [40, 20] アルゴリズム Step1: Input an integer list and the number of largest number. Step2: First traverse the list up to N times. Step3: Each traverse find the largest value and store it in a new list. 例 def Nnumbere