ধরুন রুম নামক একটি অ্যারে আছে। যেখানে রুম[i] একটি জোড়া রয়েছে [roomId_i, size_i] এমন একটি ঘরকে বোঝায় যার আইডি হল roomId_i এবং সাইজ হল size_i। সমস্ত রুম নম্বর স্বতন্ত্র. আমাদের আরও একটি অ্যারে কোয়েরি আছে, যেখানে ক্যোয়ারী [j] একটি জোড়া [preferred_j, minSize_j] ধারণ করে। jth প্রশ্নের উত্তর হল একটি ঘরের রুম নম্বর আইডি যেমন −
-
রুমটির আকার কমপক্ষে minSize_j, এবং
-
|আইডি - পছন্দের_জে| মিনিমাইজ করা হয়।
এখন, যদি পরম পার্থক্য একটি টাই হয়, তারপর সবচেয়ে ছোট আইডি সঙ্গে ঘর ব্যবহার করুন. যদি এমন কোন রুম না থাকে তবে -1 ফিরে আসুন। তাই আমাদের উত্তর নামক একটি অ্যারে খুঁজে বের করতে হবে যার দৈর্ঘ্য কোয়েরির সমান, যেটিতে jth কোয়েরির উত্তর রয়েছে।
সুতরাং, যদি ইনপুটটি ঘরের মত হয় =[[2,2],[1,2],[3,2]] প্রশ্ন =[[3,1],[3,3],[5,2]], তাহলে আউটপুট হবে [3, -1, 3] কারণ
-
প্রশ্নের জন্য [3,1]:ঘর 3 সবচেয়ে কাছের কারণ |3 - 3| =0, এবং 2 এর আকার কমপক্ষে 1, তাই উত্তরটি 3।
-
প্রশ্নের জন্য [3,3]:এমন কোনো ঘর নেই যার আকার কমপক্ষে 3, তাই উত্তর হল -1।
-
প্রশ্নের জন্য [5,2]:ঘর 3 সবচেয়ে কাছের কারণ |3 - 5| =2, এবং 2 এর আকার কমপক্ষে 2, তাই উত্তরটি 3।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
আকারের উপর ভিত্তি করে ঘর সাজান, যখন আকার একই হয় তখন রুম আইডির উপর ভিত্তি করে
-
প্রশ্ন =সূচক i-এর জন্য জোড়ার একটি তালিকা (qid,size,i), এবং প্রশ্নগুলিতে জোড়া (qid, আকার)
-
প্রশ্নগুলিকে আকারের উপর ভিত্তি করে বিপরীত ক্রমে সাজান, যদি আকার একই হয়, তাহলে পছন্দের উপর ভিত্তি করে, যখন উভয়ই একই হয় তখন সূচকের উপর ভিত্তি করে
-
উত্তর :=প্রশ্নের আকারের সমান আকারের একটি অ্যারে এবং -1 দিয়ে পূরণ করুন
-
X :=একটি নতুন তালিকা
-
প্রশ্নে প্রতিটি (qid, আকার, i) জন্য, করুন
-
যখন কক্ষ এবং কক্ষের শেষ আইটেমের আকার>=আকার, করুন
-
(idr, p) :=রুম থেকে শেষ উপাদান মুছে ফেলা হয়েছে
-
idr ঢোকানোর পরে X সাজান
-
-
যদি X খালি না হয়, তাহলে
-
j :=সূচী যেখানে X সাজানো থাকার জন্য qid ঢোকাতে হবে
-
যদি j X এর আকারের সমান হয়, তাহলে
-
ans[i] :=X
এর শেষ উপাদান
-
-
অন্যথায় যখন j 0 এর মত হয়, তখন
-
উত্তর[i] :=X[0]
-
-
অন্যথায়,
-
যদি X[j] - qid
-
উত্তর[i] :=X[j]
-
-
অন্যথায়,
-
উত্তর[i] :=X[j-1]
-
-
-
-
-
উত্তর ফেরত দিন
উদাহরণ
আসুন আরও ভালভাবে বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি
import bisect def solve(rooms, queries): rooms.sort(key = lambda x: (x[1], x[0])) queries = [(qid,size,i) for i, (qid, size) in enumerate(queries)] queries.sort(key = lambda x: (x[1], x[0], x[2]), reverse = True) ans = [-1] * len(queries) X = [] for qid, size, i in queries: while rooms and rooms[-1][1] >= size: idr, _ = rooms.pop() bisect.insort(X, idr) if X: j = bisect.bisect(X, qid) if j == len(X): ans[i] = X[-1] elif j == 0: ans[i] = X[0] else: if X[j] - qid < qid - X[j-1]: ans[i] = X[j] else: ans[i] = X[j-1] return ans rooms = [[2,2],[1,2],[3,2]] queries = [[3,1],[3,3],[5,2]] print(solve(rooms, queries))
ইনপুট
[[2,2],[1,2],[3,2]], [[3,1],[3,3],[5,2]]
আউটপুট
[3, -1, 3]