感谢:

http://blog.sina.cn/dpool/blog/s/blog_76f6777d0101d0mr.html

的讲解(特别是2^(n-m)的说明)。

 1 /**************************************************************
 2     Problem: 2844
 3     User: idy002
 4     Language: C++
 5     Result: Accepted
 6     Time:308 ms
 7     Memory:2052 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 #include <iostream>
12 #define Mod 10086
13 #define N 100010
14 using namespace std;
15
16 int n, m, q;
17 int aa[N], bit[N];
18
19 void gauss() {
20     int i=0;
21     for( int b=30; b>=0; b-- ) {
22         for( int j=i; j<n; j++ )
23             if( (aa[j]>>b)&1 ) {
24                 swap( aa[j], aa[i] );
25                 break;
26             }
27         if( (aa[i]>>b)&1 ) {
28             for( int j=i+1; j<n; j++ )
29                 if( (aa[j]>>b)&1 )
30                     aa[j] ^= aa[i];
31             bit[i] = b;
32             i++;
33         }
34     }
35     m = i;
36     for( int i=0; i<m; i++ )
37         for( int j=i-1; j>=0; j-- )
38             if( (aa[j]>>bit[i])&1 )
39                 aa[j] ^= aa[i];
40 }
41 int mpow( int a, int b ) {
42     int rt;
43     for( rt=1; b; b>>=1,a=(a*a)%Mod )
44         if( b&1 ) rt=(rt*a)%Mod;
45     return rt;
46 }
47 int main() {
48     scanf( "%d", &n );
49     for( int i=0; i<n; i++ )
50         scanf( "%d", aa+i );
51     scanf( "%d", &q );
52     gauss();
53     int cur = 0;
54     int rank = (q==0?0:1);
55     for( int i=0; i<m; i++ ) {
56         if( (cur^aa[i])<q ) {
57             cur ^= aa[i];
58             rank = (rank + (1<<(m-1-i))%Mod) % Mod;
59         }
60     }
61     rank = (rank*mpow(2,n-m)+1) % Mod;
62     printf( "%d\n", rank );
63 }

View Code

转载于:https://www.cnblogs.com/idy002/p/4524878.html

bzoj 2844 子集异或和名次相关推荐

  1. bzoj 2844: albus就是要第一个出场 高斯消元

    LINK 题意:看题目不如看样例解释.给出有n个数的集合,对这些子集中的数求异或,升序统计所有子集得到的数(重复会被计入),询问一个数x,问这个数出现的第一个位置 思路:在这里要求一个所有可能出现的异 ...

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

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

  3. BZOJ 2844 | HYSBZ - 2844albus就是要第一个出场——线性基

    [题目描述] BZOJ 2844 | HYSBZ - 2844albus [题目分析] 题目的意思大概是给一个数列,他有2n个子集,每个子集的元素的异或和构成新的一个数列,排序后问数字Q在这个序列里面 ...

  4. 【BZOJ 4671】异或图 【斯特林反演】【线性基】【贝尔数复杂度】

    传送门 题意:定义两个图的异或的边集为在两张图中恰出现一次的边.给sss张nnn个点的图的集合,求异或和为连通图的子集数. s≤60,n≤10s \leq 60,n \leq 10s≤60,n≤10 ...

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

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

  6. BZOJ.4888.[TJOI2017]异或和(树状数组)

    BZOJ 洛谷 \(Description\) 求所有区间和的异或和. \(n\leq 10^5,\ \sum a_i\leq 10^6\). \(Solution\) 这样的题还是要先考虑按位做. ...

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

    Description 已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 <= x <= n }, S 的幂集2S定义为S 所有子 集构成的集合.定义映射 f ...

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

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

  9. bzoj 2844 albus就是要第一个出场

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

最新文章

  1. 二.Sql语言的分类及运算符
  2. 蛤蟆 Oracle,47.蛤蟆笔记go——go连接Oracle
  3. Git 别名(分布式版本控制系统)
  4. nginx学习之详细安装篇(二)
  5. (十八)其他数据库对象,视图,序列
  6. 也论不使用第三个变量交换两个变量的值[C#]
  7. java jdk下载_jdk1.7下载|Java Development Kit (JDK) 下载「64位」-太平洋下载中心
  8. Python压缩解压–zipfile
  9. 系统分析与设计方法---需求分析与软件设计
  10. python微博数据分析_用python处理微博JSON数据范例
  11. linux gpt转mbr命令,linux GPT转mbr
  12. UWB PDOA brief introduction
  13. Mysql 第二章 数据库 DML和DQL
  14. 【力扣(LeetCode)】【C/C++】【19.删除链表的倒数第 N 个结点】
  15. oracle从入门到跑路
  16. Android Studio 实战干货例程
  17. 好用的磁盘清理软件Disk Diet for mac安装教程及功能介绍
  18. 网络安全论文:浅析图书馆的网络安全
  19. 常见信道通频带、带宽及信息传输速率
  20. 淘宝双十一喵果总动员一共多少级?喵果总动员什么时候兑换红包

热门文章

  1. 教你10分钟内在Windows上完成Rails开发环境的安装和配置
  2. git reset简介
  3. 编程小问题系列(1)——XAML文件不支持中文
  4. SplitContainer.SplitterDistance属性值设置应注意的与FixedPanel有关
  5. 【note】PAT甲级题目中的单词整理
  6. 如何将Sublime Text中的代码以彩色高亮形式复制到博客或word文档里
  7. 分布式时序数据库InfluxDB
  8. HTTP Status 404 -(tomcat,springmvc,ModelAndView)
  9. HDU-3466-Proud Merchants
  10. Fragment懒加载(三)