CF466C Number of Ways

博客食用更佳

思路

前缀和

很容易想到前缀和优化
当前缀和达到$\frac{1}{3}$时s++;
当前缀和达到$\frac{2}{3}$时ans+=s;

代码

#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
const int N=5e5+10;
int n;
ll a[N],sum[N],ans,s;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i],sum[i]=sum[i-1]+a[i];//前缀和
    if(sum[n]%3!=0){
        cout<<0;
        return 0;
    }//特判 永远不能分割
    for(int i=1;i<=n;i++){
        if(i>1&&i<n&&sum[i]==sum[n]*2/3)ans+=s;
        if(sum[i]==sum[n]/3)s++;
    } //处理
    cout<<ans;//输出
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/bossbaby/p/10951792.html
今日推荐