正经题解|美丽数组
2026-05-14 20:53:17
发布于:河北
1阅读
0回复
0点赞
很简单,条件1:是否不是回文数组;条件2:数组所有元素的和是不是奇数下标元素的两倍。
#include<iostream>
#include<vector>
using namespace std;
// 判断数组是否为回文数组
bool IsPalindromeArray(const vector<int> &a,const int &n){
int l=0,r=n-1; // 左右双指针
do{
if(a[l]!=a[r]) return false; // 对称位置元素不相等则不是回文
l++;
r--;
}while(l<=r);
return true;
}
int main(){
// 优化输入输出流,提高效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int T=0;
cin>>T; // 测试用例数
while(T--){
int n=0;
cin>>n; // 数组长度
vector<int> a(n);
for(int i=0;i<n;++i) cin>>a[i]; // 输入数组
// 如果是回文数组直接输出No
if(IsPalindromeArray(a,n)){
cout<<"No\n";
continue;
}
// 计算总和与奇数位置元素和
long long sumA=0,sumB=0;
for(int i=0;i<n;++i){
sumA+=a[i]; // 总和
if(i%2) sumB+=a[i]; // 奇数索引位置的和(从0开始计数)
}
// 如果奇数位置和的两倍等于总和,则输出Yes
if(sumB*2==sumA) cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}
这里空空如也








有帮助,赞一个