A3869 「POI2006 R3」晶体 Crystals

暂无评定 传统题 POI(波兰) 上传者
时间限制100ms
内存限制32MiB
通过 / 提交0/0

A3869「POI2006 R3」晶体 Crystals

暂无评定 传统题 POI(波兰) 上传者
时间限制100ms
内存限制32MiB
通过 / 提交0/0

题目描述

题目译自 XIII OI Olimpiada Informatyczna – III etap Kryształy

Bajtocy 研究出一种制造晶体的方法,这种晶体由不同元素的特定数量原子组成。经过多年的实验,他成功找到了一个公式,该公式描述了对于各个元素原子的何种数量组合,可以制造出由这些原子构成的晶体。他很好奇自己能够获得多少种不同的晶体。

设 xx 和 yy 为非负整数。我们用 x⊕yx \oplus y 表示对 xx 和 yy 的对应二进制位执行异或(XOR)运算的结果。异或运算在二进制位上的结果如下:$1 \oplus 1 = 0 \oplus 0 = 0, 1 \oplus 0 = 0 \oplus 1 = 1$。

举个样例,$44 \oplus 6 = (101100)_2 \oplus (000110)_2 = (101010)_2 = 42$。

Bajtocy 知道 nn 种不同的元素,编号从 11 到 nn。对于每种元素 ii,在制造晶体时,能够使用的该元素原子数量都有一个上限 mim_i。要制造一个由第 ii 种元素的 aia_i 个原子(对于 i=1,…,ni=1, \ldots, n)组成的晶体,当且仅当满足以下条件时才可能:

  • 0≤ai≤mi0 \le a_i \le m_i,对于 i=1,2,…,ni=1, 2, \ldots, n,
  • a1⊕…⊕an=0a_1 \oplus \ldots \oplus a_n = 0,并且
  • a1+a2+⋯+an≥1a_1 + a_2 + \cdots + a_n \ge 1。

上述最后一个条件意味着,一个晶体必须由至少一个原子构成。

请编写一个程序,实现以下功能:

  • 从标准输入读取元素的数量以及在晶体中每种元素原子数量的限制。
  • 计算出可以获得的不同晶体的数量。
  • 将结果输出到标准输出。

输入格式

输入的第一行包含元素的数量 nn (2≤n≤50)(2 \le n \le 50)。

输入的第二行也是最后一行,包含 nn 个由单个空格隔开的数字 m1,…,mnm_1, \ldots, m_n (1≤mi<232−1)(1 \le m_i < 2^{32}-1)。

输出格式

你的程序应向标准输出输出一个数字,表示可以获得的晶体数量。你可以假设这个数字小于 264−12^{64}-1。

3
2 1 3

5

可能的各种元素原子数量组合为:$(0, 1, 1), (1, 0, 1), (1, 1, 0), (2, 0, 2), (2, 1, 3)$。