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; }
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮

浙公网安备 33010602011771号