【2019牛客暑期多校训练营(第一场) - H】XOR(线性基,期望的线性性)

题干:

链接:https://ac.nowcoder.com/acm/contest/881/H
来源:牛客网
 

Bobo has a set A of n integers a1,a2,…,ana1,a2,…,an.
He wants to know the sum of sizes for all subsets of A whose xor sum is zero modulo (109+7)(109+7).
Formally, find (∑S⊆A,⊕x∈Sx=0|S|)mod(109+7)(∑S⊆A,⊕x∈Sx=0|S|)mod(109+7). Note that ⊕⊕ denotes the exclusive-or (XOR).

输入描述:

The input consists of several test cases and is terminated by end-of-file.The first line of each test case contains an integer n.
The second line contains n integers a1,a2,…,ana1,a2,…,an.* 1≤n≤1051≤n≤105
* 0≤ai≤10180≤ai≤1018
* The number of test cases does not exceed 100.
* The sum of n does not exceed 2×1062×106.

输出描述:

For each test case, print an integer which denotes the result.

示例1

输入

复制

1
0
3
1 2 3
2
1000000000000000000 1000000000000000000

输出

复制

1
3
2

题目大意:

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

解题报告:

根据期望的线性性(Orz),转化一下题意:相当于求每个数出现在子集中的次数之和。

那么如何求每个的合法出现次数呢?对于每个数x的出现次数,也就是这个数x必选的情况下,有多少种选择方案可以让剩余n-1个数凑出x来。然后就可以x\oplus x=0

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

1.线性基外:共n-r个数,枚举每个数,让他必选,将线性基外剩余的n-r-1个数任意排列(也可不选),则共有 2^{n-r-1}种方案,每种方案再异或x的结果,能被刚刚求出的那组线性基唯一的异或出来,所以每个数的贡献为:1\times2^{n-r-1} = 2^{n-r-1}。又因为一共有n-r个数,所以线性基外的数的贡献为:(n-r)\times2^{n-r-1}

2.线性基内:依旧是枚举每个数x(注意枚举的x是a数组中的数而不是b1中的数),求出剩余n-1个数凑出x的方案数,做法是这样的:将所有剩余的n-1个数再求一次线性基,设为b2,分两种情况:

(1) x不能被b2异或出。那么显然x不能在任意一个集合中出现,x的贡献为0。

(2) x可以被b2异或出。此时b2的大小必定也为r,因为b2已经能表示所有n个数了。那么在除去x和b2的情况下,剩余n-r-1个数显然也是任意排列,x贡献为 2^{n-r-1}

对于在线性基内的方案统计时,还有另一种理解:因为这个数x在线性基内,也就是说他代表了二进制中的一个Bit位在线性基中的存在,那么我们要凑出这个x的话(注意x依旧是原数,而不是线性基内的数字),就必须要找一个可以代表这个Bit位的数字来替代他,也就是:用除去x的剩余n-1个数,重构一组线性基后,如果基的大小仍为b1.r,则说明x在原基b1中不是必须的,可以被替代,此时也才说明x对答案做出了贡献,不然的话只有x能代表这个Bit,那他代表给谁看?和谁去异或成0?所以对答案没有任何贡献。所以写代码最后一部分的时候,既可以这样写:if(b3.r == b1.r) 也可以这样写:if(b3.ins(a[i])==0)也就是说如果插不进去a[i]了,就代表他对答案做出了贡献,因为新基可以凑出所有数字。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
const ll mod = 1e9 + 7;
int n,top;
ll a[MAX],ans,tmp,b[MAX];
struct Node {ll Base[66];int r;void init() {memset(Base,0,sizeof Base);r=0;}bool ins(ll x) {for(int i = 62; i>=0; i--) {if(x & (1LL<<i)) {if(Base[i] == 0) {Base[i] = x;r++;return 1;}else x ^= Base[i];}if(x == 0) return 0;}return 0;}
} b1,b2,b3;
ll qpow(ll a,ll k) {ll res = 1;while(k) {if(k&1) {res = (res * a) % mod;}k>>=1;a = (a * a)%mod;}return res;
}
int main()
{while(~scanf("%d",&n)) {ans = tmp = 0;b1.init();b2.init();top=0;for(int i = 1; i<=n; i++) scanf("%lld",a+i);for(int i = 1; i<=n; i++) {if(b1.ins(a[i])) b[++top] = a[i];else b2.ins(a[i]);}if(n == b1.r) {printf("0\n");continue;}ans = (n-b1.r) * qpow(2,n - b1.r - 1);for(int i = 1; i<=top; i++) {b3 = b2;for(int j = 1; j<=top; j++) {if(i == j) continue;b3.ins(b[j]);}if(b3.r == b1.r) tmp++;}ans = ans + tmp*qpow(2,n - b1.r - 1);printf("%lld\n",ans%mod);}  return 0 ;
}

