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

C++-এ আগমন ও প্রস্থান সময় দিয়ে K বুকিং সম্ভব কিনা তা খুঁজুন


এই সমস্যায়, আমাদের N মানের দুটি অ্যারে দেওয়া আছে যা হোটেলে আগমন ও প্রস্থান সময় নির্দেশ করে এবং একটি পূর্ণসংখ্যা k। আমাদের কাজ হল দেওয়া আগমন ও প্রস্থান সময় দিয়ে K বুকিং সম্ভব কিনা তা খুঁজে বের করা।

সমস্যা বিবরণ: এখানে আমাদের যাচাই করতে হবে K রুমের হোটেলটি সকল আগমন ও প্রস্থান মোকাবিলা করতে পারবে কিনা।

উদাহরণ দিয়ে বুঝি,

ইনপুট: আগমন: {1, 4, 5, 7}

প্রস্থান: {3, 5, 6, 9} K = 1

আউটপুট: হ্যাঁ

সমাধানের পদ্ধতি:

সমস্যাটি সমাধান করতে আমরা আগমন ও প্রস্থান সময়কে একটি অ็ก্সিলিয়ারি অ্যারেতে সংরক্ষণ করব একটি লেবেলসহ যে এটি আগমন নাকি প্রস্থান। তারপর এই অ্যারেটি সর্ট করব এবং হোটেলের সক্রিয় বুকিং গণনা করব।

  • আগমন হলে, কাউন্ট++
  • প্রস্থান হলে, কাউন্ট--।

যদি যেকোনো সময়ে বুকিং K-এর চেয়ে বেশি হয়, false রিটার্ন করুন, অন্যথায় true।

সমাধান দর্শানোর প্রোগ্রাম,

উদাহরণ

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

bool isBookingValid(int arrival[], int departure[], int n, int k){ 
    vector<pair<int, int> > auxArray; 
    int activeBookings = 0, maxBookings = 0; 
    for (int i = 0; i < n; i++) { 
        auxArray.push_back(make_pair(arrival[i], 1)); 
        auxArray.push_back(make_pair(departure[i], 0)); 
    } 
    sort(auxArray.begin(), auxArray.end()); 
    for (int i = 0; i < auxArray.size(); i++) { 
        if (auxArray[i].second == 1) { 
            activeBookings++; 
            maxBookings = max(maxBookings, activeBookings); 
        } 
        else 
            activeBookings--; 
    } 
    return (k >= maxBookings); 
} 

int main(){ 
    int arrival[] = { 1, 4, 5, 7 }; 
    int departure[] = { 3, 5, 6, 9 }; 
    int k = 1; 
    int n = sizeof(arrival) / sizeof(arrival[0]); 
    if(isBookingValid(arrival,departure, n, k)) 
        cout << "All booking are possible"; 
    else 
        cout << "Booking not possible"; 
    return 0; 
}

আউটপুট

All booking are possible

অন্য একটি পদ্ধতি:

আমরা অ্যাক্সিলিয়ারি অ্যারে ছাড়াও কাজ করতে পারি। দুটি অ্যারে ব্যবহার করে সরাসরি ওভারল্যাপিং চেক করুন এবং যদি সেটি K-এর চেয়ে বেশি হয়, false রিটার্ন করুন।

যেহেতু K রুম আছে, সহজ পদ্ধতি হল K-তম আগমন চেক করা এবং দেখা যে সেটি রেঞ্জে পড়ে কিনা।

সমাধান দর্শানোর প্রোগ্রাম,

উদাহরণ

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

bool isBookingPossible(int arrival[], int departure[], int K, int N){ 
    sort(arrival, arrival + N); 
    sort(departure, departure + N); 
    for(int i = 0; i < N; i++) 
    { 
        if (i + K < N && arrival[i + K] < departure[i]) 
        { 
            return false; 
        } 
    } 
    return true; 
} 

int main(){ 
    int arrival[] = { 1, 2, 3 }; 
    int departure[] = { 2, 3, 4 }; 
    int N = sizeof(arrival) / sizeof(arrival[0]); 
    int K = 1; 
    if(isBookingPossible(arrival, departure, K, N)) 
        cout << "All booking are possible"; 
    else 
        cout << "Booking not possible"; 
    return 0; 
}

আউটপুট

All booking are possible

  1. C++-এ দেয়া অ্যারে এবং k-র জন্য |ai + aj – k|-র মিনিমাম পসিবল ভ্যালু

  2. দেওয়া পার্থক্যের সাথে একটি জোড়া খুঁজে বের করা C++-এ

  3. C++-এ দেওয়া ইন্ডেক্সের Nটি ফিবোনাচ্চি সংখ্যার GCD বের করা

  4. C++-এ দিয়ে गये GCD এবং LCM থেকে যেকোনো পেয়ার খুঁজে বের করা