สมมติว่ามีพนักงาน n คนในบริษัท พนักงานแต่ละคนจะได้รับอันดับตามทักษะของพวกเขา อันดับมีตั้งแต่ 1 ถึง k จำนวนพนักงานที่มีอันดับ i ถูกกำหนดในทักษะอาร์เรย์ โดยที่ skill[i] แทนจำนวนพนักงานที่มีอันดับ i ตอนนี้สาขาใหม่ของบริษัทได้เปิดขึ้นและพนักงานที่มีทักษะต่างกันไปสาขานั้น จำนวนพนักงานที่จะส่งไปยังสาขานั้นคือ m. เราต้องหาทางย้ายพนักงานจำนวน m ที่มีทักษะต่างกันไปสาขาใหม่นั้น เราต้องย่อสูตรต่อไปนี้ให้เล็กสุดเพื่อรับสาขาตารางการจัดสรรอันดับพนักงานของสาขา
สูตรคือ:max(branch[i]/m - skill[i]/n)
ผลรวมของค่าของกิ่ง[i] ให้ผลลัพธ์เป็น m เราต้องหาองค์ประกอบในสาขา[i].
ดังนั้น หากอินพุตเป็น k =5, n =10, m =25, skill ={5, 3, 2, 7, 4} ผลลัพธ์จะเป็น 12 7 5 17 10
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
sum := 0 for initialize i := 0, when i < k, update (increase i by 1), do: skill[i] := skill[i] * m / n Define an array a containing integer pairs for initialize i := 0, when i < k, update (increase i by 1), do: c := skill[i] sum := sum + c first value of a[i] := skill[i] - c second value of a[i] := i sort the array a reverse the array a for initialize i := 0, when i < m - sum, update (increase i by 1), do: skill[second value of a[i]] := skill[second value of a[i]] + 1 for initialize i := 0, when i < k, update (increase i by 1), do: if i is not equal to k - 1, then: print(skill[i]) Otherwise, print(skill[i])
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#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