मान लीजिए, एक सर्कुलर ट्यूब में n गेंदें हैं। ट्यूब 100 मीटर लंबी है और प्रारंभ में, ट्यूब में प्रत्येक गेंद एक बिंदु से i मीटर दूर है जिसे हम प्रारंभिक बिंदु कहते हैं। अब गेंदें ट्यूब के भीतर सर्कुलर क्रम में अलग-अलग दिशाओं में यात्रा करना शुरू करती हैं। गेंदें ट्यूब के भीतर 0.1 मीटर प्रति सेकंड की गति से यात्रा करती हैं। जब दो गेंदें एक बिंदु पर मिलती हैं, तो एक टकराव होता है और गेंदें अपनी यात्रा की दिशा बदल लेती हैं। यदि यह प्रक्रिया लंबे समय तक चलती है, मान लीजिए 10^9 + 6 सेकंड; हमें गेंदों के टकराव में संलग्न होने की संख्या ढूंढनी है। गेंदों की प्रारंभिक दूरी प्रारंभिक बिंदु से इनपुट के रूप में दी गई है।
इसलिए, यदि इनपुट है: input_array = [0, 10], तो आउटपुट 400000 होगा।
दो गेंदें हैं, और प्रारंभिक रेखा से उनकी प्रारंभिक दूरी इनपुट के रूप में दी गई है। यदि उनकी दिशाएं समान हैं, तो वे कभी टकराव में संलग्न नहीं होंगी। लेकिन, यदि उनकी दिशाएं अलग हैं, तो वे कई बार टकराएंगी। एक गेंद दूसरी से ठीक 400000 बार टकराएगी।
हल करने के चरण
- input_array सूची को सॉर्ट करें
- size := input_array का आकार
- lap_count := (10^5) * 2
- output := 2 * lap_count * floor(size / 2) * (size - floor(size / 2))
- stop := 0
- i को 0 से size - 1 तक के लिए:
- यदि stop != 1:
- यदि input_array[i] + 1 == input_array[i+1], तो: output += 2, stop := 1
- अन्यथा, stop := 0
- अन्यथा, stop := 0
- यदि stop != 1:
- output वापस करें
उदाहरण
def solve(input_array):
input_array.sort()
size = len(input_array)
lap_count = (10**5) * 2
output = 2 * lap_count * (size // 2) * (size - size // 2)
stop = 0
for i in range(size - 1):
if stop != 1:
if input_array[i] + 1 == input_array[i+1]:
output += 2
stop = 1
else:
stop = 0
else:
stop = 0
return output
print(solve([0, 10]))
इनपुट
[0, 10]
आउटपुट
400000