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