B4038 [GESP202409 三级] 平衡序列 怎么办

学术版

piyuhan666 @ 2024-11-28 21:00:32

#include<bits/stdc++.h>
using namespace std;
int t;
struct no{
    int n;
    string a;
}s[110];
int b[10010];
int main(){
    cin>>t;
    for(int i=1;i<=t;i++){
        cin>>s[i].n;
        for(int j=1;j<=s[i].n;j++){
            cin>>s[i].a[j];
            b[i]=s[i].a[j];
        }
        bool f=0;//判断 
        for(int k=1;k<=s[i].n-1;k++){//循环i的位置 
            int sum=0,ans=0;//平衡两边的和 
            for(int h=1;h<=k;h++){//一到i的和 
                sum+=b[h];
            }
            for(int y=k+1;y<=s[i].n;y++){//i+1到最后的和 
                ans+=b[y];
            }
            //cout<<sum<<" "<<ans<<endl; 
            if(sum==ans){
                f=1;
                break;
            }
            else{
                f=0; 
            }
        }
        if(f==0){
            cout<<"No"<<endl;
        }
        else{
            cout<<"Yes"<<endl;
        }
    }
    return 0;
}

by ddlove2014 @ 2024-11-29 05:40:50

//代码送你了,看到了回复
#include <bits/stdc++.h>
using namespace std;
int sum[10005];
int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        int n;
        cin >> n;
        memset(sum, 0, sizeof sum);
        for(int i = 1; i <= n; i++)
        {
            int x;
            cin >> x;
            sum[i] = sum[i - 1] + x; //计算数据从1 ~ i的和
        }
        if(sum[n] % 2 == 1) cout << "No"; //sum[n]为奇数,无法平分2份
        else
        {
            bool flag = 0;
            for(int i = 1; i <= n; i++)
            {
                if(sum[i] == sum[n] / 2) // 是否有和为sum[n]/2的项                {
                    flag = 1; //后续输出Yes
                    break;
                }
            }
            if(flag) cout << "Yes";
            else cout << "No";
        }
        cout << endl;
    }
}

@piyuhan666


|