Pythonで隣接するk個のスワップと最大でk個のスワップの後にシーケンスの数を見つけるプログラム
最初のn個の自然数を持つ配列Aがあるとします。 Aで正確にk個の隣接するスワップの後に取得できるシーケンス(S1)の数を見つける必要がありますか?そして、Aで最大k回のスワップ後にいくつのシーケンス(S2)を取得できますか?ここで、隣接するスワップとは、インデックスiとi+1の要素を交換することを意味します。
したがって、入力がn =3 k =2の場合、-
であるため、出力は3、6になります。元の配列は[1、2、3]
- 2つの隣接するスワップの後:[1、2、3]、[2、3、1]、[3、1、2]を取得できるため、S1 =3
- 最大2回のスワップ後:
- 0スワップ後:[1、2、3]
- 1回の交換後:[2、1、3]、[3、2、1]、[1、3、2]。
- 2回のスワップ後:[1、2、3]、[2、3、1]、[3、1、2]
したがって、S2 =6
これを解決するには、次の手順に従います-
- p =10 ^ 9 + 7
- A:=1つの要素のみを持つ配列1
- C:=1つの要素のみを持つ配列1
- 2からn+1の範囲のnについては、
- B:=A、A:=1つの要素のみを持つ配列1
- D:=C、C:=1つの要素のみを持つ配列1
- 1から最小(k + 1および1からnまでのすべての数値の合計)の範囲のxの場合
- insert(Aの最後の要素+(x<の場合はB[x]、それ以外の場合は0のサイズ)-(0 <=x-nの場合はB[x-n]、それ以外の場合は0))mod p)Aの最後に >
- 1からn-2の範囲のxについては、
- Cの最後に((D [x] +(n-1)* D [x-1])mod p)を挿入します
- Cの最後に(n * Dの最後の要素)modpを挿入します
- Aのすべての要素の合計を返す[インデックスkmod2からk])modpおよびC[n-1およびkの最小値]
例
理解を深めるために、次の実装を見てみましょう-
p = 10**9+7 def solve(n, k): A = [1] C = [1] for n in range(2,n+1): B = A A = [1] D = C C = [1] for x in range(1,min(k+1,n*(n-1)//2+1)): A.append((A[-1] + (B[x] if x<len(B) else 0) - (B[x-n] if 0<=x-n else 0)) % p ) for x in range(1,n-1): C.append((D[x]+(n-1)*D[x-1]) % p) C.append(n*D[-1] % p) return sum(A[k%2:k+1:2]) % p,C[min(n-1,k)] n = 3 k = 2 print(solve(n, k))
入力
3, 2
出力
3, 6
-
Pythonでマージした後も、最小数の色を見つけるプログラムが残っています
色のリスト(R、G、B)があるとします。これで、2つの異なる色が隣り合っている場合、それらは3番目の色の単一の色のアイテムに変換できます。そのような変換の可能なシーケンスの後に残っているそれらの最小数を見つける必要があります。 したがって、入力がcolors =[G、 R、 G、 B、 R]の場合、以下のように変換できるため、出力は1になります- これを解決するには、次の手順に従います- n:=色のサイズ 色に異なる色が1つしかない場合は、 return n n <=1の場合、 return n x:=0 d:=キーと値のペアを持つマップ{( R、1)、(
-
リスト内で最大数を見つけるPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 与えられたリスト入力では、与えられたリストの中で最大の数を見つける必要があります。 ここでは、2つのアプローチについて説明します 並べ替え手法の使用 組み込みのmax()関数を使用する アプローチ1-組み込みのsort()関数を使用する 例 list1 = [18, 65, 78, 89, 90] list1.sort() # main print("Largest element is:", list1[-1]) 出力 Largest element is: