मान लीजिए हमारे पास n अलग-अलग सेकंड मानों की एक सरणी है। हमें यह जांचना है कि क्या 12 बजे से शुरू करके केवल दिए गए सेकंड को जोड़कर या घटाकर वापस 12 बजे आना संभव है या नहीं। हम सभी दिए गए सेकंड का ठीक एक बार उपयोग कर सकते हैं, हम या तो सेकंड जोड़ सकते हैं या घटा सकते हैं।
तो, यदि इनपुट seconds = [40,90,50] है, तो आउटपुट True होगा क्योंकि यह 40 जोड़ सकता है फिर 90 घटा सकता है फिर 50 जोड़ सकता है।
हल करने के चरण
- size := 2^(seconds सरणी की लंबाई)
- रेंज 0 से size - 1 तक के लिए c, करें:
- add := 0
- रेंज 0 से seconds के आकार - 1 तक के लिए j, करें:
- यदि c AND (2^j) शून्येतर है, तो:
- add := add + seconds[j]
- अन्यथा,
- add := add - seconds[j]
- यदि c AND (2^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