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

C++-এ টিমের সর্বোচ্চ পারফরম্যান্স (Maximum Performance of a Team)


n ইঞ্জিনিয়ার, speed[] এবং efficiency[] অ্যারে। সর্বোচ্চ k জন ইঞ্জিনিয়ার নিয়ে টিম বানাতে হবে। পারফরম্যান্স = (স্পিড যোগফল) × (মিনিমাম ইফিশিয়েন্সি)। মডুলো ১০^৯+৭।

উদাহরণ: n=6, speed=[1,5,8,2,10,3], efficiency=[9,7,2,5,4,3], k=2 -> ৬০ (ইঞ্জিনিয়ার ১০+৫ স্পিড, মিন ইফিশিয়েন্সি ৪) = ১৫×৪=৬০।

সমাধানের ধাপসমূহ

  • ইঞ্জিনিয়ারদের (efficiency, speed) পেয়ারে রেখে efficiency অনুযায়ী ডিক্রিজিং সর্ট করুন।
  • Min-heap (priority_queue) দিয়ে টপ k স্পিড মেইন্টেইন করুন।
  • প্রতিটি ইঞ্জিনিয়ারকে মিনিমাম ইফিশিয়েন্সি ধরে রান করুন: sum += speed, heap.push(speed)। যদি heap.size() > k, sum -= heap.top(), heap.pop()।
  • ret = max(ret, sum * efficiency)।
  • ret % (1e9+7) রিটার্ন করুন।

C++ কোড উদাহরণ

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

class Solution {
public:
    int maxPerformance(int n, vector<int>& s, vector<int>& e, int k) {
        long long int ret = 0;
        vector<vector<int>> v;
        for (int i = 0; i < n; i++) v.push_back({e[i], s[i]});
        sort(v.rbegin(), v.rend());
        priority_queue<int, vector<int>, greater<int>> pq;
        long long int sum = 0;
        for (int i = 0; i < n; i++) {
            if (pq.size() == k) { sum -= pq.top(); pq.pop(); }
            sum += v[i][1];
            pq.push(v[i][1]);
            ret = max(ret, sum * v[i][0]);
        }
        return ret % (long long int)(1e9 + 7);
    }
};

int main() {
    Solution ob;
    vector<int> v = {1,5,8,2,10,3};
    vector<int> v1 = {9,7,2,5,4,3};
    cout << ob.maxPerformance(6, v, v1, 2);
    return 0;
}

ইনপুট

6, {1,5,8,2,10,3}, {9,7,2,5,4,3}, 2

আউটপুট

60
  1. C++-এ জব শিডিউলিং থেকে সর্বোচ্চ প্রফিট (Maximum Profit in Job Scheduling)

  2. C++-এ অ্যারেতে সর্বোচ্চ ইকুইলিব্রিয়াম যোগফল

  3. C++-এ মিন হিপে সর্বোচ্চ উপাদান

  4. C++-এ পেয়ার গুলোর ম্যাক্সিমাম দৈর্ঘ্যের চেইন বের করা