题目

传送门 to BZOJ

传送门 to VJ

思路

看到异或,想到线性基。再仔细观察一下,好像每个元素出现的次数都是一样的耶!

我们有两种证明方法。其一是,考虑某个异或和出现次数超过一的原因:⨁cyca=0\bigoplus_{cyc}a=0⨁cyc​a=0 ,所以一个已经存在的方案与之异或即可得到新方案。显然这一条对于所有数字的凑出都适用。

其二更严谨。线性基中曾经用到过这个重要结论:{a,b,…}\{a,b,\dots\}{a,b,…} 与 {a,a⊕b,…}\{a,a\oplus b,\dots\}{a,a⊕b,…} 的所有子集的异或和相同。既然如此,把集合中的每个元素都变化成线性基中的元素,并记录其个数。即:知晓集合变成了 {n1×x1,n2×x2,…}\{n_1\times x_1,n_2\times x_2,\dots\}{n1​×x1​,n2​×x2​,…} 。其中 a×ba\times ba×b 表示 aaa 个 bbb 元素。

此时凑出一个数的方案有多少个呢?如果我们需要一个 x1x_1x1​ ,那么我们需要在 n1n_1n1​ 中选出奇数个数字,否则是偶数个。这个数量显然是 2n1−12^{n_1-1}2n1​−1 ,二者都是。然后凑出一个数的最终个数为 ∏i2ni−1=2n−cnt\prod_{i}2^{n_i-1}=2^{n-cnt}∏i​2ni​−1=2n−cnt ,因为 ∑ini=n\sum_{i}n_i=n∑i​ni​=n 。cntcntcnt 表示线性基中的元素个数。

现在,我们的目标是,求出 [0,q)[0,q)[0,q) 中有多少个不同的异或和。这是很简单的,因为小于 qqq 的数字一定存在一个二进制位,满足这一位以前相同、这一位较小。这就是线性基可以处理的了。假设这一位是 iii ,在 qqq 的第 iii 位为 111 的情况下,线性基中有 rrr 个元素可以操控比 iii 更低的位,那么方案数就是 2r2^r2r ,线性基中的元素随便选呗。

代码

#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
typedef long long int_;
inline int_ readint(){int_ x; scanf("%lld",&x); return x;
}const int zxy = 10086;int_ d[100]; int cnt;
void insert(int_ x){for(int i=63; i>=0&&x; --i){if((x>>i&1) == 0) continue;if(d[i] != 0) x ^= d[i];else {d[i] = x, ++ cnt; break;}}
}int main(){int n = readint();for(int i=1; i<=n; ++i)insert(readint());int ans = 0, k = readint();for(int i=0,t=1; i<64; ++i){if(d[i] == 0) continue;if(k>>i&1) ans = (t+ans)%zxy;t = (t<<1)%zxy; // pow}for(int i=1; i<=n-cnt; ++i)ans = (ans<<1)%zxy;printf("%d\n",(ans+1)%zxy);return 0;
}

后记

重要的事情说一百遍。请将模数取名为 zxyzxyzxy !——《爆零是zxyzxyzxy的谎言》

zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz
zxy orz

[BZOJ2844]albus就是要第一个出场相关推荐

  1. BZOJ2844: albus就是要第一个出场(线性基)

    Time Limit: 6 Sec  Memory Limit: 128 MB Submit: 2054  Solved: 850 [Submit][Status][Discuss] Descript ...

  2. [BZOJ2844]albus就是要第一个出场(线性基)

    题目: 我是超链接 题解: 先不考虑重复数字的问题,如果要求数字Q的出现位置的话,首先一个比较直观的想法是,如果能求出这样一组基底,它从小到大排序以后可以满足:设只选i向量构造出来的数字为R,那么1. ...

  3. bzoj2844 albus就是要第一个出场(线性基【询问排名)

    题目链接 分析: 这道题是hdu3949的逆运算(可能题面有点难懂) 既然我们能够知道排名是第k的数是多少 就可以直接二分,变成判定性问题 当然,这道题还有其他解法: 因为是子集异或和,可以考虑用线性 ...

  4. 【bzoj2844 albus就是要第一个出场】

    题意:给定一个n个数的集合S和一个数x,求x在S的2n2n个子集从小到大的异或和序列中最早出现的位置 根据性质每一个数字出现的次数是相同的都是2^(n-cnt)个,cnt是线性基中元素得个数 #inc ...

  5. BZOJ2844 albus就是要第一个出场

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=2844 这题貌似HDU上有一道差不多的题,不过我没做过,也就没管了. 首先讲一个线性基的东西 ...

  6. [BZOJ 2844] albus就是要第一个出场

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

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

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

  8. 2844: albus就是要第一个出场

    2844: albus就是要第一个出场 链接 分析: 和HDU3949差不多互逆,这里需要加上相同的数. 结论:所有数任意异或,构成的数出现一样的次数,次数为$2^{n-cnt}$,cnt为线性基的大 ...

  9. 【BZOJ 2844】 albus就是要第一个出场

    2844: albus就是要第一个出场 Time Limit: 6 Sec  Memory Limit: 128 MB Submit: 436  Solved: 190 [Submit][Status ...

最新文章

  1. 最短路径问题matlab作图,[MATLAB基础] matlab最短路径的输出问题,用了递归,但程序出错了,请大虾指点...
  2. 如何系统学习领域驱动设计?
  3. OpenResty+Lua+redis+mysql实现高性能高可用限流缓存
  4. 2005年度国产空间信息系统软件测评工作圆满结束
  5. Dubbo-admin的安装
  6. xp电脑多少位怎么看_如何查看电脑是什么操作系统和多少位?
  7. 三目运算符c语言吗,看看三目运算符?:到底是怎么回事
  8. 2021华为软挑再探——代码实现
  9. IP地址的两种表示方法:整数和点分十进制
  10. ACDSee Photo Studio 7 for Mac(最好用的图像处理软件)
  11. 高数_第1章空间解析几何与向量代数__直线方程
  12. 信息化体系与IT规划方法论
  13. IE6下的Aborted解决办法
  14. undefined是什么意思啊
  15. “越老越值钱”的7个职业
  16. 浅议抖音短视频平台的利与弊
  17. PHP中的addslashes双胞胎兄弟函数
  18. 「UbuntuROS」Ubuntu系统下几个必不可少的设置和软件|1-4
  19. PAT-BASIC1062——最简分数
  20. 西南民族大学第十届校赛(同步赛)(H题——Ricky’s RealDan’s Ricky)

热门文章

  1. 计算机等级考试四级网络工程师真题,全国计算机等级考试四级网络工程师笔试真题...
  2. Python 数据获取(五)—— 获取客户端渲染方式数据
  3. 腾讯云数据库产品介绍第四章-
  4. google外链重要性高吗?谷歌外链作用大不大
  5. 程序员培训后上班第一天
  6. ASP.NET学习之Repeater
  7. ipad在线看html5,iPad 2: HTML5开发者必备首选
  8. jq jqprint 设置页脚_jquery web打印 取消 页眉和页脚
  9. 基于android的远程视频监控系统(已开放源码)
  10. GPRS连接阿里云物联网平台四