P7413 题解

· · 题解

由题意, s_{i+1}s_i的倍数。
枚举 s_1,假设每次都取走 s_1 个石子,则第 i 堆需要取 \lfloor \frac{a_i}{s_1}\rfloor 次。
设数组 A=\lbrace2,4,6,8,10\rbrace,s_1=3, 则所需操作次数集合S=\lbrace0,1,2,2,3\rbrace。 Bessie的第一回合操作,意味着在集合B中选择一个元素 x,使 x 变为x-1
i回合的操作,设 s_i=k\ast s_1 ,意味着在集合B中选择一个元素 x ,使 x 变为 x-k ,同时忽略小于 k 的元素 x
若第i回合后,\forall x \in S,x<k,即下一回合的牛无法取石子,则当前取石子的牛获胜。

Q:在什么条件下必胜?
若操作完之后,任意元素 x 均出现偶数次,则之后重复另一位玩家的操作即可。

Q:要在第一回合使任意元素 x 均出现偶数次,有什么条件?要如何操作?

Q:请问 Elsie 的后手必胜策略是怎样的?
找到集合 S 中最大的出现奇数次的元素 x ,并把它变成 0 ,之后任意元素均出现偶数次。

Q:如何算出集合S中每个元素的出现次数?O(\max(a_i)^2) 的时间复杂度显然不现实。 可以用前缀和维护。

想要求出 $s_1$ 对应的集合 $S$ 中 $x$ 元素出现的次数$t$, 借助前缀和即可。 需取 $x$ 次的石子堆中,至少包含 $x \ast s_1$ 个石子,至多包含 $(x+1) \ast s_1-1$个石子。 $t=sum_{(x+1) \ast s_1-1}-sum_{x \ast s_1-1}$。 --- 感谢阅读!