Hướng dẫn cho HackDream Green 04-B: Tích lớn nhất (ver 2)


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.

Subtask 1:

Để chọn ra bộ ba số khác nhau 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ố khác nhau 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~, ba số sẽ có giá trị lần lượt là ~n/3-1~, ~n/3~ và ~n/3+1~.
  • Nếu ~n~ chia ~3~ dư ~1~, ba số sẽ có giá trị lần lượt là ~n/3-1~, ~n/3~ và ~n/3+2~.
  • Nếu ~n~ chia ~3~ dư ~2~, ba số sẽ có giá trị lần lượt là ~n/3-1~, ~n/3+1~ và ~n/3+2~.

Độ 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.