Tích mảng nhỏ nhất

Đề bài

Mô tả

Cho mảng a1,a2,,an gồm n số nguyên và một số nguyên dương x. Một phép toán cho phép bạn chọn một chỉ số i (1in) và thay ai bằng ai+x hoặc aix. 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á k phép toán. Hãy in ra mảng kết quả b1,b2,,bn sao cho tích b1·b2··bn đạ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 n, k, x.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an.

Dữ liệu ra

In ra n số nguyên b1,b2,,bn — mảng sau khi áp dụng không quá k phép toán sao cho tích các phần tử là nhỏ nhất có thể. Với mọi i, hiệu biai phải là một bội nguyên (có thể âm hoặc bằng 0) của x, và tổng số phép toán i=1n|biai|x không vượt quá k.

Ràng buộc

  • 1n,k2·105
  • 1x109
  • |ai|109

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 a5=2 qua 0 bằng 3 phép trừ: 2101. Tích bằng 300.
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 4 phép). Tốt nhất là đưa a3=3 về 0, làm tích bằng 0.
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 a2=4 xuống 1 để tích dương nhỏ nhất có thể.
3 2 7
5 4 2
5 11 -5 Trước hết đẩy a3=2 qua 0 thành 5 (mất 1 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: a2=4 thành 11. Tích bằng 275.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0