题目大意:有多少个点对能将数组平均分为三份
思路:判断能平均分为三份至少要能被三整除,数据多于三。求答案数量只需要求前缀和为总和的三分之二的点之前有多少个前缀和为总和三分之一的点,遍历数组,记录有多少点加起来即可
代码:
#include <stdio.h>
long long sum[500500];
int main(){
int n;
long long num;//数据较大,记得开long long
scanf("%d",&n);
for(int i = 1;i <= n;i++){
scanf("%lld",&num);
sum[i]=sum[i-1]+num;//求前缀和
}
if(sum[n]%3!=0||n<3) printf("0\n");//不满足条件
else{
long long ans=0,ans1=0;
for(int i = 1;i < n;i++){
if(sum[i]*3==sum[n]*2) ans+=ans1;//将答案数量加起来
if(sum[i]==sum[n]/3) ans1++;//统计有多少个前缀和为总和三分之一的点
}
printf("%lld\n",ans);
}
}