#P13774. CF1863F Divide, XOR, and Conquer
CF1863F Divide, XOR, and Conquer
题目
给定一个长度为 的整数数组 。
一次操作中,你把当前数组分成两段:非空前缀和非空后缀。两段的“价值”分别等于各自所有元素的按位异或(XOR)值。然后:
- 丢弃价值较小的那一段;
- 若两段价值相等,则你可以任选丢弃其中一段;
- 用剩下的那一段替换当前数组。
不断重复操作,直到数组长度变为 。
对每个 ,判断是否存在一种操作序列,使得最终只剩下原数组中的第 个元素。
更形式化地:维护两个指针 ,初始 ,当前数组为 。当 时执行:
- 任选 ;
- 令$$x=a_l\oplus a_{l+1}\oplus\cdots\oplus a_k,\qquad y=a_{k+1}\oplus a_{k+2}\oplus\cdots\oplus a_r$$
- 若 ,令 ;
- 若 ,令 ;
- 若 ,可任选令 或 。
对每个 ,判断是否可能达到 。
输入格式
多组测试。
-
第一行一个整数 ,表示测试组数。
-
接下来 组测试,每组:
- 第一行一个整数 ;
- 第二行 个整数 。
输出格式
对每组测试,输出一个长度为 的 01 串:第 位为 1 表示可以最终只剩下第 个元素,否则为 0。
6
6
3 2 1 3 7 4
5
1 1 1 1 1
10
1 2 4 8 4 1 2 3 4 5
5
0 0 0 0 0
5
1 2 3 0 1
1
100500
111111
10101
0001000000
11111
11001
1
约束
- 所有测试的 之和不超过
部分分
| 子任务编号 | 额外限制(在原约束基础上) | 分值 |
|---|---|---|
| 1 | 所有测试满足 | 5 |
| 2 | 所有测试满足 | 10 |
| 3 | 所有测试满足 | 15 |
| 4 | 所有测试满足 | 10 |
| 5 | 所有测试满足 | 15 |
| 6 | 每个测试中,数组是 的一个排列 | 10 |
| 7 | 无额外限制(原题完整约束) | 35 |
| 合计 | 100 |
说明:所有数据文件都满足“每个文件内所有测试的 ”。