题目描述
小 A 最近在学习位运算相关知识,但是他遇到了一个问题,想委托你帮他解决一下
给定一个长度为 n 的非负整数数组 a(a1,a2…,an) ,我可以执行以下操作不超过 n 次:
选择 i,j ,使得 1≤i,j≤n , 任取一个 x 使得 0≤x≤109 ,然后设置 ai=ai+x , aj=aj−x
我必须确保每次运算后所有 ai ( 1≤i≤n) 都保持非负整数
我的目标是使运算后的
a1 ∣ a2 ∣…∣ an 最小
OR 运算逐位比较两个二进制数。在每个位上,如果至少有一个位是 1 ,那么结果就是 1 ;否则,就是 0 。
例如,二进制数 10=1010 和 12=1100 的OR 结果是 14=1110
输入格式
第一行包含一个整数 n ( 1≤n≤2×105 ),代表数组的长度。
第二行包含 n 个非负整数 ai ( 0≤ai≤109 )。
输出格式
一行包含一个整数,代表答案,即最小化的 a1 ∣ a2 ∣ … ∣ an 值。
输入样例
7
1 9 1 9 8 1 0
输出样例
5
提示
在本例中,一个可行的最终结果是 [5,5,5,5,5,4,0] ,它的最小结果等于 5 。可以证明没有更好的结果。
实现这一结果的一个可行方法是 $[1,9,1,9,8,1,0] \rightarrow [5,5,1,9,8,1,0] \rightarrow [5,5,5,5,8,1,0]$ →[5,5,5,5,5,4,0] ,总共需要 3 步。
限制与约定
对于30%的样例 1≤n≤1000 ,0≤ai≤1000
对于100%的样例 1≤n≤2×105,0≤ai≤109
- 时间限制: 1s
- 空间限制: 256MB