题目背景
译自 Izborne Pripreme 2023 (Croatian IOI/CEOI Team Selection) D1T2。3s,0.5G。
祝 NaCly_Fish 生日快乐!(2024.7.28)
感谢 @Rainbow_qwq 修复交互库。警示后人:慎用 multiset.count
(复杂度可退化至线性)。
题目描述
在黑板上有 N 个非负整数。在一次操作中,可以选择黑板上的两个整数 a,b 满足 2∣(a+b),将 a,b 从黑板上擦去,然后写下 (a+b)/2。注意到每次操作后,黑板上的数都是整数。
试判断是否能让黑板上只剩下一个数。如果可以的话,还需要给出一组解。
输入格式
本题单个测试点内有多组测试数据。
第一行,一个正整数 T,代表数据组数。
接下来依次描述 T 组数据。
对于每组数据,第一行,一个正整数 N,代表黑板上数的数量。
第二行,N 个非负整数,描述黑板上的数。
输出格式
对于每组数据,输出若干行。
如果不可行,输出一行一个 -1;
否则,输出 (N−1) 行,每行两个整数,表示每次要擦除的数。你需要保证操作的数是存在的,且它们的和能被 2 整除。
提示
样例解释
样例 2 解释:[1,2,3,4,5,6]→[3,2,3,4,6]→[3,2,4,6]→[5,3,2]→[4,2]→[3]。
数据范围
对于 100% 的数据,保证:
- 1≤T≤105;
- 1≤N,∑N≤106;
- 0≤ai≤1018。
子任务编号 |
分值 |
约束 |
1 |
9 |
T≤100,N≤7 |
2 |
23 |
T≤100,ai≤10 |
3 |
16 |
ai 都为偶数 |
4 |
52 |
无额外约束 |