Codeforces466C Number of Ways
Posted claireyuancy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces466C Number of Ways相关的知识,希望对你有一定的参考价值。
题目链接:
http://codeforces.com/problemset/problem/466/C
题意:
给一个长度为n的数组,将其分成连续的三段使三段的和相等。求有几种这种组合
分析:
从头扫到尾。将全部的前缀和为(sum/3)的点统计起来。然后再从尾開始统计。找到统计全部后缀和为(sum/3)的节点 然后这样的方案的数为
这个点之前全部前缀和为sum/3的个数
代码例如以下:
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int maxn = 500010; typedef long long LL; LL a[maxn]; int cnt[maxn]; int main() { int n; LL x; while(~scanf("%d",&n)){ LL s=0,p=0; memset(cnt,0,sizeof(cnt)); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); s+=a[i]; } if(s%3){puts("0");continue;} s/=3; int com=0; for(int i=1;i<=n;i++){ p+=a[i]; if(p==s) cnt[com++]=i; } LL ans = 0; p=0; for(int i=n;i>=1;i--){ p+=a[i]; // cout<<"p "<<p<<endl; if(p==s){ int pos=lower_bound(cnt,cnt+com,i-1)-cnt; // cout<<"pos "<<pos<<endl; ans+=pos; } } cout<<ans<<endl; } return 0; }
以上是关于Codeforces466C Number of Ways的主要内容,如果未能解决你的问题,请参考以下文章
CF 466C Number of Ways(数学 / 思维 / DP)
Codeforces 124A - The number of positions
CodeForces-1151E-Number of Components
Codeforces Round #266 (Div. 2)C. Number of Ways
codeforces 27E . Number With The Given Amount Of Divisors 搜索+数论