Posted on

Description

Submission

The optimum policy here is to accept the earliest finished workshops.

 #include<bits/stdc++.h>

using namespace std;

//Define the structs Workshops and Available_Workshops.
//Implement the functions initialize and CalculateMaxWorkshops
struct Workshop
{
    int start_time;
    int end_time;
    int duration;
};

bool operator< (const Workshop& ws1, const Workshop& ws2)
{
    return ws1.end_time < ws2.end_time;
}

struct Available_Workshops
{
    int n;
    vector<Workshop> workshops;
};

Available_Workshops* initialize (int start_time[], int duration[], int n)
{
    Available_Workshops* aw = new Available_Workshops;
    aw->n = n;
    for(int i = 0; i < n; i++) {
        Workshop ws;
        ws.start_time = start_time[i];
        ws.duration = duration[i];
        ws.end_time = ws.start_time + ws.duration;
        aw->workshops.push_back(ws);
    }
    return aw;
}

int CalculateMaxWorkshops(Available_Workshops* ptr)
{
    sort(ptr->workshops.begin(), ptr->workshops.end());
    
    int last_end = ptr->workshops.at(0).end_time;
    int count = 1;
    for(int i = 1; i < ptr->n; i++) {
        if(ptr->workshops.at(i).start_time >= last_end) {
            last_end = ptr->workshops.at(i).end_time;
            count++;
        }
    }
    return count;
}

int main(int argc, char *argv[]) {
    int n; // number of workshops
    cin >> n;
    // create arrays of unknown size n
    int* start_time = new int[n];
    int* duration = new int[n];

    for(int i=0; i < n; i++){
        cin >> start_time[i];
    }
    for(int i = 0; i < n; i++){
        cin >> duration[i];
    }

    Available_Workshops * ptr;
    ptr = initialize(start_time,duration, n);
    cout << CalculateMaxWorkshops(ptr) << endl;
    return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *