题目大意

二进制上的若干位不能为1,问是否能组成x


解题思路

直接判断x的二进制在不能有1的位置上是否有1


code

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define ull unsigned long long
using namespace std;
int n,k,pp,x;
ull s;
int main()
{
    scanf("%d%d%llu",&n,&k,&s);
    pp=0;
    for(int i=1;i<=k;++i){
        scanf("%d",&x);
        if(s&(1llu<<x-1))pp=1;//如果这位是1,但是不能填1,就不能构成
    }
    if(s>(1llu<<n-1)-1+(1llu<<n-1))pp=1;//位数要够
    if(pp)puts("NO");
    else puts("YES");
    return 0;
}