题目链接
问在数列的连续和里面是不是存在和是m的子序列
前缀和处理一下,二分搜索一下
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<cstdlib>
#include<vector>
using namespace std;
#define cl(a,b) memset(a,b,sizeof(a))
#define LL long long
#define pb push_back
#define gcd __gcd
#define For(i,j,k) for(int i=(j);i<k;i++)
#define lowbit(i) (i&(-i))
#define _(x) printf("%d\n",x)
const int maxn = 2e5+200;
const int inf = 1 << 28;
int a[maxn];
vector<int> v;
int sum[maxn];
int main(){
int T;scanf("%d",&T);
while(T--){
int n,m;
scanf("%d%d",&n,&m);
v.clear();cl(sum,0);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(i==0)sum[i]=a[i];
else sum[i]=sum[i-1]+a[i];
v.pb(sum[i]);
}
bool flag = false;
for(int i=0;i<n;i++){
if(binary_search(v.begin(),v.end(),m)||binary_search(v.begin(),v.end(),sum[i]-m)){
flag=true;break;
}
}
printf("%s\n",flag?"YES":"NO");
}
return 0;
}