有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. iOS PickerView选择视图

    原文demo: @interface ViewController ()<UIPickerViewDelegate,UIPickerViewDataSource> { UIPickerVi ...

  3. java.lang基础数据类型boolean、char、byte、short、int、long、float、double (JDK1.8)

    java.lang.Boolean public static int hashCode(boolean value) { return value ? 1231 : 1237; } JDK 1.8新 ...

  4. Achartengine.jar绘制动态图形一 --饼图

    PS:我们在做安卓程序的时候,免不了会做一些图形,自己可以选择自定义view ,就是用Canvas画,也可以用写好的jar包,就是achartengine.jar,使用jar包的好处就快速绘制图形,不 ...

  5. ES6 二进制数组

    二进制数组(ArrayBuffer对象.TypedArray视图和DataView视图)是JavaScript操作二进制数据的一个接口.这些对象早就存在,属于独立的规格(2011年2月发布),ES6将 ...

  6. DEDECMS最新5.7版在Windows下的Memcache安装

    一,织梦后台后台设置进入系统后台,在[系统基本参数]下面的"性能选项"卡当中,关于memcache进行如下配置: cfg_memcache_enable : 是否启用memcach ...

  7. Java <clinit> & <init>

    在编译生成class文件时,会自动产生两个方法,一个是类的初始化方法<clinit>, 另一个是实例的初始化方法<init>.     <clinit>:在jvm第 ...

  8. IT小白学习Discuz!框架(一)

    1.Discuz!是什么? 答:(1).Crossday Discuz! Board(简称 Discuz!)是北京康盛新创科技有限责任公司推出的一套通用的社区论坛软件系统. (2).Crossday ...

  9. linux编译php gd扩展

    1 安装gd的依赖包 yum -y install gd gd2 gd-devel gd2-devel zlib freetype 2 安装jpeg: wget http://www.ijg.org/ ...

  10. java基础之关键字static

        在java当中有很多关键字,static便是其中一个,它很普通但我们经常需要运用到它,所以要了解static是非常有必要的.   鉴于本人知识结构有限,若有错误忘不吝赐教,甚为感谢.   一. ...