| 题目名称 | 4310. 硬币游戏 |
|---|---|
| 输入输出 | coin.in/out |
| 难度等级 | ★★★★☆ |
| 时间限制 | 3000 ms (3 s) |
| 内存限制 | 1024 MiB |
| 测试数据 | 25 |
| 题目来源 |
|
| 开放分组 | 全部用户 |
| 提交状态 | |
| 分类标签 | |
| 分享题解 |
| 通过:1, 提交:2, 通过率:50% | ||||
|
|
100 | 18.416 s | 314.87 MiB | C++ |
|
|
0 | 2.531 s | 10.48 MiB | C++ |
| 本题关联比赛 | |||
| 期末考试4 | |||
| 关于 硬币游戏 的近10条评论(全部评论) |
|---|
快乐的 Alice 在和自己玩一个硬币游戏。
游戏过程如下:
Alice 找到一个序列 $A$,并且规定了一个常数 $k$,初始时 $k = 0$。
Alice 可以花费一枚硬币进行以下一种操作:
1. 选定一个位置 $i$,使得 $A_i$ 变成 $A_i \oplus k$。
2. 将 $k$ 加一。
Alice 将不断操作直到 $A$ 中所有元素都变成 0。
聪明的 Alice 一下就找到了最小的硬币花费,我们将其记作 $cost(A)$。
现在她想和你一起玩硬币游戏,她将给定一个长度为 $n$ 的序列 $A$,并且对你发起 $q$ 此挑战。
对于每次挑战,将给定一个区间 $[l,r]$,你需要快速求出 $cost(A_{[l, r]})$。
并且,为了加大难度,Alice 将每次查询都进行了加密,你只有回答出上一次查询的答案,她才会给出下一个查询。
第一行三个整数 $n, q, k = 1/2$,表示序列长度,查询次数,查询类型。
接下来一行 $n$ 个整数表示序列 $A$。
接下来 $q$ 行,每行两个整数表示一次询问的区间 $[l, r]$。
记上一次查询的答案为 $lastans$,如果 $k = 2$,那么 $l, r$ 都应该异或上 $lastans$。
每行一个整数表示一次查询的答案。
7 6 1 5 4 3 5 7 7 7 1 4 4 7 3 7 1 7 2 6 1 1
9 11 12 14 12 6
数据按如下方式分组:
第一组 $8pts$:$k = 1$,对于所有的 $i$ 满足 $A_i = A_1$。
第二组 $12pts$:$k = 1$,对于所有的 $i \not= j$ 满足 $A_i \not= A_j$。
第三组 $8pts$:$k = 1$,满足 $q = 1, l_i = 1, r_i = n$。
第四组 $24pts$:$k = 1$, 满足 $q, n \le 1e4$。
第五组 $16pts$:$k = 1$,满足 $q, n \le 2e5$。
第六组 $32pts$:$k = 2$,满足 $q, n \le 2e5$。
对于所有数据点,有 $\forall a_i \le 2^{20}, q, n \le 2e5$。