题目描述
有一天小明发现了一个长度为n的非负整数序列,她想知道其中有多少段和为k。
输入
第一行有两个整数n(n≤100000),k(k≤1000000000)。第二行有n个整数ai(0≤ai≤100000)。
输出格式:
输出
一个整数表示有多少段和为k。
样例输入
10 5
1 2 0 3 0 5 1 3 0 0
样例输出
4
Cake 1#
#include<cstdio>
int a,b,c[100001],d=0,e=0;
int main()
{
scanf("%d%d",&a,&b);
for(int i=1;i<=a;++i)
{
scanf("%d",&c[i]);
}
for(int i=1;i<=a;++i)
{
for(int j=i;j<=a;j++)
{
d+=c[j];
if(d==b)
{
++e;
}
if(d>b)
{
break;
}
}
d=0;
}
printf("%d",e);
}
Cake 2#
#include<iostream>
using namespace std;
long long n,k,ans,hzx,a[10000001];
int main()
{
cin>>n>>k;
for(long long i=1;i<=n;i++)
cin>>a[i];
for(long long i=1;i<=n;i++)
{
hzx=a[i];
if(hzx==k)
{
ans++;
break;
}
for(long long j=i+1;j<n;j++)
{
hzx+=a[j];
if(hzx==k)
{
ans++;
if(a[j+1]!=0)
break;
}
if(hzx>k) break;
}
}
cout<<ans;
return 0;
}