CF466C Number of Ways
博客食用更佳bossbaby's blog
思路
前缀和
很容易想到前缀和优化
当前缀和达到\(\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;
}