牛客第一场 H XOR —— 线性基
题目链接:点我啊╭(╯^╰)╮
题目大意:
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 —— 线性基相关推荐
- 2021牛客第一场H.Hash Function—FFT求差值的卷
https://ac.nowcoder.com/acm/contest/11166/H 官方题解. 比赛时,我们都是用暴力写的,数据太弱了,今天突然想起来,用fft写了一下. 主要使用fft求差值的卷 ...
- 2019牛客多校第四场 B xor (线性基求交)
xor 思路 题目是要求[l,r][l, r][l,r]的所有集合是否都可以得到xxx,那么显然我们可以对这[l,r][l, r][l,r]个线性基求交,然后再特判能否xxx能否插入,如果能插入,显然 ...
- 2021牛客第一场 I. Increasing Subsequence-前缀和优化dp
https://ac.nowcoder.com/acm/contest/11166/I 思路:dp[i][j] 是表示上上步走在i点,上一步走在j点的期望.首先我们很容易想到n^3的做法,那我们必须考 ...
- 2021牛客第一场 K.Knowledge Test about Match
https://ac.nowcoder.com/acm/contest/11166/K 题意就是使得图中的那个式子最小,你的答案不一定是要最标准的,只要平均水平下和标准值的偏差不超过4%就行了. 有了 ...
- [2019牛客]第一场
题目链接 A:Equivalent Prefixes 给你两个长度为n的序列a.b,求一个最大k值使,i-k 中任意一个区间的最小值下标都相同 我们用单调栈处理每个元素作为最小值的左端点. 我们把下标 ...
- 牛客练习赛26 D xor序列 (线性基)
链接:https://ac.nowcoder.com/acm/contest/180/D 来源:牛客网 xor序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...
- 2019牛客多校训练营第一场 H题 HOR 题解
题目描述: 输入描述: 输出描述: 示例1: 题解: 更多问题可关注牛客竞赛区,一个刷题.比赛.分享的社区. 传送门:https://ac.nowcoder.com/acm/contest/discu ...
- 【牛客 - 373B】666RPG(线性计数dp)
题干: 链接:https://ac.nowcoder.com/acm/contest/373/B 来源:牛客网 在欧美,"666"是个令人极其厌恶和忌讳的数,被称为"野兽 ...
- bzoj 2844: albus就是要第一个出场(线性基)
2844: albus就是要第一个出场 Time Limit: 6 Sec Memory Limit: 128 MB Submit: 1635 Solved: 680 [Submit][Statu ...
最新文章
- 看看你的一身秋膘,是五花肉还是雪花肉?
- 网络慢是带宽不足?优化网络带宽的5个小窍门
- AIX 中关于文件存储的相关命令
- Day 6:在 Java 虚拟机上使用 Grails 进行快速 Web 开发
- 【CV秋季划】人脸算法那么多,如何循序渐进地学习好?
- java调用子系统代码_深入理解JAVA虚拟机-Idea远程执行本地Java代码 - Java 技术驿站-Java 技术驿站...
- 【BZOJ-2435】道路修建 (树形DP?)DFS
- Android插件丢失怎么办,Android studio推荐插件以及升级后插件丢失问题解决
- Java:基于LinkedList实现栈和队列
- 为提升 DCP 传输效率,阿里工程师竟然这样做!
- eclipse 改包名
- phpstorm 2017.1.3 最新版激活方法
- 我精心梳了犀利的发型,胡子刮得一干二净,去字节跳动面试,结果被怼了!...
- 深入理解Tomcat 6和Tomcat7的区别
- speedoffice(PPT)插入的表格怎么拆分单元格
- 快递地址自动识别填充
- python openpyxl 新建 excel xlsx
- 【POJ3710】Christmas Game 博弈 有限制的图上删边游戏(树形删边游戏进化1)
- 解决的问题记录(持续更新)
- Harbor2.2 用户角色权限速查
热门文章
- Graph Convolutional Neural Networks for Web-Scale Recommender Systems(用于Web级推荐系统的图形卷积神经网络)
- .NetCore搭建的文件服务有些文件不能下载
- word转pdf出现错误 解决方法
- 织梦DEDECMS 整合Kindeditor编辑器美化版nkeditor版可H5多图上传摒弃SWF上传
- 计算机教室学生上机须知,微机室上机须知
- 网络优化整体解决方案 企业网络优化的好帮手
- mybatis遍历foreach中or拼接
- 顺丰亮出无人机杀手锏:可以载重1.2吨
- 《专业主义》-书摘(下)
- 请记住内核中这个勤劳的监测卫士---Watchdog(Soft lockup篇)