nyoj 86 --位标记
我参考最优代码写了一下,思路就是标记,一个数除以32会得到 商(a) 和 余数(b) ,那么已知a,b就可以确定一个数。那么我们可以用一个数组的下标代码a,每个数组里面的值的二进制位的 1 的位置可以用来代表b。这就是二进制的优势。
不会写的看看代码说不定就懂了。
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N=4e6; int arr[N],n,m; int main() { int n,m; scanf("%d%d",&n,&m); while(n--) { int num,a,b; scanf("%d",&num); a=num/32; b=num%32; arr[a]|=(1<<b); } while(m--) { int num,a,b; scanf("%d",&num); a=num/32; b=num%32; if(arr[a]&(1<<b)) printf("YES "); else printf("NO "); } return 0; }