1 条题解

  • 0
    @ 2026-8-5 14:33:00

    思路

    如果一个区间[l,r][l,r]和为00,那么必然有srsl1=0s_r-s_{l-1}=0,则sr=sl1s_r=s_{l-1},我们枚举每一个数,查找之前有多少个前缀和与他相同,此过程可以用map来维护。

    注意:十年OI一场空,______________。

    'AC'代码

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N=2e5+10;
    int s[N];
    map<int,int>v;
    int main()
    {
    	int n;scanf("%lld",&n);
    	for(int i=1,x;i<=n;i++)scanf("%lld",&x),s[i]=s[i-1]+x;
    	v[0]=1;int ans=0;
    	for(int i=1;i<=n;i++)
    	{
    		ans+=v[s[i]];
    		v[s[i]]++;
    	}
    	printf("%lld\n",ans);
    	return 0;
    }
    
    • 1

    信息

    ID
    8669
    时间
    2000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    31
    已通过
    12
    上传者