Đáp Án Sai
Đề bài
Mô tả
Xét bài toán sau: cho một mảng gồm số nguyên (đánh chỉ số từ đến ), hãy tìm
Trong bài toán đó có ràng buộc và .
Để giải bài toán này, An nghĩ ra một thuật toán tham lam rất nhanh và cài đặt như mã giả dưới đây:
function find_answer(n, a)
# Giả sử n là số nguyên trong đoạn [1, 2000]
# Giả sử a là danh sách gồm n số nguyên: a[0], a[1], ..., a[n-1]
res = 0
cur = 0
k = -1
for i = 0 to i = n-1
cur = cur + a[i]
if cur < 0
cur = 0
k = i
res = max(res, (i-k)*cur)
return res
Thuật toán của An không phải lúc nào cũng đúng. Ví dụ với và thì find_answer trả về , nhưng đáp án đúng là .
Cho một số nguyên , hãy tìm bất kỳ dãy gồm số nguyên sao cho đáp án đúng và đáp án mà thuật toán của An trả về chênh lệch nhau đúng bằng (tức là đáp án đúng trừ đi đáp án của An bằng ). Dãy bạn đưa ra vẫn phải thỏa mãn các ràng buộc ban đầu: và . Nếu không tồn tại dãy như vậy, hãy cho biết điều đó.
Dữ liệu vào
Một dòng duy nhất chứa một số nguyên .
Dữ liệu ra
Nếu không tồn tại dãy cần tìm, in ra .
Ngược lại, dòng đầu in ra một số nguyên () là số phần tử của dãy. Dòng thứ hai in ra số nguyên cách nhau bởi dấu cách: ().
Nếu có nhiều đáp án, in ra bất kỳ đáp án hợp lệ nào.
Ràng buộc
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 8 | 2 -1 10 |
Với dãy : đáp án đúng là , còn thuật toán của An trả về . Chênh lệch . |
| 612 | 2 -1 614 |
Với dãy : đáp án đúng là , thuật toán của An trả về . Chênh lệch . |
Bình luận