首页 > 其他分享 >A. Non-zero (思维)

A. Non-zero (思维)

时间:2023-02-22 14:34:42浏览次数:32  
标签:std 思维 Non 乘积 int 元素 cnt ++ zero

思路:

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

相关文章