একটি ক্যান্ডি স্টোরে N ধরনের ক্যান্ডি আছে, প্রতিটির দাম দেওয়া আছে। একটি অফার আছে: একটা ক্যান্ডি কিনলে সর্বোচ্চ K ধরনের অন্য ক্যান্ডি ফ্রি পাওয়া যায়। সব N ধরনের ক্যান্ডি কিনতে ন্যূনতম এবং সর্বোচ্চ কত টাকা খরচ হবে তা বের করতে হবে। অফার সর্বোচ্চ ব্যবহার করতে হবে।
উদাহরণ
ইনপুট: price = [4, 3, 2, 5], k = 2
আউটপুট: Minimum = 5, Maximum = 9
ব্যাখ্যা:
- ন্যূনতম: সস্তা ক্যান্ডি কিনে (২ টাকা) মন্ত্র costly দুটি (৪, ৫) ফ্রি নিন। তারপর ৩ টাকার কিনুন। মোট = ২ + ৩ = ৫।
- সর্বোচ্চ: ম lanzamiento ক্যান্ডি কিনে (৫ টাকা) সস্তা দুটি (২, ৩) ফ্রি নিন। তারপর ৪ টাকার কিনুন। মোট = ৫ + ৪ = ৯।
সমাধানের পদ্ধতি
- ন্যূনতম খরচ: দামগুলো সাজান (ascending)। শুরু থেকে কিনুন, প্রতিবার K টি ফ্রি নিন (শেষ থেকে)।
- সর্বোচ্চ খরচ: দামগুলো সাজান (ascending)। শেষ থেকে কিনুন (সবচেয়ে costly), প্রতিবার K টি ফ্রি নিন (শুরু থেকে)।
পাইথন কোড
def get_min(A, k):
n = len(A)
A.sort()
res = 0
i = 0
while n > 0:
res += A[i]
n -= k
i += 1
return res
def get_max(A, k):
n = len(A)
A.sort()
res = 0
idx = 0
i = n - 1
while i >= idx:
res += A[i]
idx += k
i -= 1
return res
A = [4, 3, 2, 5]
k = 2
print(get_min(A, k), get_max(A, k))
ইনপুট
[4, 3, 2, 5], 2
আউটপুট
5 9