P4869 albus就是要第一个出场

    • 138通过
    • 352提交
  • 题目提供者 Paulliang
  • 评测方式 云端评测
  • 标签 线性基
  • 难度 省选/NOI-
  • 时空限制 6000ms / 128MB

题解

  • 提示:收藏到任务计划后,可在首页查看。
  • 体验新版界面

    最新讨论 显示

    推荐的相关题目 显示

    题目描述

    已知一个长度为$n$的正整数序列$A$(下标从$1$开始), 令 $S = \{ x | 1 \le x \le n \}$, $S$ 的幂集$2^S$定义为 $S$ 所有子集构成的集合。定义映射 $f : 2^S \to Z,f(\emptyset) = 0,f(T) = \mathrm{XOR}\{A_t\}, (t \in T)$ 。

    现在albus把$2^S$中每个集合的f值计算出来, 从小到大排成一行, 记为序列$B$(下标从$1$开始)。

    给定一个数, 那么这个数在序列$B$中第$1$次出现时的下标是多少呢?

    输入输出格式

    输入格式:

    第一行一个数$n$, 为序列$A$的长度。接下来一行$n$个数, 为序列$A$, 用空格隔开。最后一个数Q, 为给定的数.

    输出格式:

    共一行, 一个整数, 为$Q$在序列$B$中第一次出现时的下标模$10086$的值.

    输入输出样例

    输入样例#1: 复制
    3
    1 2 3
    1
    输出样例#1: 复制
    3

    说明

    【样例解释】

    N = 3, A = [1 2 3]
    S = {1, 2, 3}
    2^S = {空, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}
    f(空) = 0
    f({1}) = 1
    f({2}) = 2
    f({3}) = 3
    f({1, 2}) = 1 xor 2 = 3
    f({1, 3}) = 1 xor 3 = 2
    f({2, 3}) = 2 xor 3 = 1
    f({1, 2, 3}) = 0

    所以

    B = [0, 0, 1, 1, 2, 2, 3, 3]

    【数据范围】

    1 <= N <= 10,0000
    其他所有输入均不超过10^9

    提示
    标程仅供做题后或实在无思路时参考。
    请自觉、自律地使用该功能并请对自己的学习负责。
    如果发现恶意抄袭标程,将按照I类违反进行处理。