Untitled

 avatar
unknown
plain_text
5 months ago
2.0 kB
2
Indexable
#include <iostream>
#include <queue>
#include <vector>

using namespace std;

// Define the Worker class
class Worker {
public:
    long long time;
    int cnt;
    long long workerTime;

    Worker(long long time, int cnt, long long workerTime) {
        this->time = time;
        this->cnt = cnt;
        this->workerTime = workerTime;
    }

    // Define the comparison operator for the priority queue (min-heap)
    bool operator<(const Worker& other) const {
        return this->time > other.time; // We reverse it for a min-heap in C++
    }
};

// Define the Solution class
class Solution {
public:
    long long minNumberOfSeconds(int mountainHeight, vector<int>& workerTimes) {
        // Initialize the priority queue (min-heap)
        priority_queue<Worker> pq;

        // Add initial workers to the heap
        for (int workerTime : workerTimes) {
            pq.push(Worker(workerTime, 1, workerTime));
        }

        // Process until the mountainHeight is reduced to 0
        while (mountainHeight > 0) {
            // Get the worker with the minimum time
            Worker worker = pq.top();
            pq.pop();
            long long time = worker.time;
            int cnt = worker.cnt;
            long long workerTime = worker.workerTime;

            // Decrease the mountain height
            mountainHeight--;
            if (mountainHeight == 0) {
                return time;
            }

            // Update the worker's time and push it back into the priority queue
            cnt++;
            pq.push(Worker(time + cnt * workerTime, cnt, workerTime));
        }

        return 0;
    }
};

int main() {
    Solution solution;
    vector<int> workerTimes = {5, 10, 3};  // Example worker times
    int mountainHeight = 10;

    long long result = solution.minNumberOfSeconds(mountainHeight, workerTimes);
    cout << "Minimum number of seconds: " << result << endl;

    return 0;
}
Editor is loading...
Leave a Comment