AC代码2:(咖啡鸡的代码,也不知道是维护了个啥)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+3;
const ll M=1000000007;
ll v;
struct base{ll r[64],o[64];bool ins(ll x){bool flag=0;ll tmp=0;for (int i=62;i>=0;i--)if (x>>i){if (!r[i]) o[i]=tmp|(1ll<<i),r[i]=x,flag=1;x^=r[i]; tmp^=o[i];if (!x) break;}if (!flag){v|=tmp;}return flag;}void clear(){for (int i=0;i<64;i++) r[i]=0,o[i]=0;}
}f;
ll pow_(ll x,ll y){ll ret=1;while (y){if (y&1) ret=ret*x%M;x=x*x%M; y>>=1;}return ret;
}
int n,w;
ll a[maxn],ans;int main(){while (scanf("%d",&n)==1){for (int i=1;i<=n;i++) scanf("%lld",&a[i]);for (int i=0;i<64;i++) v=0; f.clear(); ans=w=0;for (int i=1;i<=n;i++){ans+=!f.ins(a[i]);}for (int i=0;i<64;i++) {if (v&(1ll<<i)) ++ans;if (f.r[i]) ++w;}cout << ans*pow_(2ll,n-1-w)%M << endl;}return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习入门必备的13张“小抄”(附下载)

目录 1&#xff09;TensorFlow 2&#xff09;Keras 3&#xff09;Neural Networks 4&#xff09;Numpy 5&#xff09;Scipy 6&#xff09;Pandas 7&#xff09;Scikit-learn 8&#xff09;Matplotlib 9&#xff09;PythonForDataScience 最近在github上发现了很有用的…

ROS launch文档介绍

本文章转自&#xff1a;https://charlyhuangrostutorial.wordpress.com/2015/08/12/20/ 前面已经提过关于launch 档的角色&#xff0c;很类似bash 档&#xff0c;基本上就是把所有为了执行某个特定功能所需要的指令都写在一张纸上&#xff0c;交给ROS 一次执行开来。举例来说&a…

【2019牛客暑期多校训练营(第一场) - A】Equivalent Prefixes(单调栈,tricks)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/881/A 来源&#xff1a;牛客网 Two arrays u and v each with m distinct elements are called equivalent if and only if RMQ(u,l,r)RMQ(v,l,r) for all 1≤l≤r≤m where RMQ(w,l,r) denotes th…

吴恩达机器学习作业(1):线性回归

目录 1&#xff09;导入相关库和数据 2&#xff09;代价函数 3&#xff09;批量梯度下降 4&#xff09;绘制线性模型 前阵子在网易云课堂学习了吴恩达老师的机器学习课程&#xff0c;今天结合网上资料&#xff0c;用Python实现了线性回归作业&#xff0c;共勉。建议大家使…

【HDU - 5886】Tower Defence(树的直径,思维,dp)

题干&#xff1a; There was a civil war between two factions in Skyrim, a province of the Empire on the continent of Tamriel. The Stormcloaks, led by Ulfric Stormcloak, are made up of Skyrims native Nord race. Their goal is an independent Skyrim free from …

(1).数据结构概述

目录 数据结构概述 预备知识&#xff1a; 模块&#xff1a; 这篇笔记是根据郝斌老师的上课讲义整理而得&#xff1a; 数据结构概述 定义&#xff1a;如何把现实中大量复杂的问题以特定的数据类型和特定的存储结构保存到主存储器中(内存)中&#xff0c; 以及在此基础上为实…

ROS导航之参数配置和自适应蒙特卡罗定位

我们的机器人使用两种导航算法在地图中移动&#xff1a;全局导航&#xff08;global&#xff09;和局部导航&#xff08;local)。这些导航算法通过代价地图来处理地图中的各种信息&#xff0c;导航stack使用两种costmaps http://www.cnblogs.com/zjiaxing/p/5543386.html存储环…

吴恩达机器学习作业(2):多元线性回归

目录 1&#xff09;数据处理 2&#xff09;代价函数 3&#xff09;Scikit-learn训练数据集 4&#xff09;正规方程 练习1还包括一个房屋价格数据集&#xff0c;其中有2个变量&#xff08;房子的大小&#xff0c;卧室的数量&#xff09;和目标&#xff08;房子的价格&#…

【洛谷 - P2756】飞行员配对方案问题(网络流最大流,输出方案)

题干&#xff1a; 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员&#xff0c;其中1 名是英国飞行员&#xff0c;另1名是外籍飞行员。在众多的飞行员中…

office 安装错误 1920 osppsvc服务无法启动 failed to start

今天忽然发现Office 报 1920 错误&#xff0c;按照网上的的各类教程&#xff0c;还是不行&#xff0c;没有办法启动。答搞了一下午了&#xff0c;终于Ok&#xff0c;超级简单&#xff1a; 首先&#xff0c;到文件夹 C:\Program Files\Common Files\microsoft shared\OfficeSo…

机器学习笔记(八):神经网络:学习

目录 1&#xff09;Cost function 2&#xff09;Backpropagation algorithm 3&#xff09;Backpropagation intuition 4) Gradient checking 5&#xff09;Random initialization 6&#xff09;Putting it together 注&#xff1a;吴恩达老师的机器学习课程对反向传播算…

【HDU - 6231】K-th Number(二分,思维)

题干&#xff1a; Alice are given an array A[1..N]A[1..N] with NN numbers. Now Alice want to build an array BB by a parameter KK as following rules: Initially, the array B is empty. Consider each interval in array A. If the length of this interval is les…

C 语言运算符优先级(记忆口诀)

优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 &#xff08;表达式&#xff09;/函数名(形参表) . 成员选择&#xff08;对象&#xff09; 对象.成员名 -> 成员选择&#xff08;指针&#xff0…

吴恩达机器学习作业(3):逻辑回归

目录 1&#xff09;数据处理 2&#xff09;sigmoid函数 3&#xff09;代价函数 4&#xff09;梯度下降 5&#xff09;预测函数 我们首先做一个练习&#xff0c;问题是这样的&#xff1a;设想你是大学相关部分的管理者&#xff0c;想通过申请学生两次测试的评分&#xff0c…

机器学习笔记(九):应用机器学习的建议

目录 1&#xff09;Deciding what to try next 2&#xff09;Evaluating a hypothesis 3&#xff09;Model selection and training/validation/test sets 4&#xff09;Diagnosing bias vs. variance 5&#xff09;Regularization and bias/variance 6&#xff09;Learn…

【洛谷 - P3410】拍照(最大权闭合图,网络流最小割)

题干&#xff1a; 题目描述 小B有n个下属&#xff0c;现小B要带着一些下属让别人拍照。 有m个人&#xff0c;每个人都愿意付给小B一定钱让n个人中的一些人进行合影。如果这一些人没带齐那么就不能拍照&#xff0c;小B也不会得到钱。 注意&#xff1a;带下属不是白带的&…

ROS有三个层级的概念,分别是:文件系统级、计算图级和开源社区级

ROS有三个层级的概念&#xff0c;分别是&#xff1a;文件系统级、计算图级和开源社区级。 文件系统级&#xff1a;ROS的内部结构、文件结构和所需的核心文件都在这一层里&#xff0c;理解ROS文件系统是入门ROS的基础。一个ROS程序的结构&#xff0c;是一些按不同功能进行区分的…

【洛谷 - P1231 】教辅的组成(网络流最大流,拆点)

题干&#xff1a; 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案&#xff0c;然而他却明明记得这书应该还包含一份练习题。然而出现在他眼前的书多得数不胜数&#xff0c;其中有书&#xff0c;有答案&#xff0c;有练习册。已知一个完整的书册均应该包含且仅包含一本书…

机器学习笔记(十):机器学习系统的设计

目录 1&#xff09;Prioritizing what to work on:Spam classification example 2&#xff09;Error analysis 3&#xff09;Error metrics for skewed classes 4&#xff09;Trading off precision and recall 5&#xff09;Data for machine learning 下面将学习到在构建…

ROS坐标系统,常见的坐标系和其含义

常见的坐标系 在使用ROS进行定位导航等操作时&#xff0c;我们经常会遇到各种坐标系。每种坐标系都有明确的含义。理论上坐标系的名称可以是随意的&#xff0c;但是为了方便不同的软件间共享坐标信息&#xff0c;ROS定义了几个常见的坐标系。 1.base_linkbase_link坐标系和机…