题意:
给出一个长度为n的数组b,令数组ai=2^bi,问是否存在两个不相交的区间使得al1+al1+1+…+ar1−1+ar1=al2+al2+1+…+ar2−1+ar2 .
题解:
若b数组中不存在有两个数相等,那么由二进制的性质可得,不管怎么选区间,都不可能使得区间和相等,若存在两个数相等,那必然有答案。
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<stack>
#include<set>
#define iss ios::sync_with_stdio(false)
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int MAXN=1e6+5;
const int mod=998244353;
int a[MAXN];
int main()
{
int t;
int n;
scanf("%d",&t);
while(t--)
{
//int n;
map<int ,int >mp;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
mp[a[i]]++;
}
int flag=0;
for(int i=1;i<=n;i++)
{
if(mp[a[i]]>=2) {flag=1;break;}
}
if(!flag) printf("NO\n");
else printf("YES\n");
}
}