a[1]부터 a[n]까지 n개의 수를 입력받는다. ai = ai + 1 을 수행할 수 있고, a[1] + a[2]+ ... + a[n] 이 0 이 아니고 a[1]*a[2]*...a[n] 이 0이 아니게 되도록하는 최소 +1의 회수를 출력하는 문제이다.
a[i]가 0이 되면 안되므로, a[i]가 0이면 +1을 해준다. 그리고 총합이 0이된다면, 양수인 a[i]에 +1을 해주면 문제의 조건에 만족하는 수열을 만들 수 있다.
#include <iostream>
using namespace std;
int main(){
int t, n;
cin >> t ;
while (t-- ){
cin >> n;
int a[110];
int addCnt = 0;
int sum = 0;
for (int i = 0; i < n; i ++){
cin >> a[i];
if(a[i] == 0) {
a[i] ++;
addCnt ++;
}
sum += a[i];
}
if(sum == 0){
addCnt ++;
}
cout << addCnt << endl;
}
return 0;
}
반응형
'codeforce > #618 (Div.2)' 카테고리의 다른 글
Codeforces #618 (Div. 2) B. Assigning to Classes (0) | 2020.02.16 |
---|