ウェイズのC.数

リンク:https://codeforces.com/contest/466/problem/C

あなたは、配列んだ  [1]、  [2]、...、  [ N ]、からなる  n個  の整数。各部分の要素の合計が同じになるように3つの隣接部分に、配列のすべての要素を分割する方法の数を数えます。

より正式に、あなたは、インデックスの、このようなペアの数を見つける必要がある  I、  J  (2≤  I  ≤  J  ≤  nは  、その- 1) 

入力

最初の行は、整数含ま  N  (1≤  nは  アレイ内にあるどのように多くの数を示す、≤5・105)。二行目に含まれる  n個  の整数  [1]、  [2]、...、  [ N ](| [ I ] |≤109) -配列の要素  A

出力

同じ和と三つの部分にアレイを分割するいくつかの方法 - 単一の整数を印刷します。

入力

コピー

5 
1 2 3 0 3

出力

コピー

2

入力

コピー

4 
0 1 -1 0

出力

コピー

1

入力

コピー

2 
4 1

出力

コピー

0

コード:

#include<bits/stdc++.h>
using namespace std;
long long n,t,l,r,k,s,d,ans,max1=0,b,c,mod=1e9+7;
long long m[500005],a[500005],dp[500005];
int main()
{
	cin>>n;
	m[0]=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		m[i]=m[i-1]+a[i];
	}
	if(m[n]%3!=0)
	ans=0;
	else
	{
		s=m[n]/3;
	    t=0;
	    for(int i=n;i>=1;i--) 
		{
	        t+=a[i];
	        if(t==s) 
			{
	            dp[i]=1;
	        }
	        dp[i]+=dp[i+1];
	    }
	    ans=0;
	    t=0;
	    for(int i=1;i<=n-2;i++) 
		{
	        t+=a[i];
	        if(t==s) 
			{
	            ans+=dp[i+2];
	        }
	    }
	}

	cout<<ans;
} 

 

公開された137元の記事 ウォン称賛15 ビュー9911

おすすめ

転載: blog.csdn.net/Luoriliming/article/details/104005678
おすすめ