#P9746. 「KDOI-06-S」合并序列

    ID: 10662 远端评测题 2000ms 512MiB 尝试: 0 已通过: 0 显示难度省选/NOI− 上传者: 标签>动态规划 DP2023洛谷原创Special JudgeO2优化区间 DP位运算洛谷月赛

「KDOI-06-S」合并序列

题目描述

给定一个长度为 nn 的序列 a1,a2,…ana_1,a_2,\ldots a_n。

你可以对这个序列进行若干(可能为 00)次操作。在每次操作中,你将会:

  • 选择三个正整数 i<j<ki<j<k,满足 ai⊕aj⊕ak=0a_i\oplus a_j\oplus a_k=0 且 kk 的值不超过此时序列的长度。记 s=ai⊕ai+1⊕⋯⊕aks=a_i\oplus a_{i+1}\oplus \cdots\oplus a_k。
  • 然后,删除 ai∼aka_i\sim a_k,并在原来这 k−i+1k-i+1 个数所在的位置插入 ss。注意,此时序列 aa 的长度将会减少 (k−i)(k-i)。

请你判断是否能够使得序列 aa 仅剩一个数,也就是说,在所有操作结束后 aa 的长度为 11。若可以,你还需要给出一种操作方案。

输入格式

从标准输入读入数据。

本题含有多组测试数据。

输入的第一行包含一个正整数 TT,表示数据组数。

对于每组测试数据,第一行一个正整数 nn,表示初始序列长度。

第二行 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n,表示初始序列中每个元素的值。

输出格式

对于每组测试数据:

  • 若存在一种方案使得序列 aa 仅剩一个数,请在输出的第一行输出 Huoyu。
    • 接下来,在第二行你应该输出一个非负整数 tt,表示你的操作次数。你需要保证 0≤t≤n0\le t\le n。
    • 接下来 tt 行,每行输出三个正整数 i,j,ki,j,k,表示你在这次操作中选择的三个数的值。你需要保证 i<j<ki<j<k 且 kk 的值不超过此时序列的长度。
  • 否则,请输出一行一个字符串 Shuiniao。
2
5
3 3 1 4 5
9
3 4 6 5 4 5 1 2 4
Huoyu
2
3 4 5
1 2 3
Huoyu
3
1 3 4
2 3 4
1 2 4

提示

【样例解释 #1】

对于第一组测试数据:

  • 第一次操作中,a3⊕a4⊕a5=1⊕4⊕5=0a_3\oplus a_4\oplus a_5=1\oplus4\oplus5=0,操作后的序列为 [3,3,0][3,3,0];
  • 第二次操作中,a1⊕a2⊕a3=3⊕3⊕0=0a_1\oplus a_2\oplus a_3=3\oplus3\oplus0=0,操作后的序列为 [0][0]。

于是,序列 aa 在两次操作后仅剩一个数。

对于第二组测试数据:

  • 第一次操作,a1⊕a3⊕a4=3⊕6⊕5=0a_1\oplus a_3\oplus a_4=3\oplus6\oplus5=0,s=4s=4,操作后的序列为 [4,4,5,1,2,4][4,4,5,1,2,4]。
  • 第二次操作,a2⊕a3⊕a4=4⊕5⊕1=0a_2\oplus a_3\oplus a_4=4\oplus5\oplus1=0,操作后的序列为 [4,0,2,4][4,0,2,4]。
  • 第三次操作,a1⊕a2⊕a4=4⊕0⊕4=0a_1\oplus a_2\oplus a_4=4\oplus0\oplus4=0,s=2s=2,操作后的序列为 [2][2]。

于是,序列 aa 在三次操作后仅剩一个数。

【样例 #2】

见选手目录下的 merge/merge2.in 与 merge/merge2.ans。

这个样例满足测试点 6∼76\sim7 的条件限制。

【样例 #3】

见选手目录下的 merge/merge3.in 与 merge/merge3.ans。

这个样例满足测试点 12∼1312\sim13 的条件限制。

【数据范围】

对于所有数据保证:1≤T≤201\leq T\leq20,1≤n≤5001\leq n\leq500,0≤ai<5120\leq a_i<512。

测试点编号 nn ∑n≤\sum n\leq ai<a_i<
11 =1=1 2020 512512
22 =2=2 4040
33 =3=3 6060
44 =4=4 8080
55 =5=5 100100
6∼76\sim7 ≤40\leq40 800800
8∼98\sim9 ≤70\leq70 1 4001~400
10∼1110\sim11 ≤130\leq130 2 6002~600
12∼1312\sim13 ≤300\leq300 6 0006~000 128128
14∼1514\sim15 ≤500\leq500 3 0003~000 6464
16∼1716\sim17 128128
18∼2018\sim20 10 00010~000 512512

【提示】

⊕\oplus 表示按位异或运算。

请对程序的常数以及效率给予充分的信任。