Hướng dẫn cho Google Code Jam 2022 - 3D Printing
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Phân tích
Điều đầu tiên cần nhận ra là nếu một máy in còn \(u\) đơn vị mực của một màu, ta không thể dùng quá \(u\) đơn vị màu đó; hơn nữa, đây là hạn chế duy nhất mà giá trị ấy đặt ra. Vì vậy, có thể tóm tắt dữ liệu vào bằng các lượng tối đa dùng được:
Đó lần lượt là giới hạn cho mực cyan, magenta, vàng và đen.
Nếu \(C+M+Y+K<10^6\), trường hợp này không thể thực hiện và ta kết thúc. Nếu không, có thể phải giảm lượng của một số màu. Ta chỉ cần xét từng màu và giảm lượng mực cho đến khi tổng đúng bằng \(10^6\). Giảm từng đơn vị vẫn đúng nhưng quá chậm; có thể xử lý cả phần cần giảm trong một bước.
Với màu đang xét, gọi \(S\) là tổng lượng hiện tại của ba màu còn lại. Nếu \(S\ge10^6\), đặt lượng màu hiện tại bằng \(0\) rồi tiếp tục với màu kế tiếp. Nếu \(S<10^6\), giảm lượng màu hiện tại xuống \(10^6-S\) và kết thúc ngay. Cách này đúng vì ta luôn duy trì bất biến rằng tổng lượng mực đang xét không nhỏ hơn \(10^6\) đơn vị.
Phần trình bày dựa trên phân tích chính thức của Google Code Jam 2022, Qualification Round.
Bình luận