Bạn được cho một dãy số gồm \(n\) số nguyên \(a_{1},\ a_{2},\ \ldots,\ a_{n}\). Một thao tác được ghi nhận khi bạn thực hiện tăng hoặc giảm giá trị của bất kỳ số \(a_{i}\) nào trong dãy lên 1 đơn vị (tức là \(a_{i}\ = \ a_{i} + 1\) hoặc \(a_{i}\ = \ a_{i}\ - \ 1\)) và bạn có thể lặp đi lặp lại thao tác này vô số lần. Thầy giáo muốn bạn hãy thực hiện các thao tác tăng giảm giá trị đó để thu được một dãy số mới sao cho tích của các phần tử trong dãy số mới này bằng 1.
Ví dụ: với \(n = 3\) và dãy số gồm 3 phần tử là \(\lbrack 1,\ - 3,\ 0\rbrack\) chúng ta có thể thực hiện tăng 2 lần số -3 (tức \(a_{2}\)) để trở thành -1 và giảm 1 lần số 0 (tức \(a_{3}\)) để trở thành -1. Lúc này ta sẽ thu được dãy số mới là [1, -1, -1] và tích các phần tử trong dãy số này bằng 1. Như vậy, bạn sẽ mất tổng cộng 03 thao tác để thực hiện ba lần tăng/giảm giá trị. Có nhiều cách khác nhau để thực hiện việc tăng giảm để dãy mới thu được có tích bằng 1, tuy nhiên sẽ không tồn tại cách nào ít hơn ba thao tác.
Yêu cầu: Cho dãy số \(a\) gồm \(n\) số nguyên, hãy tìm ra chi phí ít nhất để biến đổi dãy số \(a\) đã cho trở thành dãy mới với tích các phần tử trong dãy bằng 1.
Dữ liệu vào: Dòng đầu là số nguyên dương \(n\). Dòng thứ 2 gồm \(n\) số nguyên \(a_{i}\) (\({- 10}^{9}\ \leq \ a_{i}\ \leq \ 10^{9}\)) với mỗi số được cách nhau bởi một dấu cách.
Kết quả: ghi chi phí ít nhất để biến đổi dãy số đã cho để trở thành dãy có tích các phần tử bằng 1.
Ví dụ:
| Input | Output |
|---|---|
| 2 -1 1 | 2 |
| 5 -5 -3 5 3 0 | 13 |
Giải thích:
Trong trường hợp đầu tiên, bạn có thể thay đổi -1 trở thành 1 hoặc là 1 trở thành -1. Với trường hợp này chi phí sẽ là 2 thao tác.
Trong trường hợp thứ hai, bạn có thể thay -5 thành -1 (mất 4 thao tác), -3 thành -1 (mất 2 thao tác), 5 thành 1 (mất 4 thao tác), 3 thành 1 (mất 2 thao tác) và 0 thành 1 (mất 1 thao tác). Tổng sẽ là 13 thao tác.
Ràng buộc:
40% số điểm của bài có \(0 < n \leq 100\)
60% số điểm còn lại của bài có \(0 < n \leq 10^{5}\)
| Code tích cực |
|---|
| Trong 24h |
|
| Trong 7 ngày |
|
| Trong 30 ngày |
|
| Thống kê |
|---|
|
AC/Sub: 120817/226949 Pascal: 18142 C++: 157988 Python: 50747 Lượt xem/tải tests: 41020 |