Gửi bài giải
Điểm:
1,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift
Cho một dãy số nguyên ~A_1, A_2, . . . , A_N~. Bạn có thể thực hiện phép biến đổi sau với số lần tùy ý (có thể không thực hiện lần nào):
- Chọn một vị trí ~i~ từ ~1~ đến ~N~, và đảo dấu ~A_i~ (tức là thay thể ~A_i~ bởi ~−A_i~)
Hãy cho biết số phép biến đổi ít nhất cần thực hiện, để dãy thu được thỏa mãn tính chất sau:
- Tích của hai phần tử bất kì trong dãy đều là số nguyên dương (nói cách khác, với mỗi cặp ~(i, j)~ thỏa ~1 ≤ i < j ≤ N~, ta có ~A_i × A_j > 0~).
Input
- Dòng đầu tiên gồm số nguyên ~N~ ~(2 ≤ N ≤ 100)~ - số phần tử của dãy ~A~.
- Dòng thứ hai gồm ~N~ số nguyên ~A_1, A_2, . . . , A_N~ ~(−1000 ≤ A_i ≤ 1000)~ - mô tả dãy ~A~.
Output
- In ra một số nguyên duy nhất là số phép biến đổi ít nhất cần thực hiện. Trong trường hợp không có cách biến đổi, hãy in ra ~-1~.
Sample
Input #1
5
10 -20 -30 40 50
Output #1
2
Input #2
4
9 7 2 3
Output #2
0
Input #3
3
0 0 0
Output #3
-1
Hint
- Trong ví dụ thứ nhất, ta sẽ lần lượt thực hiện phép biến đổi với vị trí ~2~ và ~3~. Khi đó, dãy ~A~ trở thành ~[10, 20, 30, 40, 50]~.
Problem source: Kc97ble - Free Contest
Bình luận
bài này đơn giản chỉ cần tìm xem có số lượng số âm và dương cái nào lớn hơn thì cout số ít hơn là ra, nếu có một giá trị bằng 0 thì cout -1
Nếu vậy chỉ qua được 4 case đầu