一、题目

  albus就是要第一个出场

二、分析

  非常有助于理解线性基的一题。

  构造线性基$B$后,如果$|A| > |B|$,那么就意味着有些数可以由$B$中的数异或出来,而多的数可以取或者不取,相当于每多一个数,那么线性基能生成的数的子集的种类就可以乘以$2$,最终就是乘以$2^{|A|-|B|}$。

  所以对于给定的$Q$,要确定它是由哪些位置的线性基中的数生成的,然后确定它在不重复序列中的位置,然后再乘以$2^{|A|-|B|}$,最终还需要$+1$,因为前面求的其实是不包含这个数的子集总个数。

三、AC代码

 1 #include <bits/stdc++.h>
2
3 using namespace std;
4 #define ll long long
5 #define Min(a,b) ((a)>(b)?(b):(a))
6 #define Max(a,b) ((a)>(b)?(a):(b))
7 const int MAXN = 1e5 + 13;
8 const int MAXL = 30;
9 const int mod = 10086;
10 int base[MAXL + 2];
11
12 int Pow(int a, int b)
13 {
14 int ans = 1;
15 while(b) {
16 if(b & 1) ans = ans * a % mod;
17 b >>= 1;
18 a = a * a % mod;
19 }
20 return ans;
21 }
22
23
24 int main()
25 {
26 //freopen("input.txt", "r", stdin);
27 //freopen("out.txt", "w", stdout);
28 int n, a, cnt = 0, q;
29 scanf("%d", &n);
30 memset(base, 0, sizeof(base));
31 for(int i = 0; i < n; i++) {
32 scanf("%d", &a);
33 for(int j = MAXL; j >= 0; j--) {
34 if(a & (1<<j)) {
35 if(base[j])
36 a ^= base[j];
37 else {
38 base[j] = a;
39 for(int k = j - 1; k >= 0; k--) {
40 if(base[j] & (1<<k) )
41 base[j] ^= base[k];
42 }
43 for(int k = j + 1; k <= MAXL; k++) {
44 if(base[k] & (1<<j) )
45 base[k] ^= base[j];
46 }
47 cnt++;
48 break;
49 }
50 }
51 }
52 }
53 scanf("%d", &q);
54 vector<int> pos;
55 int p = 0, res = 0;
56 for(int i = 0; i <= MAXL; i++) {
57 if(base[i]) pos.push_back(i);
58 }
59 for(int i = 0; i < pos.size(); i++) {
60 if(q>>pos[i] & 1) {
61 res += (1<<i);
62 }
63 }
64 printf("%d\n", (res % mod * Pow(2, n - cnt) % mod + 1)%mod );
65 return 0;
66 }

BZOJ_2844 albus就是要第一个出场 【线性基】的更多相关文章

  1. bzoj 2844 albus就是要第一个出场 - 线性基

    题目传送门 这是个通往vjudge的虫洞 这是个通往bzoj的虫洞 题目大意 给定集合$S$,现在将任意$A\subseteq S$中的元素求异或和,然后存入一个数组中(下标从1开始),然后从小到大排 ...

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

    传送门 这个题题目描述真怪异--就不能说人话吗-- 人话:给定长为n的序列A,定义f(s)为集合s内所有元素异或值,求A的所有子集的f值从小到大排列后,q在其中第一次出现的下标对10086取模的值. ...

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

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

  4. BZOJ 2844: albus就是要第一个出场 [高斯消元XOR 线性基]

    2844: albus就是要第一个出场 题意:给定一个n个数的集合S和一个数x,求x在S的$2^n$个子集从小到大的异或和序列中最早出现的位置 一开始看错题了...人家要求的是x第一次出现位置不是第x ...

  5. 【BZOJ2844】albus就是要第一个出场 高斯消元求线性基

    [BZOJ2844]albus就是要第一个出场 Description 已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 <= x <= n }, S 的幂集2 ...

  6. CF895C: Square Subsets && 【BZOJ2844】albus就是要第一个出场

    CF895C: Square Subsets && [BZOJ2844]albus就是要第一个出场 这两道题很类似,都是线性基的计数问题,解题的核心思想也一样. CF895C Squa ...

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

    2844: albus就是要第一个出场 Time Limit: 6 Sec  Memory Limit: 128 MBSubmit: 1134  Solved: 481[Submit][Status] ...

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

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

  9. BZOJ 2844 albus就是要第一个出场 ——高斯消元 线性基

    [题目分析] 高斯消元求线性基. 题目本身不难,但是两种维护线性基的方法引起了我的思考. void gauss(){ k=n; F(i,1,n){ F(j,i+1,n) if (a[j]>a[i ...

随机推荐

  1. C - dlopen dlsym

    -----------------------------------------------------------------------------dlsym------------------ ...

  2. 爬虫入门四 re

    title: 爬虫入门四 re date: 2020-03-14 16:49:00 categories: python tags: crawler 正则表达式与re库 1 正则表达式简介 编译原理学 ...

  3. u-boot 移植 --->1、u-boot配置(Kbuild)

    早期的U-BOOT的裁剪是没有使用Kbuild工具的,后来就借鉴了Linux的Kbuild同时也是方便使用者裁剪,因为他的原理和Linux内核的配置裁剪原理是相同的.今天拿来分析的U-Boot的版本是 ...

  4. Apple iOS 触控按钮 自动关闭 bug

    Apple iOS 触控按钮 自动关闭 bug bug 轻点 iPhone 背面可执行操作 您可以轻点两下或轻点三下 iPhone 背面以执行某些操作,如向上或向下滚动.截屏.打开"控制中心 ...

  5. 前端 Web 异常监控系统 All In One

    前端 Web 异常监控系统 All In One Sentry https://sentry.io trackjs https://trackjs.com/ rollbar https://rollb ...

  6. js regular expression & email checker

    js regular expression & email checker const isValidEmail = (email = ``) => /^([\w+\.])+@(\w+) ...

  7. javascript nested object merge

    javascript nested object merge deep copy Object reference type function namespace(oNamespace, sPacka ...

  8. BTC暴涨市值仅次于亚马逊,NGK推出新人助力空投,直接免费送VAST!

    数据显示,在谷歌搜索中,关键词"BTC"的全球搜索指数在过去一周达到满值100点.特斯拉"加持"下,比特币重启暴涨模式,最高报价48126美金单价,非小号数据显 ...

  9. NGK公链:通用型存储网络

    NGK公链,是一条发展中的通用型存储网络. NGK的运用归结与存储场景.NGK通证的运用归结于支付场景.个人数据被中心化服务商买卖.被大数据服务商使用.被无数的商务及销售人员窃取.那么NGK的运用场景 ...

  10. 源码分析:Phaser 之更灵活的同步屏障

    简介 Phaser 是 JDK 1.7 开始提供的一个可重复使用的同步屏障,功能类似于CyclicBarrier和CountDownLatch,但使用更灵活,支持对任务的动态调整,并支持分层结构来达到 ...