ধরুন আমাদের একটি বৃত্তে একটি শিশু দাঁড়িয়ে আছে, এবং তারা একটি বেলুন পাওয়ার জন্য অপেক্ষা করছে। বিতরণটি kth শিশু (প্রথম সূচক 0 এ) দিয়ে শুরু করা হয় এবং তাদের একটি বেলুন দিয়ে তারা বৃত্ত থেকে বেরিয়ে যায়। এখন প্রতি kth শিশু ঘড়ির কাঁটার দিকে একটি বেলুন পায় যতক্ষণ না শুধুমাত্র একটি শিশু বাকি থাকে যে একটি বেলুন পায়। তাই যদি আমাদের n এবং k থাকে, তাহলে আমাদেরকে সেই শিশুটির শুরুর সূচী খুঁজে বের করতে হবে যেটি শেষ বেলুনটি পাবে।
সুতরাং, যদি ইনপুটটি n =3 k =2 এর মত হয়, তাহলে আউটপুট হবে 1, প্রথম রাউন্ডে, শিশু 2 একটি বেলুন পায়, এবং ছেড়ে দিন তাই বৃত্তটি [0, 1] হবে। দ্বিতীয় রাউন্ডে, শিশু 0 একটি বেলুন পায়, বৃত্ত হবে [1]।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব:
-
arr :=রেঞ্জ 0 থেকে n
একটি নতুন তালিকা -
init :=0
-
যখন arr এর সাইজ> 1, do
-
রিমুভ করুন :=(init + k) arr এর মোড সাইজ
-
মুছুন arr[সরান]
-
init :=অপসারণ করুন
-
-
ফেরত arr[0]
আরও ভালভাবে বোঝার জন্য আসুন নিম্নলিখিত বাস্তবায়ন দেখি:
উদাহরণ
class Solution: def solve(self, n, k): arr = list(range(0, n)) init = 0 while len(arr) > 1: remove = (init + k) % len(arr) del arr[remove] init = remove return arr[0] ob = Solution() n = 3 k = 2 print(ob.solve(n, k))
ইনপুট
3,2
আউটপুট
1