#HK4906. 「POI2016 R1」Nim 游戏的变种 Nim with a twist

「POI2016 R1」Nim 游戏的变种 Nim with a twist

题目描述

题目译自 XXIII Olimpiada Informatyczna — I etap Nim z utrudnieniem

Alicja 和 Bajtazar 最爱的消遣是玩 Nim 游戏。游戏需要若干堆筹码,分为多个堆。两人轮流操作,每次选择一堆,拿走任意正数个筹码。轮到谁时无筹码可拿,谁就输了。

Alicja 又邀 Bajtazar 来一局 Nim,但为了增加趣味,他们加了新规则。游戏有 mm 个筹码,Alicja 将其分为 nn 堆,堆大小为 a1,a2,,ana_{1}, a_{2}, \ldots, a_{n}。在游戏开始前,Bajtazar 可选择移除若干堆,但移除的堆数必须能被某固定数 dd 整除,且不能移除所有堆。移除的堆数可以为 00(即不移除任何堆)。之后,游戏按正常规则进行,由 Alicja 先手。

kk 为 Bajtazar 选择移除堆的方式数,使得无论 Alicja 如何操作,他都能赢。你的任务是计算 kk109+710^{9}+7 取模的结果。

输入格式

输入第一行包含两个正整数 nndd,分别表示堆数和移除堆数的整除限制。

第二行包含 nn 个正整数 a1,a2,,ana_{1}, a_{2}, \ldots, a_{n},表示每堆的筹码数。

输出格式

输出一行一个整数,表示 Bajtazar 能确保胜利的移除方式数,对 109+710^{9}+7 取模。

5 2
1 3 4 1 2

2

字节扎尔可移除 2244 堆,仅当移除大小为 1144 的堆(有两种组合方式)时能确保胜利。

附加样例

  1. n=9,d=2n=9, d=2,结果为 00
  2. n=12,d=4n=12, d=4
  3. n=30,d=10n=30, d=10,每堆有 3030 个筹码;
  4. n=500000,d=2n=500000, d=2,每堆有 11 个筹码。

数据范围与提示

详细子任务附加限制及分值如下表所示。

子任务 附加限制 空间限制 分值
11 n20,a1,,an1000n \leq 20, a_{1}, \ldots, a_{n} \leq 1000 256 MB 1010
22 n10000,a1,,an1000n \leq 10000, a_{1}, \ldots, a_{n} \leq 1000 256 MB 1818
33 d2d \leq 2 256 MB 2525
44 无附加限制 256 MB 2727
55 无附加限制 64 MB 2020