zoukankan      html  css  js  c++  java
  • b_lc_生成平衡数组的方案数(奇偶前缀和)

    给一n个元素的数组A,求出删除一位元素使得整个数组的奇数下标和与偶数下标和相等的方案数。

    思路:一开始想用前、后缀做,不过那样会更麻烦,导致我浪费了许多时间,直接求一个前缀和方便多了

    const int N=1e5+5;
    class Solution {
    public:
        int os[N], es[N];
        int waysToMakeFair(vector<int>& A) {
            int n=A.size(), ans=0;
            A.insert(A.begin(), 0);
            for (int i=1; i<=n; i++) {
                if (i&1) {
                    os[i]=os[i-1]+A[i];
                    es[i]=es[i-1];
                } else {
                    es[i]=es[i-1]+A[i];
                    os[i]=os[i-1];
                }
            }
            for (int i=1; i<=n; i++) {
                int o=os[i]+es[n]-es[i-1]; //删除一位之后,下标奇数变偶数,偶数变奇数
                int e=es[i]+os[n]-os[i-1];
                if (o==e) ans++;
            }
            return ans;
        }
    };
    
  • 相关阅读:
    最大流问题的几种经典解法综述
    有上下界的网络流
    hiho一下
    poj 1018
    状压dp
    hdu 1043
    Poj1015
    7.14
    sgu 128
    (zhuan)
  • 原文地址:https://www.cnblogs.com/wdt1/p/14018707.html
Copyright © 2011-2022 走看看