#P16441. PM8587更多 Nim
PM8587更多 Nim
题目背景
学校科技节结束后,信息社活动室里还摆着许多装有棋子的盒子。林澈和好友周宁准备收拾器材时,临时决定用这些棋子玩一局改编版 Nim。
为了让游戏更有策略性,他们约定先进行一次“整理阶段”:林澈可以先把若干整盒棋子搬回储物柜,周宁随后也可以搬走若干整盒棋子。两个人都可以一盒不搬,但谁也不能把桌面上剩余的盒子全部搬空。整理结束后,林澈先手,双方再按照普通 Nim 的规则进行游戏。
林澈希望自己搬走的棋子尽可能少,同时又要保证:无论周宁在整理阶段怎样选择,自己都一定能够赢得之后的 Nim 游戏。
题目描述
桌面上最初有 堆棋子,第 堆中有 枚棋子。
游戏分为两个阶段。
第一阶段:移走整堆棋子
- 你先选择若干堆并将它们整体移走。你可以一堆也不移走,但不能移走当前的全部棋子堆。
- 对手随后从剩余棋子堆中选择若干堆并将它们整体移走。对手同样可以一堆也不移走,但不能移走当前的全部棋子堆。
你的代价等于你在这一步移走的所有棋子数量之和。对手移走的棋子不计入你的代价。
第二阶段:普通 Nim
在第一阶段结束后保留下来的棋子堆上进行普通 Nim 游戏,并由你先手。
普通 Nim 的规则如下:
- 每次必须选择一堆仍非空的棋子;
- 从该堆中移走至少一枚棋子,也可以移走整堆;
- 取走最后一枚棋子的玩家获胜。
请计算:为了保证无论对手在第一阶段如何行动,你都能赢得第二阶段的 Nim 游戏,你在第一阶段至少需要移走多少枚棋子。
输入格式
第一行包含一个整数 ,表示棋子堆的数量。
第二行包含 个正整数 ,其中 表示第 堆棋子的数量。
输出格式
输出一个整数,表示你在第一阶段必须移走的棋子总数的最小值。
数据范围
- ;
- ;
- 答案不超过 。
样例 1
输入
6
5 5 6 6 5 5
输出
21
说明
可以移走三堆大小为 的棋子和一堆大小为 的棋子,共移走
枚棋子。
若保留的两堆大小相同,则对手可以让第二阶段从两个相等的棋子堆开始,你会处于必败局面。因此必须破坏这些会产生零异或子集的重复关系。
样例 2
输入
3
1 2 3
输出
1
说明
虽然三堆棋子的大小互不相同,但
因此三堆全部保留时并不安全。移走大小为 的棋子堆后,可以保证获胜。
样例 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