返回顶部

Codeforces Round #540 (Div. 3) B. Tanya and Candies (后缀和)

  • 题意:有\(n\)个数,你可以任意去除某个位置的元素然后得到一个新数组,使得新数组奇数位和偶数的元素相等,现在问你有多少种情况合法.

  • 题解:先求个后缀和,然后遍历,记录奇数和偶数位置的前缀和,删去\(i\)位置的元素,意味着原来\(i\)位置之后的奇数和变成了偶数和,偶数和变成了奇数和,将前缀和与差位的后缀和相加判断一下即可.

  • 代码:

    int n;
    ll a[N];
    ll suf1[N],suf2[N];
    ll cnt1,cnt2;
     
    int main() {
        ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
        cin>>n;
        for(int i=1;i<=n;++i){
        	cin>>a[i];
        }
        for(int i=n;i>=1;--i){
        	if(i%2==1) suf1[i]=a[i]+suf1[i+2];
        	else suf2[i]=a[i]+suf2[i+2];
        }
        ll res=0;
        for(int i=1;i<=n;++i){
        	if(i%2==1){
        		if((cnt1+suf2[i+1])==(cnt2+suf1[i+2])) res++;
        		cnt1+=a[i];
        	}
        	else{
        		if((cnt2+suf1[i+1])==(cnt1+suf2[i+2])) res++;
        		cnt2+=a[i];
        	}
        }
     
        cout<<res<<endl;
     
        return 0;
    }
    
posted @ 2020-10-02 21:47  _Kolibri  阅读(118)  评论(0)    收藏  举报