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

C++ প্রোগ্রাম: নতুন শাখায় טרান্সফার হওয়া কর্মীদের স্কিল লেভেল অনুযায়ী বণ্টন

মান লিখুন: একটি কোম্পানিতে nজন কর্মী আছে। প্রতিটি কর্মীর দক্ষতা অনুযায়ী র‍্যাঙ্ক দেওয়া আছে। র‍্যাঙ্ক ১ থেকে k পর্যন্ত। র‍্যাঙ্ক i 가진 কর্মীর সংখ্যা skill অ্যারে দিয়ে দেওয়া আছে, skill[i] = র‍্যাঙ্ক i 가진 কর্মীর সংখ্যা। কোম্পানির একটি নতুন শাখা খুললো এবং বিভিন্ন দক্ষতার কর্মী সেখানে ট্রান্সফার করতে হবে। মোট m জন কর্মী ট্রান্সফার করতে হবে। এমনভাবে ট্রান্সফার করতে হবে যাতে নতুন শাখার কর্মী র‍্যাঙ্ক বণ্টন টেবিল branch নিচের ফর্মুলা ন্যূনতম হয়:

ফর্মুলা: max(branch[i]/m - skill[i]/n)

branch[i]-এর যোগফল m হবে। branch[i]-এর উপাদানগুলো বের করতে হবে।

উদাহরণ

যদি ইনপুট হয় k = 5, n = 10, m = 25, skill = {5, 3, 2, 7, 4}, তবে আউটপুট হবে 12 7 5 17 10।

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

sum := 0
for i := 0 থেকে k-1:
    skill[i] := skill[i] * m / n
a পেয়ার অ্যারে
for i := 0 থেকে k-1:
    c := skill[i]
    sum += c
    a[i].first := skill[i] - c
    a[i].second := i
a সর্ট করুন
a রিভার্স করুন
for i := 0 থেকে m-sum-1:
    skill[a[i].second]++
for i := 0 থেকে k-1:
    skill[i] প্রিন্ট করুন

C++ বাস্তবায়ন

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

const int INF = 1e9;

void solve(int k, int n, int m, vector<double> skill) {
    int sum = 0;
    for (int i = 0; i < k; i++)
        skill[i] = skill[i] * m / n;
    vector<pair<double, int>> a(k);
    for (int i = 0; i < k; i++) {
        int c = skill[i];
        sum += c;
        a[i].first = skill[i] - c;
        a[i].second = i;
    }
    sort(a.begin(), a.end());
    reverse(a.begin(), a.end());
    for (int i = 0; i < m - sum; i++) {
        skill[a[i].second] += 1;
    }
    for (int i = 0; i < k; i++) {
        if (i != k - 1)
            cout << int(skill[i]) << " ";
        else
            cout << int(skill[i]) << endl;
    }
}

int main() {
    int k = 5, n = 10, m = 25;
    vector<double> skill = {5, 3, 2, 7, 4};
    solve(k, n, m, skill);
    return 0;
}

ইনপুট

5, 10, 25, {5, 3, 2, 7, 4}

আউটপুট

12 7 5 17 10
  1. C++ প্রোগ্রাম: গ্রাফে সুপার ভেরটেক্স চিহ্নিতকরণ

  2. C++ প্রোগ্রাম: গ্রিডের সব কক্ষ কালো করার জন্য প্রয়োজনীয় ইটারেশন গণনা

  3. C++ প্রোগ্রাম: গ্রিডে আলোকিত কক্ষের সংখ্যা গণনা

  4. C++ প্রোগ্রাম: গ্রাফে ব্রিজ এজের সংখ্যা নির্ণয়