In this

**HackerRank Attending Workshops problem in c++**we need to implement two structures and two functions so that a student can sign up for maximum workshops where no two workshops overlap.## HackerRank Attending Workshops in C++ problem solution

struct Workshop { int start_time; int end_time; int duration; bool operator<(const Workshop& w) { return end_time < w.end_time; } }; struct Available_Workshops { Available_Workshops(int num_workshops) : m_num_workshops(num_workshops) { m_workshops = new Workshop[num_workshops]; } ~Available_Workshops() { delete[] m_workshops; } int m_num_workshops; Workshop *m_workshops; }; Available_Workshops * initialize(int start_time[], int duration[], int N) { Available_Workshops *aw = new Available_Workshops(N); for (int i = 0; i < N; i++) { Workshop w; w.start_time = start_time[i]; w.duration = duration[i]; w.end_time = w.start_time + w.duration; aw->m_workshops[i] = w; } return aw; } int CalculateMaxWorkshops(Available_Workshops *aw) { int min_start = 10000000; std::vector<Workshop> workshops; for (int i = 0; i < aw->m_num_workshops; i++) { workshops.push_back(aw->m_workshops[i]); min_start = std::min(min_start, workshops[i].start_time); } // Find the minimum start time std::sort(workshops.begin(), workshops.end()); int num = 0; int curs = min_start; for (int i = 0; i < workshops.size(); i++) { if (workshops[i].start_time >= curs) { num++; curs = workshops[i].end_time; } } return num; }

## 0 Comments