本题地址
https://codeforces.com/contest/2149/problem/A
/*
A. Be positive
Given an array a of n elements,where each element is equal to -1,0,1.
In one operation, you can choose an index i and increase a by 1(this is,assign a:=a+1).
Operations can be performed any number of times,choosing any indices.
The goal is to make the product of all elements in the array strictly positive
with the minimum number of operations,that is a1*a2*a3...an>0.
Find the mininum of operations.It is guaranteed that this is always possible.
Input
Each test consists of several test cases.
The first line contains one integert (1<t<10*4) -- the number of test cases.
The description of the test cases follows.
The first line of each test case contains one integer n (1 <n < 8) -- the length of the array a.
The second line contains n integers a1,a2,...,an.
where -1<=ai<=1 - the elements of the array a.
Output
For each test case, output one integer - the minimum number of operations required
to make the product(>0) of the elements in the array strictly positive.
Input
3
3
-1 0 1
4
-1 -1 0 1
5
-1 -1 -1 0 0
Output
3
1
4
Note
In the first test case: from [-1,0,1], you can obtain [1,1,1] in 3 operations.
In the second test case: it is enough to perform 0->1 (1 operation).
In the resulting array a=[-1,-1,1,1],the product of all elements is 1.
当负数是偶数个,那么a的所有元素的乘积,才能>0
In the third test case: turning two zeros into ones (2 operations),
and one -1 into 1 (another 2 operations),for a total of 4.
根据题意
the goal: the product(or mutiplicatin) of all element is strictly positive.(the product>0)
目标是获得所有元素的之乘积,这个乘积(the product)必须是严格正数,即>0
例如:-1,1,-1,1 相乘,得到1,必须>0(strictly positive)
1) if negative number of cout is odd(%2!=0),that one need to 2 operation (-1+1+1=1>0)
所以,当-1的个数是奇数个,总乘积就是负数,就需要使其变成 >0 的数据,那么需操作2次,每次+1,才能>0
2) if zero,is not strictly positive,need to 1 operation(0+1=1)
如果是0,必须变为1,才能导致the product乘积>0,所以这里需要操作+1一步。
解题思路:
第一步:循环输入变量:如果是0,那么就操作+1,如果是-1,那么就统计负数有多少个
第二步:多少个负数,如果奇数,就要+1+1,才能>0,如果不是,不用管。
最后累计上面的操作数即可。
本题关键理解:
The goal is to make the product of all elements in the array strictly positive
with the minimum number of operations
所有元素的乘积,是严格正数>0,这里需要百度获得这个知识。
/*
Be positive
Given an array a of n elements,where each element is equal to -1,0,1.
In one operation, you can choose an index i and increase a by 1(this is,assign a:=a+1).
Operations can be performed any number of times,choosing any indices.
The goal is to make the product of all elements in the array strictly positive
with the minimum number of operations,that is a1*a2*a3...an>0.
Find the mininum of operations.It is guaranteed that this is always possible.
Input
Each test consists of several test cases.
The first line contains one integert (1<t<10*4) -- the number of test cases.
The description of the test cases follows.
The first line of each test case contains one integer n (1 <n < 8) -- the length of the array a.
The second line contains n integers a1,a2,...,an.
where -1<=ai<=1 - the elements of the array a.
Output
For each test case, output one integer - the minimum number of operations required
to make the product(>0) of the elements in the array strictly positive.
Input
3
3
-1 0 1
4
-1 -1 0 1
5
-1 -1 -1 0 0
Output
3
1
4
Note
In the first test case: from [-1,0,1], you can obtain [1,1,1] in 3 operations.
In the second test case: it is enough to perform 0->1 (1 operation).
In the resulting array a=[-1,-1,1,1],the product of all elements is 1.
In the third test case: turning two zeros into ones (2 operations),
and one -1 into 1 (another 2 operations),for a total of 4.
*/
#include <iostream>
using namespace std;
// summary:
//the goal: the product(or mutiplicatin) of all element is strictly positive.(the product>0)
// 1) if negative number of cout is odd(%2!=0),that one need to 2 operation (-1+1+1=1>0)
// 2) if zero,is not strictly positive,need to 1 operation(0+1=1)
void make_strictly_positive_of_the_product()
{
int operation = 0;
int negative_cout = 0;
int n = 0;
cin >> n;
int v1 = 0;
for (int i = 0; i < n; i++)
{
cin >> v1;
if (v1 == 0)
{
operation++;
}
if (v1 < 0)
{
negative_cout++;
}
}
if (negative_cout % 2 != 0)
{
operation++; // to 0
operation++; // to 1
}
cout<< operation << endl;
operation = 0;
negative_cout = 0;
}
int main()
{
int t;
cin >> t;
while (t--)
{
make_strictly_positive_of_the_product();
}
return 0;
}
验证OK!

513

被折叠的 条评论
为什么被折叠?



