// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <set>
#include <unordered_map>
#include <stack>
#include <queue>
#include <map>
#include <deque>
#include <random>
#include <cmath>
#include <algorithm>
using namespace std;
const int mod=998244353;
int qk(int a,int b=mod-2)
{
int ans=1;
while(b)
{
if(b&1)ans=ans*a%mod;
b>>=1;
a=a*a%mod;
}
return ans;
}
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
#define int long long
typedef pair<int,int> pii;
const int N=200010;
int a[N];
void solve()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
int sum=0;
map<int,int>mp;
mp[0]=1;
int flag=0;
for(int i=1;i<=n;i++)
{
if(i%2==0)a[i]=-a[i];
sum+=a[i];
if(mp[sum])flag=1;
mp[sum]=1;
}
if(flag)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
signed main()
{
int T;
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//T=1;
cin>>T;
while(T--)
{
solve();
}
system("pause");
}
这道题的想法非常巧妙,因为是让一个区间里的下标为奇数和偶数的和相等,我们可以把下标为偶数的置为负数,把每一次得到的前缀和标记一下,如果该前缀和前面已经出现过,说明这个区间一定存在符合的条件。