Pythonで最終戦に勝つスイマーの数を数えるプログラム
長さがnであるnumsと呼ばれる数のリストがあるとします。このリストにある要素は、競技会でのスイマーの現在のスコアを表しています。ファイナルマッチでは、この現在のラウンドの1位の勝者はnスコアを獲得し、2位の勝者はn-1ポイントを獲得します。現在のラウンドの後の最終ラウンドでまだ競争に勝つことができるスイマーの数をチェックする必要があります。最初のポイントが同点の場合は、それも勝利としてカウントされます。
したがって、入力がnums =[9、6、11、12]の場合、出力は3になります。現在、スコア9、11、および12にいるスイマーは、最終スコアが[13 、9、13、13]。つまり、スコア9の水泳選手が1位になり、4ポイントが追加され、6ポイントの水泳選手が2位になり、スコアは9になります。11ポイントの水泳選手は3位になり、新しいスコアは13になり、12ポイントの水泳選手は最後の場所なので、スコアも12です。ただし、6ポイントの水泳選手が1位になっても、最終スコアは10ポイント、9ポイントの水泳選手は2位になり、スコアは12になります。以下同様に、2番目の水泳選手に勝つチャンスはありません。
>これを解決するには、次の手順に従います-
- numsが空の場合、
- 0を返す
- n:=numsのサイズ
- ans:=0
- リスト番号を並べ替える
- a:=0
- n-1から0の範囲のiの場合、1ずつ減らします。
- cand:=nums [i] + n --i
- cand> aの場合、
- a:=率直
- numsのxごとに、
- x + n> =aの場合、
- ans:=ans + 1
- x + n> =aの場合、
- 回答を返す
例
理解を深めるために、次の実装を見てみましょう-
def solve(nums): if not nums: return 0 n = len(nums) ans = 0 nums.sort() a = 0 for i in range(n - 1, -1, -1): cand = nums[i] + n - i if cand > a: a = cand for x in nums: if x + n >= a: ans += 1 return ans nums = [9, 6, 11, 12] print(solve(nums))
入力
[9, 6, 11, 12]
出力
3
-
Pythonで行列内の囲まれた島の数を数えるプログラム
バイナリ行列があるとします。ここで、1は土地を表し、0は水を表します。私たちが知っているように、島は周囲が水に囲まれているグループ化された1のグループです。完全に囲まれた島の数を見つける必要があります。 したがって、入力が次のような場合 3つの島があるため、出力は2になりますが、そのうちの2つは完全に囲まれています。 これを解決するには、次の手順に従います- 関数dfs()を定義します。これにはi、jが必要です iとjが行列の範囲内にない場合、 Falseを返す matrix [i、j]が0と同じ場合、 Trueを返す matrix [i、j]:=0 a:=df
-
Pythonでツリーを2つのツリーに分割できる方法の数を数えるプログラム
値0、1、および2を含む二分木があるとします。ルートには少なくとも1つの0ノードと1つの1ノードがあります。ここで、ツリーのエッジを削除し、ツリーが2つの異なるツリーになる操作があるとします。 2つのツリーのいずれにも0ノードと1ノードの両方が含まれないように、1つのエッジを削除できる方法の数を見つける必要があります。 したがって、入力が次のような場合 0から2のエッジしか削除できないため、出力は1になります。 これを解決するには、次の手順に従います- count:=[0、0、0] 関数dfs()を定義します。これはノードを取ります ノードがnullでない場合、 pre:=