当前位置: 代码迷 >> 综合 >> Codeforces 1398 C. Good Subarrays(前缀和&&思维)
  详细解决方案

Codeforces 1398 C. Good Subarrays(前缀和&&思维)

热度:85   发布时间:2024-02-11 09:26:46.0

传送门

题意:

在这里插入图片描述
找区间的和等于区间长度的个数
如果把数组的每个数都减1,那找的就是区间和为0的个数

思路:

求个前缀和,记录一下每个数出现的次数,每次加上该数在前面出现的次数即可(前面每出现一次,就会有一段区间和为0)

代码:

int t,n;
int a[MAXN];
ll sum[MAXN];
map<ll,ll>p;
int main()
{std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);char x;cin>>t;while(t--){cin>>n;for(int i=1;i<=n;i++){cin>>x;a[i]=x-'0';a[i]--;sum[i]=sum[i-1]+a[i];}ll ans=0;p[0]++;for(int i=1;i<=n;i++){ans+=p[sum[i]];p[sum[i]]++;}p.clear();cout<<ans<<endl;}return 0;
}
  相关解决方案