ধরুন, একটি সংখ্যা অ্যারে এবং একটি সংখ্যা k দেওয়া হয়েছে। আমাদের যাচাই করতে হবে যে অ্যারেটি কি জোড়ায় ভাগ করা যায় যাতে প্রতিটি জোড়ার যোগফল k দ্বারা বিভাজ্য হয়।
যেমন, ইনপুট arr = [5, 15, 6, 9], k = 7 হলে আউটপুট হবে True, কারণ জোড়াগুলো হতে পারে (5, 9) এবং (15, 6)।
সমাধানের ধাপসমূহ
n = len(array)। যদিnবিজোড় হয়, তবে False ফেরত দিন।occurrencesনামক একটি ডিকশনারি (ডিফল্ট ০) নিন।- প্রতিটি এলিমেন্টের জন্য
remainder = ((array[i] % k) + k) % kহিসাব করুন এবংoccurrences[remainder]বাড়ান। - আবার লুপ চালান:
remainder = ((array[i] % k) + k) % k।- যদি
2 * remainder == kহয় এবংoccurrences[remainder]বিজোড় হয়, তবে False। - যদি
remainder == 0হয় এবংoccurrences[remainder]বিজোড় হয়, তবে False। - যদি
occurrences[remainder] != occurrences[k - remainder]হয়, তবে False।
- সব চেক পাস করলে True ফেরত দিন।
উদাহরণ কোড
from collections import defaultdict
def solve(array, k):
n = len(array)
if n % 2 != 0:
return False
occurrences = defaultdict(lambda: 0)
for i in range(n):
occurrences[((array[i] % k) + k) % k] += 1
for i in range(n):
remainder = ((array[i] % k) + k) % k
if (2 * remainder == k):
if (occurrences[remainder] % 2 != 0):
return False
elif (remainder == 0):
if (occurrences[remainder] & 1):
return False
elif (occurrences[remainder] != occurrences[k - remainder]):
return False
return True
arr = [5, 15, 6, 9]
k = 7
print(solve(arr, k))
ইনপুট
[5, 15, 6, 9], 7
আউটপুট
True