মান লিজিয়ে আমাদের n সংখ্যক ভিন্ন সেকেন্ড ভ্যালু দিয়ে একটি অ্যারে আছে। আমাদের যাচাই করতে হবে ১২টা ঘণ্টার ক্লক (12 O'clock) থেকে শুরু করে শুধু দেওয়া সেকেন্ডগুলো যোগ বা বিয়োগ করে আবার ১২টায় ফিরে আসা সম্ভব কিনা। আমরা সব দেওয়া সেকেন্ড একবারই ব্যবহার করতে পারি, যেকোনো সেকেন্ড বা যোগ করতে পারি বা বিয়োগ।
যেমন, ইনপুট যদি seconds = [40,90,50] হয়, তবে আউটপুট হবে True কারণ ৪০ যোগ, ৯০ বিয়োগ, আবার ৫০ যোগ করলে ফিরে আসা যায়।
সমাধানের ধাপসমূহ
size := 2^(seconds অ্যারে-এর দৈর্ঘ্য)c০ থেকেsize - 1পর্যন্ত, করুন:add := 0j০ থেকেseconds-এর সাইজ - ১ পর্যন্ত, করুন:- যদি
c AND (2^j)নন-জিরো হয়, তবে:add := add + seconds[j]
- অন্যথায়:
add := add - seconds[j]
- যদি
- যদি
add(24 * 60)দ্বারা বিভাজ্য হয়, তবে:Trueরিটার্ন করুন
Falseরিটার্ন করুন
উদাহরণ
বेहतर বোঝার জন্য নিচের বাস্তবায়নটি দেখুন:
def solve(seconds):
size = 2**len(seconds)
for c in range(size):
add = 0
for j in range(len(seconds)):
if c & (1 << j):
add += seconds[j]
else:
add -= seconds[j]
if add % (24 * 60) == 0:
return True
return False
seconds = [40,90,50]
print(solve(seconds))
ইনপুট
[40,90,50]
আউটপুট
True