题解 | #牛牛吃米粒#
牛牛吃米粒
https://ac.nowcoder.com/acm/contest/11179/A
题目大意
二进制上的若干位不能为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; }