1700*C. Number of Ways(贪心&前缀和)

Problem - 466C - Codeforces 

Number of Ways - 洛谷

1700*C. Number of Ways(贪心&前缀和)_第1张图片

1700*C. Number of Ways(贪心&前缀和)_第2张图片

解析: 

        首先判断所有数总和是否能被三整除。

        之后遍历前缀和数组,如果某个位置的前缀和等于sum/3,则记录。

        某个位置前缀和等于sum/3*2则记录答案。

        注意由于分成三份,所以同一个位置不能放置两个标记,所以先判断2/3倍答案。

#include
using namespace std;
#define int long long
const int N=5e5+5;
int n,a[N],sum[N];
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		sum[i]=sum[i-1]+a[i];
	}
	if(sum[n]%3){
		printf("0");
		return 0;
	}
	int k=sum[n]/3,res=0,cnt=0;
	for(int i=1;i

你可能感兴趣的:(codeforces,算法,c语言,开发语言,深度优先,c++,前缀和)