51 nod 1406 与查询
1406 与查询
有n个整数。输出他之中和x相与之后结果为x的有多少个。x从0到1,000,000
- 第一行输入一个整数n。(1<=n<=1,000,000).
- 第二行有n个整数a[0],a[1],a[2],...a[n-1],以空格分开.(0<=a[i]<=1,000,000)
- 对于每一组数据,输出1000001行,第i行对应和i相与结果是i的有多少个数字。
- 3
- 2 3 3
- 3
- 2
- 3
- 2
- 0
- 0
- ……
- 后面还有很多0
- /*
- 51 nod 1406 与查询
- problem:
- 有n个整数。输出他之中和x相与之后结果为x的有多少个。x从0到1000000
- solve:
- 如果x与a[i]相与之后为x,那么x必定是a[i]二进制中1的组合.
- 所以就成了快速求x中1的所有组合.
- 最开始是枚举x,然后从高位到低位枚举. cnt[i - (1 << j)] += cnt[i];
- 但是有的时候会出现重复,比如: 1011.
- 循环置换一下就好了
- hhh-2016/09/09-16:19:21
- */
- #pragma comment(linker,"/STACK:124000000,124000000")
- #include <algorithm>
- #include <iostream>
- #include <cstdlib>
- #include <stdio.h>
- #include <cstring>
- #include <vector>
- #include <math.h>
- #include <queue>
- #include <set>
- #include <map>
- #define lson i<<1
- #define rson i<<1|1
- #define ll long long
- #define clr(a,b) memset(a,b,sizeof(a))
- #define scanfi(a) scanf("%d",&a)
- #define scanfs(a) scanf("%s",a)
- #define scanfl(a) scanf("%I64d",&a)
- #define scanfd(a) scanf("%lf",&a)
- #define key_val ch[ch[root][1]][0]
- #define eps 1e-7
- #define inf 0x3f3f3f3f3f3f3f3f
- using namespace std;
- const ll mod = 1000000007;
- const int maxn = 1001000;
- const double PI = acos(-1.0);
- const int limit = 33;
- template<class T> void read(T&num)
- {
- char CH;
- bool F=false;
- for(CH=getchar(); CH<'0'||CH>'9'; F= CH=='-',CH=getchar());
- for(num=0; CH>='0'&&CH<='9'; num=num*10+CH-'0',CH=getchar());
- F && (num=-num);
- }
- int stk[70], tp;
- template<class T> inline void print(T p)
- {
- if(!p)
- {
- puts("0");
- return;
- }
- while(p) stk[++ tp] = p%10, p/=10;
- while(tp) putchar(stk[tp--] + '0');
- putchar('\n');
- }
- int cnt[maxn];
- int main()
- {
- int n,Max,x;
- clr(cnt,0);
- read(n);
- Max = 0;
- for(int i = 1; i <=n; i++)
- {
- read(x),Max = max(x,Max);
- cnt[x] ++ ;
- }
- int begi = min(1000001,Max);
- // cnt[0] = n;
- for(int j = 20; j >= 0 ; j --)
- {
- for(int i = 1; i <= begi; i++)
- {
- if(i & (1 << j))
- {
- cnt[i - (1 << j)] += cnt[i];
- }
- }
- }
- cnt[0] = n;
- for(int i = 0;i <= 1000000;i ++)
- print(cnt[i]);
- // for(int i = 0; i <= 10; i ++)
- // print(cnt[i]);
- return 0;
- }
51 nod 1406 与查询的更多相关文章
- 51 NOD 1406 and query
我们知道一个数S会对所有它的子集S'产生1的贡献,但是我们直接枚举子集是 3^(log2 1000000)的,会炸掉:如果直接把每个有1的位变成0往下推也会凉掉,因为这样会有很多重复的. 但是我们发现 ...
- 51 nod 1439 互质对(Moblus容斥)
1439 互质对 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 有n个数字,a[1],a[2],…,a[n].有一个集合,刚开 ...
- 51 nod 1427 文明 (并查集 + 树的直径)
1427 文明 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 安德鲁在玩一个叫“文明”的游戏.大妈正在帮助他. 这个游 ...
- 51 nod 1188 最大公约数之和 V2
1188 最大公约数之和 V2 题目来源: UVA 基准时间限制:2 秒 空间限制:262144 KB 分值: 160 难度:6级算法题 给出一个数N,输出小于等于N的所有数,两两之间的最大公约数 ...
- 51 nod 1495 中国好区间
1495 中国好区间 基准时间限制:0.7 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 阿尔法在玩一个游戏,阿尔法给出了一个长度为n的序列,他认为,一段好的区间,它的长度是& ...
- 51 nod 1055 最长等差数列(dp)
1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 ...
- 51 nod 1421 最大MOD值
1421 最大MOD值 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 有一个a数组,里面有n个整数.现在要从中找到两个数字(可以 ...
- 51 nod 1681 公共祖先 (主席树+dfs序)
1681 公共祖先 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 有一个庞大的家族,共n人.已知这n个人的祖辈关系正好形成树形结构(即父亲向儿子连边). 在另 ...
- 51 nod 1766 树上的最远点对(线段树+lca)
1766 树上的最远点对 基准时间限制:3 秒 空间限制:524288 KB 分值: 80 难度:5级算法题 n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间,表示点的标号请你求出两个 ...
随机推荐
- Software Engineering-HW3 264&249
title: Software Engineering-HW3 date: 2017-10-05 10:04:08 tags: HW --- 小组成员 264 李世钰 249 王成科 项目地址 htt ...
- 关于from nltk.book import * 报错解决方法
import nltk nltk.download() 在使用上面命令安装了nltk库并运行下载后,再输入from nltk.book import * 往往会出现这样的错误提示: 出现这种错误往往是 ...
- 项目Alpha冲刺Day7
一.会议照片 二.项目进展 1.今日安排 今天都是课,主要就是用空闲时间熟悉一下框架使用以及继续进行框架搭建. 2.问题困难 前台界面框架vue和element-ui的写法要适应. 3.心得体会 vu ...
- VS系列控制台闪退解决
查阅--->总结-->实践--> 按红色标识走 ,完美解决! 至此,完美解决:原理不深究:
- 如何用tomcat实现类似weblogic那样的热部署方式
平时weblogic部署程序包时一般是到控制台去部署,不需要重启. 相反之前用tomcat部署应用时,我一般都是把tomcat重启来完成程序包的更新或新包部署.但是这次要部署的应用有点多,大概10几个 ...
- 用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载
用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载,将一个完整的项目进行展示,主要有以下几个部分: 1.servlet部分 Export 2.工具类:TxtFileU ...
- 用nodejs 开发的智能提示
用nodejs 开发的智能提示 时间:2014-07-01 03:50:18 类别:搜索引擎 访问: 2576 次 感谢:http://lutaf.com/223.htm 智能提示对于搜索非常重要,相 ...
- 新概念英语(1-113)Small Change
Lesson 113 Small Change 零钱 Listen to the tape then answer this question. Who has got some change?听录音 ...
- Linux知识积累(8)卸载安装jdk
java -version yum remove java yum groupremove java java -version tar -zxvf jdk-8u60-linux-x64.tar.gz ...
- Couchbase忘记登录密码怎么办
以下都为root用户操作: 1.先关闭couchbase /opt/couchbase/etc/couchbase_init.d stop 2.切换到下面的路径,删除这个目录下除logs的所有文件,按 ...