Number of Ways

题意就是给你一个数组  让你分成3个区间 能不能让3个区间里面的值都相等

解题方法    用一个前缀和

先统计出所有的1/3的值个数  碰到 2/3 就加一次1/3的总个数  就知道可以分为几个区间了

代码有点乱

#include "bits/stdc++.h"
#define ll long long
using namespace std;
const int N = 5e5+5;
ll n,s[N];
int main()
{
    cin >> n;
    for(int i=1;i<=n;i++){
        cin >> s[i];
        s[i]+=s[i-1];
    }

    if(s[n]%3!=0) cout << 0 << endl;
    else{
        ll ans_num = 0,ans_ans = 0;
        for(int i=1 ;i<=n ;i++)
        {
            if(i>1 && i<n && s[i]*3 == s[n]*2)
            {
                ans_num+=ans_ans;
            }
            if(s[i]*3 == s[n])
            {
                ans_ans++;
            }
        }
        cout << ans_num << endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_53013914/article/details/120314983
今日推荐