首页 > 其他分享 >A-

A-

时间:2023-02-22 14:45:45浏览次数:31  
标签: std begin 乘积 int 元素 ++

思路:

题目让我们操作一个数组,每次操作可以任选一个元素,把它的值 + 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

相关文章