• 选石子


    题目

    (n) 堆石子,已知每堆石子的数量都介于 ([1,2^m-1]) 之间且互不相同。每堆石子中的数量可以任选(但必须满足上述要求),求有多少种方案可以使得 ( ext{Nim}) 游戏下先手取胜。

    答案模 (1e9+7)

    (nle1e7)

    解法

    算后手必胜的情况。

    如果不要求互不相同也不要求非 (0),那么答案显然就是前面的任选,最后一个是前面的异或和。

    如果要求非 (0),设 (f(i)) 表示 (i) 堆石子的答案,那么显然有 (f(i)=(2^m-1)^{i-1}-f(i-1)),即前面 (i-1) 位任选减掉最后一位恰好是 (0) 的答案(前 (i-1) 位异或和为 (0),要使前 (i) 位异或和为 (0),第 (i) 位只能是 (0))。

    如果再加上互不相同的限制,仍然前面 (i-1) 位任选,减掉第 (i) 位为 (0) 的情况以及第 (i) 位和之前某位相等的情况即可(由于前面互不相同,因此只有一个位置与其相等)。

    [f(i)=(2^m-1)(2^m-2)…(2^m-i+1)-f(i-1)-(2^m-1)(i-1)f(i-2) ]

    最后 ((2^m-1)(2^m-2)…(2^m-n)-f(n)) 即为答案。

    复杂度 (mathcal O(n))

  • 相关阅读:
    django的用户认证模块(auth)
    算法
    图书管理系统
    mac系统中pycharm激活
    mac常见问题
    mysql安装
    restful规范及DRF基础
    MySQL存储引擎
    [python] with statement
    MySQL索引及执行计划
  • 原文地址:https://www.cnblogs.com/AWhiteWall/p/14404096.html
Copyright © 2020-2023  润新知