https://codeforces.com/problemset/problem/2033/D
本题贪心就好了,实际上算一个前缀和就会发现不重叠的相同前缀和对数即为答案
本题哈希表避免重叠
#include<bits/stdc++.h>
using namespace std;
#define ll long long
using namespace std;
void solve() {
ll n;
cin>>n;
vector<ll> a(n,0);
map<ll,ll> mp;
mp[0]=-1;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
ll sum=0,index=-1,cnt=0;
for(int i=0;i<n;i++)
{
sum+=a[i];
if((mp.find(sum)!=mp.end())&&(mp[sum]>=index))
{
index=i;
cnt++;
}
mp[sum]=i;
}
cout<<cnt<<endl;
}
int main() {
ll t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}
点个赞