zoukankan      html  css  js  c++  java
  • 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;
    }
    


  • 相关阅读:
    第01组 Alpha冲刺 (1/6)
    第01组(17) 需求分析报告
    第01组(17) 团队展示
    结对编程作业
    05 RDD编程
    第九次作业
    HDFS
    Hadoop安装 与 HDFS体系结构
    第三次作业
    作业2
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6820559.html
Copyright © 2011-2022 走看看