ধরুন আমাদের কাছে প্রশ্নগুলির একটি তালিকা রয়েছে, যেখানে প্রতিটি প্রশ্নের Q[i] একটি ট্রিপলেট [a_i, b_i এবং d_i] রয়েছে। বিবেচনা করুন আমরা প্রাথমিকভাবে (0, 0) অবস্থানে আছি, তারপর এক ধাপে আমরা কিছু অবস্থান (x1, y1) থেকে (x2, y2) এ যেতে পারি যেখানে এই দুটি বিন্দুর মধ্যে ইউক্লিডীয় দূরত্ব কমপক্ষে a এবং সর্বাধিক b। এখন প্রতিটি প্রশ্নের জন্য আমাদের (0, 0) থেকে (d_i, 0) পৌঁছানোর জন্য প্রয়োজনীয় ন্যূনতম সংখ্যক ধাপ খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি Q =[(2,3,1), (1,2,0), (3,4,11)] এর মত হয়, তাহলে আউটপুট হবে [2, 0, 3] কারণ (0, 0) থেকে প্রথম প্রশ্ন a =2 দিয়ে আমরা যেতে পারি $\left(\frac{1}{2},\frac{\sqrt{15}}{2}\right)$ তারপর (1, 0) সুতরাং আমাদের দুটি ধাপ দরকার, সুতরাং আউটপুট হল 2, পরবর্তী কোয়েরির জন্য d হল 0, তাই আমাদের কোনো ধাপ সরানোর দরকার নেই যাতে আউটপুট 0 হয়। এবং তৃতীয়টির জন্য b =4 এবং a =3 সরানো (0, 0) ) থেকে (4, 0) তারপরে (8, 0) তারপরে (11, 0)।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন ধাপ সংজ্ঞায়িত করুন()। এটি a, b, d লাগবে
- mmin :=সর্বনিম্ন a, b
- mmax :=সর্বোচ্চ a, b
- যদি d 0 হয়, তাহলে
- রিটার্ন 0
- যদি d হয় mmin বা mmax, তাহলে
- প্রত্যাবর্তন 1
- যদি d
- রিটার্ন 2
- (a, b, d) :=q
- res এর শেষে ধাপের ফলাফল (a, b, d) সন্নিবেশ করান
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
from math import ceil def steps(a, b, d): mmin = min(a, b) mmax = max(a, b) if d is 0: return 0 if d in [mmin, mmax]: return 1 if d < mmax: return 2 return ceil(d / mmax) def solve(Q): res = [] for q in Q: a, b, d = q res.append(steps(a, b, d)) return res Q = [(2,3,1), (1,2,0), (3,4,11)] print(solve(Q))
ইনপুট
[(2,3,1), (1,2,0), (3,4,11)]
আউটপুট
[2, 0, 2.0]