Problem
https://vn.spoj.com/problems/ACMNB
https://oj.vnoi.info/problem/ACMNB
SuperCoders là đội tuyển huyền thoại của trường XYZ đã nhiều lần vô địch cuộc thi lập trình viên vũ trụ ACM Universe Final. Theo thể thức cuộc thi, mỗi đội tham dự chỉ có đúng 3 thành viên và được giao duy nhất một máy tính, chính vì vậy việc điều phối công việc vô cùng quan trọng. Trong đội SuperCoders, PHUONGHD - đội trưởng - là người nắm giữ vai trò đó.
Đề thi ACM năm nay gồm có 2𝑛
bài đánh số từ 1
tới 2𝑛
. Bằng kỹ năng thiết kế thuật toán siêu việt, chỉ vài giây sau khi đọc đề, PHUONGHD đã có lời giải cho cả 2𝑛
bài. Vấn đề còn lại là phân công hai người còn lại lập trình bởi PHUONGHD không quen với thứ ngôn ngữ lập trình mới được đưa vào sử dụng tại cuộc thi.
Do rất hiểu hai lập trình viên Tí và Tèo trong đội, PHUONGHD biết rằng bài thứ 𝑖
nếu giao cho Tí làm sẽ mất 𝑎𝑖
giây, cũng bài đó nếu giao cho Tèo sẽ mất 𝑏𝑖
giây để hoàn thành (∀𝑖: 1 ≤ 𝑖 ≤ 2𝑛)
. Nhiệm vụ của bạn là hãy giúp PHUONGHD phân công cho hai lập trình viên, mỗi người làm đúng 𝑛
bài sao cho tổng thời gian lập trình cả 2𝑛 bài là ít nhất.
Dữ liệu
- Dòng 1 chứa số nguyên dương
𝑛 ≤ 4.105
2𝑛
dòng tiếp theo, dòng thứ 𝑖
chứa hai số nguyên dương 𝑎𝑖
𝑏𝑖 ≤ 100
cách nhau bởi dấu cách.
Kết quả
Một số nguyên duy nhất là tổng thời gian lập trình cả 2𝑛
bài theo phương án phân công tìm được.
Example
Input
2
2 1
3 2
5 3
1 2
Output
8
Tutorial
Trick cho bài này như sau: Trong 2n
bài, giao cho Tí n
bài mà Tí làm tốt hơn Tèo, còn n
bài còn lại cho Tèo làm. Cụ thể hiện thực bằng cách sort các giá trị a[i] - b[i]
tăng dần, sau đó n
giá trị đầu tiên cho Tí, n
còn lại cho Tèo.
Chứng minh giải thuật tham lam trên là đúng đắn. Giả sử tồn tại một cặp bài (i,j)
mà thay vì giao i
cho Tí, j
cho Tèo (gọi là cách 1), thì hoán ngược lại, tức i
cho Tèo và j
cho Tí (gọi là cách 2) thì lời giải tối ưu hơn. Ta sẽ chỉ ra cách này không tối ưu.
Cụ thể theo thuật giải tham lam trên, ta có a[i]-b[i] < a[j]-b[j]
. Gọi S
là tổng giá trị của 2n-2
bài còn lại đã tối ưu. Khi đó cách 1 có S1 = S + a[i] + b[j]
và cách 2 có S2 = S + a[j] + b[i]
. Dễ thấy S1 < S2
, do đó cách 2 không tối ưu, nên giaỉ thuật tham lam đúng đắn.
Submission
Nếu bạn thấy bài viết này hay, hãy share bài viết này cho mọi người nhé 😉.
Share this post →