ধরুন আমাদের প্রথম n প্রাকৃতিক সংখ্যা সহ একটি অ্যারে রয়েছে। আমাদের খুঁজে বের করতে হবে 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 সহ একটি অ্যারে
- C :=শুধুমাত্র একটি উপাদান 1 সহ একটি অ্যারে
- 2 থেকে n+1 রেঞ্জের মধ্যে n এর জন্য, করুন
- B :=A, A :=শুধুমাত্র একটি উপাদান 1 সহ একটি অ্যারে
- D :=C, C :=শুধুমাত্র একটি উপাদান 1 সহ একটি অ্যারে
- এক্সের জন্য 1 থেকে সর্বনিম্ন পরিসরে (k+1 এবং 1 থেকে n পর্যন্ত সমস্ত সংখ্যার যোগফল)
- ঢোকান (A + এর শেষ উপাদান (B[x] যখন x <সাইজ B অন্যথায় 0) - (B[x-n] যখন 0 <=x-n অন্যথায় 0)) মোড p) A এর শেষে
1 থেকে n-2 রেঞ্জের x এর জন্য - করুন
- C এর শেষে ((D[x]+(n-1)*D[x-1]) mod p) ঢোকান
- ঢোকান (n * D এর শেষ উপাদান) C-এর শেষে mod p
এ
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
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