CF竞赛题目讲解_CF256C(博弈论 + SG函数 + 分段打表)
2022-11-20 13:30 作者:Clayton_Zhou | 我要投稿
AC代码
https://codeforces.com/contest/256/submission/180561282
题意:
Furlo和Rublo玩游戏。桌子上有n堆硬币,第i堆有ai硬币。Furlo和Rublo轮流移动,Furlo先移动。
在一次移动中,您可以:
1.选择一堆硬币,让我们将其中当前的硬币数量表示为x;
2.选择一些整数y(0 ≤ y < x;x^1/4≤ y ≤ x^1/2) 并将这堆硬币的数量减少到y。
换句话说,在所描述的移动之后,这堆硬币将剩下y个硬币。
无法移动的玩家会失败。
你的任务是找出,如果Furlo和Rublo都玩得很好,谁会在给定的游戏中获胜。
题解:
博弈论 + SG函数 + 分段打表
暴力的求SG函数会超时,正解是先处理出10^5以内的SG值,可以发现sg函数值成段出现.
根据sg函数值成段出现的特点,构造函数sg[lower_bound(a, a+6, i)-a]。
根据10^5以内的SG值,使用该函数,容易计算全部SG值(<=777777777777)