CodeForces - 466C Number of Ways 题解

在这里插入图片描述
题目大意:有多少个点对能将数组平均分为三份

思路:判断能平均分为三份至少要能被三整除,数据多于三。求答案数量只需要求前缀和为总和的三分之二的点之前有多少个前缀和为总和三分之一的点,遍历数组,记录有多少点加起来即可

代码:

#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);
	}
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值