Pythonで可能な控えめな行列の数を数えるプログラム
nとmの2つの値があるとします。 nxm次の謙虚な行列の可能な配置の数を見つける必要があります。マトリックスは、次の場合に謙虚であると言われます
- 1からnxmの範囲の各要素が1回だけ含まれます
- 任意の2つのインデックスペア(i1、j1)と(i2、j2)について、(i1 + j1)<(i2 + j2)の場合、Mat [i1、j1]
答えが大きすぎる場合は、結果mod 10 ^ 9+7を返します。
したがって、入力がn =2 m =2の場合、2つの可能な行列があるため、出力は2になります-
1 | 2 |
3 | 4 |
そして
1 | 3 |
2 | 4 |
これを解決するには、次の手順に従います-
- p:=10 ^ 9 + 7
- result:=値が1のリスト
- 2〜10 ^ 6の範囲のxについては、
- temp:=結果の最後の要素
- temp:=(temp * x)mod p
- 結果の最後に温度を挿入
- m> nの場合、
- temp:=n
- n:=m
- m:=temp
- prod:=1
- 1からmの範囲のxについては、
- prod:=(prod * result [x-1])mod p
- prod:=(prod ^ 2)mod p
- 0〜n --mの範囲のxの場合、実行
- prod:=(prod * result [m-1])mod p
- 返品
例
理解を深めるために、次の実装を見てみましょう-
p = 10**9+7 def solve(n, m): result = [1] for x in range(2,10**6+1): temp = result[-1] temp = (temp*x) % p result.append(temp) if(m > n): temp = n n = m m = temp prod = 1 for x in range(1,m): prod = (prod * result[x-1]) % p prod = (prod**2) % p for x in range(n-m+1): prod = (prod*result[m-1]) % p return prod n = 3 m = 3 print(solve(n, m))
入力
3, 3
出力
24
-
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