CF2027E2.Bit Game (Hard Version)

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

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

题目描述

这是该问题的困难版本。唯一的区别在于,在本版本中你需要输出 Bob 获胜的游戏方案数,其中每堆石子的数量并不是固定的。你必须同时解决两个版本才能进行 hack。

Alice 和 Bob 正在玩一个熟悉的游戏,他们轮流从 nn 堆石子中取石子。最初,第 ii 堆有 xix_i 个石子,并且该堆有一个对应的值 aia_i。一名玩家可以从第 ii 堆中取走 dd 个石子,当且仅当满足以下两个条件:

  • 1≤d≤ai1 \le d \le a_i,且
  • x & d=dx \,\&\, d = d,其中 xx 是当前第 ii 堆的石子数,&\& 表示按位与运算。

无法进行操作的玩家判负,Alice 先手。

你已知每堆的 aia_i,但每堆的石子数 xix_i 尚未确定。对于第 ii 堆,xix_i 可以是 11 到 bib_i 之间的任意整数(包含两端)。也就是说,你可以选择一个数组 x1,x2,…,xnx_1, x_2, \ldots, x_n,使得对所有堆都满足 1≤xi≤bi1 \le x_i \le b_i。

你的任务是统计在双方都采取最优策略的情况下,Bob 获胜的游戏方案数。若任意一堆的石子数不同,则认为是不同的游戏方案,即 xx 数组中至少有一个位置不同。

由于答案可能非常大,请输出结果对 109+710^9 + 7 取模。

输入格式

每个测试点包含多组测试用例。第一行包含测试用例数 tt(1≤t≤10001 \le t \le 1000)。接下来是每组测试用例的描述。

每组测试用例的第一行包含一个整数 nn(1≤n≤1041 \le n \le 10^4),表示石子堆的数量。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(1≤ai<2301 \le a_i < 2^{30})。

第三行包含 nn 个整数 b1,b2,…,bnb_1, b_2, \ldots, b_n(1≤bi<2301 \le b_i < 2^{30})。

保证所有测试用例中 nn 的总和不超过 10410^4。

输出格式

输出一个整数,表示 Bob 获胜的游戏方案数,对 109+710^9 + 7 取模。

输入输出样例

  • 输入#1

    7
    3
    1 2 3
    3 2 2
    1
    13
    45
    5
    5 4 7 8 6
    4 4 5 5 5
    4
    6 4 8 8
    12 13 14 12
    3
    92856133 46637598 12345678
    29384774 73775896 87654321
    2
    65 12
    110 31
    4
    677810235 275091182 428565855 720629731
    74522416 889934149 3394714 230851724

    输出#1

    4
    4
    0
    6552
    722019507
    541
    665443265

说明/提示

在第一个测试用例中,无论 x2x_2 和 x3x_3 取什么值,第二堆和第三堆都只能被操作一次,然后就无法再取石子了。如果 x1=2x_1 = 2,那么无法从该堆取石子,因此最后一步由 Bob 完成。如果 x1=1x_1 = 1 或 x1=3x_1 = 3,则该堆可以被操作一次,因此最后一步由 Alice 完成。所以当 x=[2,1,1]x = [2, 1, 1]、x=[2,1,2]x = [2, 1, 2]、x=[2,2,1]x = [2, 2, 1] 或 x=[2,2,2]x = [2, 2, 2] 时,Bob 获胜。

在第二个测试用例中,当 x1=14x_1 = 14 或 x1=30x_1 = 30 时,Bob 可以通过取走 14−k14 - k 个石子获胜,其中 kk 是 Alice 在她回合取走的石子数。当 x1=16x_1 = 16 或 x1=32x_1 = 32 时,Alice 一开始就无法进行操作,因此 Bob 获胜。

由 ChatGPT 4.1 翻译

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

首页