#HK5418. 「OOI 2018 Day 1」二进制卡牌

「OOI 2018 Day 1」二进制卡牌

题目描述

题目译自 Open Olympiad in Informatics 2018 Day1 T4 「Двоичные карты / Binary Cards」。

学习玩一款名为《二进制卡牌》的有趣游戏永远都不晚!

这款游戏使用无限数量的卡牌,这些卡牌的面值可以是正数也可以是负数。任何卡牌上标注的绝对值都是 22 的幂,即卡牌上的值可以是 2k2^k 或 −2k-2^k,其中 kk 为某个非负整数。任何面值的卡牌数量都是无限的。

游戏开始时,玩家需要选择一副牌组——即一组卡牌(可以为空)。玩家可以任意选择每种面值的卡牌数量加入牌组,但玩家的水平通过牌组中卡牌数量的多少来评估,卡牌数量越少越好。游戏包含 nn 个回合。在第 ii 个回合,评委向玩家宣布一个整数 aia_i。随后,玩家必须从自己的牌组中选出一部分卡牌,使这些卡牌面值之和恰好等于 aia_i(可以不选择任何卡牌,此时和视为 00)。如果玩家无法选出符合要求的卡牌组合,则被判输,游戏结束。否则,玩家将选出的卡牌放回牌组,进入下一个回合。如果玩家能在每个回合都成功选出所需卡牌,则被视为获胜。

你听到了评委在每个回合将要宣布的数字 aia_i 的传闻。现在,你希望选择一个卡牌数量最少的牌组,使你能在《二进制卡牌》中获胜。

输入格式

第一行包含一个整数 nn (1≤n≤100000)(1 \leq n \leq 100000),表示游戏中评委宣布的数字数量。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n (−100000≤ai≤100000)(-100000 \leq a_i \leq 100000),表示每个回合评委宣布的数字。

输出格式

第一行输出一个整数 kk (0≤k≤100000)(0 \leq k \leq 100000),表示为了在《二进制卡牌》中获胜,需要选择的最小卡牌数量。

第二行输出 kk 个整数 b1,b2,…,bkb_1, b_2, \ldots, b_k(−220≤bi≤220-2^{20} \leq b_i \leq 2^{20},且 ∣bi∣|b_i| 是 22 的幂),表示构成牌组的卡牌面值。面值可以按任意顺序输出。如果存在多个最优大小的牌组,可以输出其中任意一个。

保证存在一个最小规模的牌组,满足上述数值限制的要求。

1
9

2
1 8

在第一个样例中,在唯一的回合中可以同时使用牌组中的两张卡牌。注意,此样例是唯一符合第一个子任务限制的样例。

5
-1 3 0 4 7

3
4 -1 4

在第二个样例中:

  • 第一回合可以只使用卡牌 −1-1;
  • 第二回合可以使用卡牌 44 和 −1-1;
  • 第三回合可以不使用任何卡牌;
  • 第四回合只使用卡牌 44;
  • 第五回合使用整个牌组。
4
2 -2 14 18

3
-2 2 16

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 附加限制 备注
11 88 n=1n = 1,∣ai∣≤10\vert a_i\vert \leq 10
22 77 n≤10n \leq 10,∣ai∣≤10\vert a_i\vert \leq 10
33 77 n≤30n \leq 30,∣ai∣≤30\vert a_i\vert \leq 30
44 77 n≤50n \leq 50,∣ai∣≤50\vert a_i\vert \leq 50
55 77 n≤100n \leq 100,∣ai∣≤100\vert a_i\vert \leq 100
66 77 n≤300n \leq 300,∣ai∣≤300\vert a_i\vert \leq 300
77 88 n≤500n \leq 500,∣ai∣≤500\vert a_i\vert \leq 500
88 77 n≤1000n \leq 1000,∣ai∣≤1000\vert a_i\vert \leq 1000
99 66 n≤3000n \leq 3000,∣ai∣≤3000\vert a_i\vert \leq 3000
1010 77 n≤5000n \leq 5000,∣ai∣≤5000\vert a_i\vert \leq 5000
1111 66 n≤10000n \leq 10000,∣ai∣≤10000\vert a_i\vert \leq 10000
1212 77 n≤30000n \leq 30000,∣ai∣≤30000\vert a_i\vert \leq 30000
1313 77 n≤50000n \leq 50000,∣ai∣≤50000\vert a_i\vert \leq 50000
1414 99