题目名称 4308. 区间消除
输入输出 dump.in/out
难度等级 ★★★☆
时间限制 1000 ms (1 s)
内存限制 512 MiB
测试数据 25
题目来源 Gravatarflyfree 于2026-02-08加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:2, 提交:2, 通过率:100%
Gravatarflyfree 100 3.143 s 3.91 MiB C++
GravatarRpUtl 100 3.329 s 3.94 MiB C++
本题关联比赛
期末考试4
关于 区间消除 的近10条评论(全部评论)

4308. 区间消除

★★★☆   输入文件:dump.in   输出文件:dump.out   简单对比
时间限制:1 s   内存限制:512 MiB

【题目描述】

给定一个长度为 $n$ 的序列 $A$。

我们定义一个消除操作:对于一个序列长度为 $n$ 的序列 $B$ 以及一个分割点 $k$ ($n > 1, k < n$),将 $B$ 分割成 $B_{[1, k]}$ 和 $B_{(k, n]}$,分别计算两个序列的异或和,然后保留较大 的那个区间(如果两个区间异或和相同,那么任选一个保留)。


不断进行消除操作直到序列长度最终为 $1$,即只有一个位置被保留下来。


对于每个位置 $i$,查询 $i$ 是否可以称为被保留下来的位置。

【输入格式】

第一行一个整数 $q$ 表示查询次数。

对于每组查询:

一行一个整数 $n$ 表示序列长度为 $n$。

接下来一行 $n$ 个整数表示序列 $A$。

【输出格式】

输出 $q$ 行。

一行一个长度为 $n$ 的 01 串表示每个位置是否可以被保留到最后。

【样例输入】

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

【数据规模与约定】

数据按以下方式分组:

第一组 $16pts$:满足 $q = 1, n \le 10$。

第二组 $8pts$:满足 $q = 1, n \le 3000, A_i = 0/1$。

第三组 $16pts$:满足 $q \le 10, n \le 100$。

第四组 $60pts$:满足 $q \le 10, n \le 3000$。

对于所有数据,有 $A_i < 2^{60}$。


大洋里