51nod 1406 与查询
有n个整数。输出他之中和x相与之后结果为x的有多少个。x从0到1,000,000
1<=n<=1,000,000
0<=a[i]<=1,000,000
https://blog.csdn.net/jpwang8/article/details/78704007
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int N = 1e6 + 10; 5 6 int n, f[N]; 7 8 void put(int x) { 9 if(x) put(x / 10), putchar(x % 10 + '0'); 10 } 11 12 int main() { 13 int mx = 0, bt = 0; 14 scanf("%d", &n); 15 for(int i = 1, x ; i <= n ; ++ i) { scanf("%d", &x), ++ f[x]; mx = max(mx, x); } 16 for(int t = mx ; t ; t >>= 1) ++ bt; 17 for(int j = 0 ; j <= bt ; ++ j) 18 for(int i = 1 ; i <= mx ; ++ i) 19 if(i & (1 << j)) 20 f[i - (1 << j)] += f[i]; 21 for(int i = 0 ; i <= int(1e6) ; ++ i) 22 if(f[i] == 0) puts("0"); 23 else put(f[i]), puts(""); 24 }