zoukankan      html  css  js  c++  java
  • Eugene and an array CodeForces

    题目大意:求好数组的个数,所谓好数组 1好数组是原数组的一段连续的子数组,2 好数组不包含元素和为0的子数组。

    题解:唉,这个题目把我给些懵了....我一开始的想法求后缀和,保存位置,然后枚举前缀和,二分查找大于当前位置的第一个后缀合,但是ai的范围太大了,位置保存不了,然后又瞎搞了很久....最后看的题解,没想到这么简单....(吐了)直接用前缀和,如果两个前缀和相等比如果说[1,l]和[1,r]那么[l+1,r],这段区间内的和一定为0,

    然后好数组怎么求呢?当然就是[l+2,r],[l+3,r]....[r,r]。也就是他的区间长度。。。我们可以枚举没个前缀和,让i做右端点,然后用mp保存最右边的左端点。

    code:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll N=2e5+7;
    map<ll,ll >mp;
    int main(){
        ll n;
        cin>>n;
        ll sum=0;
        ll tmp=0;
        mp[0]=1;
        ll x,maxl=1;
        ll ans=0;
        for(ll i=2;i<=n+1;i++){
            cin>>x;
            sum+=x;
            if(mp[sum]!=0) maxl=max(maxl,mp[sum]+1);
            ans+=i-maxl;
            mp[sum]=i;
        }
        cout<<ans<<endl;
        return 0;    
    } 
  • 相关阅读:
    poj1019——log10求位数
    poj2084——卡特兰数
    hdoj1023——卡特兰数
    poj1496——组合数学
    poj1850——组合数学
    bestcoder#29 1002 矩阵连乘快速幂解fib数列
    bestcoder#28 1002 dfs
    poj1458——dp,lcs
    hduoj1106
    codeforces#296div2_b 字符串,图
  • 原文地址:https://www.cnblogs.com/Accepting/p/12671234.html
Copyright © 2011-2022 走看看