

第一行输入一个整数
——测试用例组数。
对于每组测试数据:
第一行输入一个整数
——方碑数量;
第二行输入
个整数
——初始能量。
除此之外,保证单个测试文件中全部测试用例的
之和不超过
。
对每组测试数据,在一行上输出
或
,表示能否通过若干次操作使所有方碑能量相等。
8 3 3 2 1 3 1 1 3 4 1 2 5 4 4 1 6 6 1 5 6 2 1 4 2 4 1 4 2 1 5 3 1 2 1 3 3 2 4 2
YES NO YES NO YES NO NO NO
在第一组样例中:
对于数组
,先对下标
正面轰击一次,得到
,能量已全部相等;
对于数组
,可依次正面轰击
,反面轰击
,最终得到
;
对于数组
,无论如何操作,总能量
不是
的倍数,因此无法全等,答案为
。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int round = in.nextInt();
for (int i = 0; i < round; i++) {
int n = in.nextInt(); // 表示方碑数量
long oddSum = 0;
long evenSum = 0;
result: {
// 处理n=1的边界情况:单个方碑已相等
if (n == 1) {
in.nextLong();
System.out.println("YES");
break result;
}
// 读取n个方碑的能量,按1-based索引分奇偶位求和
for (int j = 1; j <= n; j++) {
long num = in.nextLong();
if (j % 2 == 1) {
oddSum += num;
} else {
evenSum += num;
}
}
// 条件1:总能量必须能被n整除(否则无法均分)
long total = oddSum + evenSum;
if (total % n != 0) {
System.out.println("NO");
break result;
}
// 计算奇位数量和偶位数量
int oddCount = (n + 1) / 2; // 1-based索引的奇位数量(如n=3→2,n=4→2)
int evenCount = n / 2; // 1-based索引的偶位数量(如n=3→1,n=4→2)
// 条件2:奇位总和/奇位数量 == 偶位总和/偶位数量(均等于avg)
// 注:因total%n==0,且oddSum/oddCount == evenSum/evenCount,故必能整除(推导见前文)
if (oddSum / oddCount == evenSum / evenCount) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
in.close();
}
} #include <iostream>
#include<vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int t, n;
cin >> t;
while (t--) {
cin >> n;
long long sum = 0;
vector<int> vec(n);
for (int i = 0; i < n; i++) {
cin >> vec[i];
sum += vec[i];
}
if (sum % n != 0) {
cout << "NO\n";
continue;
}
long long av = sum / n;
for (int i = 1; i < n - 1; i++) {
vec[i + 1] += vec[i - 1] - av;
vec[i - 1] = av;
}
if (vec[n - 1] != av)
cout << "NO\n";
else
cout << "YES\n";
}
}