Tích mảng nhỏ nhất
Nộp bài giải
Điểm:
7,00 (OI)
Giới hạn thời gian:
2.0s
Python 3
5.0s
Giới hạn bộ nhớ:
256M
Đầu vào:
stdin
Đầu ra:
stdout
Dạng bài
Ngôn ngữ cho phép
C++, Go, Java, Kotlin, Pascal, Python, Scratch
Cho mảng gồm số nguyên và một số nguyên dương . Một phép toán cho phép bạn chọn một chỉ số () và thay bằng hoặc . Một phép toán có thể được áp dụng nhiều lần lên cùng một vị trí.
Bạn được phép thực hiện không quá phép toán. Hãy in ra mảng kết quả sao cho tích đạt giá trị nhỏ nhất có thể. Nếu có nhiều đáp án, in ra bất kỳ đáp án nào.
Dữ liệu vào
- Dòng đầu chứa ba số nguyên , , .
- Dòng thứ hai chứa số nguyên .
Dữ liệu ra
In ra số nguyên — mảng sau khi áp dụng không quá phép toán sao cho tích các phần tử là nhỏ nhất có thể. Với mọi , hiệu phải là một bội nguyên (có thể âm hoặc bằng ) của , và tổng số phép toán không vượt quá .
Ràng buộc
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 5 3 1 5 4 3 5 2 |
5 4 3 5 -1 | Đẩy phần tử nhỏ nhất qua bằng phép trừ: . Tích bằng . |
| 5 3 1 5 4 3 5 5 |
5 4 0 5 5 | Không đủ phép toán để đưa bất kỳ phần tử nào sang âm (cần ít nhất phép). Tốt nhất là đưa về , làm tích bằng . |
| 5 3 1 5 4 4 5 5 |
5 1 4 5 5 | Cũng không thể tạo phần tử âm. Giảm xuống để tích dương nhỏ nhất có thể. |
| 3 2 7 5 4 2 |
5 11 -5 | Trước hết đẩy qua thành (mất phép). Dùng phép còn lại để tăng độ lớn phần tử nhỏ nhất theo dấu hiện tại: thành . Tích bằng . |
Bình luận