CF2140E2.Prime Gaming (Hard Version)

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是该问题的困难版本。不同之处在于本版本中 m≤106m \le 10^6。仅当你解决了所有版本的问题之后,才可以尝试 hack。

一个合法的石堆配置被定义为:有 nn 堆石子,每堆中石子的数量是 11 到 mm 之间的整数(包含 11 和 mm)。

给定一个合法的 nn 堆石子的配置,从 11 到 nn 的某些下标被标记为“好”的。Alice 和 Bob 轮流进行 n−1n-1 步操作,Alice 先手。在每一步操作中,他们要完成以下操作:

  • 选择任意一个整数 ii,使得 1≤i≤p1 \le i \le p(pp 为当前剩余的石堆数),且 ii 是“好”的下标,然后完全移除第 ii 堆。

注意,每次执行操作后,石堆数减少 11,剩下的堆将会重新编号。游戏在只剩下一堆石子时结束。保证下标 11 总是“好”的。

记最终剩下那堆的石子数为 xx。Alice 试图最大化 xx,Bob 试图最小化 xx。两人都会采取最优策略。

请计算所有可能合法石堆配置对应的 xx 的和,并对 109+710^9+7 取模输出。

输入格式

多组测试数据。第一行是测试组数 tt(1≤t≤1041 \le t \le 10^4)。接下来是每组测试数据。

每组测试数据第一行为两个整数 nn(1≤n≤201 \le n \le 20)和 mm(1≤m≤1061 \le m \le 10^6),表示石堆数和每堆石子数的上界。

第二行为一个整数 kk(1≤k≤n1 \le k \le n)——“好”的下标个数。

第三行为 kk 个严格递增的整数 c1,c2,…,ckc_1, c_2, \ldots, c_k(1=c1<c2<…<ck≤n1=c_1 < c_2 < \ldots < c_k \le n)——“好”的下标。保证 11 始终是“好”的(即 c1=1c_1=1)。

保证所有测试数据中 ∑2n≤220\sum 2^n \le 2^{20}。

保证所有测试数据中 mm 的总和不超过 10610^6。

输出格式

对每组测试数据,输出一个整数,表示所有可能合法石堆配置中 xx 的和,结果对 109+710^9+7 取模。

输入输出样例

  • 输入#1

    5
    2 3
    1
    1
    7 4
    3
    1 4 6
    12 31
    6
    1 3 5 7 9 11
    11 121
    11
    1 2 3 4 5 6 7 8 9 10 11
    19 6969
    2
    1 19

    输出#1

    18
    33664
    909076242
    683044824
    901058932

说明/提示

对于第一个测试用例,合法的石堆配置有:[1,1][1,1]、[1,2][1,2]、[1,3][1,3]、[2,1][2,1]、[2,2][2,2]、[2,3][2,3]、[3,1][3,1]、[3,2][3,2]、[3,3][3,3]。

由于只有 22 堆石子,Alice 只能选择第一堆并移除,所以 xx 的和为 1+1+1+2+2+2+3+3+3=181+1+1+2+2+2+3+3+3=18。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页