ধরুন, একটি সেট A আছে যেখানে ১ থেকে n পর্যন্ত সকল উপাদান উপস্থিত। P(A) উপস্থিত করে A-র উপাদানগুলোর সকল পারমুটেশন (permutation)। আমাদের P(A)-র সতট उपাদান সংখ্যা বের করতে হবে যা নিচের শর্তাবলী পূরণ করে:
- সকল
iরেঞ্জ[1, n]-এর জন্য,A[i]এবংiএকই নয় kসংখ্যক ইন্ডেক্সের একটি সেট{i1, i2, ... ik}আছে যাতেA[ij] = ij+1সকলj < kএর জন্য এবংA[ik] = i1(সাইক্লিক)।
সুতরাং, যদি ইনপুট হয় n = 3, k = 2, তবে আউটপুট হবে 0 কারণ -
অ্যারের ১-ইন্ডেক্সড (1-indexed) মনে করুন। যেহেতু N = 3 এবং K = 2, আমরা A-র ২টি সেট পাই যা প্রথম প্রোপার্টি পূরণ করে a[i] ≠ i, সেগুলো হল [3,1,2] এবং [2,3,1]। এখন K = 2 হলে, আমরা ৬টি takie উপাদান পেতে পারি:
[1,2], [1,3], [2,3], [2,1], [3,1], [3,2]। এখন যদি আমরা P(A)-র প্রথম উপাদান বিবেচনা করি:
P(A) -> [3,1,2]
[1,2],A[1] ≠ 2[1,3],A[1] = 3কিন্তুA[3] ≠ 1[2,3],A[2] ≠ 3[2,1],A[2] = 1কিন্তুA[1] ≠ 2[3,1],A[3] = 1কিন্তুA[1] ≠ 3[3,2],A[3] ≠ 2
P(A) -> [2,3,1]
[1,2],A[1] = 2কিন্তুA[2] ≠ 1[1,3],A[1] ≠ 3[2,3],A[2] = 3কিন্তুA[3] ≠ 3[2,1],A[2] ≠ 1[3,1],A[3] = 1কিন্তুA[1] ≠ 3[3,2],A[3] ≠ 2
যেহেতু a-র কোণো উপাদান উপরের প্রোপার্টিগুলো পূরণ করে না, অতএব ফলাফল 0।
এটি সমাধান করার জন্য, আমরা নিচের ধাপগুলো অনুসরণ করব:
ps:=[1, n]রেঞ্জের উপাদান ধারণকারী অ্যারের সকল পারমুটেশনc := 0- প্রতিটি
pinpsএর জন্য, করুন:- প্রতিটি ইন্ডেক্স
iএবং মানainpএর জন্য, করুন:- যদি
aএবংiএকই হয়, তবে:- লুপ থেকে বের হয়ে যান
- যদি
- অন্যথায়:
jin range0ton - 1এর জন্য, করুন:current := p[j]cycle_length := 1- যখন
currentএবংjএকই নয়, করুন:current := p[current]cycle_length := cycle_length + 1
- যদি
cycle_lengthএবংkএকই হয়, তবে:c := c + 1- লুপ থেকে বের হয়ে যান
- প্রতিটি ইন্ডেক্স
cফেরত দিন
উদাহরণ
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন:
import itertools
def solve(n, k):
ps = itertools.permutations(range(n), n)
c = 0
for p in ps:
for i, a in enumerate(p):
if a == i:
break
else:
for j in range(n):
current = p[j]
cycle_length = 1
while current != j:
current = p[current]
cycle_length += 1
if cycle_length == k:
c += 1
break
return c
n = 3
k = 2
print(solve(n, k))
ইনপুট
3, 2
আউটপুট
0