题目描述
给你n颗糖,每颗糖有一个甜度,一颗糖是好糖必须满足条件:去掉这颗糖之后剩下的糖如果从前到后每天吃一个的话,奇数天吃的糖的甜度和与偶数天吃的糖的甜度和相等。问这n颗糖中有多少颗好糖。
输入
第一行,一个正整数n(1<n<=200000)。
第二行,n个整数表示从前到后每颗糖的甜度(0<=甜度<=10000)。
输出
一行,一个整数,表示好糖颗数。
样例输入
7 5 5 4 5 5 5 6
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n+10];
int prefixod[n+10]= {0};
int prefixev[n+10]= {0};
int suffixod[n+10]= {0};
int suffixev[n+10]= {0};
for(int i=1; i<=n; i++)
{
cin>>a[i];
}
// prefixod[1] = a[1];
// prefixod[2] = a[1];
for(int i=1; i<=n; i++)
{
if(i%2==0)
{
prefixev[i] = prefixev[i-2] + a[i];
prefixev[i+1] = prefixev[i];
}
else
{
prefixod[i] = prefixod[i-2] + a[i];
prefixod[i+1] = prefixod[i];
}
}
for(int i=n; i>=1; i--)
{
if(i%2==0)
{
suffixev[i] = suffixev[i+2] + a[i];
suffixev[i-1] = suffixev[i];
}
else
{
suffixod[i] = suffixod[i+2] + a[i];
suffixod[i-1] = suffixod[i];
}
}
// for(int i=1; i<=n; i++)
// {
// cout<<prefixod[i]<<" ";
// }
// cout<<endl;
// for(int i=1; i<=n; i++)
// {
// cout<<suffixod[i]<<" ";
// }
// cout<<endl;
// for(int i=1; i<=n; i++)
// {
// cout<<prefixev[i]<<" ";
// }
// cout<<endl;
// for(int i=1; i<=n; i++)
// {
// cout<<suffixev[i]<<" ";
// }
int sumev=0;
int sumod=0;
int cnt = 0;
for(int i=1;i<=n;i++){
sumev = prefixev[i-1] + suffixod[i+1];
sumod = prefixod[i-1] + suffixev[i+1];
if(sumev == sumod){
cnt++;
}
}
cout<<cnt;
return 0;
}
样例输出
2