首页 > 试题广场 >

元素方碑

[编程题]元素方碑
  • 热度指数:6019 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解


\hspace{15pt}菲谢尔在稻妻冒险途中遇到一排神奇的元素方碑,其中第 i 个方碑初始时的能量为 a_i。只要她对第 i 块方碑施放雷元素,就会发生能量转移:

\hspace{23pt}\bullet\,正面轰击:雷元素从第 i-1 块流向第 i+1 块,使 a_{i-1}1a_{i+1}1
\hspace{23pt}\bullet\,反面轰击:雷元素从第 i+1 块流向第 i-1 块,使 a_{i+1}1a_{i-1}1

\hspace{15pt}操作只能在 2\leqq i\leqq n-1 的方碑上进行,且任何时刻所有方碑能量 a_{i} 必须保持非负。
\hspace{15pt}当所有方碑的能量 a_1,a_2,\dots,a_n 全部相等时,菲谢尔即可开启隐藏宝箱。
\hspace{15pt}菲谢尔可以无限次进行操作。请判断,她是否一定能够让所有方碑能量相等。

输入描述:
\hspace{15pt}第一行输入一个整数 t\left(1\leqq t\leqq 10^4\right)——测试用例组数。 
\hspace{15pt}对于每组测试数据:
\hspace{23pt}\bullet\,第一行输入一个整数 n\left(1\leqq n\leqq 2\times10^5\right)——方碑数量;
\hspace{23pt}\bullet\,第二行输入 n 个整数 a_1,a_2,\dots,a_n\left(1\leqq a_i\leqq 10^9\right)——初始能量。

\hspace{15pt}除此之外,保证单个测试文件中全部测试用例的 n 之和不超过 2\times10^5


输出描述:
\hspace{15pt}对每组测试数据,在一行上输出 \texttt{YES}\texttt{NO},表示能否通过若干次操作使所有方碑能量相等。
示例1

输入

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

说明

\hspace{15pt}在第一组样例中: 
\hspace{23pt}\bullet\,对于数组 \{3,2,1\},先对下标 i=2 正面轰击一次,得到 \{2,2,2\},能量已全部相等;
\hspace{23pt}\bullet\,对于数组 \{1,2,5,4\},可依次正面轰击 i=3,反面轰击 i=2,最终得到 \{3,3,3,3\}
\hspace{23pt}\bullet\,对于数组 \{2,4,2\},无论如何操作,总能量 \sum a_i 不是 n 的倍数,因此无法全等,答案为 \texttt{NO}
头像 Silencer76
发表于 2025-08-08 21:03:18
题目链接 元素方碑 题目描述 菲谢尔有一排 个元素方碑,第 个方碑的初始能量为 。她可以对任意一个中间的方碑(下标 满足 )施放雷元素进行能量转移。所有操作都必须保证任意时刻所有方碑的能量 保持非负。菲谢尔想知道,她能否通过无限次操作,让所有方碑的能量变得完全相等。 解题思路 本题的解法关键 展开全文
头像 机智的小辣鸡在努力
发表于 2025-10-11 22:48:32
import sys test_num = int(input()) for i in range(test_num): cur_len = int(input()) cur_list = list(map(int,input().split())) # 1、排除无法整除 展开全文
头像 BraveCoder
发表于 2025-08-27 20:58:15
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int r 展开全文
头像 xiaowang5242
发表于 2025-07-15 19:04:53
#include <bits/stdc++.h> using namespace std; using i64 = long long; void solve() { int n; cin >> n; vector<i64> a(n); 展开全文
头像 学c的给我滚
发表于 2025-12-06 12:29:49
import java.util.Scanner; import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { 展开全文
头像 赶due_ing
发表于 2025-08-11 18:23:52
根据题目,能量是奇数格子与偶数格子之间互相传播的,且守恒。设总能量为E, 有n个格子,奇数格的能量加起来有E_j,偶数格的能量加起来有E_o,只需要分别计算奇数格和偶数格的平均能量,如果都为E/n(上述计算平均数时能整除是最基本要求)即满足题目要求。 #include <bits/stdc++ 展开全文
头像 励偲
发表于 2025-09-17 13:39:42
import sys N = int(input()) for i in range(N): length = int(input()) arr = list(map(int, input().split(' '))) if(length==1|length==2): 展开全文
头像 AchanLin
发表于 2025-12-12 10:57:05
using System; using System.Collections.Generic; public class Program { public static void Main() { //能量是奇数格子与偶数格子之间互相传播的,且守恒。设总能量为E, 有n个格子 展开全文
头像 GPT1_0
发表于 2025-11-06 18:44:19
def make_equal(n,a): sum_odd = 0 sum_even = 0 for j in range(0,n,2): sum_odd += a[j] for j in range(1,n,2): sum_even + 展开全文
头像 紫璨月
发表于 2025-10-14 14:19:39
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = 展开全文