1 条题解
-
0
#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
- 上传者