博客食用更佳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;
}
本文深入探讨了如何使用前缀和优化算法解决特定问题,通过实例代码详细讲解了算法的实现过程,包括如何判断数组是否能被平均分为三部分,并在此基础上进行优化计算。

1884

被折叠的 条评论
为什么被折叠?



