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

Pythonで指定された単調シーケンスの要素位置を検索します


数lと単調増加シーケンスf(m)があるとします。ここで、f(m)=am + bm [log2(m)] + cm ^ 3および(a =1、2、3、…)、(b =1、2、3、…)、(c =0、1、2、3、…)

ここで、[log2(m)]は2を底とする対数であり、値を切り捨てます。だから、

m =1の場合、値は0です。

m =2-3の場合、値は1です。

m =4-7の場合、値は2です。

m =8-15の場合、値は3などです。

f(m)=lとなるような値mを見つける必要があります。シーケンスにlが存在しない場合は、0を出力する必要があります。値は次のように表すことができるようになっていることに注意する必要があります。 64ビットおよび100以下の3つの整数a、b、c。

したがって、入力がa =2、b =1、c =1、l =12168587437017のような場合、出力はf(23001)=12168587437017

として23001になります。

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

  • SMALLER_VAL:=1000000

  • LARGER_VAL:=1000000000000000

  • 関数solve()を定義します。これにはa、b、c、nが必要です

  • ans:=a * n

  • lg_val:=nの対数基数2のフロア

  • ans:=ans + b * n * lg_val

  • ans:=ans + c * n ^ 3

  • ansを返す

  • メインの方法から、次のようにします-

  • 開始:=1

  • 終了:=SMALLER_VAL

  • cが0と同じ場合、

    • 終了:=LARGER_VAL

  • ans:=0

  • 開始<=終了、実行

    • mid:=(開始+終了)/ 2(整数部分のみを取る)

    • val:=resolve(a、b、c、mid)

    • valがkと同じ場合、

      • ans:=mid

      • ループから出てきます

    • それ以外の場合、val> kの場合、

      • 終了:=半ば-1

    • それ以外の場合

      • 開始:=mid + 1

  • ansを返す

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

from math import log2, floor
SMALLER_VAL = 1000000
LARGER_VAL = 1000000000000000
def solve(a, b, c, n) :
   ans = a * n
   lg_val = floor(log2(n))
   ans += b * n * lg_val
   ans += c * n**3
   return ans
def get_pos(a, b, c, k) :
   begin = 1
   end = SMALLER_VAL
   if (c == 0) :
      end = LARGER_VAL
   ans = 0
   while (begin <= end) :
      mid = (begin + end) // 2
      val = solve(a, b, c, mid)
      if (val == k) :
         ans = mid
         break
      elif (val > k) :
         end = mid - 1
      else :
         begin = mid + 1
   return ans
a = 2
b = 1
c = 1
k = 12168587437017
print(get_pos(a, b, c, k))

入力

2,1,1,12168587437017

出力

23001

  1. リスト内の最大要素と最小要素の位置を見つけるPythonプログラム?

    Pythonでは、最大要素、最小要素、およびそれらの位置も非常に簡単に見つけることができます。 Pythonはさまざまな組み込み関数を提供します。 min()は配列の最小値を見つけるために使用され、max()は配列の最大値を見つけるために使用されます。 index()は、要素のインデックスを見つけるために使用されます。 アルゴリズム maxminposition(A, n) /* A is a user input list and n is the size of the list.*/ Step 1: use inbuilt function for finding the positi

  2. Pythonでアイテムを含むリストを指定してアイテムのインデックスを見つける方法は?

    リスト内の要素の位置(そのことに関する任意のシーケンスデータ型)は、index()メソッドによって取得されます。このメソッドは、指定された要素の最初の出現インスタンスを検索します。 >>> L1=[45, 32, 100, 10, 24, 56] >>> L1.index(24) 4