Hướng dẫn cho HackDream Blue 02-A: Tích lớn nhất


Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.

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.

Authors: necrophos

Subtask 1:

Để chọn ra bộ ba số có tổng bằng ~n~ với tích lớn nhất, ta thử toàn bộ các bộ ba số có thể.

  • Có thể sử dụng 3 vòng duyệt ~for~ lồng nhau để thử bộ ba số, mất ~O(n^3)~.
  • Để cải tiến thành ~O(n^2)~, chỉ cần duyệt tất cả các giá trị có thể của 2 số đầu tiên, sau đó tính ra số thứ ba bằng hiệu của ~n~ với 2 số đã biết.

Subtask 2:

Tích lớn nhất của ba số có tổng cố định ~n~ sẽ là 3 số có chênh lệch tương quan nhỏ nhất.

Từ đây sẽ chia ra làm ba trường hợp:

  • Nếu ~n~ chia hết cho ~3~, cả ba số sẽ có giá trị bằng ~n/3~.
  • Nếu ~n~ chia ~3~ dư ~1~, hai số sẽ có giá trị bằng ~n/3~, số còn lại có giá trị bằng ~n/3+1~.
  • Nếu ~n~ chia ~3~ dư ~2~, hai số sẽ có giá trị bằng ~n/3+1~, số còn lại có giá trị bằng ~n/3~.

Độ phức tạp: ~O(1)~.

Lưu ý: Tất cả các phép chia là phép chia lấy phần nguyên (trong Python sử dụng phép toán ~//~).


Bình luận

Không có bình luận nào.