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

PythonでK時間で石の除去率を見つけるプログラム


パイルと呼ばれる数のリストと値kがあるとします。パイル[i]は、パイルi上の石の数を表します。 1時間ごとに、任意のパイルを選択し、そのパイルからr個の石を取り除きます。石がr個未満の山を選んだ場合でも、山を片付けるのに1時間かかります。 k時間以内にすべての石を取り除くことができるように、rの最小値を見つける必要があります。

したがって、入力がパイル=[3、6、4] k =5のような場合、出力は3になります。これは、r =3ストーン/時間の場合、2時間で2番目のパイルをクリアしてから、 2時間で3番目、1時間で最初の山をクリアします。

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

  • l:=1
  • h:=杭の最大数
  • r:=h
  • 関数turns()を定義します。これにはrがかかります
  • リストに存在するすべての要素の合計を(パイル内の各bのb / rの上限)で返します
  • メインの方法から、次の手順を実行します-
  • l
  • mid:=(l + h)/2の床
  • turn(mid)> kの場合、
    • l:=mid + 1
  • それ以外の場合、
    • h:=mid
    • r:=rとmidの最小値
  • return r
  • 理解を深めるために、次の実装を見てみましょう-

    from math import ceil
    def solve(piles, k):
       l = 1
       h = max(piles)
       r = h
    
       def turns(r):
          return sum(ceil(b / r) for b in piles)
       while l < h:
          mid = (l + h) // 2
          if turns(mid) > k:
             l = mid + 1
          else:
             h = mid
             r = min(r, mid)
       return r
    
    piles = [3, 6, 4]
    k = 5
    print(solve(piles, k))

    入力

    [3, 6, 4], 5

    出力

    3

    1. Pythonでポリゴンの領域を見つけるプログラム

      順序付けられたポイントのリストが2D平面上の単純なポリゴンエンドポイントを表すとします。このポリゴンの領域を見つける必要があります。 したがって、入力がpoints =[(0、0)、(0,5)、(3、5)、(3,0)]のような場合、出力は15になります。 これを解決するには、次の手順に従います- 関数getInfo()を定義します。これにはx1、y1、x2、y2が必要です return x1 * y2-y1 * x2 メインの方法から、次の手順を実行します N:=ポイントのサイズ (firstx、firsty):=points [0] (prevx、prevy):=(fir

    2. Pythonでポリゴンの周囲を見つけるプログラム

      順序付けられたポイントのリストが2D平面上の単純なポリゴンエンドポイントを表すとします。このポリゴンの周囲を見つける必要があります。 したがって、入力がpoints =[(0、0)、(0,5)、(3、5)、(3,0)]のような場合、出力は16になります。 2つの辺の長さは3で、2つの辺の長さは5なので、2 * 5 + 2 * 3=16です。 これを解決するには、次の手順に従います- 関数getInfo()を定義します。これにはx1、y1、x2、y2が必要です ユークリッド距離である((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))の平方根を返します (x1、y1)