Gym 100247CVictor's Research(有多少区间之和为S)

Posted 谦谦君子,陌上其华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gym 100247CVictor's Research(有多少区间之和为S)相关的知识,希望对你有一定的参考价值。

https://vjudge.net/problem/Gym-100247C

题意:

给出一串数,求有多少个区间的和正好等于S。

 

思路:
计算处前缀和,并且用map维护一下每个前缀和出现的次数。这样接下来枚举左端点即可,确定了左端点,就可以得出右端点的前缀和应该为多少。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<map>
 6 using namespace std;
 7 const int maxn = 200000+5;
 8 typedef long long ll;
 9 
10 int n;
11 ll s, a[maxn], sum[maxn];
12 map<ll,int> mp;
13 
14 int main()
15 {
16     //freopen("in.txt","r",stdin);
17     sum[0] = 0;
18     mp.clear();
19     scanf("%d%lld",&n,&s);
20     for(int i=1;i<=n;i++)
21     {
22         scanf("%lld",&a[i]);
23         sum[i] = sum[i-1]+a[i];
24         mp[sum[i]]++;
25     }
26     ll ans = 0;
27     for(int i=1;i<=n;i++)
28     {
29         ans += mp[s+sum[i-1]];
30         mp[sum[i]]--;
31     }
32     printf("%lld\n",ans);
33     return 0;
34 }

 

以上是关于Gym 100247CVictor's Research(有多少区间之和为S)的主要内容,如果未能解决你的问题,请参考以下文章

Gym 100247AThe Power of the Dark Side

Gym101081k Pope's work

Gym 100792 King's Rout 拓扑排序

gym-101343D-Husam's Bug

Codeforces Gym - 101147J Whistle's New Car

Gym 101933 King's Colors