ধরুন, একটি বৃত্তাকার নলটিতে n বল আছে। টিউবটি 100 মিটার দীর্ঘ এবং প্রাথমিকভাবে, টিউবের প্রতিটি বল একটি বিন্দু থেকে i মিটার দূরে থাকে যাকে আমরা শুরু বিন্দু বলি। এখন বলগুলি টিউবের মধ্যে বৃত্তাকার ক্রমে বিভিন্ন দিকে যেতে শুরু করে। বলগুলি টিউবের মধ্যে প্রতি সেকেন্ডে 0.1 মিটার ভ্রমণ করে। যখন দুটি বল একটি বিন্দুতে মিলিত হয়, একটি সংঘর্ষ ঘটে এবং বলগুলি তাদের ভ্রমণের দিক পরিবর্তন করে। যদি এই প্রক্রিয়াটি দীর্ঘ সময়ের জন্য চলে, তাহলে ধরা যাক 10^9 + 6 সেকেন্ড; বলগুলো কতবার সংঘর্ষে লিপ্ত হয়েছে তা আমাদের খুঁজে বের করতে হবে। প্রারম্ভিক বিন্দু থেকে বলের প্রাথমিক দূরত্ব ইনপুট হিসাবে দেওয়া হয়।
সুতরাং, যদি ইনপুটটি input_array =[0, 10] এর মত হয়, তাহলে আউটপুট হবে 400000
দুটি বল আছে, এবং প্রারম্ভিক লাইন থেকে তাদের প্রাথমিক দূরত্ব ইনপুট হিসাবে আমাদের দেওয়া হয়। যদি তাদের দিকনির্দেশ একই হয় তবে তারা কখনই সংঘর্ষে লিপ্ত হবে না। কিন্তু, যদি তাদের দিকনির্দেশ ভিন্ন হয়, তারা সময়ে সময়ে সংঘর্ষ করবে। একটি বল অন্যটির সাথে 400000 বার ধাক্কা খাবে৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- তালিকা ইনপুট_অ্যারে সাজান
- সাইজ :=ইনপুট_অ্যারের আকার
- lap_count :=(10^5)*2
- আউটপুট :=2 * lap_count * (আকার / 2) * (আকার - (আকার / 2) এর তল মান)
- স্টপ :=0
- আমি 0 থেকে সাইজ - 1 এর রেঞ্জের জন্য, কর
- যদি স্টপ 1 এর মত না হয়, তাহলে
- যদি input_array[i] + 1 input_array[i+1] এর মত হয়, তাহলে
- আউটপুট :=আউটপুট + 2
- স্টপ :=1
- অন্যথায়,
- স্টপ :=0
- যদি input_array[i] + 1 input_array[i+1] এর মত হয়, তাহলে
- অন্যথায়,
- স্টপ :=0
- রিটার্ন আউটপুট
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
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