কম্পিউটার

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


ধরুন আমাদের কাছে উপলব্ধতা সময়ের স্লটগুলির তালিকা রয়েছে স্লট 1 এবং স্লট 2 দুটি ব্যক্তির এবং একটি মিটিংয়ের সময়কাল d, আমাদেরকে প্রথমতম সময়ের স্লটটি খুঁজে বের করতে হবে যা তাদের উভয়ের জন্য কাজ করে এবং সময়কাল d। যদি কোন সাধারণ সময় স্লট না থাকে যা প্রয়োজনীয়তা পূরণ করে, তাহলে একটি খালি অ্যারে দেখান। এখানে একটি টাইম স্লটের বিন্যাস হল দুটি উপাদানের একটি বিন্যাস [শুরু, শেষ] যা শুরু থেকে শেষ পর্যন্ত একটি সমন্বিত সময়ের পরিসরকে উপস্থাপন করে। আমরা অনুমান করতে পারি যে একই ব্যক্তির দুটি প্রাপ্যতা স্লট একে অপরের সাথে ছেদ করে না। অর্থাৎ, একই ব্যক্তির যেকোনো দুটি সময়ের স্লট [s1, e1] এবং [s2, e2] এর জন্য, হয় s1> e2 বা s2> e। সুতরাং ইনপুট যদি হয় s1 =[[10,50], [60,120], [140,210]] এবং s2 =[[0,15], [60,70]] এবং সময়কাল =8, তাহলে আউটপুট হবে [ 60,68]।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • i :=0 এবং j :=0, একটি অ্যারে উত্তর তৈরি করুন, s1 এবং s2 সাজান।
  • যখন i
  • শেষ :=s1[i, 1] এবং s2[j, 1] এর মিনিট
  • শুরু :=s1[i, 0] এবং s2[j, 0] এর মিনিট
  • যদি শেষ - শুরু>=সময়কাল, তারপর
    • আনস অ্যারেতে শুরু এবং (শুরু + সময়কাল) সন্নিবেশ করান এবং উত্তর ফেরত দিন।
  • অন্যথায় যখন s1[i, 1]
  • অন্যথায় 1 দ্বারা j বাড়ান
  • উত্তর ফেরত দিন
  • আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

    উদাহরণ

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<auto> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    using namespace std;
    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) {
          int i =0;
          int j = 0;
          vector <int> ans;
          sort(slots1.begin(),slots1.end(),cmp);
          sort(slots2.begin(),slots2.end(),cmp);
          while(i<slots1.size() && j<slots2.size()){
             int end = min(slots1[i][1],slots2[j][1]);
             int start = max(slots1[i][0],slots2[j][0]);
             if(end-start>=duration){
                ans.push_back(start);
                ans.push_back(start+duration);
                return ans;
             } else if(slots1[i][1]<slots2[j][1]) {
                i++;
             } else {
             j++;}
          }
          return ans;
       }
    };
    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++ এ রেখার প্রতিফলন

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

    3. C++ এ কিল প্রসেস

    4. C++ এ কাঠবিড়ালি সিমুলেশন