题目名字
题意
假设 12345这个数列,找出连续3个数字求和,并求所有三个连续数字和的总和
思路
- 先是前缀和
- 将区间尾的前缀和减去区间首的前缀和
- 算总和
坑点
- 前缀和人的for循环一定从1开始
代码
#include<bits/stdc++.h>//众所周知的万能头文件
using namespace std;
long long a[100010],num[100010]={0};
long long n,k,sum=0;
//(要long long否则会爆int)
//a[]表示输入的数列,num[i]表示a[i]的前缀和;
//n,k如题,sum为最后的答案
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)//读入数列
{
cin>>a[i];
num[i]=num[i-1]+a[i];//计算a[i]的前缀和
}//预处理完毕!
for(int i=k;i<=n;i++)//这里i从k开始循环,a[i]代表区间的末尾,num[i]代表区间末尾的前缀和
{
sum+=num[i]-num[i-k];
}
cout<<sum<<endl;//输出答案
return 0;
}
总结
前缀和一定记住