Phân Công Công Việc

Xem dạng PDF

Gửi bài giải

Điểm: 1,50 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Nguồn bài:
Ha Minh Ngoc
Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch

Bài toán phân công công việc là một bài toán rất phổ biến trong cuộc sống. Xét một dạng cơ bản như sau: có ~n~ người và ~m~ công việc, mỗi người có năng suất làm việc như nhau và công việc thứ ~i~ cần ~a_i~ thời gian để một người thực hiện, mỗi công việc chỉ giao cho ~1~ người. Một trong những thuật toán đơn giản để thực hiện việc phân công này là:

  • B1: Sắp xếp các công việc theo thời gian hoàn thành.

  • B2: phân công việc có thời gian thực hiện lớn nhất chưa giao cho người làm ít thời gian nhất (tổng thời gian các công việc được giao là nhỏ nhất).

  • B3: nếu mọi công việc được giao thì kết thúc, ngược lại quay lại bước 2.

Input

  • Dòng đầu tiên là 2 số nguyên n, m (n, m <= ~10^{5}~).

  • Dòng thứ 2 là m số nguyên dương không vượt quá ~10^{5}~ là thời gian thực hiện của m công việc tương ứng.

Output

  • 1 dòng gồm n số nguyên lần lượt là thời gian làm việc của n người.

Lưu ý: ở bước 2, nếu có nhiều hơn 1 người có thời gian làm việc ít nhất thì chọn người có thứ tự nhỏ nhất trong số đó.

Sample Input:

3 5
2 5 6 4 7

Sample Output:

7 8 9

Sample Input:

3 5
2 6 6 3 7

Sample Output:

7 9 8

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.