Pythonで不幸な友達の数を数えるプログラム
n(偶数)の異なる友達の設定のリストがあるとします。各人iについて、preferences[i]は好みの順にソートされた友達のリストを保持します。したがって、リストの前の友人は、リストの後半の友人よりも優先されます。各リストの友達には、0からn-1までの整数で番号が付けられています。すべての友達は異なるペアに分けられます。ここで、pairs [i] =[xi、yi]は、xiがyiとペアになっている、および/またはyiがxiとペアになっていることを表します。しかし、xがyとペアになっていて、vとペアになっている友人uが存在する場合、友人xは不幸ですが、-
- xはyよりもuを優先し、
- uはvよりもxを優先します。
不幸な友達の数を見つけなければなりません。
したがって、入力が設定のようである場合=[[1、2、3]、[3、2、0]、[3、1、0]、[1、2、0]]ペア=[[0、1] 、[2、3]]の場合、最初の友人は人1が人0とペアになっているが、人0よりも人3を好み、人3は人2よりも人1を好むため、最初の友人は不幸であるため、出力は2になります。人3は人2とペアになっていますが、人2よりも人1を優先し、人1は人0よりも人3を優先するためです。
これを解決するには、次の手順に従います-
- グラフ:=グラフを作成するための隣接リスト、最初は空
- ペアの各ペア(s、e)について、
- 設定の各設定について、
- prefがendと同じ場合、
- ループから抜け出す
- グラフ[s、設定]:=1
- prefがendと同じ場合、
- 環境設定[e]の各設定について、
- prefがstartと同じ場合、
- ループから抜け出す
- グラフ[e、設定]:=1
- prefがstartと同じ場合、
- 設定の各設定について、
- 不幸:=0
- ペアの各ペア(s、e)について、
- グラフの各設定について、
- graph [pref] [s]が空でない場合、
- 不幸:=不幸+1
- ループから抜け出す
- graph [pref] [s]が空でない場合、
- グラフ[end]の各設定について、
- を実行します。
- graph [pref] [e]が空でない場合、
- 不幸:=不幸+1
- ループから抜け出す
- graph [pref] [e]が空でない場合、
- グラフの各設定について、
- 不幸に戻る
例
理解を深めるために、次の実装を見てみましょう-
from collections import defaultdict def solve(preferences, pairs): graph = defaultdict(dict) for start, end in pairs: for pref in preferences[start]: if pref == end: break graph[start][pref] = 1 for pref in preferences[end]: if pref == start: break graph[end][pref] = 1 unhappy = 0 for start, end in pairs: for pref in graph[start]: if graph[pref].get(start, None): unhappy += 1 break for pref in graph[end]: if graph[pref].get(end, None): unhappy += 1 break return unhappy preferences = [[1, 2, 3], [3, 2, 0], [3, 1, 0], [1, 2, 0]] pairs = [[0, 1], [2, 3]] print(solve(preferences, pairs))>
入力
[[1, 2, 3], [3, 2, 0], [3, 1, 0], [1, 2, 0]], [[0, 1], [2, 3]]
出力
2
-
Pythonで合計がkであるパスの数をカウントするプログラム
二分木と別の値kがあるとすると、合計がkになるサブ子パスへの一意のノードの数を見つける必要があります。 したがって、入力が次のような場合 k =5の場合、パスは[2、3]と[1、4] であるため、出力は2になります。 これを解決するには、次の手順に従います- count:=マップは最初にキー0の値1を保持します ans:=0、プレフィックス:=0 関数dfs()を定義します。これはノードを取ります ノードがnullでない場合、 プレフィックス:=プレフィックス+ノードの値 ans:=ans +(count [prefix --target]、これが利用できない場合は0にな
-
Pythonで行列内の囲まれた島の数を数えるプログラム
バイナリ行列があるとします。ここで、1は土地を表し、0は水を表します。私たちが知っているように、島は周囲が水に囲まれているグループ化された1のグループです。完全に囲まれた島の数を見つける必要があります。 したがって、入力が次のような場合 3つの島があるため、出力は2になりますが、そのうちの2つは完全に囲まれています。 これを解決するには、次の手順に従います- 関数dfs()を定義します。これにはi、jが必要です iとjが行列の範囲内にない場合、 Falseを返す matrix [i、j]が0と同じ場合、 Trueを返す matrix [i、j]:=0 a:=df