1 条题解

  • 0
    @ 2025-3-9 16:23:54
    #include <bits/stdc++.h>  // 包含所有标准库头文件
    using namespace std;       // 使用标准命名空间
    
    // 主函数,处理输入输出并判断平衡序列
    int main() {
        int t;  // 测试用例组数
        cin >> t;  // 读取测试用例组数
    
        // 处理每组测试用例
        while (t--) {
            int n;  // 当前测试用例的序列长度
            cin >> n;  // 读取序列长度
            int a[10005] = {0};  // 存储序列的数组,初始化大小为10005
            int sum = 0;         // 序列所有元素的总和
    
            // 读取序列元素并计算总和
            for (int i = 0; i < n; ++i) {
                cin >> a[i];
                sum += a[i];
            }
    
            // 总和为奇数则不可能分割,直接输出No
            if (sum % 2 != 0) {
                cout << "No" << endl;
                continue;  // 跳过后续处理
            }
    
            int target = sum / 2;  // 目标值为总和的一半
            int prefix_sum = 0;     // 前缀和初始化为0
            bool found = false;     // 是否找到满足条件的分割点
    
            // 遍历序列,计算前缀和并判断是否满足条件
            for (int i = 0; i < n; ++i) {
                prefix_sum += a[i];  // 累加当前元素到前缀和
                // 如果前缀和等于目标值,且当前不是最后一个元素
                if (prefix_sum == target && i < n - 1) {
                    found = true;  // 标记找到分割点
                    break;         // 提前退出循环
                }
            }
    
            // 根据是否找到分割点输出结果
            cout << (found ? "Yes" : "No") << endl;
        }
        return 0;
    }
    
    

    信息

    ID
    5054
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    16
    已通过
    6
    上传者