#P16441. PM8587更多 Nim

PM8587更多 Nim

题目背景

学校科技节结束后,信息社活动室里还摆着许多装有棋子的盒子。林澈和好友周宁准备收拾器材时,临时决定用这些棋子玩一局改编版 Nim。

为了让游戏更有策略性,他们约定先进行一次“整理阶段”:林澈可以先把若干整盒棋子搬回储物柜,周宁随后也可以搬走若干整盒棋子。两个人都可以一盒不搬,但谁也不能把桌面上剩余的盒子全部搬空。整理结束后,林澈先手,双方再按照普通 Nim 的规则进行游戏。

林澈希望自己搬走的棋子尽可能少,同时又要保证:无论周宁在整理阶段怎样选择,自己都一定能够赢得之后的 Nim 游戏。

题目描述

桌面上最初有 NN 堆棋子,第 ii 堆中有 aia_i 枚棋子。

游戏分为两个阶段。

第一阶段:移走整堆棋子

  1. 你先选择若干堆并将它们整体移走。你可以一堆也不移走,但不能移走当前的全部棋子堆。
  2. 对手随后从剩余棋子堆中选择若干堆并将它们整体移走。对手同样可以一堆也不移走,但不能移走当前的全部棋子堆。

你的代价等于你在这一步移走的所有棋子数量之和。对手移走的棋子不计入你的代价。

第二阶段:普通 Nim

在第一阶段结束后保留下来的棋子堆上进行普通 Nim 游戏,并由你先手。

普通 Nim 的规则如下:

  • 每次必须选择一堆仍非空的棋子;
  • 从该堆中移走至少一枚棋子,也可以移走整堆;
  • 取走最后一枚棋子的玩家获胜。

请计算:为了保证无论对手在第一阶段如何行动,你都能赢得第二阶段的 Nim 游戏,你在第一阶段至少需要移走多少枚棋子。

输入格式

第一行包含一个整数 NN,表示棋子堆的数量。

第二行包含 NN 个正整数 a1,a2,,aNa_1,a_2,\ldots,a_N,其中 aia_i 表示第 ii 堆棋子的数量。

输出格式

输出一个整数,表示你在第一阶段必须移走的棋子总数的最小值。

数据范围

  • 1N501\le N\le 50
  • 1ai10161\le a_i\le 10^{16}
  • 答案不超过 5×10175\times 10^{17}

样例 1

输入

6
5 5 6 6 5 5

输出

21

说明

可以移走三堆大小为 55 的棋子和一堆大小为 66 的棋子,共移走

5+5+5+6=215+5+5+6=21

枚棋子。

若保留的两堆大小相同,则对手可以让第二阶段从两个相等的棋子堆开始,你会处于必败局面。因此必须破坏这些会产生零异或子集的重复关系。

样例 2

输入

3
1 2 3

输出

1

说明

虽然三堆棋子的大小互不相同,但

123=0.1\oplus 2\oplus 3=0.

因此三堆全部保留时并不安全。移走大小为 11 的棋子堆后,可以保证获胜。

样例 3

输入

9
1 2 3 4 5 6 7 8 9

输出

16

样例 4

输入

9
1 2 4 8 16 32 64 128 256

输出

0

说明

这些数在二进制异或意义下线性无关,因此不需要提前移走任何棋子堆。

样例 5

输入

10
12 13 16 121 13 14 52 23 1 29

输出

27