题目链接:点我啊╭(╯^╰)╮

题目大意:

nnn 个数,求子集内所有数异或为 000 的所有子集大小之和

解题思路:

考虑每个值对答案的贡献
    首先对 nnn 个数消一次元,得到 rrr 个基
    对于剩下 n−rn-rn−r 个数,每个数的贡献是 2n−r−12^{n-r-1}2n−r−1
    因为对于其中每个数,剩下 n−r−1n-r-1n−r−1 个数可选可不选,而且加到 rrr 个基后异或一定为 000

昨天晚上洗澡的时候突然想通!!
    为什么可以这么计算贡献???
    因为对于剩下的 n−rn-rn−r 个数的任意一种组合
    在 rrr 个基里 有且仅有 一组基能使得它们全部异或为 000

然后求 rrr 个基的贡献
    枚举其中每个基,对剩下(n−1)(n-1)(n−1)个数消元,设基的大小为 ∣D∣|D|∣D∣
    则枚举的这个基的贡献为 2n−∣D∣−12^{n-|D|-1}2n−∣D∣−1

一个优化点在于对(n−1)(n-1)(n−1)个数消元时,可以先预处理 n−rn-rn−r 个数的线性基
    然后将 r−1r-1r−1 个数插入到该线性基即可

观察可发现 ∣D∣==r|D| == r∣D∣==r !!!
    根据线性基的性质,一个序列可以有多个线性基,且他们的表示结果是相同的
    并且这些线性基中数字的个数也相同,即等价
    所以如果枚举的值不能被插入剩余 n−1n-1n−1 个数的线性基中,则该线性基就是这 nnn 个数的线性基,即 rrr

最后时间复杂度为: O(64n+643)O(64n + 64^3)O(64n+643)

核心:根据线性基的性质求每个数的贡献

#include<bits/stdc++.h>
#define rint register int
#define deb(x) cerr<<#x<<" = "<<(x)<<'\n';
//#pragma GCC optimize(3,"Ofast","inline")
using namespace std;
typedef long long ll;
using pii = pair <ll,int>;
const int maxn = 1e5 + 5;
const int mod = 1e9 + 7;
ll n, a[maxn], b[maxn], c[maxn];
ll cntb, cntc, cnt, r[maxn], ans;struct LB {ll num, cnt, d[70], p[70];void init() {num = 0;memset(d,0,sizeof(d));}bool insert(ll x) {for(int i=60; ~i; i--)if(x & (1ll<<i)) {if(!d[i]) {d[i] = x, num++;return true;}x ^= d[i];}return false;}bool check(ll x) {for(int i=60; ~i; i--)if(x & (1ll<<i)) {if(!d[i]) return false;x ^= d[i];}return true;}
} A, B, C;ll qpow(ll a, ll b) {ll ret = 1;while(b) {if(b & 1) ret = ret * a % mod;a = a * a % mod;b >>= 1;}return ret;
}int main() {while(~scanf("%lld", &n)) {A.init(), B.init();cnt = cntb = cntc = ans = 0;for(int i=1; i<=n; i++) {scanf("%lld", a+i);if(A.insert(a[i])) r[++cnt] = a[i];else b[++cntb] = a[i];}if(n-cnt) ans = 1ll * cntb * qpow(2, n-cnt-1) % mod;for(int i=1; i<=cntb; i++)if(B.insert(b[i]))c[++cntc] = b[i];for(int i=1; i<=cnt; i++) {C.init();for(int j=1; j<=cntc; j++) C.insert(c[j]);for(int j=1; j<=cnt; j++)if(i != j) C.insert(r[j]);if(C.check(r[i]))ans = (ans + qpow(2, n-C.num-1)) % mod;}printf("%lld\n", ans);}
}

