思路:
题目让我们操作一个数组,每次操作可以任选一个元素,把它的值 + 1,问,最少可以用几次操作,可以使得数组中所有元素的和 与 乘积都不为0.
因为乘积比较特殊(所有元素中只要有 0 存在,那么乘积为0,否则不为0),所以我们先从元素 0 下手,操作之后看一下新序列的和是否为0,为0的话,再考虑现在的序列中除了 -1,还有没有其他元素,没有的话,只能让
- 1 + 1,这样保证了和不等于0,但是乘积又因为 - 1 变成了0而变成了0,所以 0 还要再 + 1,否则的话,随便选一个不等于 -1 的元素,给它加上 1就可以同时满足两个条件了.
参考代码:
1 void work() { 2 int n, cnt{}; 3 std::cin >> n; 4 std::vector<int> a(n); 5 6 for (int i = 0; i < n; i++) { 7 std::cin >> a[i]; 8 } 9 10 for (int i = 0; i < n; i++) { 11 if (a[i] == 0) { 12 cnt++, a[i]++; 13 } 14 } 15 16 LL sum = accumulate(a.begin(), a.end(), 0LL); 17 if (sum == 0) { 18 int min = *std::min_element(a.begin(), a.end()); 19 int max = *std::max_element(a.begin(), a.end()); 20 cnt += (min == -1 && max == -1) + 1; 21 } 22 std::cout << cnt << "\n"; 23 }Code 标签:,std,begin,乘积,int,元素,++ From: https://www.cnblogs.com/LDUyanhy/p/17144281.html