时间限制: 1 Sec 内存限制: 256 MB
题目描述
楠楠在网上刷题,感觉第一题:求两数的和(A+B Problem)太无聊了,于是增加了一题:求和为C的Problem,难倒了一群小朋友,哈哈。 题目是这样的:给出N个正整数,一个值C,要求在这N个整数中找一段连续的数(至少2个数),使得它们的和等于C,问这样的方案有多少种? 例如:N=8,C=7,8个整数是:2 5 1 1 2 4 7 1。答案是3。具体方案:(2, 5)、(5,1,1)、(1,2,4)。
输入
第一行2个正整数:N,C。
第二行:N个正整数。
数据范围:N的范围是[1…100,000]。C的范围是[1…1,000,000,000]。N个整数中每个数的范围是:[1…1,000,000,000]。
输出
一个整数,表示该串数中包含的所有方案数。
样例输入
4 5
1 4 1 4
样例输出
3
最近忙的连发文章都没时间了
参考答案
#include <bits/stdc++.h>
using namespace std;
#define N 100005
int n,m,i,j,k,a[N],s[N],ans;
int main() {
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++) {
scanf("%d",&a[i]);
s[i]=s[i-1]+a[i];
}
for(i=1; i<=n; i++) {
for(j=i+1; j<=n; j++) {
if(s[j]-s[i-1]==m) {
ans++;
}
if(s[j]-s[i-1]>=m) {
break;
}
}
}
printf("%d\n",ans);
return 0;
}