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

时间:2023-03-08 23:45:22
Gym 100247C	Victor's Research(有多少区间之和为S)

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

题意:

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

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

 #include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
const int maxn = +;
typedef long long ll; int n;
ll s, a[maxn], sum[maxn];
map<ll,int> mp; int main()
{
//freopen("in.txt","r",stdin);
sum[] = ;
mp.clear();
scanf("%d%lld",&n,&s);
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
sum[i] = sum[i-]+a[i];
mp[sum[i]]++;
}
ll ans = ;
for(int i=;i<=n;i++)
{
ans += mp[s+sum[i-]];
mp[sum[i]]--;
}
printf("%lld\n",ans);
return ;
}