牛客第一场 H XOR —— 线性基相关推荐

  1. 2021牛客第一场H.Hash Function—FFT求差值的卷

    https://ac.nowcoder.com/acm/contest/11166/H 官方题解. 比赛时,我们都是用暴力写的,数据太弱了,今天突然想起来,用fft写了一下. 主要使用fft求差值的卷 ...

  2. 2019牛客多校第四场 B xor (线性基求交)

    xor 思路 题目是要求[l,r][l, r][l,r]的所有集合是否都可以得到xxx,那么显然我们可以对这[l,r][l, r][l,r]个线性基求交,然后再特判能否xxx能否插入,如果能插入,显然 ...

  3. 2021牛客第一场 I. Increasing Subsequence-前缀和优化dp

    https://ac.nowcoder.com/acm/contest/11166/I 思路:dp[i][j] 是表示上上步走在i点,上一步走在j点的期望.首先我们很容易想到n^3的做法,那我们必须考 ...

  4. 2021牛客第一场 K.Knowledge Test about Match

    https://ac.nowcoder.com/acm/contest/11166/K 题意就是使得图中的那个式子最小,你的答案不一定是要最标准的,只要平均水平下和标准值的偏差不超过4%就行了. 有了 ...

  5. [2019牛客]第一场

    题目链接 A:Equivalent Prefixes 给你两个长度为n的序列a.b,求一个最大k值使,i-k 中任意一个区间的最小值下标都相同 我们用单调栈处理每个元素作为最小值的左端点. 我们把下标 ...

  6. 牛客练习赛26 D xor序列 (线性基)

    链接:https://ac.nowcoder.com/acm/contest/180/D 来源:牛客网 xor序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...

  7. 2019牛客多校训练营第一场 H题 HOR 题解

    题目描述: 输入描述: 输出描述: 示例1: 题解: 更多问题可关注牛客竞赛区,一个刷题.比赛.分享的社区. 传送门:https://ac.nowcoder.com/acm/contest/discu ...

  8. 【牛客 - 373B】666RPG(线性计数dp)

    题干: 链接:https://ac.nowcoder.com/acm/contest/373/B 来源:牛客网 在欧美,"666"是个令人极其厌恶和忌讳的数,被称为"野兽 ...

  9. bzoj 2844: albus就是要第一个出场(线性基)

    2844: albus就是要第一个出场 Time Limit: 6 Sec  Memory Limit: 128 MB Submit: 1635  Solved: 680 [Submit][Statu ...

最新文章

  1. 看看你的一身秋膘,是五花肉还是雪花肉?
  2. 网络慢是带宽不足?优化网络带宽的5个小窍门
  3. AIX 中关于文件存储的相关命令
  4. Day 6:在 Java 虚拟机上使用 Grails 进行快速 Web 开发
  5. 【CV秋季划】人脸算法那么多,如何循序渐进地学习好?
  6. java调用子系统代码_深入理解JAVA虚拟机-Idea远程执行本地Java代码 - Java 技术驿站-Java 技术驿站...
  7. 【BZOJ-2435】道路修建 (树形DP?)DFS
  8. Android插件丢失怎么办,Android studio推荐插件以及升级后插件丢失问题解决
  9. Java:基于LinkedList实现栈和队列
  10. 为提升 DCP 传输效率,阿里工程师竟然这样做!
  11. eclipse 改包名
  12. phpstorm 2017.1.3 最新版激活方法
  13. 我精心梳了犀利的发型,胡子刮得一干二净,去字节跳动面试,结果被怼了!...
  14. 深入理解Tomcat 6和Tomcat7的区别
  15. speedoffice(PPT)插入的表格怎么拆分单元格
  16. 快递地址自动识别填充
  17. python openpyxl 新建 excel xlsx
  18. 【POJ3710】Christmas Game 博弈 有限制的图上删边游戏(树形删边游戏进化1)
  19. 解决的问题记录(持续更新)
  20. Harbor2.2 用户角色权限速查

热门文章

  1. Graph Convolutional Neural Networks for Web-Scale Recommender Systems(用于Web级推荐系统的图形卷积神经网络)
  2. .NetCore搭建的文件服务有些文件不能下载
  3. word转pdf出现错误 解决方法
  4. 织梦DEDECMS 整合Kindeditor编辑器美化版nkeditor版可H5多图上传摒弃SWF上传
  5. 计算机教室学生上机须知,微机室上机须知
  6. 网络优化整体解决方案 企业网络优化的好帮手
  7. mybatis遍历foreach中or拼接
  8. 顺丰亮出无人机杀手锏:可以载重1.2吨
  9. 《专业主义》-书摘(下)
  10. 请记住内核中这个勤劳的监测卫士---Watchdog(Soft lockup篇)