2019牛客多校一 H. XOR (线性基)
大意: 给定序列, 求所有异或和为$0$的子序列大小之和.
先求出线性基, 假设大小为$r$.
对于一个数$x$, 假设它不在线性基内, 那么贡献为$2^{n-r-1}$
因为它与其余不在线性基内数的任意组合后均可以与线性基异或后变为$0$, 产生$1$的贡献.
所以问题就转化为求多少个数可以不在线性基内.
现任意求出一组线性基, 然后再暴力验证该组线性基内的数即可.
#include <iostream>
#include <sstream>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <string.h>
#include <bitset>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define PER(i,a,n) for(int i=n;i>=a;--i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl '\n'
#define DB(a) ({REP(__i,1,n) cout<<a[__i]<<' ';hr;})
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int P = 1e9+7, INF = 0x3f3f3f3f;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
ll qpow(ll a,ll n) {ll r=1%P;for (a%=P;n;a=a*a%P,n>>=1)if(n&1)r=r*a%P;return r;}
ll inv(ll x){return x<=1?1:inv(P%x)*(P-P/x)%P;}
inline int rd() {int x=0;char p=getchar();while(p<'0'||p>'9')p=getchar();while(p>='0'&&p<='9')x=x*10+p-'0',p=getchar();return x;}
//head const int N = 1e5+10;
int n, vis[N];
ll a[N];
struct _ {
ll a[66];
_ () {memset(a,0,sizeof a);}
inline bool ins(ll x) {
REP(i,1,*a) x=min(x,a[i]^x);
return x?a[++*a]=x:0;
}
inline _ operator + (const _ &rhs) const {
_ r;
REP(i,0,*a) r.a[i]=a[i];
REP(i,1,rhs.a[0]) r.ins(rhs.a[i]);
return r;
}
inline int chk(ll x) {
REP(i,1,*a) x=min(x,a[i]^x);
return !x;
}
} pre[N], suf[N]; int main() {
while (~scanf("%d", &n)) {
REP(i,1,n) {
scanf("%lld", a+i);
if ((pre[i]=pre[i-1]).ins(a[i])) vis[i] = 1;
}
if (pre[n].a[0]==n) {
puts("0");
continue;
}
suf[n+1] = _();
PER(i,1,n) (suf[i]=suf[i+1]).ins(a[i]);
int sum = 0;
REP(i,1,n) {
if (!vis[i]) ++sum;
else {
vis[i] = 0;
if ((pre[i-1]+suf[i+1]).chk(a[i])) ++sum;
}
}
int ans = sum*qpow(2,n-pre[n].a[0]-1)%P;
printf("%d\n", ans);
}
}
2019牛客多校一 H. XOR (线性基)的更多相关文章
- 2019牛客多校2 H Second Large Rectangle(悬线法)
题意: 求第二大子矩形 思路: 设最大子矩形x*y,第二大子矩形一定在一下情况中 (x-1)*y x*(y-1) 其他最大子矩形候选者 注意去重手法 代码: #include<iostream& ...
- 2019牛客多校八 H. How Many Schemes (AC自动机,树链剖分)
大意: 给定树, 每条边有一个字符集合, 给定$m$个模式串, $q$个询问$(u,v)$, 对于路径$(u,v)$中的所有边, 每条边从对应字符集合中取一个字符, 得到一个串$s$, 求$s$至少包 ...
- 2019牛客多校第八场 F题 Flowers 计算几何+线段树
2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...
- 2019牛客多校第一场 I Points Division(动态规划+线段树)
2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...
- 2019牛客多校第二场 A Eddy Walker(概率推公式)
2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...
- 2019牛客多校 Round1
Solved:4 Rank:143 A Equivalent Prefixes 题意:求一个最大的r满足在A,B两个数组中1,r里所有的子区间RMQ相等 题解:单调队列秒 #include <b ...
- 2019牛客多校 Round4
Solved:3 Rank:331 B xor 题意:5e4个集合 每个集合最多32个数 5e4个询问 询问l到r个集合是不是都有一个子集的xor和等于x 题解:在牛客多校第一场学了线性基 然后这个题 ...
- 2019牛客多校第一场H XOR 线性基模板
H XOR 题意 给出一组数,求所有满足异或和为0的子集的长度和 分析 n为1e5,所以枚举子集肯定是不可行的,这种时候我们通常要转化成求每一个数的贡献,对于一组数异或和为0.我们考虑使用线性基,对这 ...
- 2019牛客暑期多校训练营(第一场) - H - XOR - 线性基
https://ac.nowcoder.com/acm/contest/881/H 题意: 给定n个整数,求其中异或和为 \(0\) 的子集的大小的和. 题解思路: 首先转化为每个可以通过异或表示 \ ...
随机推荐
- 2018-2019-2 20165222《网络对抗技术》Exp9 Web安全基础
1.实践过程记录 1.字符串型注入. 2.整数型注入 3.注入语句查看其他内容 4.xss是一种漏洞,这种漏洞允许用户输入脚本并且浏览器提交的时候不加编码.这种东西是最为流行并且有害的web应用的问题 ...
- [mcI18N]mcI18N项目简介
mcI18N项目全称为我的世界模组本地化工具链项目(Minecraft Mod Localization Toolchain Project),是一个为我的世界模组本地化过程提供工具/平台支持的项目. ...
- wordpress插件开发从创建一个新的菜单开始
创建插件的目的 1.我们为什么要创建一个插件? IT界有一个知名的论调叫做不要造重复的轮子,如果有可能的话,你应该尽可能的从现有的网络资源上选择一个已有的插件来使用,而不是重新创造一个.它耗费的精力很 ...
- consul上删除已经注册的节点
1,在consul上找到要删除的ID, 2,在consul的节点上删除这个ID:固定格式: 命令如果运行成功:没有任何的返回值 [root@beta-commonsrv01 ~] $curl --re ...
- Zend Studio汉化失败,如何给Zend Studio进行汉化
首先,相信看我这篇博文的人也都遇到了和博主我一样的烦恼,就是汉化Zend Studio失败! 话不多说! 方案一,在线安装汉化包 Help–>Install New Software—>W ...
- 017-mac下project
下载安装使用 http://www.3322.cc/soft/35716.html
- 终极解决办法rvct Cannot obtain license for Compiler (feature compiler) with license version >= 3.1
参考:https://blog.csdn.net/nic_r/article/details/7458038 ARM C/C++ Compiler, RVCT4. [Build ] armcc : e ...
- iOS UITextField设置placeholder颜色
设置UITextField的placeholder颜色 UIColor *color = [UIColor blackColor]; textField.attributedPlaceholder = ...
- Golang 项目 GOPATH 总结
查看GOPATH go env 项目里执行:go get github/winyh/XXX 命令时, 包会下载到 GOPATH第一个目录下的src文件夹 项目里引入依赖的时候会自动到GOPATH里 ...
- tp5.1 model 方法下的like语句查询
$where_like = ['title','like','%' . $_GET['title'] . '%']; $result_list = $this->model->where( ...