কম্পিউটার টিউটোরিয়াল

C++-এ মিটিং শিডিউলার


দুজন ব্যক্তির উপলব্ধ টাইম স্লট slots1 ও slots2 এবং মিটিং ডিউরেশন d দেওয়া। উভয়ের জন্য কাজ করে এমন সবচেয়ে 이른 টাইম স্লট খুঁজে বের করতে হবে।

উদাহরণ: slots1=[[10,50],[60,120],[140,210]], slots2=[[0,15],[60,70]], d=8 → [60,68]।

সমাধানের ধাপসমূহ

  • দুই লিস্টকে শুরুর সময় অনুযায়ী সাজান।
  • দুটি পয়েন্টার i, j দিয়ে ট্রাভার্স করুন।
  • ওভারল্যাপিং ইন্টারভাল = [max(s1[i].start, s2[j].start), min(s1[i].end, s2[j].end)]।
  • যদি দৈর্ঘ্য >= d হয়, [start, start+d] রিটার্ন করুন।
  • অন্যথায় যেটির এন্ড ছোট সেটি আগ্রে বাড়ান।

C++ উদাহরণ

#include <bits/stdc++.h>
using namespace std;

void print_vector(vector<int> v) {
    cout << "[";
    for (int x : v) cout << x << ", ";
    cout << "]" << endl;
}

bool cmp(vector<int> a, vector<int> b) { return a[0] < b[0]; }

class Solution {
public:
    vector<int> minAvailableDuration(vector<vector<int>>& slots1, vector<vector<int>>& slots2, int duration) {
        sort(slots1.begin(), slots1.end(), cmp);
        sort(slots2.begin(), slots2.end(), cmp);
        int i = 0, j = 0;
        while (i < slots1.size() && j < slots2.size()) {
            int start = max(slots1[i][0], slots2[j][0]);
            int end = min(slots1[i][1], slots2[j][1]);
            if (end - start >= duration) return {start, start + duration};
            if (slots1[i][1] < slots2[j][1]) i++; else j++;
        }
        return {};
    }
};

int main() {
    vector<vector<int>> v = {{10,50},{60,120},{140,210}};
    vector<vector<int>> v1 = {{0,15},{60,70}};
    Solution ob;
    print_vector(ob.minAvailableDuration(v, v1, 8));
}

ইনপুট

[[10,50],[60,120],[140,210]] [[0,15],[60,70]] 8

আউটপুট

[60, 68, ]
  1. C++-এ Line Reflection: ২D প্লেনে বিন্দুগুলোর Y-অক্ষ সমান্তরাল প্রতিফলন লাইন আছে কিনা যাচাই করা

  2. C++-এ ডায়াগোনাল ট্রায়ভার্স II

  3. প্রসেস কিল করা (Kill Process) C++-এ

  4. স্কোয়ারেল সিমুলেশন (Squirrel Simulation) C++-এ