1406 与查询

题目来源: CodeForces
基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
 

有n个整数。输出他之中和x相与之后结果为x的有多少个。x从0到1,000,000

Input
  1. 第一行输入一个整数n。(1<=n<=1,000,000).
  2. 第二行有n个整数a[0],a[1],a[2],...a[n-1],以空格分开.(0<=a[i]<=1,000,000)
Output
  1. 对于每一组数据,输出1000001行,第i行对应和i相与结果是i的有多少个数字。
Input示例
  1. 3
  2. 2 3 3
Output示例
  1. 3
  2. 2
  3. 3
  4. 2
  5. 0
  6. 0
  7. ……
  8. 后面还有很多0
  1. /*
  2. 51 nod 1406 与查询
  3.  
  4. problem:
  5. 有n个整数。输出他之中和x相与之后结果为x的有多少个。x从0到1000000
  6.  
  7. solve:
  8. 如果x与a[i]相与之后为x,那么x必定是a[i]二进制中1的组合.
  9. 所以就成了快速求x中1的所有组合.
  10.  
  11. 最开始是枚举x,然后从高位到低位枚举. cnt[i - (1 << j)] += cnt[i];
  12. 但是有的时候会出现重复,比如: 1011.
  13. 循环置换一下就好了
  14.  
  15. hhh-2016/09/09-16:19:21
  16. */
  17. #pragma comment(linker,"/STACK:124000000,124000000")
  18. #include <algorithm>
  19. #include <iostream>
  20. #include <cstdlib>
  21. #include <stdio.h>
  22. #include <cstring>
  23. #include <vector>
  24. #include <math.h>
  25. #include <queue>
  26. #include <set>
  27. #include <map>
  28. #define lson i<<1
  29. #define rson i<<1|1
  30. #define ll long long
  31. #define clr(a,b) memset(a,b,sizeof(a))
  32. #define scanfi(a) scanf("%d",&a)
  33. #define scanfs(a) scanf("%s",a)
  34. #define scanfl(a) scanf("%I64d",&a)
  35. #define scanfd(a) scanf("%lf",&a)
  36. #define key_val ch[ch[root][1]][0]
  37. #define eps 1e-7
  38. #define inf 0x3f3f3f3f3f3f3f3f
  39. using namespace std;
  40. const ll mod = 1000000007;
  41. const int maxn = 1001000;
  42. const double PI = acos(-1.0);
  43. const int limit = 33;
  44.  
  45. template<class T> void read(T&num)
  46. {
  47. char CH;
  48. bool F=false;
  49. for(CH=getchar(); CH<'0'||CH>'9'; F= CH=='-',CH=getchar());
  50. for(num=0; CH>='0'&&CH<='9'; num=num*10+CH-'0',CH=getchar());
  51. F && (num=-num);
  52. }
  53. int stk[70], tp;
  54. template<class T> inline void print(T p)
  55. {
  56. if(!p)
  57. {
  58. puts("0");
  59. return;
  60. }
  61. while(p) stk[++ tp] = p%10, p/=10;
  62. while(tp) putchar(stk[tp--] + '0');
  63. putchar('\n');
  64. }
  65.  
  66. int cnt[maxn];
  67.  
  68. int main()
  69. {
  70. int n,Max,x;
  71. clr(cnt,0);
  72. read(n);
  73. Max = 0;
  74. for(int i = 1; i <=n; i++)
  75. {
  76. read(x),Max = max(x,Max);
  77. cnt[x] ++ ;
  78. }
  79. int begi = min(1000001,Max);
  80. // cnt[0] = n;
  81. for(int j = 20; j >= 0 ; j --)
  82. {
  83. for(int i = 1; i <= begi; i++)
  84. {
  85. if(i & (1 << j))
  86. {
  87. cnt[i - (1 << j)] += cnt[i];
  88. }
  89. }
  90. }
  91. cnt[0] = n;
  92. for(int i = 0;i <= 1000000;i ++)
  93. print(cnt[i]);
  94. // for(int i = 0; i <= 10; i ++)
  95. // print(cnt[i]);
  96. return 0;
  97. }

  

