[Buổi 23][Struct][HW] Bài 5: Bảng xếp hạng phòng ban theo hiệu suất
Bảng xếp hạng phòng ban theo hiệu suất
Bối cảnh
Một tổ chức lưu record nhân viên gồm id, department, completedTasks, lateTasks. Mỗi phòng ban được chấm score = tổng completed*10 - tổng late*3. Cần xếp hạng các phòng theo score giảm dần; nếu hòa, phòng có ít lateTasks hơn đứng trước; nếu vẫn hòa, tên phòng tăng dần. Báo cáo in thêm số nhân viên của phòng.
Điểm khó là dữ liệu đầu vào là record cá nhân nhưng ranking ở cấp department. Học viên phải aggregate trước, sau đó chuyển mỗi group thành một record summary để sort. Đây là cách tổ chức rất gần các bài thi: source records → derived records → comparator.
Ngoài kết quả số học, bài còn kiểm tra việc mỗi thực thể được giữ dưới dạng một record nhất quán: các field phải luôn đi cùng nhau qua bước đọc, lọc, thống kê hoặc sắp xếp. Khi thiết kế lời giải, nên xác định rõ record gốc và record/aggregate suy ra để tránh dùng nhiều mảng song song làm lệch dữ liệu.
Yêu cầu
- Dùng struct Employee và struct/record summary phù hợp.
- Aggregate theo department.
- Tính score.
- Sort score giảm → late tăng → department tăng.
- In
rank department employees score late.
Input
Dòng 1 n; n dòng id department completed late.
Output
Mỗi department một dòng ranking 1-based.
Ràng buộc
1≤n≤5000, các số không âm, tổng vừa long long.
Ví dụ 1
Input
6
E1 IT 10 1
E2 IT 5 0
E3 HR 8 0
E4 HR 7 1
E5 SALE 20 5
E6 SALE 1 0
Output
1 SALE 2 195 5
2 HR 2 147 1
3 IT 2 147 1
Giải thích
IT: done15, late1 nên score147, employees2. HR cũng done15 late1 nên score147, employees2; tie score/late, tên HR < IT nên HR đứng trước. SALE done21 late5 score195 nên rank1. Vì vậy order SALE, HR, IT.
Ví dụ này đồng thời kiểm tra rằng các field của cùng một record không bị lệch khi duyệt hoặc sắp xếp. Quy tắc tie-break/giữ thứ tự chỉ được áp dụng sau khi dữ liệu cần so sánh đã được xác định đúng, nên kết quả trên là hệ quả trực tiếp của state record sau xử lý.
Ví dụ 2
Input
4
A X 1 0
B Y 1 0
C X 0 0
D Y 0 0
Output
1 X 2 10 0
2 Y 2 10 0
Giải thích
X và Y đều có done1, late0, score10, employees2. Hai tiêu chí đầu hòa nên tên X<Y, X rank1 và Y rank2.
Ví dụ này đồng thời kiểm tra rằng các field của cùng một record không bị lệch khi duyệt hoặc sắp xếp. Quy tắc tie-break/giữ thứ tự chỉ được áp dụng sau khi dữ liệu cần so sánh đã được xác định đúng, nên kết quả trên là hệ quả trực tiếp của state record sau xử lý.
Thông tin học tập
- Module: M07
- Buổi: B23
- Loại bài: HOMEWORK
- Độ khó: Medium
- Concepts: struct, vector, custom comparator, aggregation, ranking, weighted score
- Giới hạn kiến thức: B01-B23
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments