Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में दिए गए आगमन और प्रस्थान समय के साथ k बुकिंग संभव है या नहीं जांचें


इस समस्या में, हमें N मानों वाली दो सरणी दी गई हैं जो होटल में आगमन और प्रस्थान को दर्शाती हैं और एक पूर्णांक k। हमारा कार्य दिए गए आगमन और प्रस्थान समय के साथ k बुकिंग संभव है या नहीं जांचना है।

समस्या विवरण: यहां, हमें जांचना है कि k कमरों वाला होटल सभी आगमन और प्रस्थान को समायोजित करने में सक्षम है या नहीं।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट: Arrivals : {1 4 5 7}

Departures : {3 5 6 9} K = 1

आउटपुट: Yes

समाधान दृष्टिकोण:

समस्या को हल करने के लिए, हम होटल के लिए आगमन और प्रस्थान को एक लेबल के साथ सहायक सरणी में संग्रहीत करेंगे कि यह आगमन के लिए है या प्रस्थान। फिर इस सरणी को सॉर्ट करें और होटल के लिए सक्रिय बुकिंग की संख्या गिनें।

यदि आगमन, count++
यदि प्रस्थान, count--।

यदि किसी भी बिंदु पर किसी भी समय बुकिंग 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 वापस करें। अन्यथा true वापस करें।

चूंकि, 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++ में दिए गए अंतर वाली जोड़ी ढूंढें

    समस्या विवरण एक सरणी A दी गई है जिसमें n विभिन्न तत्व हैं। हमें सरणी से एक जोड़ी (x, y) ढूंढनी है जिससे x और y का अंतर दिए गए अंतर d के बराबर हो। उदाहरण के लिए, यदि सरणी A = [10, 15, 26, 30, 40, 70] है और दिया गया अंतर 30 है, तो जोड़ियां (10, 40) और (30, 70) होंगी। हल दृष्टिकोण इस समस्या को हल करन

  1. - C++ में दिए गए सूचकांकों के साथ N फाइबोनैचि संख्याओं का GCD ढूंढना

    यहां हमें दिए गए सूचकांकों के साथ n फाइबोनैचि पदों का GCD ढूंढना है। तो सबसे पहले हमें अधिकतम सूचकांक प्राप्त करना होगा, और फाइबोनैचि पद उत्पन्न करने होंगे। कुछ फाइबोनैचि पद ऐसे हैं: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... सूचकांक 0 से शुरू होता है। तो 0वें सूचकांक पर तत्व 0 है। यदि हमें सूचकांकों {2,

  1. - C++ में दिए गए GCD और LCM के साथ कोई भी पेयर खोजें

    इस सेक्शन में हम देखेंगे कि दिए गए GCD और LCM मानों का उपयोग करके नंबर पेयर्स की संख्या कैसे प्राप्त करें। मान लीजिए GCD और LCM मान 2 और 12 हैं। अब नंबरों के संभावित पेयर्स हैं (2, 12), (4, 6), (6, 4) और (12, 2)। इसलिए हमारा प्रोग्राम पेयर्स की संख्या ढूंढेगा। वह 4 है।आइए एल्गोरिदम देखें कि इस समस्य