cf466C Number of Ways
2014-09-13 22:13
260 查看
C. Number of Ways
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
You've got array a[1], a[2], ..., a[n], consisting of n integers.
Count the number of ways to split all the elements of the array into three contiguous parts so that the sum of elements in each part is the same.
More formally, you need to find the number of such pairs of indices i, j (2 ≤ i ≤ j ≤ n - 1),
that
.
Input
The first line contains integer n (1 ≤ n ≤ 5·105),
showing how many numbers are in the array. The second line contains n integers a[1],a[2],
..., a[n] (|a[i]| ≤ 109) —
the elements of array a.
Output
Print a single integer — the number of ways to split the array into three parts with the same sum.
Sample test(s)
input
output
input
output
input
output
题意是给定50w的序列,要求分成连续的3份,使得每一份的和相等。
一开始没想出来……然后被黄巨大D成sb
先判一下总的sum是不是3的倍数,不是直接return
然后求个前缀和、后缀和,显然当且仅当前缀和=后缀和=sum/3时方案可行
然后for一遍,先判断后缀和是否=sum/3,如果是,答案更新为(当前前缀和=sum/3的个数),这个可以在for的时候算出来
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
You've got array a[1], a[2], ..., a[n], consisting of n integers.
Count the number of ways to split all the elements of the array into three contiguous parts so that the sum of elements in each part is the same.
More formally, you need to find the number of such pairs of indices i, j (2 ≤ i ≤ j ≤ n - 1),
that
.
Input
The first line contains integer n (1 ≤ n ≤ 5·105),
showing how many numbers are in the array. The second line contains n integers a[1],a[2],
..., a[n] (|a[i]| ≤ 109) —
the elements of array a.
Output
Print a single integer — the number of ways to split the array into three parts with the same sum.
Sample test(s)
input
5 1 2 3 0 3
output
2
input
4 0 1 -1 0
output
1
input
24 1
output
0
题意是给定50w的序列,要求分成连续的3份,使得每一份的和相等。
一开始没想出来……然后被黄巨大D成sb
先判一下总的sum是不是3的倍数,不是直接return
然后求个前缀和、后缀和,显然当且仅当前缀和=后缀和=sum/3时方案可行
然后for一遍,先判断后缀和是否=sum/3,如果是,答案更新为(当前前缀和=sum/3的个数),这个可以在for的时候算出来
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<ctime> #define LL long long using namespace std; int n; int a[500010]; LL s[500010]; LL t[500010]; LL ans,tot,toadd; inline LL read() { LL x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int main() { n=read(); for (int i=1;i<=n;i++)a[i]=read(),tot+=a[i]; if (tot%3) { printf("0"); return 0; } tot/=3; for (int i=1;i<=n;i++)s[i]=s[i-1]+a[i]; for (int i=n;i>=1;i--)t[i]=t[i+1]+a[i]; for (int i=2;i<=n;i++) { if (t[i]==tot) ans+=toadd; if (s[i-1]==tot)toadd++; } printf("%lld",ans); }
相关文章推荐
- cf466C Number of Ways
- Q9.11 count the number of ways of parenthesizing the expression
- codeforces round #266 C. Number of Ways
- Number of Ways
- Codeforces Round #266 (Div. 2) C. Number of Ways
- CareerCup Number of ways to take n identical objects out of a bucket
- B - Number of Ways
- codeforces 之 Number of Ways
- C. Number of Ways
- Codeforces - 466C. Number of Ways - 思维、暴力
- Codeforces-466C-Number of Ways
- Codeforces 466 C. Number of Ways
- codeforces 466-C. Number of Ways(前缀和+尺取)
- codeforces-466C-Number of Ways
- codeforce Number of Ways(暴力)
- 【寒江雪】C.Number of Ways
- Codeforces Round #266 (Div. 2)C. Number of Ways(想法题)
- Codeforces Round #266 (Div. 2)C. Number of Ways(想法题)
- Codeforces466C Number of Ways
- 【CODEFORCES】 C. Number of Ways