1 条题解

  • 3
    @ 2024-10-3 17:09:26

    不难,一点都不难! 思路:

    1. 求出所有数的和sum,若不是3的倍数,直接cout<<"NO\n";
    2. 依次遍历地找两个点,使由他们分割的三部分都等于sum/3;
    3. 若都能找到输出YES,若出现加上太多,不加太少的情况,输出NO。 上代码!!😕
      
      
    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    int a[200005];
    signed main(){
        freopen("fair.in","r",stdin);
        freopen("fair.out","w",stdout);
        int t;
        cin>>t;
        while(t--){
    
            int n;
            cin>>n;
            int sum=0;
            for(int i=1;i<=n;i++){
               cin>>a[i];
                sum+=a[i];
            }
            if(sum%3!=0){
                cout<<"NO\n";
                continue;
            }
            sum/=3;
            int ans=0;
            bool fail=0;
            for(int i=1;i<=n;i++){
                if(ans+a[i]>sum){
                    fail=1;
                    cout<<"NO\n";
                    break;
                }else{
                    ans+=a[i];
                    ans%=sum;
                }
            }
            if(!fail)cout<<"YES\n";
        }
    
    
    }
    

    点个赞再走!不然扔出去!

    
    
    • 1

    信息

    ID
    773
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    145
    已通过
    27
    上传者