位运算
代码:
#include<bits/stdc++.h> using namespace std; long long t,n,m; bool a[41],b[41],c[41]; int main(){ scanf("%lld",&t); while(t--){ scanf("%lld%lld",&n,&m); long long s=0; memset(a,0,sizeof(a)); memset(c,1,sizeof(c)); while(m){ a[++s]=m%2; m/=2; } for(int i=1;i<=n;i++){ long long x; scanf("%lld",&x); memset(b,0,sizeof(b)); long long q=0; while(x){ b[++q]=x%2; x/=2; } bool f=1; for(int i=1;i<=40;i++){ if(a[i]==1&&b[i]==0){ f=0; break; } } if(f==1){ for(int i=1;i<=40;i++){ c[i]=c[i]&b[i]; } } } bool ff=1; for(int i=1;i<=40;i++){ if(a[i]!=c[i])ff=0; } if(ff==1)printf("Yes\n"); else printf("No\n"); } return 0; }