ধরুন আমাদের একটি অ্যারের উচ্চতা আছে। বিভিন্ন উচ্চতা সহ বিভিন্ন টাওয়ার আছে। অমল আর বিমল একটা খেলা খেলছে। খেলার নিয়ম নিচের মত
-
অমল সবসময় প্রথম খেলে
-
প্রতিটি পদক্ষেপের সময়, বর্তমান খেলোয়াড় X উচ্চতার একটি টাওয়ার নির্বাচন করে এবং উচ্চতা কমিয়ে Y [1 <=Y
-
যার কোন নড়াচড়া নেই সে গেমটি হারাবে
আমাদের বিজয়ীর নাম খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি উচ্চতা =[3,1,2] এর মত হয়, তাহলে আউটপুট হবে বিমল, কারণ প্রাথমিক উচ্চতা হল {3,1,2}। অমল যদি টাওয়ার 2 থেকে 1 এর উচ্চতা কমায়, বিমল 1 দ্বারা 3 কমাতে পারে, কিন্তু অমলের কোন নড়াচড়া নেই তাই বিমল জিতেছে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন util() সংজ্ঞায়িত করুন। এটি একটি, n লাগবে
- উত্তর :=0
- আমি 0 থেকে n - 1 রেঞ্জের জন্য, কর
- উত্তর :=উত্তর XOR a[i]
- উত্তর ফেরত দিন
- প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন
- n :=উচ্চতার মাপ
- b :=n আকারের একটি অ্যারে এবং 0 দিয়ে পূরণ করুন
- আমি 0 থেকে n - 1 রেঞ্জের জন্য, কর
- যদি উচ্চতা[i] 1 এর সমান হয়, তাহলে
- b[i] :=0
- অন্যথায়
- b[i] :=0
- j :=2
- মূল :=উচ্চতার বর্গমূলের তল[i]
- যখন উচ্চতা[i] 1 এবং j<=root, do
- এর মতো নয়
- যদি উচ্চতা[i] মোড j 0 এর সমান হয়, তাহলে
- যখন উচ্চতা[i] মোড j 0 এর সমান, do
- b[i] :=b[i] + 1
- উচ্চতা[i] :=উচ্চতার মেঝে[i]/j
- যখন উচ্চতা[i] মোড j 0 এর সমান, do
- j :=j + 1
- যদি উচ্চতা[i] মোড j 0 এর সমান হয়, তাহলে
- যদি উচ্চতা[i] 1 এর মত না হয়, তাহলে
- b[i] :=b[i] + 1
- যদি উচ্চতা[i] 1 এর সমান হয়, তাহলে
- উত্তর :=util(b, n)
- যদি উত্তর 0 এর মত না হয়, তাহলে
- প্রত্যাবর্তন "আমল"
- অন্যথায়,
- রিটার্ন "বিমল"
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def util(a,n): ans = 0 for i in range(n): ans = ans^a[i] return ans def solve(height): n = len(height) b = [0 for i in range(n)] for i in range(n): if(height[i] == 1): b[i] = 0 else: b[i] = 0 j = 2 root = int(pow(height[i],0.5)) while(height[i] != 1 and j<=root): if(height[i]%j == 0): while(height[i]%j == 0): b[i] += 1 height[i] = height[i]//j j += 1 if(height[i] != 1): b[i] += 1 ans = util(b, n) if(ans != 0): return "Amal" else: return "Bimal" height = [3,1,2] print(solve(height))
ইনপুট
[3,1,2]
আউটপুট
Bimal