मान लीजिए कि हमारे पास एक संख्या n है जो n लोगों को दर्शाती है और दो समान वोटिंग मशीनें हैं। हमारे पास आकार n नामक एक सरणी भी है, जिससे कि समय [i] किसी भी मशीन पर वोट करने के लिए i-वें व्यक्ति द्वारा खर्च किए गए कुल समय का प्रतिनिधित्व करता है। एक समय में, दो मशीनों में से प्रत्येक पर केवल एक ही व्यक्ति हो सकता है। हमारे पास एक और मान x है, जो अधिकतम स्वीकार्य समय का प्रतिनिधित्व करता है जिसके लिए मशीनें चालू हैं, हमें यह जांचना होगा कि सभी व्यक्ति अपना वोट दे सकते हैं या नहीं।
इसलिए, यदि इनपुट n =3, x =7, समय =[3, 5, 3] जैसा है, तो आउटपुट ट्रू होगा। क्योंकि समय t0 पर 0वां व्यक्ति पहली मशीन पर जाता है और पहला व्यक्ति दूसरी मशीन पर जाता है। अब समय पर t3 पहली मशीन मुफ्त है। अब दूसरा व्यक्ति पहली मशीन पर जाता है और समय पर t5 दूसरी मशीन मुफ़्त है और समय पर t6 पहली मशीन मुफ़्त है इसलिए सभी प्रतिभागियों ने समय पर मतदान किया है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- total_sum :=समय के सभी तत्वों का योग
- यदि कुल_योग <=x, तो
- सही लौटें
- सूची का समय क्रमित करें
- prev_sum :=समय के समान आकार की एक सरणी और 0 से भरें
- prev_sum[0] :=time[0]
- मैं के लिए 1 से लेकर prev_sum के आकार के लिए, करें
- prev_sum[i] :=prev_sum[i - 1] + time[i]
- मैं के लिए 0 से prev_sum के आकार की सीमा में, करते हैं
- जे के लिए i + 1 से लेकर prev_sum -1 के आकार तक, do
- temp_sum :=prev_sum[i] + (total_sum - prev_sum[j])
- अगर temp_sum <=x और Total_sum - temp_sum <=x, तो
- सही लौटें
- जे के लिए i + 1 से लेकर prev_sum -1 के आकार तक, do
- झूठी वापसी
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
def solve(n, x, time): total_sum = sum(time) if total_sum <= x: return True time.sort() prev_sum = [0 for i in range(len(time))] prev_sum[0] = time[0] for i in range(1, len(prev_sum)): prev_sum[i] = prev_sum[i - 1] + time[i] for i in range(0, len(prev_sum)): for j in range(i + 1, len(prev_sum)): temp_sum = (prev_sum[i] + (total_sum - prev_sum[j])) if temp_sum <= x and total_sum - temp_sum <= x: return True return False n = 3 x = 7 time = [3, 5, 3] print(solve(n, x, time))
इनपुट
3, 7, [3, 5, 3]
आउटपुट
True