由于触发i只会影响到i-1和i+1,所以实际总能量应该分为两个部分即(奇数项和偶数项),那么条件就是两条
1.能量总数能作为整数均摊在所有方碑上
2.奇数项的能量平均要和偶数项的能量平均相等
ps:触发奇数项能让偶数项的能量在偶数彼此间交换(奇数两边为偶数)
#include <iostream>
#include <vector>
using namespace std;
bool isTandA(int s1, int s2, int len1, int len2) {
// 检查平均值是否相等
bool avgEqual = (s1 * len2) == (s2 * len1);
// 检查合并后平均值是否为整数
bool totalAvgInt = ((s1 + s2) % (len1 + len2) == 0);
return avgEqual && totalAvgInt;
}
int main() {
int t;
cin >> t;
while (t--) {
int len;
cin >> len;
if (len == 1) {
cout << "YES" << endl;
// 读取并忽略这个数
int x;
cin >> x;
continue;
}
// 直接在读取时计算和,不需要存储数组
int s1 = 0, s2 = 0;
int len1 = 0, len2 = 0;
for (int i = 0; i < len; i++) {
int x;
cin >> x;
if (i == 0 || i % 2 == 0) {
s1 += x;
len1++;
} else {
s2 += x;
len2++;
}
}
if (isTandA(s1, s2, len1, len2)) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}

京公网安备 11010502036488号