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

Pythonで満たすことができる転送要求の数を見つけるためのプログラム


0からn-1までの番号が付けられたn個のホステルの部屋があるとします。ホステルの部屋にいる学生は別の部屋に転校したいと思っており、それを行うためにいくつかのリクエストを出します。ホステルの空席はありません。転校を希望する学生の代わりに別の学生が就任した場合にのみ、転校のリクエストが処理されます。したがって、リクエストを考慮して、満たすことができるリクエストの数を見つける必要があります。

したがって、入力がn =3、requests =[[0,2]、[1,0]、[2,1]]の場合、出力は3になります。

部屋0の学生は部屋2に移動します。

部屋1の学生は部屋0に移動します。

2号室の生徒は1号室に移動します。

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

  • リクエストの範囲サイズが-1のkの場合、1ずつ減少します

    • (0からリクエストのサイズとk)のすべての組み合わせのcについては、次のようにします

      • d:=値0を含むサイズnの新しい配列

      • cの各iについて、実行します

        • d [requests [i、0]]:=d [requests [i、0]]-1

        • d [requests [i、1]]:=d [requests [i、1]] + 1

      • dの項目のどれも真でない場合、

        • kを返す

  • 0を返す

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

from itertools import combinations
def solve(n, requests):
   for k in range(len(requests), 0, -1):
      for c in combinations(range(len(requests)), k):
         d = [0] * n
         for i in c:
            d[requests[i][0]] -= 1
            d[requests[i][1]] += 1
         if not any(d):
            return k
   return 0

print(solve(3, [[0,2],[1,0],[2,1]]))

入力

3, [[0,2],[1,0],[2,1]]

出力

3

  1. Pythonで行列の空のセルを選択できる方法がいくつあるかを確認するプログラム

    N x Nのバイナリ行列があり、0は空のセル、1はブロックされたセルであるとすると、すべての行とすべての列に少なくとも1つの選択されたセルがあるように、N個の空のセルを選択する方法の数を見つける必要があります。答えが非常に大きい場合は、結果mod 10 ^ 9 + 7を返します。 したがって、入力が次のような場合 0 0 0 0 0 0 0 1 0 次の構成があるため、出力は4になります(xは選択されたセルです)- これを解決するには、次の手順に従います- n:=行列のサイズ 関数f()を定義します。これ

  2. Pythonで捕まえることができる雨の総量を見つけるためのプログラム

    n個の非負の整数の配列があるとします。これらは、各バーの幅が1である高さを表しており、雨が降った後にどれだけの水を捕まえることができるかを計算する必要があります。したがって、マップは次のようになります- ここでは、8つの青いボックスがあることがわかります。したがって、出力は8になります。 これを解決するには、次の手順に従います- スタックst、water:=0およびi:=0を定義します whilei<身長のサイズ =height [i]の場合、iをスタックにプッシュし、iを1増やします それ以外の場合 x:=スタックトップ要素、スタックからトップを削除 スタックが空でない場合