1 条题解

  • 0
    @ 2026-1-28 14:18:08
    #include<iostream> 
    using namespace std;
    int arr[10100]; // [1] 存储测试用例中的数字序列
    
    int main(){ 
        int t; // [2] 测试用例的总组数
        cin>>t; // [3] 读取测试用例组数
    
        // [4] 循环处理每组测试用例,t--表示处理一组则组数减1,直至所有组处理完成
        while(t--){
            int n; // [5] 当前测试用例的数字数量
            cin>>n; // [6] 读取当前组的数字数量
    
            // [7] 读取n个数字并存入数组,完成当前组的原始数据输入
            for(int i=0;i<n;i++) cin>>arr[i]; // arr[i]为当前要操作的数字
    
            int sum=0; // [8] 当前组所有数字的总和,初始化为0
            // [9] 遍历数组累加所有元素,计算当前组数字的总和
            for(int i=0;i<n;i++) sum+=arr[i];
    
            int v=0; // [10] 分割点左侧数字的累加和,初始化为0
            int flag=0; // [11] 标记是否找到平衡分割点(0=未找到,1=找到)
    
            // [12] 遍历所有可能的分割点(i<n-1保证分割后右侧至少保留1个数字)
            for(int i=0;i<n-1;i++){
                v+=arr[i]; // [13] 累加当前数字到左侧和v,更新分割点左侧总和
    
                // [14] 判断左侧和是否等于总和的一半(等价于左右两部分数字和相等)
                if(v*2 == sum){
                    flag=1; // 标记找到符合条件的分割点
                    break;  // 跳出循环,无需继续遍历剩余分割点
                } 
            } 
    
            // [15] 根据是否找到分割点输出结果:找到则输出Yes,未找到则输出No
            if(flag) cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
        } 
        return 0; 
    }
    
    • 1

    信息

    ID
    914
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者