前缀和(1)
前缀和原来就是前n项和呀,通过递推可以方便求得,而且好像可以降低复杂度.
前天在CF上做到了一道题,正好用前缀和.
题目链接 : https://codeforces.com/contest/1118/problem/B
代码:
#include<stdio.h>
#define ll long long
int a[200005],even[200005],odd[200005],n,k,i,j,cnt;
int main()
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++) //递归求前缀和
{
if(i%2==0)
{
if(i>0)
{
even[i]=even[i-1]+a[i];
odd[i]=odd[i-1];
}
else even[i]=a[i];
}
else {
odd[i]=odd[i-1]+a[i];
even[i]=even[i-1];
}
}
if(even[n-1]-a[0]==odd[n-1])cnt++;
for(i=1;i<n;i++)
{
if(odd[i-1]+(even[n-1]-even[i])==even[i-1]+(odd[n-1]-odd[i]))cnt++; //用前缀和做就行了
}
printf("%d",cnt);
return 0;
}