题意:给你n个数字,然后让你求所有满足异或和为0的子集的大小之和。

先对n个数求线性基,设线性基大小为r,可以分别计算线性基内数的贡献和线性基外数的贡献

1.线性基外:共n-r个数,枚举每个数x,将线性基外剩余的n-r-1个数任意排列,显然共有 2^(n−r−1)个集合,这些集合再异或x的结果还是能被线性基异或出,所以x的贡献为 2^(n−r−1)。

2.线性基内:枚举每个数x,将所有剩余的n-1个数再求一次线性基,设为B,分两种情况:

(1) x能被插入线性基。那么显然x不能在任意一个集合中出现,x的贡献为0。

(2) x不能被插入线性基。此时B的大小必定也为r,因为B已经能表示所有n个数了。那么在除去x和B的情况下,剩余n-r-1个数显然也是任意排列,x贡献为 2^(n−r−1)。

#include<bits/stdc++.h>
#define ll long long
const int inf = 0x3f3f3f3f;
const int N = 1e5+7;
const ll mod = 1e9+7;
using namespace std;
struct Linear_basis{
int cnt;
ll b[65];
void init(){
cnt=0;
memset(b,0,sizeof(b));
}
bool insert(ll x){
for(int i=63;i>=0;i--){
if(x&(1LL<<i)){
if(!b[i]){
b[i]=x; cnt++;
return 1;
}
x^=b[i];
}
}
return 0;
}
};
Linear_basis x,y,z;
ll q_pow(ll a,ll n){
ll ans=1; ll base=a;
while(n){
if(n&1) ans=(ans*base)%mod;
base=(base*base)%mod;
n>>=1;
}
return ans;
}
ll a[N];
vector<ll> v,v1;
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n;
while(cin>>n){
x.init(); y.init(); z.init();
v.clear(); v1.clear();
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
if(!x.insert(a[i])){
v.push_back(a[i]);
}else v1.push_back(a[i]);
}
ll sum=0;
sum=(sum%mod+((n-x.cnt)*q_pow(2,n-x.cnt-1))%mod)%mod;
for(int i=0;i<v.size();i++){
y.insert(v[i]);
}
for(int i=0;i<v1.size();i++){
z=y;
for(int j=0;j<v1.size();j++){
if(i==j) continue;
z.insert(v1[j]);
}
if(!z.insert(v1[i])){
sum=(sum+q_pow(2,n-z.cnt-1))%mod;
}
}
cout<<sum<<endl;
}
return 0;
}

2019牛客暑期多校训练营(第一场)H XOR(线性基)的更多相关文章

  1. 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)

    题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...

  2. 2019牛客暑期多校训练营(第九场) D Knapsack Cryptosystem

    题目 题意: 给你n(最大36)个数,让你从这n个数里面找出来一些数,使这些数的和等于s(题目输入),用到的数输出1,没有用到的数输出0 例如:3  4 2 3 4 输出:0 0 1 题解: 认真想一 ...

  3. [题解] 2019牛客暑期多校第三场H题 Magic Line

    题目链接:https://ac.nowcoder.com/acm/contest/883/H 题意:二维平面上有n个不同的点,构造一条直线把平面分成两个点数相同的部分. 题解:对这n个点以x为第一关键 ...

  4. 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)

    layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...

  5. 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...

  6. 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...

  7. 2019牛客暑期多校训练营(第一场) B Integration (数学)

    链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...

  8. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

  9. 2019牛客暑期多校训练营(第一场) - H - XOR - 线性基

    https://ac.nowcoder.com/acm/contest/881/H 题意: 给定n个整数,求其中异或和为 \(0\) 的子集的大小的和. 题解思路: 首先转化为每个可以通过异或表示 \ ...

  10. 2019牛客暑期多校训练营(第二场)F.Partition problem

    链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...

随机推荐

  1. Ansible User 模块添加单用户并ssh-key复制

    Ansible User 模块添加单用户并ssh-key复制 1 Ansible 版本: ansible 2.9.6 config file = /etc/ansible/ansible.cfg co ...

  2. maven依赖与传递性依赖

    目录 依赖范围 传递性依赖 依赖调节 可选依赖 本文主要是针对<maven实战>书中关键知识点的学习记录,未免有纰漏或描述不到之处,建议购买阅读原书 首先贴出一个pom常见的一些元素释义 ...

  3. load data local带来的安全问题

    load data默认读的是服务器上的文件,但是加上local参数后,就可以将本地具有访问权限的文件加载到数据库中,这在带来方便的同时,也带来了以下安全问题, 可以任意加载本地文件到数据库, 在web ...

  4. a[i][j] 和 a[j][i] 有什么区别?

    本文以一个简单的程序开头--数组赋值: int LEN = 10000;int[][] arr = new int[LEN][LEN]; for (int i = 0; i < LEN; i++ ...

  5. 【ORA】ORA-00030: User session ID does not exist.

    今天巡检,查询锁相关的情况的时候,确认业务后,准备将锁干掉,但是干掉的时候报了一个错误,ORA-00030 发现回话不存在,我以为pmon进程已经将锁进程kill掉了,就再次查看,发现,还是存在 这个 ...

  6. 网件wndr4300 ttl连接

    路由成砖而还能进入cfe或uboot等情况下,可以通过ttl快速救砖. r4300主板有TTL的接线脚,脚的顺序可以找在OpenWrt的wiki上找到. 如下图4个TTL针在左下角,从下往上分别是GN ...

  7. 使用NIM Server网络半自动安装AIX系统

    一.NIM配置 1.安装NIMServer前准备 1.1.配置IP地址 # ifconfig –a #检查当前IP地址# # smitty mktcpip #设置IP地址# 选择第一块网卡(插网线的网 ...

  8. 【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件

    问题描述 在博文([Azure App Service For Container]创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务)中我们通过VS 201 ...

  9. linux 文件目录权限

    文件目录权限: 什么是文件权限: 在Linux中,每个文件都有所属的所有者,和所有组,并且规定了文件的所有者,所有组以及其他人对文件的,可读,可写,可执行等权限. 对于目录的权限来说,可读是读取目录文 ...

  10. Django-html文件实例

    1.实例1,登陆界面 <!DOCTYPE html> <head> <meta http-equiv="content-type" content=& ...