构造零总和
题目描述
给定一个只含 −1、0 和 1 的数组 a1,a2,…,an。请把整个数组划分成若干个连续区间 [l1,r1],[l2,r2],…,[lk,rk],其中 l1=1、rk=n,且相邻区间首尾相接。
区间 [l,r] 的交错和定义为
al−al+1+al+2−al+3+⋯±ar.
要求所有区间交错和的总和等于 0。若存在多种合法划分,可以输出任意一种;不要求区间数最少。若不存在合法划分,需要报告无解。
输入格式
第一行包含一个整数 t,表示测试用例数。
每个测试用例的第一行包含一个整数 n,第二行包含 n 个整数 a1,a2,…,an。
输出格式
对每个测试用例,若无解,输出一行 -1。
否则先输出区间数 k,随后输出 k 行,每行两个整数 li,ri。这些区间必须恰好、不重不漏地覆盖 [1,n],并使全部区间交错和的总和为 0。
样例输入 1
5
4
0 0 0 0
7
-1 1 0 1 0 1 0
5
0 -1 1 0 1
3
1 0 1
1
1
样例输出 1
4
1 1
2 2
3 3
4 4
4
1 1
2 2
3 5
6 7
-1
2
1 1
2 3
-1
数据范围
对于所有数据,1≤t≤10000,1≤n≤200000,ai∈{−1,0,1},且所有测试用例的 n 之和不超过 200000。
| 子任务编号 |
分值 |
特殊限制 |
| 1 |
30 |
t≤4 且 n≤16 |
| 2 |
n≤500 且所有测试用例的 ∑n2≤250000 |
| 3 |
40 |
无特殊限制 |