有n个整数,问从他们中取出若干个数字相与之后结果是0的有多少组。
  答案比较大,输出对于 1,000,000,007 (1e9+7)取模后的结果。

 Input
  第一行输入一个整数n。(1<=n<=1,000,000).
  第二行有n个整数a[0],a[1],a[2],...a[n-1],以空格分开.(0<=a[i]<=1,000,000)
 Output
  对于每一组数据,输出一个整数。

  又是没见过的姿势...

  如果对于每个数x都可以算出a[i]&x==x的数的个数的话就可以算了。

  f[i][j]表示 有多少个数 与j 得到的结果和j二进制表示下第i位到第20位相同(最低位为第0位),第0到i-1位都和j完全一样。

  初始化f[20][i]=读入的数组中等于i的数的个数。

  f[i][j]=

    f[i+1][j],j的第i位上是1

    f[i+1][j]+f[i+1][j+2^i],j的第i位上是0

  最后再容斥统计一波,ans=sum{ -1^num1 *f[0][i] }。i=0..2^20-1,num1是i二进制下1的个数

 #include<cstdio>
#include<iostream>
#include<cstring>
const int maxn=,modd=;
int f[maxn],a[maxn],two[maxn],n1[maxn];
int i,j,k,n,m; int ra,fh;char rx;
inline int read(){
rx=getchar(),ra=,fh=;
while((rx<''||rx>'')&&rx!='-')rx=getchar();
if(rx=='-')fh=-,rx=getchar();
while(rx>=''&&rx<='')ra*=,ra+=rx-,rx=getchar();return ra*fh;
}
inline void MOD(int &x){
if(x>=modd)x-=modd;else if(x<)x+=modd;
}
int main(){
n=read();int mx=(<<)-;register int i,j;
for(i=;i<=n;i++)f[a[i]=read()]++;
for(i=two[]=;i<=n;i++)MOD(two[i]=two[i-]<<);
for(i=;i>=;i--)
for(j=;j<=mx;j++)
if(!((j>>i)&))f[j]+=f[j|(<<i)];
int ans=;
for(i=;i<=mx;i++){//printf("i:%d f:%d\n",i,f[i]);
n1[i]=n1[i>>]+(i&);
if(n1[i]&)MOD(ans-=two[f[i]]);else MOD(ans+=two[f[i]]);
}
printf("%d\n",ans);
}

[51nod1407]与与与与的更多相关文章

  1. 51nod部分容斥题解

    51nod1434 区间LCM 跟容斥没有关系.首先可以确定的一个结论是:对于任意正整数,有1*2*...*n | (k+1)*(k+2)*...*(k+n).因为这就是$C_{n+k}^{k}$. ...

随机推荐

  1. iOS MJRefresh下拉、上拉刷新自定义以及系统详细讲解

    更新: MJRefresh 更新功能,默认根据数据来源 自动显示 隐藏footer,这个功能可以关闭 DoctorTableView.mj_footer.automaticallyHidden = N ...

  2. NSQ之粗读浅谈

    回顾: 以前一直是C++开发(客户端),最近听同事讲go语言不错,随后便决定先从go语法开始投向go的怀抱.由于历史原因学习go语法时,用了半天的时间看完了菜鸟教程上相关资料,后来又看了易百教程上的一 ...

  3. SpringMVC总结

    本文是对慕课网上"搞定SSM开发"路径的系列课程的总结,详细的项目文档和课程总结放在github上了.点击查看 MVC简介 Model-View-Control,MVC是一种架构模 ...

  4. 使用Libmicrohttpd搭建内嵌(本地)服务器

    Libmicrohttpd简介 GNU Libmicrohttpd是一个用来在项目中内嵌http服务器的C语言库,它具有以下几个非常鲜明的特点: C语言库,小而快. API非常简单,且都是可重入的. ...

  5. 西门子flexable创建画面

    一.wincc flexable 创建画面包括以下四点 二.具体操作 1.组态画面模板 1)使用该模板的画面包括该模板的所有组件,一个模板也是一个画面 2)给模板上添加一个文本域如下图,则画面1也会显 ...

  6. tensorflow ckpt文件转caffemodel时遇到的坑

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } p.p2 ...

  7. Linux第三节

    三期第三讲1.ls --help:查看帮助(man 命令) :ls -l: 长格式形式: ls -i: 文件的inode节点: ls -t: 按修改时间排序: ls -a :显示隐藏文件: 2.文件管 ...

  8. [经验分享]WebAPI中返回类型JsonMessage的应用

    这是一个绝无仅有的好类型,一个你爱不释手的好类型,好了,不扯了,直接上干货. 相信大家都知道,在调用接口的时候返回Json数据已经成为一种不成文的标准,因为它的解析快,易读等优秀的特性,所以被绝大多数 ...

  9. Asp,NET控制文件上传的大小

    在web.config中的system.web 节点下添加如下代码: 第2行的maxRequestLength="8192",这里限制最大为8MB,可以自行设置.execution ...

  10. requireJS(版本是2.1.15)学习教程(一)

    一:为什么要使用requireJS? 很久之前,我们所有的JS文件写到一个js文件里面去进行加载,但是当业务越来越复杂的时候,需要分成多个JS文件进行加载,比如在页面中head内分别引入a.js,b. ...