51 nod 1406 与查询的更多相关文章

  1. 51 NOD 1406 and query

    我们知道一个数S会对所有它的子集S'产生1的贡献,但是我们直接枚举子集是 3^(log2 1000000)的,会炸掉:如果直接把每个有1的位变成0往下推也会凉掉,因为这样会有很多重复的. 但是我们发现 ...

  2. 51 nod 1439 互质对(Moblus容斥)

    1439 互质对 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 有n个数字,a[1],a[2],…,a[n].有一个集合,刚开 ...

  3. 51 nod 1427 文明 (并查集 + 树的直径)

    1427 文明 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 难度:6级算法题   安德鲁在玩一个叫“文明”的游戏.大妈正在帮助他. 这个游 ...

  4. 51 nod 1188 最大公约数之和 V2

    1188 最大公约数之和 V2 题目来源: UVA 基准时间限制:2 秒 空间限制:262144 KB 分值: 160 难度:6级算法题   给出一个数N,输出小于等于N的所有数,两两之间的最大公约数 ...

  5. 51 nod 1495 中国好区间

    1495 中国好区间 基准时间限制:0.7 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   阿尔法在玩一个游戏,阿尔法给出了一个长度为n的序列,他认为,一段好的区间,它的长度是& ...

  6. 51 nod 1055 最长等差数列(dp)

    1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 N个不同的正整数,找出由这些数组成的最长的等差数列.     例如:1 3 5 6 8 9 ...

  7. 51 nod 1421 最大MOD值

    1421 最大MOD值 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 有一个a数组,里面有n个整数.现在要从中找到两个数字(可以 ...

  8. 51 nod 1681 公共祖先 (主席树+dfs序)

    1681 公共祖先 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   有一个庞大的家族,共n人.已知这n个人的祖辈关系正好形成树形结构(即父亲向儿子连边). 在另 ...

  9. 51 nod 1766 树上的最远点对(线段树+lca)

    1766 树上的最远点对 基准时间限制:3 秒 空间限制:524288 KB 分值: 80 难度:5级算法题   n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间,表示点的标号请你求出两个 ...

随机推荐

  1. Software Engineering-HW3 264&249

    title: Software Engineering-HW3 date: 2017-10-05 10:04:08 tags: HW --- 小组成员 264 李世钰 249 王成科 项目地址 htt ...

  2. 关于from nltk.book import * 报错解决方法

    import nltk nltk.download() 在使用上面命令安装了nltk库并运行下载后,再输入from nltk.book import * 往往会出现这样的错误提示: 出现这种错误往往是 ...

  3. 项目Alpha冲刺Day7

    一.会议照片 二.项目进展 1.今日安排 今天都是课,主要就是用空闲时间熟悉一下框架使用以及继续进行框架搭建. 2.问题困难 前台界面框架vue和element-ui的写法要适应. 3.心得体会 vu ...

  4. VS系列控制台闪退解决

    查阅--->总结-->实践--> 按红色标识走 ,完美解决! 至此,完美解决:原理不深究:

  5. 如何用tomcat实现类似weblogic那样的热部署方式

    平时weblogic部署程序包时一般是到控制台去部署,不需要重启. 相反之前用tomcat部署应用时,我一般都是把tomcat重启来完成程序包的更新或新包部署.但是这次要部署的应用有点多,大概10几个 ...

  6. 用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载

    用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载,将一个完整的项目进行展示,主要有以下几个部分: 1.servlet部分   Export 2.工具类:TxtFileU ...

  7. 用nodejs 开发的智能提示

    用nodejs 开发的智能提示 时间:2014-07-01 03:50:18 类别:搜索引擎 访问: 2576 次 感谢:http://lutaf.com/223.htm 智能提示对于搜索非常重要,相 ...

  8. 新概念英语(1-113)Small Change

    Lesson 113 Small Change 零钱 Listen to the tape then answer this question. Who has got some change?听录音 ...

  9. Linux知识积累(8)卸载安装jdk

    java -version yum remove java yum groupremove java java -version tar -zxvf jdk-8u60-linux-x64.tar.gz ...

  10. Couchbase忘记登录密码怎么办

    以下都为root用户操作: 1.先关闭couchbase /opt/couchbase/etc/couchbase_init.d stop 2.切换到下面的路径,删除这个目录下除logs的所有文件,按 ...