根据题目,能量是奇数格子与偶数格子之间互相传播的,且守恒。设总能量为E, 有n个格子,奇数格的能量加起来有E_j,偶数格的能量加起来有E_o,只需要分别计算奇数格和偶数格的平均能量,如果都为E/n(上述计算平均数时能整除是最基本要求)即满足题目要求。
#include <bits/stdc++.h>
using namespace std;
int getSum(int nums[], int size, int startIdx, int step) {
int sum = 0;
for (int i = startIdx; i < size; i += step) {
sum += nums[i];
}
return sum;
}
int main() {
int t, s;
cin >> t;
int nums[200005];
while (t--) {
cin >> s;
for (int i = 0; i < s; ++i) {
cin >> nums[i];
}
if (s == 1) {
cout << "YES" << endl;
continue;
}
int allSum = getSum(nums, s, 0, 1);
if (allSum % s != 0) {
cout << "NO" << endl;
continue;
}
int avg = allSum / s;
int js, os, jSum, oSum;
js = s & 1 ? s / 2 + 1 : s / 2;
os = s / 2;
jSum = getSum(nums, s, 0, 2);
oSum = getSum(nums, s, 1, 2);
if (jSum % js != 0 || oSum % os != 0 || jSum / js != avg || oSum / os != avg) {
cout << "NO" << endl;
continue;
}
cout << "YES" << endl;
}
}