codeforces 466C Number of Ways
阿新 • • 發佈:2019-02-15
給定一個數字串,問有多少種分法,把整個數字串分為三段,三段的和都相等
求出總和all,然後找all/3的點與all/3*2的點,累加其值即可求解
/****************************************************** * File Name: c.cpp * Author: kojimai * Creater Time:2014年09月12日 星期五 23時59分02秒 ******************************************************/ #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<iostream> using namespace std; #define FFF 500005 long long a[FFF]; long long sum[FFF]; int main() { int n; cin>>n; sum[0]=0; for(int i=1;i<=n;i++) { cin>>a[i]; sum[i] = sum[i-1]+a[i]; } if(n==1) { cout<<0<<endl; } else { long long all=sum[n]; if(all%3!=0) { cout<<0<<endl; } else if(all) { long long a1=all/3; long long a2=all/3*2; int cnt=0; long long ans=0; for(int i=1;i<=n;i++) { if(sum[i]==a2) ans += cnt; if(sum[i]==a1) cnt++; } cout<<ans<<endl; } else { long long cnt=0; for(int i=1;i<=n;i++) { if(sum[i]==0) cnt++; } cout<<(cnt-1)*(cnt-2)/2<<endl; } } return 0; }