

第一行输入一个整数
——测试用例组数。
对于每组测试数据:
第一行输入一个整数
——方碑数量;
第二行输入
个整数
——初始能量。
除此之外,保证单个测试文件中全部测试用例的
之和不超过
。
对每组测试数据,在一行上输出
或
,表示能否通过若干次操作使所有方碑能量相等。
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();
}
} import sys
t = int(sys.stdin.readline())
for _ in range(t):
n, a = int(sys.stdin.readline()), list(map(int, sys.stdin.readline().split()))
if sum(a) % n == 0:
s = sum(a[i] for i in range(1, n, 2))
print("YES" if s == sum(a) // n * (n // 2) else "NO")
else:
print("NO") #include <iostream>
using namespace std;
#include <vector>
int main(){
int N;
cin >> N;
for(int i = 0; i < N; ++i){
vector<long long> v1, v2;
int n;
cin >> n;
long long count = 0;
long long count1 = 0, count2 = 0;
for(int j = 1; j <= n; ++j){
long long num;
cin >> num;
count += num;
if(j % 2 != 0){
v1.push_back(num);
count1 += num;
}
else{
v2.push_back(num);
count2 += num;
}
}
if(count % n != 0) cout << "NO" << endl;
else{
long long avg = count / n;
if(avg * v1.size() == count1 && avg * v2.size() == count2){
cout << "YES" << endl;
}
else cout << "NO" << endl;
}
}
return 0;
} #include <iostream>
using namespace std;
#include<vector>
int main() {
int T;
cin>>T;
while(T--){
int n;
int n_ji=0,n_ou=0;
cin>>n;
vector<long long>v;
for(int i=0;i<n;i++){
long long a;
cin>>a;
v.push_back(a);
}
long long sum=0;
long long jisum=0,ousum=0;
long long av=0,av_ji=0,av_ou=0;
for(int i=0;i<v.size();i++){
sum+=v[i];
if(i%2==0){
n_ou++;
ousum+=v[i];
}
if(i%2!=0){
n_ji++;
jisum+=v[i];
}
}
if(n_ji==0){//当只有一块的时候 防止0除法报错 提前判断
cout<<"YES"<<endl;
}
else if(sum%n!=0){
cout<<"NO"<<endl;
}
else if(ousum/n_ou!=sum/n||ousum%n_ou!=0){//偶数元素不能整除 偶数平均值不等于平均值
cout<<"NO"<<endl;
}
else if(jisum/n_ji!=sum/n||jisum&n_ji!=0){//奇数元素不能整除 奇数平均值不等于平均值
cout<<"NO"<<endl;
}
else{
cout<<"YES"<<endl;
}
// av=sum/n;
// av_ou=ousum/n_ou;
// av_ji=jisum/n_ji;
}
} #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";
}
}